{"id":"f8e5997979a4bc3bf650f1dd6c690cee","_format":"hh-sol-build-info-1","solcVersion":"0.7.6","solcLongVersion":"0.7.6+commit.7338295f","input":{"language":"Solidity","sources":{"@animoca/ethereum-contracts-core-1.1.2/contracts/access/IERC173.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity >=0.7.6 <0.8.0;\n\n/**\n * @title ERC-173 Contract Ownership Standard\n * Note: the ERC-165 identifier for this interface is 0x7f5828d0\n */\ninterface IERC173 {\n    /**\n     * Event emited when ownership of a contract changes.\n     * @param previousOwner the previous owner.\n     * @param newOwner the new owner.\n     */\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n    /**\n     * Get the address of the owner\n     * @return The address of the owner.\n     */\n    function owner() external view returns (address);\n\n    /**\n     * Set the address of the new owner of the contract\n     * Set newOwner to address(0) to renounce any ownership.\n     * @dev Emits an {OwnershipTransferred} event.\n     * @param newOwner The address of the new owner of the contract. Using the zero address means renouncing ownership.\n     */\n    function transferOwnership(address newOwner) external;\n}\n"},"@animoca/ethereum-contracts-core-1.1.2/contracts/access/Ownable.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity >=0.7.6 <0.8.0;\n\nimport {ManagedIdentity} from \"../metatx/ManagedIdentity.sol\";\nimport {IERC173} from \"./IERC173.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 ManagedIdentity, IERC173 {\n    address internal _owner;\n\n    /**\n     * Initializes the contract, setting the deployer as the initial owner.\n     * @dev Emits an {IERC173-OwnershipTransferred(address,address)} event.\n     */\n    constructor(address owner_) {\n        _owner = owner_;\n        emit OwnershipTransferred(address(0), owner_);\n    }\n\n    /**\n     * Gets the address of the current contract owner.\n     */\n    function owner() public view virtual override returns (address) {\n        return _owner;\n    }\n\n    /**\n     * See {IERC173-transferOwnership(address)}\n     * @dev Reverts if the sender is not the current contract owner.\n     * @param newOwner the address of the new owner. Use the zero address to renounce the ownership.\n     */\n    function transferOwnership(address newOwner) public virtual override {\n        _requireOwnership(_msgSender());\n        _owner = newOwner;\n        emit OwnershipTransferred(_owner, newOwner);\n    }\n\n    /**\n     * @dev Reverts if `account` is not the contract owner.\n     * @param account the account to test.\n     */\n    function _requireOwnership(address account) internal virtual {\n        require(account == this.owner(), \"Ownable: not the owner\");\n    }\n}\n"},"@animoca/ethereum-contracts-core-1.1.2/contracts/algo/EnumMap.sol":{"content":"// SPDX-License-Identifier: MIT\n\n// Derived from OpenZeppelin:\n// https://github.com/OpenZeppelin/openzeppelin-contracts/blob/406c83649bd6169fc1b578e08506d78f0873b276/contracts/utils/structs/EnumerableMap.sol\n\npragma solidity >=0.7.6 <0.8.0;\n\n/**\n * @dev Library for managing an enumerable variant of Solidity's\n * https://solidity.readthedocs.io/en/latest/types.html#mapping-types[`mapping`]\n * type.\n *\n * Maps have the following properties:\n *\n * - Entries are added, removed, and checked for existence in constant time\n * (O(1)).\n * - Entries are enumerated in O(n). No guarantees are made on the ordering.\n *\n * ```\n * contract Example {\n *     // Add the library methods\n *     using EnumMap for EnumMap.Map;\n *\n *     // Declare a set state variable\n *     EnumMap.Map private myMap;\n * }\n * ```\n */\nlibrary EnumMap {\n    // To implement this library for multiple types with as little code\n    // repetition as possible, we write it in terms of a generic Map type with\n    // bytes32 keys and values.\n    // This means that we can only create new EnumMaps for types that fit\n    // in bytes32.\n\n    struct MapEntry {\n        bytes32 key;\n        bytes32 value;\n    }\n\n    struct Map {\n        // Storage of map keys and values\n        MapEntry[] entries;\n        // Position of the entry defined by a key in the `entries` array, plus 1\n        // because index 0 means a key is not in the map.\n        mapping(bytes32 => uint256) indexes;\n    }\n\n    /**\n     * @dev Adds a key-value pair to a map, or updates the value for an existing\n     * key. O(1).\n     *\n     * Returns true if the key was added to the map, that is if it was not\n     * already present.\n     */\n    function set(\n        Map storage map,\n        bytes32 key,\n        bytes32 value\n    ) internal returns (bool) {\n        // We read and store the key's index to prevent multiple reads from the same storage slot\n        uint256 keyIndex = map.indexes[key];\n\n        if (keyIndex == 0) {\n            // Equivalent to !contains(map, key)\n            map.entries.push(MapEntry({key: key, value: value}));\n            // The entry is stored at length-1, but we add 1 to all indexes\n            // and use 0 as a sentinel value\n            map.indexes[key] = map.entries.length;\n            return true;\n        } else {\n            map.entries[keyIndex - 1].value = value;\n            return false;\n        }\n    }\n\n    /**\n     * @dev Removes a key-value pair from a map. O(1).\n     *\n     * Returns true if the key was removed from the map, that is if it was present.\n     */\n    function remove(Map storage map, bytes32 key) internal returns (bool) {\n        // We read and store the key's index to prevent multiple reads from the same storage slot\n        uint256 keyIndex = map.indexes[key];\n\n        if (keyIndex != 0) {\n            // Equivalent to contains(map, key)\n            // To delete a key-value pair from the entries array in O(1), we swap the entry to delete with the last one\n            // in the array, and then remove the last entry (sometimes called as 'swap and pop').\n            // This modifies the order of the array, as noted in {at}.\n\n            uint256 toDeleteIndex = keyIndex - 1;\n            uint256 lastIndex = map.entries.length - 1;\n\n            // When the entry to delete is the last one, the swap operation is unnecessary. However, since this occurs\n            // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement.\n\n            MapEntry storage lastEntry = map.entries[lastIndex];\n\n            // Move the last entry to the index where the entry to delete is\n            map.entries[toDeleteIndex] = lastEntry;\n            // Update the index for the moved entry\n            map.indexes[lastEntry.key] = toDeleteIndex + 1; // All indexes are 1-based\n\n            // Delete the slot where the moved entry was stored\n            map.entries.pop();\n\n            // Delete the index for the deleted slot\n            delete map.indexes[key];\n\n            return true;\n        } else {\n            return false;\n        }\n    }\n\n    /**\n     * @dev Returns true if the key is in the map. O(1).\n     */\n    function contains(Map storage map, bytes32 key) internal view returns (bool) {\n        return map.indexes[key] != 0;\n    }\n\n    /**\n     * @dev Returns the number of key-value pairs in the map. O(1).\n     */\n    function length(Map storage map) internal view returns (uint256) {\n        return map.entries.length;\n    }\n\n    /**\n     * @dev Returns the key-value pair stored at position `index` in the map. O(1).\n     *\n     * Note that there are no guarantees on the ordering of entries inside the\n     * array, and it may change when more entries are added or removed.\n     *\n     * Requirements:\n     *\n     * - `index` must be strictly less than {length}.\n     */\n    function at(Map storage map, uint256 index) internal view returns (bytes32, bytes32) {\n        require(map.entries.length > index, \"EnumMap: index out of bounds\");\n\n        MapEntry storage entry = map.entries[index];\n        return (entry.key, entry.value);\n    }\n\n    /**\n     * @dev Returns the value associated with `key`.  O(1).\n     *\n     * Requirements:\n     *\n     * - `key` must be in the map.\n     */\n    function get(Map storage map, bytes32 key) internal view returns (bytes32) {\n        uint256 keyIndex = map.indexes[key];\n        require(keyIndex != 0, \"EnumMap: nonexistent key\"); // Equivalent to contains(map, key)\n        return map.entries[keyIndex - 1].value; // All indexes are 1-based\n    }\n}\n"},"@animoca/ethereum-contracts-core-1.1.2/contracts/algo/EnumSet.sol":{"content":"// SPDX-License-Identifier: MIT\n\n// Derived from OpenZeppelin:\n// https://github.com/OpenZeppelin/openzeppelin-contracts/blob/406c83649bd6169fc1b578e08506d78f0873b276/contracts/utils/structs/EnumerableSet.sol\n\npragma solidity >=0.7.6 <0.8.0;\n\n/**\n * @dev Library for managing\n * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive\n * types.\n *\n * Sets have the following properties:\n *\n * - Elements are added, removed, and checked for existence in constant time\n * (O(1)).\n * - Elements are enumerated in O(n). No guarantees are made on the ordering.\n *\n * ```\n * contract Example {\n *     // Add the library methods\n *     using EnumSet for EnumSet.Set;\n *\n *     // Declare a set state variable\n *     EnumSet.Set private mySet;\n * }\n * ```\n */\nlibrary EnumSet {\n    // To implement this library for multiple types with as little code\n    // repetition as possible, we write it in terms of a generic Set type with\n    // bytes32 values.\n    // This means that we can only create new EnumerableSets for types that fit\n    // in bytes32.\n\n    struct Set {\n        // Storage of set values\n        bytes32[] values;\n        // Position of the value in the `values` array, plus 1 because index 0\n        // means a value is not in the set.\n        mapping(bytes32 => uint256) indexes;\n    }\n\n    /**\n     * @dev Add a value to a set. O(1).\n     *\n     * Returns true if the value was added to the set, that is if it was not\n     * already present.\n     */\n    function add(Set storage set, bytes32 value) internal returns (bool) {\n        if (!contains(set, value)) {\n            set.values.push(value);\n            // The value is stored at length-1, but we add 1 to all indexes\n            // and use 0 as a sentinel value\n            set.indexes[value] = set.values.length;\n            return true;\n        } else {\n            return false;\n        }\n    }\n\n    /**\n     * @dev Removes a value from a set. O(1).\n     *\n     * Returns true if the value was removed from the set, that is if it was\n     * present.\n     */\n    function remove(Set storage set, bytes32 value) internal returns (bool) {\n        // We read and store the value's index to prevent multiple reads from the same storage slot\n        uint256 valueIndex = set.indexes[value];\n\n        if (valueIndex != 0) {\n            // Equivalent to contains(set, value)\n            // To delete an element from the values array in O(1), we swap the element to delete with the last one in\n            // the array, and then remove the last element (sometimes called as 'swap and pop').\n            // This modifies the order of the array, as noted in {at}.\n\n            uint256 toDeleteIndex = valueIndex - 1;\n            uint256 lastIndex = set.values.length - 1;\n\n            // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs\n            // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement.\n\n            bytes32 lastvalue = set.values[lastIndex];\n\n            // Move the last value to the index where the value to delete is\n            set.values[toDeleteIndex] = lastvalue;\n            // Update the index for the moved value\n            set.indexes[lastvalue] = toDeleteIndex + 1; // All indexes are 1-based\n\n            // Delete the slot where the moved value was stored\n            set.values.pop();\n\n            // Delete the index for the deleted slot\n            delete set.indexes[value];\n\n            return true;\n        } else {\n            return false;\n        }\n    }\n\n    /**\n     * @dev Returns true if the value is in the set. O(1).\n     */\n    function contains(Set storage set, bytes32 value) internal view returns (bool) {\n        return set.indexes[value] != 0;\n    }\n\n    /**\n     * @dev Returns the number of values on the set. O(1).\n     */\n    function length(Set storage set) internal view returns (uint256) {\n        return set.values.length;\n    }\n\n    /**\n     * @dev Returns the value stored at position `index` in the set. O(1).\n     *\n     * Note that there are no guarantees on the ordering of values inside the\n     * array, and it may change when more values are added or removed.\n     *\n     * Requirements:\n     *\n     * - `index` must be strictly less than {length}.\n     */\n    function at(Set storage set, uint256 index) internal view returns (bytes32) {\n        require(set.values.length > index, \"EnumSet: index out of bounds\");\n        return set.values[index];\n    }\n}\n"},"@animoca/ethereum-contracts-core-1.1.2/contracts/introspection/IERC165.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity >=0.7.6 <0.8.0;\n\n/**\n * @dev Interface of the ERC165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165.\n */\ninterface IERC165 {\n    /**\n     * @dev Returns true if this contract implements the interface defined by\n     * `interfaceId`. See the corresponding\n     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n     * to learn more about how these ids are created.\n     *\n     * This function call must use less than 30 000 gas.\n     */\n    function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n"},"@animoca/ethereum-contracts-core-1.1.2/contracts/lifecycle/Pausable.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity >=0.7.6 <0.8.0;\n\nimport {ManagedIdentity} from \"../metatx/ManagedIdentity.sol\";\n\n/**\n * @dev Contract which allows children to implement pausability.\n */\nabstract contract Pausable is ManagedIdentity {\n    /**\n     * @dev Emitted when the pause is triggered by `account`.\n     */\n    event Paused(address account);\n\n    /**\n     * @dev Emitted when the pause is lifted by `account`.\n     */\n    event Unpaused(address account);\n\n    bool public paused;\n\n    constructor(bool paused_) {\n        paused = paused_;\n    }\n\n    function _requireNotPaused() internal view {\n        require(!paused, \"Pausable: paused\");\n    }\n\n    function _requirePaused() internal view {\n        require(paused, \"Pausable: not paused\");\n    }\n\n    /**\n     * @dev Triggers stopped state.\n     *\n     * Requirements:\n     *\n     * - The contract must not be paused.\n     */\n    function _pause() internal virtual {\n        _requireNotPaused();\n        paused = true;\n        emit Paused(_msgSender());\n    }\n\n    /**\n     * @dev Returns to normal state.\n     *\n     * Requirements:\n     *\n     * - The contract must be paused.\n     */\n    function _unpause() internal virtual {\n        _requirePaused();\n        paused = false;\n        emit Unpaused(_msgSender());\n    }\n}\n"},"@animoca/ethereum-contracts-core-1.1.2/contracts/lifecycle/Startable.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity >=0.7.6 <0.8.0;\n\nimport {ManagedIdentity} from \"../metatx/ManagedIdentity.sol\";\n\n/**\n * Contract module which allows derived contracts to implement a mechanism for\n * activating, or 'starting', a contract.\n *\n * This module is used through inheritance. It will make available the modifiers\n * `whenNotStarted` and `whenStarted`, which can be applied to the functions of\n * your contract. Those functions will only be 'startable' once the modifiers\n * are put in place.\n */\nabstract contract Startable is ManagedIdentity {\n    event Started(address account);\n\n    uint256 private _startedAt;\n\n    /**\n     * Modifier to make a function callable only when the contract has not started.\n     */\n    modifier whenNotStarted() {\n        require(_startedAt == 0, \"Startable: started\");\n        _;\n    }\n\n    /**\n     * Modifier to make a function callable only when the contract has started.\n     */\n    modifier whenStarted() {\n        require(_startedAt != 0, \"Startable: not started\");\n        _;\n    }\n\n    /**\n     * Constructor.\n     */\n    constructor() {}\n\n    /**\n     * Returns the timestamp when the contract entered the started state.\n     * @return The timestamp when the contract entered the started state.\n     */\n    function startedAt() public view returns (uint256) {\n        return _startedAt;\n    }\n\n    /**\n     * Triggers the started state.\n     * @dev Emits the Started event when the function is successfully called.\n     */\n    function _start() internal virtual whenNotStarted {\n        _startedAt = block.timestamp;\n        emit Started(_msgSender());\n    }\n}\n"},"@animoca/ethereum-contracts-core-1.1.2/contracts/metatx/ManagedIdentity.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity >=0.7.6 <0.8.0;\n\n/*\n * 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.\n */\nabstract contract ManagedIdentity {\n    function _msgSender() internal view virtual returns (address payable) {\n        return msg.sender;\n    }\n\n    function _msgData() internal view virtual returns (bytes memory) {\n        return msg.data;\n    }\n}\n"},"@animoca/ethereum-contracts-core-1.1.2/contracts/payment/PayoutWallet.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity >=0.7.6 <0.8.0;\n\nimport {ManagedIdentity} from \"../metatx/ManagedIdentity.sol\";\nimport {Ownable} from \"../access/Ownable.sol\";\n\n/**\n    @title PayoutWallet\n    @dev adds support for a payout wallet\n    Note: .\n */\nabstract contract PayoutWallet is ManagedIdentity, Ownable {\n    event PayoutWalletSet(address payoutWallet_);\n\n    address payable public payoutWallet;\n\n    constructor(address owner, address payable payoutWallet_) Ownable(owner) {\n        require(payoutWallet_ != address(0), \"Payout: zero address\");\n        payoutWallet = payoutWallet_;\n        emit PayoutWalletSet(payoutWallet_);\n    }\n\n    function setPayoutWallet(address payable payoutWallet_) public {\n        _requireOwnership(_msgSender());\n        require(payoutWallet_ != address(0), \"Payout: zero address\");\n        payoutWallet = payoutWallet_;\n        emit PayoutWalletSet(payoutWallet);\n    }\n}\n"},"@animoca/ethereum-contracts-core-1.1.2/contracts/utils/ERC20Wrapper.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity >=0.7.6 <0.8.0;\n\nimport {AddressIsContract} from \"./types/AddressIsContract.sol\";\n\n/**\n * @title ERC20Wrapper\n * Wraps ERC20 functions to support non-standard implementations which do not return a bool value.\n * Calls to the wrapped functions revert only if they throw or if they return false.\n */\nlibrary ERC20Wrapper {\n    using AddressIsContract for address;\n\n    function wrappedTransfer(\n        IWrappedERC20 token,\n        address to,\n        uint256 value\n    ) internal {\n        _callWithOptionalReturnData(token, abi.encodeWithSelector(token.transfer.selector, to, value));\n    }\n\n    function wrappedTransferFrom(\n        IWrappedERC20 token,\n        address from,\n        address to,\n        uint256 value\n    ) internal {\n        _callWithOptionalReturnData(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\n    }\n\n    function wrappedApprove(\n        IWrappedERC20 token,\n        address spender,\n        uint256 value\n    ) internal {\n        _callWithOptionalReturnData(token, abi.encodeWithSelector(token.approve.selector, spender, value));\n    }\n\n    function _callWithOptionalReturnData(IWrappedERC20 token, bytes memory callData) internal {\n        address target = address(token);\n        require(target.isContract(), \"ERC20Wrapper: non-contract\");\n\n        // solhint-disable-next-line avoid-low-level-calls\n        (bool success, bytes memory data) = target.call(callData);\n        if (success) {\n            if (data.length != 0) {\n                require(abi.decode(data, (bool)), \"ERC20Wrapper: operation failed\");\n            }\n        } else {\n            // revert using a standard revert message\n            if (data.length == 0) {\n                revert(\"ERC20Wrapper: operation failed\");\n            }\n\n            // revert using the revert message coming from the call\n            assembly {\n                let size := mload(data)\n                revert(add(32, data), size)\n            }\n        }\n    }\n}\n\ninterface IWrappedERC20 {\n    function transfer(address to, uint256 value) external returns (bool);\n\n    function transferFrom(\n        address from,\n        address to,\n        uint256 value\n    ) external returns (bool);\n\n    function approve(address spender, uint256 value) external returns (bool);\n}\n"},"@animoca/ethereum-contracts-core-1.1.2/contracts/utils/types/AddressIsContract.sol":{"content":"// SPDX-License-Identifier: MIT\n\n// Partially derived from OpenZeppelin:\n// https://github.com/OpenZeppelin/openzeppelin-contracts/blob/406c83649bd6169fc1b578e08506d78f0873b276/contracts/utils/Address.sol\n\npragma solidity >=0.7.6 <0.8.0;\n\n/**\n * @dev Upgrades the address type to check if it is a contract.\n */\nlibrary AddressIsContract {\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    function isContract(address account) internal view returns (bool) {\n        // This method relies on extcodesize, which returns 0 for contracts in\n        // construction, since the code is only stored at the end of the\n        // constructor execution.\n\n        uint256 size;\n        assembly {\n            size := extcodesize(account)\n        }\n        return size > 0;\n    }\n}\n"},"@openzeppelin/contracts/math/SafeMath.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\n * checks.\n *\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\n * in bugs, because programmers usually assume that an overflow raises an\n * error, which is the standard behavior in high level programming languages.\n * `SafeMath` restores this intuition by reverting the transaction when an\n * operation overflows.\n *\n * Using this library instead of the unchecked operations eliminates an entire\n * class of bugs, so it's recommended to use it always.\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        uint256 c = a + b;\n        if (c < a) return (false, 0);\n        return (true, c);\n    }\n\n    /**\n     * @dev Returns the substraction 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        if (b > a) return (false, 0);\n        return (true, a - b);\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        // 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     * @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        if (b == 0) return (false, 0);\n        return (true, a / b);\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        if (b == 0) return (false, 0);\n        return (true, a % b);\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        uint256 c = a + b;\n        require(c >= a, \"SafeMath: addition overflow\");\n        return c;\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        require(b <= a, \"SafeMath: subtraction overflow\");\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        if (a == 0) return 0;\n        uint256 c = a * b;\n        require(c / a == b, \"SafeMath: multiplication overflow\");\n        return c;\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. 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(uint256 a, uint256 b) internal pure returns (uint256) {\n        require(b > 0, \"SafeMath: division by zero\");\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        require(b > 0, \"SafeMath: modulo by zero\");\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(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n        require(b <= a, errorMessage);\n        return a - b;\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     * CAUTION: This function is deprecated because it requires allocating memory for the error\n     * message unnecessarily. For custom revert reasons use {tryDiv}.\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(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n        require(b > 0, errorMessage);\n        return a / b;\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(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n        require(b > 0, errorMessage);\n        return a % b;\n    }\n}\n"},"@openzeppelin/contracts/utils/SafeCast.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n\n/**\n * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow\n * checks.\n *\n * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\n * easily result in undesired exploitation or bugs, since developers usually\n * assume that overflows raise errors. `SafeCast` restores this intuition by\n * reverting the transaction when such an operation overflows.\n *\n * Using this library instead of the unchecked operations eliminates an entire\n * class of bugs, so it's recommended to use it always.\n *\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\n * all math on `uint256` and `int256` and then downcasting.\n */\nlibrary SafeCast {\n\n    /**\n     * @dev Returns the downcasted uint128 from uint256, reverting on\n     * overflow (when the input is greater than largest uint128).\n     *\n     * Counterpart to Solidity's `uint128` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 128 bits\n     */\n    function toUint128(uint256 value) internal pure returns (uint128) {\n        require(value < 2**128, \"SafeCast: value doesn\\'t fit in 128 bits\");\n        return uint128(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint64 from uint256, reverting on\n     * overflow (when the input is greater than largest uint64).\n     *\n     * Counterpart to Solidity's `uint64` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 64 bits\n     */\n    function toUint64(uint256 value) internal pure returns (uint64) {\n        require(value < 2**64, \"SafeCast: value doesn\\'t fit in 64 bits\");\n        return uint64(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint32 from uint256, reverting on\n     * overflow (when the input is greater than largest uint32).\n     *\n     * Counterpart to Solidity's `uint32` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 32 bits\n     */\n    function toUint32(uint256 value) internal pure returns (uint32) {\n        require(value < 2**32, \"SafeCast: value doesn\\'t fit in 32 bits\");\n        return uint32(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint16 from uint256, reverting on\n     * overflow (when the input is greater than largest uint16).\n     *\n     * Counterpart to Solidity's `uint16` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 16 bits\n     */\n    function toUint16(uint256 value) internal pure returns (uint16) {\n        require(value < 2**16, \"SafeCast: value doesn\\'t fit in 16 bits\");\n        return uint16(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint8 from uint256, reverting on\n     * overflow (when the input is greater than largest uint8).\n     *\n     * Counterpart to Solidity's `uint8` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 8 bits.\n     */\n    function toUint8(uint256 value) internal pure returns (uint8) {\n        require(value < 2**8, \"SafeCast: value doesn\\'t fit in 8 bits\");\n        return uint8(value);\n    }\n\n    /**\n     * @dev Converts a signed int256 into an unsigned uint256.\n     *\n     * Requirements:\n     *\n     * - input must be greater than or equal to 0.\n     */\n    function toUint256(int256 value) internal pure returns (uint256) {\n        require(value >= 0, \"SafeCast: value must be positive\");\n        return uint256(value);\n    }\n\n    /**\n     * @dev Returns the downcasted int128 from int256, reverting on\n     * overflow (when the input is less than smallest int128 or\n     * greater than largest int128).\n     *\n     * Counterpart to Solidity's `int128` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 128 bits\n     *\n     * _Available since v3.1._\n     */\n    function toInt128(int256 value) internal pure returns (int128) {\n        require(value >= -2**127 && value < 2**127, \"SafeCast: value doesn\\'t fit in 128 bits\");\n        return int128(value);\n    }\n\n    /**\n     * @dev Returns the downcasted int64 from int256, reverting on\n     * overflow (when the input is less than smallest int64 or\n     * greater than largest int64).\n     *\n     * Counterpart to Solidity's `int64` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 64 bits\n     *\n     * _Available since v3.1._\n     */\n    function toInt64(int256 value) internal pure returns (int64) {\n        require(value >= -2**63 && value < 2**63, \"SafeCast: value doesn\\'t fit in 64 bits\");\n        return int64(value);\n    }\n\n    /**\n     * @dev Returns the downcasted int32 from int256, reverting on\n     * overflow (when the input is less than smallest int32 or\n     * greater than largest int32).\n     *\n     * Counterpart to Solidity's `int32` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 32 bits\n     *\n     * _Available since v3.1._\n     */\n    function toInt32(int256 value) internal pure returns (int32) {\n        require(value >= -2**31 && value < 2**31, \"SafeCast: value doesn\\'t fit in 32 bits\");\n        return int32(value);\n    }\n\n    /**\n     * @dev Returns the downcasted int16 from int256, reverting on\n     * overflow (when the input is less than smallest int16 or\n     * greater than largest int16).\n     *\n     * Counterpart to Solidity's `int16` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 16 bits\n     *\n     * _Available since v3.1._\n     */\n    function toInt16(int256 value) internal pure returns (int16) {\n        require(value >= -2**15 && value < 2**15, \"SafeCast: value doesn\\'t fit in 16 bits\");\n        return int16(value);\n    }\n\n    /**\n     * @dev Returns the downcasted int8 from int256, reverting on\n     * overflow (when the input is less than smallest int8 or\n     * greater than largest int8).\n     *\n     * Counterpart to Solidity's `int8` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 8 bits.\n     *\n     * _Available since v3.1._\n     */\n    function toInt8(int256 value) internal pure returns (int8) {\n        require(value >= -2**7 && value < 2**7, \"SafeCast: value doesn\\'t fit in 8 bits\");\n        return int8(value);\n    }\n\n    /**\n     * @dev Converts an unsigned uint256 into a signed int256.\n     *\n     * Requirements:\n     *\n     * - input must be less than or equal to maxInt256.\n     */\n    function toInt256(uint256 value) internal pure returns (int256) {\n        require(value < 2**255, \"SafeCast: value doesn't fit in an int256\");\n        return int256(value);\n    }\n}\n"},"contracts/mocks/sale/abstract/OracleSaleMock.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity >=0.7.6 <0.8.0;\n\nimport {EnumMap, OracleSale} from \"../../../sale/abstract/OracleSale.sol\";\n\ncontract OracleSaleMock is OracleSale {\n    event UnderscoreOraclePricingResult(bool handled, bytes32[] pricingData, uint256 totalPrice);\n\n    mapping(address => mapping(address => uint256)) public mockConversionRates;\n\n    constructor(\n        address payable payoutWallet_,\n        uint256 skusCapacity,\n        uint256 tokensPerSkuCapacity,\n        address referenceToken\n    ) OracleSale(payoutWallet_, skusCapacity, tokensPerSkuCapacity, referenceToken) {}\n\n    function createSku(\n        bytes32 sku,\n        uint256 totalSupply,\n        uint256 maxQuantityPerPurchase,\n        address notificationsReceiver\n    ) external {\n        _createSku(sku, totalSupply, maxQuantityPerPurchase, notificationsReceiver);\n    }\n\n    function setMockConversionRate(\n        address fromToken,\n        address toToken,\n        uint256 rate\n    ) external {\n        mockConversionRates[fromToken][toToken] = rate;\n    }\n\n    function callUnderscoreOraclePricing(\n        address payable recipient,\n        address token,\n        bytes32 sku,\n        uint256 quantity,\n        bytes calldata userData\n    ) external {\n        PurchaseData memory purchaseData;\n        purchaseData.purchaser = _msgSender();\n        purchaseData.recipient = recipient;\n        purchaseData.token = token;\n        purchaseData.sku = sku;\n        purchaseData.quantity = quantity;\n        purchaseData.userData = userData;\n\n        SkuInfo storage skuInfo = _skuInfos[sku];\n        EnumMap.Map storage tokenPrices = skuInfo.prices;\n        uint256 unitPrice = _unitPrice(purchaseData, tokenPrices);\n\n        bool handled = _oraclePricing(purchaseData, tokenPrices, unitPrice);\n\n        emit UnderscoreOraclePricingResult(handled, purchaseData.pricingData, purchaseData.totalPrice);\n    }\n\n    function callUnderscoreSetTokenPrices(\n        bytes32 sku,\n        address[] calldata tokens,\n        uint256[] calldata prices\n    ) external {\n        SkuInfo storage skuInfo = _skuInfos[sku];\n        EnumMap.Map storage tokenPrices = skuInfo.prices;\n        _setTokenPrices(tokenPrices, tokens, prices);\n    }\n\n    function _conversionRate(\n        address fromToken,\n        address toToken,\n        bytes memory /*data*/\n    ) internal view override returns (uint256 rate) {\n        rate = mockConversionRates[fromToken][toToken];\n        require(rate != 0, \"Sale: undefined rate\");\n    }\n}\n"},"contracts/mocks/sale/abstract/PurchaseLifeCyclesMock.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity >=0.7.6 <0.8.0;\n\nimport {PurchaseLifeCycles} from \"../../../sale/abstract/PurchaseLifeCycles.sol\";\n\ncontract PurchaseLifeCyclesMock is PurchaseLifeCycles {\n    event PurchaseLifeCyclePath(uint256 path);\n\n    uint256 public constant LIFECYCLE_STEP_VALIDATION = 1 << 1;\n    uint256 public constant LIFECYCLE_STEP_PRICING = 1 << 2;\n    uint256 public constant LIFECYCLE_STEP_PAYMENT = 1 << 3;\n    uint256 public constant LIFECYCLE_STEP_DELIVERY = 1 << 4;\n    uint256 public constant LIFECYCLE_STEP_NOTIFICATION = 1 << 5;\n\n    function getEstimatePurchaseLifeCyclePath(\n        address payable recipient,\n        address token,\n        bytes32 sku,\n        uint256 quantity,\n        bytes calldata userData\n    ) external {\n        PurchaseData memory purchaseData = _getPurchaseData(\n            recipient,\n            token,\n            sku,\n            quantity,\n            userData,\n            0,\n            new bytes32[](0),\n            new bytes32[](0),\n            new bytes32[](0)\n        );\n\n        _estimatePurchase(purchaseData);\n\n        emit PurchaseLifeCyclePath(purchaseData.totalPrice);\n    }\n\n    function getPurchaseForLifeCyclePath(\n        address payable recipient,\n        address token,\n        bytes32 sku,\n        uint256 quantity,\n        bytes calldata userData\n    ) external {\n        PurchaseData memory purchaseData = _getPurchaseData(\n            recipient,\n            token,\n            sku,\n            quantity,\n            userData,\n            0,\n            new bytes32[](0),\n            new bytes32[](0),\n            new bytes32[](0)\n        );\n\n        _purchaseFor(purchaseData);\n\n        emit PurchaseLifeCyclePath(purchaseData.totalPrice);\n    }\n\n    function _validation(PurchaseData memory purchase) internal view virtual override {\n        purchase.totalPrice = purchase.totalPrice | LIFECYCLE_STEP_VALIDATION;\n    }\n\n    function _pricing(PurchaseData memory purchase) internal view virtual override {\n        purchase.totalPrice = purchase.totalPrice | LIFECYCLE_STEP_PRICING;\n    }\n\n    function _payment(PurchaseData memory purchase) internal virtual override {\n        purchase.totalPrice = purchase.totalPrice | LIFECYCLE_STEP_PAYMENT;\n    }\n\n    function _delivery(PurchaseData memory purchase) internal virtual override {\n        purchase.totalPrice = purchase.totalPrice | LIFECYCLE_STEP_DELIVERY;\n    }\n\n    function _notification(PurchaseData memory purchase) internal virtual override {\n        purchase.totalPrice = purchase.totalPrice | LIFECYCLE_STEP_NOTIFICATION;\n    }\n\n    function _getPurchaseData(\n        address payable recipient,\n        address token,\n        bytes32 sku,\n        uint256 quantity,\n        bytes memory userData,\n        uint256 totalPrice,\n        bytes32[] memory pricingData,\n        bytes32[] memory paymentData,\n        bytes32[] memory deliveryData\n    ) internal view returns (PurchaseData memory purchase) {\n        purchase.purchaser = msg.sender;\n        purchase.recipient = recipient;\n        purchase.token = token;\n        purchase.sku = sku;\n        purchase.quantity = quantity;\n        purchase.userData = userData;\n        purchase.totalPrice = totalPrice;\n        purchase.pricingData = pricingData;\n        purchase.paymentData = paymentData;\n        purchase.deliveryData = deliveryData;\n    }\n}\n"},"contracts/mocks/sale/abstract/PurchaseNotificationsReceiverMock.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity >=0.7.6 <0.8.0;\n\nimport {PurchaseNotificationsReceiver} from \"../../../sale/abstract/PurchaseNotificationsReceiver.sol\";\n\ncontract PurchaseNotificationsReceiverMock is PurchaseNotificationsReceiver {\n    bytes4 public constant PURCHASE_NOTIFICATION_RECEIVED_RESULT =\n        bytes4(keccak256(\"onPurchaseNotificationReceived(address,address,address,bytes32,uint256,bytes,uint256,bytes32[],bytes32[],bytes32[])\"));\n\n    event PurchaseNotificationReceived();\n    event OnPurchaseNotificationReceivedResult(bytes4 result);\n\n    function onPurchaseNotificationReceived(\n        address, /* purchaser */\n        address, /* recipient */\n        address, /* token */\n        bytes32, /* sku */\n        uint256, /* quantity */\n        bytes calldata, /* userData */\n        uint256, /* totalPrice */\n        bytes32[] calldata, /* pricingData */\n        bytes32[] calldata, /* paymentData */\n        bytes32[] calldata /* deliveryData */\n    ) external override returns (bytes4) {\n        emit PurchaseNotificationReceived();\n        bytes4 result = PURCHASE_NOTIFICATION_RECEIVED_RESULT;\n        emit OnPurchaseNotificationReceivedResult(result);\n        return result;\n    }\n}\n"},"contracts/mocks/sale/abstract/SwapSaleMock.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity >=0.7.6 <0.8.0;\n\nimport {SafeCast} from \"@openzeppelin/contracts/utils/SafeCast.sol\";\nimport {EnumMap, SafeMath, SwapSale} from \"../../../sale/abstract/SwapSale.sol\";\n\ncontract SwapSaleMock is SwapSale {\n    using SafeMath for uint256;\n    using SafeCast for int256;\n\n    mapping(address => mapping(address => uint256)) public mockSwapRates;\n\n    int256 public mockSwapVariance;\n\n    constructor(\n        address payable payoutWallet_,\n        uint256 skusCapacity,\n        uint256 tokensPerSkuCapacity,\n        address referenceToken\n    ) SwapSale(payoutWallet_, skusCapacity, tokensPerSkuCapacity, referenceToken) {}\n\n    function createSku(\n        bytes32 sku,\n        uint256 totalSupply,\n        uint256 maxQuantityPerPurchase,\n        address notificationsReceiver\n    ) external {\n        _createSku(sku, totalSupply, maxQuantityPerPurchase, notificationsReceiver);\n    }\n\n    function setMockSwapRate(\n        address fromToken,\n        address toToken,\n        uint256 rate\n    ) external {\n        mockSwapRates[fromToken][toToken] = rate;\n    }\n\n    function setMockSwapVariance(int256 value) external {\n        mockSwapVariance = value;\n    }\n\n    function callUnderscorePricing(\n        address payable recipient,\n        address token,\n        bytes32 sku,\n        uint256 quantity,\n        bytes calldata userData\n    ) external view returns (uint256 totalPrice, bytes32[] memory pricingData) {\n        PurchaseData memory purchaseData;\n        purchaseData.purchaser = _msgSender();\n        purchaseData.recipient = recipient;\n        purchaseData.token = token;\n        purchaseData.sku = sku;\n        purchaseData.quantity = quantity;\n        purchaseData.userData = userData;\n\n        _pricing(purchaseData);\n\n        totalPrice = purchaseData.totalPrice;\n        pricingData = purchaseData.pricingData;\n    }\n\n    function callUnderscorePayment(\n        address payable recipient,\n        address token,\n        bytes32 sku,\n        uint256 quantity,\n        bytes calldata userData,\n        uint256 totalPrice,\n        bytes32[] calldata pricingData\n    ) external payable {\n        PurchaseData memory purchaseData;\n        purchaseData.purchaser = _msgSender();\n        purchaseData.recipient = recipient;\n        purchaseData.token = token;\n        purchaseData.sku = sku;\n        purchaseData.quantity = quantity;\n        purchaseData.userData = userData;\n        purchaseData.totalPrice = totalPrice;\n        purchaseData.pricingData = pricingData;\n\n        _payment(purchaseData);\n    }\n\n    function callUnderscoreOraclePricing(\n        address payable recipient,\n        address token,\n        bytes32 sku,\n        uint256 quantity,\n        bytes calldata userData\n    )\n        external\n        view\n        returns (\n            bool handled,\n            uint256 totalPrice,\n            bytes32[] memory pricingData\n        )\n    {\n        PurchaseData memory purchaseData;\n        purchaseData.purchaser = _msgSender();\n        purchaseData.recipient = recipient;\n        purchaseData.token = token;\n        purchaseData.sku = sku;\n        purchaseData.quantity = quantity;\n        purchaseData.userData = userData;\n\n        SkuInfo storage skuInfo = _skuInfos[sku];\n        EnumMap.Map storage tokenPrices = skuInfo.prices;\n        uint256 unitPrice = _unitPrice(purchaseData, tokenPrices);\n\n        handled = _oraclePricing(purchaseData, tokenPrices, unitPrice);\n\n        totalPrice = purchaseData.totalPrice;\n        pricingData = purchaseData.pricingData;\n    }\n\n    function _conversionRate(\n        address, /*fromToken*/\n        address, /*toToken*/\n        bytes memory /*data*/\n    ) internal view virtual override returns (uint256 rate) {\n        rate = 1;\n    }\n\n    function _estimateSwap(\n        address fromToken,\n        address toToken,\n        uint256 toAmount,\n        bytes memory /*data*/\n    ) internal view virtual override returns (uint256 fromAmount) {\n        uint256 swapRate = mockSwapRates[fromToken][toToken];\n        require(swapRate != 0, \"Sale: undefined rate\");\n        fromAmount = toAmount.mul(10**18).div(swapRate);\n    }\n\n    function _swap(\n        address fromToken,\n        address toToken,\n        uint256 toAmount,\n        bytes memory data\n    ) internal virtual override returns (uint256 fromAmount) {\n        fromAmount = _estimateSwap(fromToken, toToken, toAmount, data);\n        fromAmount.add(mockSwapVariance.toUint256());\n    }\n}\n"},"contracts/mocks/sale/FixedOrderInventorySaleMock.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity >=0.7.6 <0.8.0;\n\nimport {FixedOrderInventorySale} from \"../../sale/FixedOrderInventorySale.sol\";\n\n/**\n * @title FixedOrderInventorySaleMock\n * A FixedPricesSale contract mock implementation that handles the purchase of NFTs of an inventory\n * contract to a receipient. The provisioning of the NFTs occurs in a sequential order defined by a\n * token list. Only a single SKU is supported.\n */\ncontract FixedOrderInventorySaleMock is FixedOrderInventorySale {\n    event DeliveryData(bytes32[] tokens);\n\n    /**\n     * Constructor.\n     * @dev Reverts if `inventory_` is the zero address.\n     * @dev Emits the `MagicValues` event.\n     * @dev Emits the `Paused` event.\n     * @param inventory_ The IFixedOrderInventoryTransferable contract from which the sale\n        inventory NFTs are attributed from.\n     * @param payoutWallet The payout wallet.\n     * @param tokensPerSkuCapacity the cap for the number of tokens managed per SKU.\n     */\n    constructor(\n        address inventory_,\n        address payable payoutWallet,\n        uint256 tokensPerSkuCapacity\n    ) FixedOrderInventorySale(inventory_, payoutWallet, tokensPerSkuCapacity) {}\n\n    /**\n     * Creates an SKU.\n     * @dev Reverts if the initial sale supply is empty.\n     * @dev Reverts if `sku` already exists.\n     * @dev Reverts if `notificationsReceiver` is not the zero address and is not a contract\n     *  address.\n     * @dev Reverts if the update results in too many SKUs.\n     * @dev Emits the `SkuCreation` event.\n     * @param sku The SKU identifier.\n     * @param maxQuantityPerPurchase The maximum allowed quantity for a single purchase.\n     * @param notificationsReceiver The purchase notifications receiver contract address. If\n     *  set to the zero address, the notification is not enabled.\n     */\n    function createSku(\n        bytes32 sku,\n        uint256 maxQuantityPerPurchase,\n        address notificationsReceiver\n    ) external {\n        _createSku(sku, tokenList.length, maxQuantityPerPurchase, notificationsReceiver);\n    }\n\n    /**\n     * Retrieves the sale SKU capacity.\n     * @return The sale SKU capacity.\n     */\n    function getSkuCapacity() external view returns (uint256) {\n        return _skusCapacity;\n    }\n\n    /**\n     * Retrieves the sale tokens-per-sku capacity.\n     * @return The sale tokens-per-sku capacity.\n     */\n    function getTokensPerSkuCapacity() external view returns (uint256) {\n        return _tokensPerSkuCapacity;\n    }\n\n    /**\n     * Retrieves the token list.\n     * @return The token list.\n     */\n    function getTokenList() external view returns (uint256[] memory) {\n        return tokenList;\n    }\n\n    /**\n     * Calls the internal `_delivery()` purchase lifecycle function.\n     * @dev Emits the DeliveryData event.\n     * @param recipient The recipient of the purchase.\n     * @param token The token to use as the payment currency.\n     * @param sku The identifier of the SKU to purchase.\n     * @param quantity The quantity to purchase.\n     * @param userData Optional extra user input data.\n     * @param totalPrice The amount of `token` paid.\n     * @param pricingData Data set by the `_pricing()` purchase lifecycle function.\n     * @param paymentData Data set by the `_payment()` puchase lifecycle function.\n     */\n    function underscoreDelivery(\n        address payable recipient,\n        address token,\n        bytes32 sku,\n        uint256 quantity,\n        bytes calldata userData,\n        uint256 totalPrice,\n        bytes32[] calldata pricingData,\n        bytes32[] calldata paymentData\n    ) external {\n        PurchaseData memory purchaseData;\n\n        purchaseData.purchaser = _msgSender();\n        purchaseData.recipient = recipient;\n        purchaseData.token = token;\n        purchaseData.sku = sku;\n        purchaseData.quantity = quantity;\n        purchaseData.userData = userData;\n        purchaseData.totalPrice = totalPrice;\n        purchaseData.pricingData = pricingData;\n        purchaseData.paymentData = paymentData;\n\n        _delivery(purchaseData);\n\n        emit DeliveryData(purchaseData.deliveryData);\n    }\n}\n"},"contracts/mocks/sale/FixedPricesSaleMock.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity >=0.7.6 <0.8.0;\n\nimport {FixedPricesSale} from \"../../sale/FixedPricesSale.sol\";\n\ncontract FixedPricesSaleMock is FixedPricesSale {\n    /**\n     * Constructor.\n     * @dev Emits the `MagicValues` event.\n     * @dev Emits the `Paused` event.\n     * @param payoutWallet_ the payout wallet.\n     * @param skusCapacity the cap for the number of managed SKUs.\n     * @param tokensPerSkuCapacity the cap for the number of tokens managed per SKU.\n     */\n    constructor(\n        address payable payoutWallet_,\n        uint256 skusCapacity,\n        uint256 tokensPerSkuCapacity\n    ) FixedPricesSale(payoutWallet_, skusCapacity, tokensPerSkuCapacity) {}\n\n    function createSku(\n        bytes32 sku,\n        uint256 totalSupply,\n        uint256 maxQuantityPerPurchase,\n        address notificationsReceiver\n    ) external {\n        _createSku(sku, totalSupply, maxQuantityPerPurchase, notificationsReceiver);\n    }\n}\n"},"contracts/mocks/sale/SaleMock.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity >=0.7.6 <0.8.0;\n\nimport {EnumSet, EnumMap, Sale} from \"../../sale/abstract/Sale.sol\";\n\ncontract SaleMock is Sale {\n    using EnumSet for EnumSet.Set;\n    using EnumMap for EnumMap.Map;\n\n    event PurchaseForCalled(address payable recipient, address token, bytes32 sku, uint256 quantity, bytes userData);\n\n    constructor(\n        address payable payoutWallet_,\n        uint256 skusCapacity,\n        uint256 tokensPerSkuCapacity\n    ) Sale(payoutWallet_, skusCapacity, tokensPerSkuCapacity) {}\n\n    function setPaused(bool paused) external {\n        if (paused) {\n            _pause();\n        } else {\n            _unpause();\n        }\n    }\n\n    function createSku(\n        bytes32 sku,\n        uint256 totalSupply,\n        uint256 maxQuantityPerPurchase,\n        address notificationsReceiver\n    ) external {\n        _createSku(sku, totalSupply, maxQuantityPerPurchase, notificationsReceiver);\n    }\n\n    function setTokenPrices(\n        bytes32 sku,\n        address[] calldata tokens,\n        uint256[] calldata prices\n    ) external {\n        SkuInfo storage skuInfo = _skuInfos[sku];\n        EnumMap.Map storage tokenPrices = skuInfo.prices;\n        _setTokenPrices(tokenPrices, tokens, prices);\n    }\n\n    function validation(\n        address payable recipient,\n        address token,\n        bytes32 sku,\n        uint256 quantity,\n        bytes calldata userData,\n        uint256 totalPrice,\n        bytes32[] calldata pricingData,\n        bytes32[] calldata paymentData,\n        bytes32[] calldata deliveryData\n    ) external view {\n        PurchaseData memory purchaseData = _getPurchaseData(\n            recipient,\n            token,\n            sku,\n            quantity,\n            userData,\n            totalPrice,\n            pricingData,\n            paymentData,\n            deliveryData\n        );\n\n        _validation(purchaseData);\n    }\n\n    function delivery(\n        address payable recipient,\n        address token,\n        bytes32 sku,\n        uint256 quantity,\n        bytes calldata userData,\n        uint256 totalPrice,\n        bytes32[] calldata pricingData,\n        bytes32[] calldata paymentData,\n        bytes32[] calldata deliveryData\n    ) external {\n        PurchaseData memory purchaseData = _getPurchaseData(\n            recipient,\n            token,\n            sku,\n            quantity,\n            userData,\n            totalPrice,\n            pricingData,\n            paymentData,\n            deliveryData\n        );\n\n        _delivery(purchaseData);\n    }\n\n    function notification(\n        address payable recipient,\n        address token,\n        bytes32 sku,\n        uint256 quantity,\n        bytes calldata userData,\n        uint256 totalPrice,\n        bytes32[] calldata pricingData,\n        bytes32[] calldata paymentData,\n        bytes32[] calldata deliveryData\n    ) external {\n        PurchaseData memory purchaseData = _getPurchaseData(\n            recipient,\n            token,\n            sku,\n            quantity,\n            userData,\n            totalPrice,\n            pricingData,\n            paymentData,\n            deliveryData\n        );\n\n        _notification(purchaseData);\n    }\n\n    function _pricing(PurchaseData memory purchase) internal view override {\n        SkuInfo storage skuInfo = _skuInfos[purchase.sku];\n        bytes32 key = bytes32(uint256(purchase.token));\n        bytes32 value = skuInfo.prices.get(key);\n        uint256 price = uint256(value);\n        purchase.totalPrice = purchase.quantity * price;\n    }\n\n    function _payment(\n        PurchaseData memory /*purchase*/\n    ) internal override {}\n\n    function _getPurchaseData(\n        address payable recipient,\n        address token,\n        bytes32 sku,\n        uint256 quantity,\n        bytes memory userData,\n        uint256 totalPrice,\n        bytes32[] memory pricingData,\n        bytes32[] memory paymentData,\n        bytes32[] memory deliveryData\n    ) internal view returns (PurchaseData memory purchase) {\n        purchase.purchaser = _msgSender();\n        purchase.recipient = recipient;\n        purchase.token = token;\n        purchase.sku = sku;\n        purchase.quantity = quantity;\n        purchase.userData = userData;\n        purchase.totalPrice = totalPrice;\n        purchase.pricingData = pricingData;\n        purchase.paymentData = paymentData;\n        purchase.deliveryData = deliveryData;\n    }\n}\n"},"contracts/mocks/sale/UniswapOracleSaleMock.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity >=0.7.6 <0.8.0;\n\nimport {IUniswapV2Router, UniswapOracleSale} from \"../../sale/UniswapOracleSale.sol\";\n\ncontract UniswapOracleSaleMock is UniswapOracleSale {\n    constructor(\n        address payable payoutWallet_,\n        uint256 skusCapacity,\n        uint256 tokensPerSkuCapacity,\n        address referenceToken,\n        IUniswapV2Router uniswapV2Router\n    ) UniswapOracleSale(payoutWallet_, skusCapacity, tokensPerSkuCapacity, referenceToken, uniswapV2Router) {}\n\n    function createSku(\n        bytes32 sku,\n        uint256 totalSupply,\n        uint256 maxQuantityPerPurchase,\n        address notificationsReceiver\n    ) external {\n        _createSku(sku, totalSupply, maxQuantityPerPurchase, notificationsReceiver);\n    }\n\n    function callUnderscoreConversionRate(\n        address fromToken,\n        address toToken,\n        bytes calldata data\n    ) external view returns (uint256 rate) {\n        rate = _conversionRate(fromToken, toToken, data);\n    }\n\n    function getReserves(address tokenA, address tokenB) external view returns (uint256 reserveA, uint256 reserveB) {\n        if (tokenA == TOKEN_ETH) {\n            tokenA = uniswapV2Router.WETH();\n        }\n\n        if (tokenB == TOKEN_ETH) {\n            tokenB = uniswapV2Router.WETH();\n        }\n\n        (reserveA, reserveB) = _getReserves(tokenA, tokenB);\n    }\n}\n"},"contracts/mocks/sale/UniswapSwapSaleMock.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity >=0.7.6 <0.8.0;\n\nimport {ERC20Wrapper, IWrappedERC20} from \"../../sale/FixedPricesSale.sol\";\nimport {UniswapV2Adapter, IUniswapV2Router, UniswapSwapSale} from \"../../sale/UniswapSwapSale.sol\";\n\ncontract UniswapSwapSaleMock is UniswapSwapSale {\n    using ERC20Wrapper for IWrappedERC20;\n    event UnderscoreSwapResult(uint256 fromAmount);\n\n    constructor(\n        address payable payoutWallet_,\n        uint256 skusCapacity,\n        uint256 tokensPerSkuCapacity,\n        address referenceToken,\n        IUniswapV2Router uniswapV2Router\n    ) UniswapSwapSale(payoutWallet_, skusCapacity, tokensPerSkuCapacity, referenceToken, uniswapV2Router) {}\n\n    function createSku(\n        bytes32 sku,\n        uint256 totalSupply,\n        uint256 maxQuantityPerPurchase,\n        address notificationsReceiver\n    ) external {\n        _createSku(sku, totalSupply, maxQuantityPerPurchase, notificationsReceiver);\n    }\n\n    function addEth() external payable {}\n\n    function callUnderscoreValidation(\n        address payable recipient,\n        address token,\n        bytes32 sku,\n        uint256 quantity,\n        bytes calldata userData\n    ) external view {\n        PurchaseData memory purchaseData;\n        purchaseData.purchaser = _msgSender();\n        purchaseData.recipient = recipient;\n        purchaseData.token = token;\n        purchaseData.sku = sku;\n        purchaseData.quantity = quantity;\n        purchaseData.userData = userData;\n\n        _validation(purchaseData);\n    }\n\n    function callUnderscorePricing(\n        address payable recipient,\n        address token,\n        bytes32 sku,\n        uint256 quantity,\n        bytes calldata userData\n    ) external view returns (uint256 totalPrice, bytes32[] memory pricingData) {\n        PurchaseData memory purchaseData;\n        purchaseData.purchaser = _msgSender();\n        purchaseData.recipient = recipient;\n        purchaseData.token = token;\n        purchaseData.sku = sku;\n        purchaseData.quantity = quantity;\n        purchaseData.userData = userData;\n\n        _pricing(purchaseData);\n\n        totalPrice = purchaseData.totalPrice;\n        pricingData = purchaseData.pricingData;\n    }\n\n    function callUnderscorePayment(\n        address payable recipient,\n        address token,\n        bytes32 sku,\n        uint256 quantity,\n        bytes calldata userData,\n        uint256 totalPrice,\n        bytes32[] calldata pricingData\n    ) external payable {\n        PurchaseData memory purchaseData;\n        purchaseData.purchaser = _msgSender();\n        purchaseData.recipient = recipient;\n        purchaseData.token = token;\n        purchaseData.sku = sku;\n        purchaseData.quantity = quantity;\n        purchaseData.userData = userData;\n        purchaseData.totalPrice = totalPrice;\n        purchaseData.pricingData = pricingData;\n\n        _payment(purchaseData);\n    }\n\n    function callUnderscoreConversionRate(\n        address fromToken,\n        address toToken,\n        bytes calldata data\n    ) external view returns (uint256 rate) {\n        rate = _conversionRate(fromToken, toToken, data);\n    }\n\n    function callUnderscoreEstimateSwap(\n        address fromToken,\n        address toToken,\n        uint256 toAmount,\n        bytes calldata data\n    ) external view returns (uint256 fromAmount) {\n        fromAmount = _estimateSwap(fromToken, toToken, toAmount, data);\n    }\n\n    function callUnderscoreSwap(\n        address fromToken,\n        uint256 fromAmount,\n        address toToken,\n        uint256 toAmount,\n        bytes calldata data\n    ) external payable {\n        if (fromToken != TOKEN_ETH) {\n            IWrappedERC20(fromToken).wrappedApprove(address(uniswapV2Router), fromAmount);\n            // todo re-enable?\n            // require(IERC20(fromToken).allowance(msg.sender, address(this)) >= fromAmount, \"Sale: insufficient allowance\");\n            IWrappedERC20(fromToken).wrappedTransferFrom(msg.sender, address(this), fromAmount);\n        }\n        fromAmount = _swap(fromToken, toToken, toAmount, data);\n        emit UnderscoreSwapResult(fromAmount);\n    }\n\n    function getReserves(address tokenA, address tokenB) external view returns (uint256 reserveA, uint256 reserveB) {\n        if (tokenA == TOKEN_ETH) {\n            tokenA = uniswapV2Router.WETH();\n        }\n\n        if (tokenB == TOKEN_ETH) {\n            tokenB = uniswapV2Router.WETH();\n        }\n\n        (reserveA, reserveB) = _getReserves(tokenA, tokenB);\n    }\n}\n"},"contracts/oracle/interfaces/IUniswapV2Pair.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity >=0.7.6 <0.8.0;\n\n/**\n * @title IUniswapV2Pair\n * Interface for the UniswapV2 pair contract.\n * @dev https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/interfaces/IUniswapV2Pair.sol\n */\ninterface IUniswapV2Pair {\n    /**\n     * Returns the reserves of token0 and token1 used to price trades and distribute liquidity. Also returns the\n     *  block.timestamp (mod 2**32) of the last block during which an interaction occured for the pair.\n     */\n    function getReserves()\n        external\n        view\n        returns (\n            uint112 reserve0,\n            uint112 reserve1,\n            uint32 blockTimestampLast\n        );\n}\n"},"contracts/oracle/interfaces/IUniswapV2Router.sol":{"content":"// SPDX-License-Identifier: GPL-3.0\n\npragma solidity >=0.7.6 <0.8.0;\n\n/**\n * @title IUniswapV2Router\n * Interface for the UniswapV2 router contract.\n * @dev https://github.com/Uniswap/uniswap-v2-periphery/blob/master/contracts/interfaces/IUniswapV2Router02.sol\n */\ninterface IUniswapV2Router {\n    /**\n     * Returns the UniswapV2 factory used by the router.\n     * @return The UniswapV2 factory used by the router.\n     */\n    function factory() external pure returns (address);\n\n    /**\n     * Returns the canonical WETH address.\n     * @return The canonical WETH address.\n     */\n    // solhint-disable-next-line func-name-mixedcase\n    function WETH() external pure returns (address);\n\n    /**\n     * Given an output asset amount and an array of token addresses, calculates all preceding minimum input token amounts\n     *  by calling `getReserves` for each pair of token addresses in the path in turn, and using these to call `getAmountIn`.\n     * @dev Useful for calculating optimal token amounts before calling `swap`.\n     * @param amountOut the fixed amount of output asset.\n     * @param path An array of token addresses. path.length must be >= 2. Pools for each consecutive pair of addresses must exist and have liquidity.\n     */\n    function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts);\n\n    /**\n     * Receive an exact amount of tokens for as little ETH as possible, along the route determined by the path. The first element of path must be\n     *  WETH, the last is the output token and any intermediate elements represent intermediate pairs to trade through (if, for example, a direct pair\n     *  does not exist).\n     * @dev Leftover ETH, if any, is returned to msg.sender.\n     * @dev msg.value (amountInMax) is the maximum amount of ETH that can be required before the transaction reverts.\n     * @param amountOut The amount of output tokens to receive.\n     * @param path An array of token addresses. path.length must be >= 2. Pools for each consecutive pair of addresses must exist and have liquidity.\n     * @param to Recipient of the output tokens.\n     * @param deadline Unix timestamp after which the transaction will revert.\n     * @return amounts The input token amount and all subsequent output token 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    /**\n     * Receive an exact amount of ETH for as few input tokens as possible, along the route determined by the path. The first element of path is the\n     *  input token, the last must be WETH, and any intermediate elements represent intermediate pairs to trade through (if, for example, a direct\n     *  pair does not exist).\n     * @dev msg.sender should have already given the router an allowance of at least amountInMax on the input token.\n     * @dev If the to address is a smart contract, it must have the ability to receive ETH.\n     * @param amountOut The amount of ETH to receive.\n     * @param amountInMax The maximum amount of input tokens that can be required before the transaction reverts.\n     * @param path An array of token addresses. path.length must be >= 2. Pools for each consecutive pair of addresses must exist and have liquidity.\n     * @param to Recipient of ETH.\n     * @param deadline Unix timestamp after which the transaction will revert.\n     * @return amounts The input token amount and all subsequent output token 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    /**\n     * Receive an exact amount of output tokens for as few input tokens as possible, along the route determined by the path.\n     *  The first element of path is the input token, the last is the output token, and any intermediate elements represent\n     *  intermediate pairs to trade through (if, for example, a direct pair does not exist).\n     * @dev msg.sender should have already given the router an allowance of at least amountInMax on the input token.\n     * @param amountOut The amount of output tokens to receive.\n     * @param amountInMax The maximum amount of input tokens that can be required before the transaction reverts.\n     * @param path An array of token addresses. path.length must be >= 2. Pools for each consecutive pair of addresses must exist and have liquidity.\n     * @param to Recipient of the output tokens.\n     * @param deadline Unix timestamp after which the transaction will revert.\n     * @return amounts The input token amount and all subsequent output token 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"},"contracts/oracle/UniswapV2Adapter.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity >=0.7.6 <0.8.0;\n\nimport {SafeMath} from \"@openzeppelin/contracts/math/SafeMath.sol\";\nimport {IUniswapV2Router} from \"./interfaces/IUniswapV2Router.sol\";\nimport {IUniswapV2Pair} from \"./interfaces/IUniswapV2Pair.sol\";\n\n/**\n * @title UniswapV2Adapter\n * Contract which helps to interact with UniswapV2 router.\n */\ncontract UniswapV2Adapter {\n    using SafeMath for uint256;\n\n    event UniswapV2RouterSet(IUniswapV2Router uniswapV2Router);\n\n    IUniswapV2Router public uniswapV2Router;\n\n    constructor(IUniswapV2Router uniswapV2Router_) {\n        _setUniswapV2Router(uniswapV2Router_);\n    }\n\n    function _sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) {\n        require(tokenA != tokenB, \"UniswapV2: same addresses\");\n        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);\n        require(token0 != address(0), \"UniswapV2: zero address\");\n    }\n\n    function _pairFor(address tokenA, address tokenB) internal view returns (address pair) {\n        (address token0, address token1) = _sortTokens(tokenA, tokenB);\n        pair = address(\n            uint256(\n                keccak256(\n                    abi.encodePacked(\n                        hex\"ff\",\n                        uniswapV2Router.factory(),\n                        keccak256(abi.encodePacked(token0, token1)),\n                        hex\"96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f\"\n                    )\n                )\n            )\n        );\n    }\n\n    function _getReserves(address tokenA, address tokenB) internal view returns (uint256 reserveA, uint256 reserveB) {\n        (address token0, ) = _sortTokens(tokenA, tokenB);\n        (uint256 reserve0, uint256 reserve1, ) = IUniswapV2Pair(_pairFor(tokenA, tokenB)).getReserves();\n        (reserveA, reserveB) = tokenA == token0 ? (reserve0, reserve1) : (reserve1, reserve0);\n    }\n\n    function _setUniswapV2Router(IUniswapV2Router uniswapV2Router_) internal {\n        uniswapV2Router = uniswapV2Router_;\n        emit UniswapV2RouterSet(uniswapV2Router_);\n    }\n\n    function _getAmountsIn(\n        address tokenA,\n        address tokenB,\n        uint256 amountB\n    ) internal view returns (uint256 amount) {\n        address[] memory path = new address[](2);\n        path[0] = tokenA;\n        path[1] = tokenB;\n        uint256[] memory amounts = uniswapV2Router.getAmountsIn(amountB, path);\n        amount = amounts[0];\n    }\n\n    function _swapTokensForExactAmount(\n        address tokenA,\n        address tokenB,\n        uint256 amountB,\n        uint256 maxAmountA,\n        address to,\n        uint256 deadline\n    ) internal returns (uint256 amount) {\n        require(tokenA != tokenB, \"UniswapV2: same addresses\");\n\n        address[] memory path = new address[](2);\n        path[0] = tokenA;\n        path[1] = tokenB;\n\n        uint256[] memory amounts;\n\n        if (tokenA == uniswapV2Router.WETH()) {\n            require(maxAmountA == msg.value, \"UniswapV2: invalid maxAmountIn\");\n            amounts = uniswapV2Router.swapETHForExactTokens{value: msg.value}(amountB, path, to, deadline);\n        } else if (tokenB == uniswapV2Router.WETH()) {\n            amounts = uniswapV2Router.swapTokensForExactETH(amountB, maxAmountA, path, to, deadline);\n        } else {\n            amounts = uniswapV2Router.swapTokensForExactTokens(amountB, maxAmountA, path, to, deadline);\n        }\n\n        amount = amounts[0];\n    }\n}\n"},"contracts/sale/abstract/OracleSale.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity >=0.7.6 <0.8.0;\n\nimport {IOracleSale} from \"../interfaces/IOracleSale.sol\";\nimport {EnumMap, SafeMath, FixedPricesSale} from \"../FixedPricesSale.sol\";\n\n/**\n * @title OracleSale\n * A FixedPricesSale which implements support for an oracle-based token conversion pricing strategy.\n *  The final implementer is responsible for implementing any additional pricing and/or delivery logic.\n *\n * PurchaseData.pricingData:\n *  - a zero length array for fixed pricing data.\n *  - a non-zero length array for oracle-based pricing data\n *  - [0] uint256: the uninterpolated unit price (i.e. magic value).\n *  - [1] uint256: the token conversion rate used for oracle-based pricing.\n */\nabstract contract OracleSale is IOracleSale, FixedPricesSale {\n    using SafeMath for uint256;\n    using EnumMap for EnumMap.Map;\n\n    uint256 public constant override PRICE_CONVERT_VIA_ORACLE = type(uint256).max;\n\n    address public referenceToken;\n\n    /**\n     * Constructor.\n     * @dev Emits the `MagicValues` event.\n     * @dev Emits the `Paused` event.\n     * @param payoutWallet_ the payout wallet.\n     * @param skusCapacity the cap for the number of managed SKUs.\n     * @param tokensPerSkuCapacity the cap for the number of tokens managed per SKU.\n     * @param referenceToken_ the token to use for oracle-based conversions.\n     */\n    constructor(\n        address payable payoutWallet_,\n        uint256 skusCapacity,\n        uint256 tokensPerSkuCapacity,\n        address referenceToken_\n    ) FixedPricesSale(payoutWallet_, skusCapacity, tokensPerSkuCapacity) {\n        referenceToken = referenceToken_;\n        bytes32[] memory names = new bytes32[](1);\n        bytes32[] memory values = new bytes32[](1);\n        (names[0], values[0]) = (\"PRICE_CONVERT_VIA_ORACLE\", bytes32(PRICE_CONVERT_VIA_ORACLE));\n        emit MagicValues(names, values);\n    }\n\n    /*                               Internal Life Cycle Functions                               */\n\n    /**\n     * Lifecycle step which computes the purchase price.\n     * @dev Responsibilities:\n     *  - Computes the pricing formula, including any discount logic and price conversion;\n     *  - Set the value of `purchase.totalPrice`;\n     *  - Add any relevant extra data related to pricing in `purchase.pricingData` and document how to interpret it.\n     * @dev Reverts if `purchase.sku` does not exist.\n     * @dev Reverts if `purchase.token` is not supported by the SKU.\n     * @dev Reverts in case of price overflow.\n     * @param purchase The purchase conditions.\n     */\n    function _pricing(PurchaseData memory purchase) internal view virtual override {\n        SkuInfo storage skuInfo = _skuInfos[purchase.sku];\n        require(skuInfo.totalSupply != 0, \"Sale: unsupported SKU\");\n        EnumMap.Map storage prices = skuInfo.prices;\n        uint256 unitPrice = _unitPrice(purchase, prices);\n\n        if (!_oraclePricing(purchase, prices, unitPrice)) {\n            purchase.totalPrice = unitPrice.mul(purchase.quantity);\n        }\n    }\n\n    /*                              Public IOracleSale Functions                             */\n\n    /**\n     * Retrieves the token conversion rates for the `tokens`/`referenceToken` pairs via the oracle.\n     * @dev Reverts if the oracle does not provide a conversion rate for one of the token pairs.\n     * @param tokens The list of tokens to retrieve the conversion rates for.\n     * @param data Additional data with no specified format for deriving the conversion rates.\n     * @return rates The conversion rates for the `tokens`/`referenceToken` pairs, retrieved via the oracle.\n     */\n    function conversionRates(address[] calldata tokens, bytes calldata data) external view virtual override returns (uint256[] memory rates) {\n        uint256 length = tokens.length;\n        rates = new uint256[](length);\n        for (uint256 i = 0; i < length; ++i) {\n            rates[i] = _conversionRate(tokens[i], referenceToken, data);\n        }\n    }\n\n    /*                               Internal Utility Functions                                  */\n\n    /**\n     * Updates SKU token prices.\n     * @dev Reverts if one of the `tokens` is the zero address.\n     * @dev Reverts if the update results in too many tokens for the SKU.\n     * @dev Reverts if the SKU has any supported payment tokens and one of them is not the\n     *  reference token.\n     * @param tokenPrices Storage pointer to a mapping of SKU token prices to update.\n     * @param tokens The list of payment tokens to update.\n     * @param prices The list of prices to apply for each payment token.\n     *  Zero price values are used to disable a payment token.\n     */\n    function _setTokenPrices(\n        EnumMap.Map storage tokenPrices,\n        address[] memory tokens,\n        uint256[] memory prices\n    ) internal virtual override {\n        super._setTokenPrices(tokenPrices, tokens, prices);\n        require(tokenPrices.length() == 0 || tokenPrices.contains(bytes32(uint256(referenceToken))), \"Sale: no reference token\");\n    }\n\n    /**\n     * Computes the oracle-based purchase price.\n     * @dev Responsibilities:\n     *  - Computes the oracle-based pricing formula, including any discount logic and price conversion;\n     *  - Set the value of `purchase.totalPrice`;\n     *  - Add any relevant extra data related to pricing in `purchase.pricingData` and document how to interpret it.\n     * @dev Reverts in case of price overflow.\n     * @param purchase The purchase conditions.\n     * @param tokenPrices Storage pointer to a mapping of SKU token prices.\n     * @param unitPrice The unit price of a SKU for the specified payment token.\n     * @return True if oracle pricing was handled, false otherwise.\n     */\n    function _oraclePricing(\n        PurchaseData memory purchase,\n        EnumMap.Map storage tokenPrices,\n        uint256 unitPrice\n    ) internal view virtual returns (bool) {\n        if (unitPrice != PRICE_CONVERT_VIA_ORACLE) {\n            return false;\n        }\n\n        uint256 referenceUnitPrice = uint256(tokenPrices.get(bytes32(uint256(referenceToken))));\n\n        uint256 conversionRate = _conversionRate(purchase.token, referenceToken, purchase.userData);\n\n        uint256 totalPrice = referenceUnitPrice.mul(10**18).div(conversionRate).mul(purchase.quantity);\n\n        purchase.pricingData = new bytes32[](2);\n        purchase.pricingData[0] = bytes32(unitPrice);\n        purchase.pricingData[1] = bytes32(conversionRate);\n\n        purchase.totalPrice = totalPrice;\n\n        return true;\n    }\n\n    /**\n     * Retrieves the token conversion rate for the `fromToken`/`toToken` pair via the oracle.\n     * @dev Reverts if the oracle does not provide a conversion rate for the pair.\n     * @param fromToken The source token from which the conversion rate is derived from.\n     * @param toToken the destination token from which the conversion rate is derived from.\n     * @param data Additional data with no specified format for deriving the conversion rate.\n     * @return rate The conversion rate for the `fromToken`/`toToken` pair, retrieved via the oracle.\n     */\n    function _conversionRate(\n        address fromToken,\n        address toToken,\n        bytes memory data\n    ) internal view virtual returns (uint256 rate);\n}\n"},"contracts/sale/abstract/PurchaseLifeCycles.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity >=0.7.6 <0.8.0;\n\n/**\n * @title PurchaseLifeCycles\n * An abstract contract which define the life cycles for a purchase implementer.\n */\nabstract contract PurchaseLifeCycles {\n    /**\n     * Wrapper for the purchase data passed as argument to the life cycle functions and down to their step functions.\n     */\n    struct PurchaseData {\n        address payable purchaser;\n        address payable recipient;\n        address token;\n        bytes32 sku;\n        uint256 quantity;\n        bytes userData;\n        uint256 totalPrice;\n        bytes32[] pricingData;\n        bytes32[] paymentData;\n        bytes32[] deliveryData;\n    }\n\n    /*                               Internal Life Cycle Functions                               */\n\n    /**\n     * `estimatePurchase` lifecycle.\n     * @param purchase The purchase conditions.\n     */\n    function _estimatePurchase(PurchaseData memory purchase) internal view virtual returns (uint256 totalPrice, bytes32[] memory pricingData) {\n        _validation(purchase);\n        _pricing(purchase);\n\n        totalPrice = purchase.totalPrice;\n        pricingData = purchase.pricingData;\n    }\n\n    /**\n     * `purchaseFor` lifecycle.\n     * @param purchase The purchase conditions.\n     */\n    function _purchaseFor(PurchaseData memory purchase) internal virtual {\n        _validation(purchase);\n        _pricing(purchase);\n        _payment(purchase);\n        _delivery(purchase);\n        _notification(purchase);\n    }\n\n    /*                            Internal Life Cycle Step Functions                             */\n\n    /**\n     * Lifecycle step which validates the purchase pre-conditions.\n     * @dev Responsibilities:\n     *  - Ensure that the purchase pre-conditions are met and revert if not.\n     * @param purchase The purchase conditions.\n     */\n    function _validation(PurchaseData memory purchase) internal view virtual;\n\n    /**\n     * Lifecycle step which computes the purchase price.\n     * @dev Responsibilities:\n     *  - Computes the pricing formula, including any discount logic and price conversion;\n     *  - Set the value of `purchase.totalPrice`;\n     *  - Add any relevant extra data related to pricing in `purchase.pricingData` and document how to interpret it.\n     * @param purchase The purchase conditions.\n     */\n    function _pricing(PurchaseData memory purchase) internal view virtual;\n\n    /**\n     * Lifecycle step which manages the transfer of funds from the purchaser.\n     * @dev Responsibilities:\n     *  - Ensure the payment reaches destination in the expected output token;\n     *  - Handle any token swap logic;\n     *  - Add any relevant extra data related to payment in `purchase.paymentData` and document how to interpret it.\n     * @param purchase The purchase conditions.\n     */\n    function _payment(PurchaseData memory purchase) internal virtual;\n\n    /**\n     * Lifecycle step which delivers the purchased SKUs to the recipient.\n     * @dev Responsibilities:\n     *  - Ensure the product is delivered to the recipient, if that is the contract's responsibility.\n     *  - Handle any internal logic related to the delivery, including the remaining supply update;\n     *  - Add any relevant extra data related to delivery in `purchase.deliveryData` and document how to interpret it.\n     * @param purchase The purchase conditions.\n     */\n    function _delivery(PurchaseData memory purchase) internal virtual;\n\n    /**\n     * Lifecycle step which notifies of the purchase.\n     * @dev Responsibilities:\n     *  - Manage after-purchase event(s) emission.\n     *  - Handle calls to the notifications receiver contract's `onPurchaseNotificationReceived` function, if applicable.\n     * @param purchase The purchase conditions.\n     */\n    function _notification(PurchaseData memory purchase) internal virtual;\n}\n"},"contracts/sale/abstract/PurchaseNotificationsReceiver.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity >=0.7.6 <0.8.0;\n\nimport {IERC165} from \"@animoca/ethereum-contracts-core-1.1.2/contracts/introspection/IERC165.sol\";\nimport {IPurchaseNotificationsReceiver} from \"../interfaces/IPurchaseNotificationsReceiver.sol\";\n\n/**\n * @title PurchaseNotificationsReceiver\n * Abstract base IPurchaseNotificationsReceiver implementation.\n */\nabstract contract PurchaseNotificationsReceiver is IPurchaseNotificationsReceiver, IERC165 {\n    bytes4 internal constant _PURCHASE_NOTIFICATION_REJECTED = 0xffffffff;\n\n    constructor() {}\n\n    function supportsInterface(bytes4 interfaceId) external view virtual override returns (bool) {\n        return interfaceId == type(IPurchaseNotificationsReceiver).interfaceId;\n    }\n}\n"},"contracts/sale/abstract/Sale.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity >=0.7.6 <0.8.0;\n\nimport {EnumMap} from \"@animoca/ethereum-contracts-core-1.1.2/contracts/algo/EnumMap.sol\";\nimport {EnumSet} from \"@animoca/ethereum-contracts-core-1.1.2/contracts/algo/EnumSet.sol\";\nimport {PayoutWallet} from \"@animoca/ethereum-contracts-core-1.1.2/contracts/payment/PayoutWallet.sol\";\nimport {Startable} from \"@animoca/ethereum-contracts-core-1.1.2/contracts/lifecycle/Startable.sol\";\nimport {Pausable} from \"@animoca/ethereum-contracts-core-1.1.2/contracts/lifecycle/Pausable.sol\";\nimport {AddressIsContract} from \"@animoca/ethereum-contracts-core-1.1.2/contracts/utils/types/AddressIsContract.sol\";\nimport {SafeMath} from \"@openzeppelin/contracts/math/SafeMath.sol\";\nimport {ISale} from \"../interfaces/ISale.sol\";\nimport {IPurchaseNotificationsReceiver} from \"../interfaces/IPurchaseNotificationsReceiver.sol\";\nimport {PurchaseLifeCycles} from \"./PurchaseLifeCycles.sol\";\n\n/**\n * @title Sale\n * An abstract base sale contract with a minimal implementation of ISale and administration functions.\n *  A minimal implementation of the `_validation`, `_delivery` and `notification` life cycle step functions\n *  are provided, but the inheriting contract must implement `_pricing` and `_payment`.\n */\nabstract contract Sale is PurchaseLifeCycles, ISale, PayoutWallet, Startable, Pausable {\n    using AddressIsContract for address;\n    using SafeMath for uint256;\n    using EnumSet for EnumSet.Set;\n    using EnumMap for EnumMap.Map;\n\n    struct SkuInfo {\n        uint256 totalSupply;\n        uint256 remainingSupply;\n        uint256 maxQuantityPerPurchase;\n        address notificationsReceiver;\n        EnumMap.Map prices;\n    }\n\n    address public constant override TOKEN_ETH = address(0x00eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee);\n    uint256 public constant override SUPPLY_UNLIMITED = type(uint256).max;\n\n    EnumSet.Set internal _skus;\n    mapping(bytes32 => SkuInfo) internal _skuInfos;\n\n    uint256 internal immutable _skusCapacity;\n    uint256 internal immutable _tokensPerSkuCapacity;\n\n    /**\n     * Constructor.\n     * @dev Emits the `MagicValues` event.\n     * @dev Emits the `Paused` event.\n     * @param payoutWallet_ the payout wallet.\n     * @param skusCapacity the cap for the number of managed SKUs.\n     * @param tokensPerSkuCapacity the cap for the number of tokens managed per SKU.\n     */\n    constructor(\n        address payable payoutWallet_,\n        uint256 skusCapacity,\n        uint256 tokensPerSkuCapacity\n    ) PayoutWallet(msg.sender, payoutWallet_) Pausable(true) {\n        _skusCapacity = skusCapacity;\n        _tokensPerSkuCapacity = tokensPerSkuCapacity;\n        bytes32[] memory names = new bytes32[](2);\n        bytes32[] memory values = new bytes32[](2);\n        (names[0], values[0]) = (\"TOKEN_ETH\", bytes32(uint256(TOKEN_ETH)));\n        (names[1], values[1]) = (\"SUPPLY_UNLIMITED\", bytes32(uint256(SUPPLY_UNLIMITED)));\n        emit MagicValues(names, values);\n    }\n\n    /*                                   Public Admin Functions                                  */\n\n    /**\n     * Actvates, or 'starts', the contract.\n     * @dev Emits the `Started` event.\n     * @dev Emits the `Unpaused` event.\n     * @dev Reverts if called by any other than the contract owner.\n     * @dev Reverts if the contract has already been started.\n     * @dev Reverts if the contract is not paused.\n     */\n    function start() public virtual {\n        _requireOwnership(_msgSender());\n        _start();\n        _unpause();\n    }\n\n    /**\n     * Pauses the contract.\n     * @dev Emits the `Paused` event.\n     * @dev Reverts if called by any other than the contract owner.\n     * @dev Reverts if the contract has not been started yet.\n     * @dev Reverts if the contract is already paused.\n     */\n    function pause() public virtual whenStarted {\n        _requireOwnership(_msgSender());\n        _pause();\n    }\n\n    /**\n     * Resumes the contract.\n     * @dev Emits the `Unpaused` event.\n     * @dev Reverts if called by any other than the contract owner.\n     * @dev Reverts if the contract has not been started yet.\n     * @dev Reverts if the contract is not paused.\n     */\n    function unpause() public virtual whenStarted {\n        _requireOwnership(_msgSender());\n        _unpause();\n    }\n\n    /**\n     * Sets the token prices for the specified product SKU.\n     * @dev Reverts if called by any other than the contract owner.\n     * @dev Reverts if `tokens` and `prices` have different lengths.\n     * @dev Reverts if `sku` does not exist.\n     * @dev Reverts if one of the `tokens` is the zero address.\n     * @dev Reverts if the update results in too many tokens for the SKU.\n     * @dev Emits the `SkuPricingUpdate` event.\n     * @param sku The identifier of the SKU.\n     * @param tokens The list of payment tokens to update.\n     *  If empty, disable all the existing payment tokens.\n     * @param prices The list of prices to apply for each payment token.\n     *  Zero price values are used to disable a payment token.\n     */\n    function updateSkuPricing(\n        bytes32 sku,\n        address[] memory tokens,\n        uint256[] memory prices\n    ) public virtual {\n        _requireOwnership(_msgSender());\n        uint256 length = tokens.length;\n        require(length == prices.length, \"Sale: inconsistent arrays\");\n        SkuInfo storage skuInfo = _skuInfos[sku];\n        require(skuInfo.totalSupply != 0, \"Sale: non-existent sku\");\n\n        EnumMap.Map storage tokenPrices = skuInfo.prices;\n        if (length == 0) {\n            uint256 currentLength = tokenPrices.length();\n            for (uint256 i = 0; i < currentLength; ++i) {\n                // TODO add a clear function in EnumMap and EnumSet and use it\n                (bytes32 token, ) = tokenPrices.at(0);\n                tokenPrices.remove(token);\n            }\n        } else {\n            _setTokenPrices(tokenPrices, tokens, prices);\n        }\n\n        emit SkuPricingUpdate(sku, tokens, prices);\n    }\n\n    /*                                   ISale Public Functions                                  */\n\n    /**\n     * Performs a purchase.\n     * @dev Reverts if the sale has not started.\n     * @dev Reverts if the sale is paused.\n     * @dev Reverts if `recipient` is the zero address.\n     * @dev Reverts if `token` is the zero address.\n     * @dev Reverts if `quantity` is zero.\n     * @dev Reverts if `quantity` is greater than the maximum purchase quantity.\n     * @dev Reverts if `quantity` is greater than the remaining supply.\n     * @dev Reverts if `sku` does not exist.\n     * @dev Reverts if `sku` exists but does not have a price set for `token`.\n     * @dev Emits the Purchase event.\n     * @param recipient The recipient of the purchase.\n     * @param token The token to use as the payment currency.\n     * @param sku The identifier of the SKU to purchase.\n     * @param quantity The quantity to purchase.\n     * @param userData Optional extra user input data.\n     */\n    function purchaseFor(\n        address payable recipient,\n        address token,\n        bytes32 sku,\n        uint256 quantity,\n        bytes calldata userData\n    ) external payable virtual override whenStarted {\n        _requireNotPaused();\n        PurchaseData memory purchase;\n        purchase.purchaser = _msgSender();\n        purchase.recipient = recipient;\n        purchase.token = token;\n        purchase.sku = sku;\n        purchase.quantity = quantity;\n        purchase.userData = userData;\n\n        _purchaseFor(purchase);\n    }\n\n    /**\n     * Estimates the computed final total amount to pay for a purchase, including any potential discount.\n     * @dev This function MUST compute the same price as `purchaseFor` would in identical conditions (same arguments, same point in time).\n     * @dev If an implementer contract uses the `pricingData` field, it SHOULD document how to interpret the values.\n     * @dev Reverts if the sale has not started.\n     * @dev Reverts if the sale is paused.\n     * @dev Reverts if `recipient` is the zero address.\n     * @dev Reverts if `token` is the zero address.\n     * @dev Reverts if `quantity` is zero.\n     * @dev Reverts if `quantity` is greater than the maximum purchase quantity.\n     * @dev Reverts if `quantity` is greater than the remaining supply.\n     * @dev Reverts if `sku` does not exist.\n     * @dev Reverts if `sku` exists but does not have a price set for `token`.\n     * @param recipient The recipient of the purchase used to calculate the total price amount.\n     * @param token The payment token used to calculate the total price amount.\n     * @param sku The identifier of the SKU used to calculate the total price amount.\n     * @param quantity The quantity used to calculate the total price amount.\n     * @param userData Optional extra user input data.\n     * @return totalPrice The computed total price.\n     * @return pricingData Implementation-specific extra pricing data, such as details about discounts applied.\n     *  If not empty, the implementer MUST document how to interepret the values.\n     */\n    function estimatePurchase(\n        address payable recipient,\n        address token,\n        bytes32 sku,\n        uint256 quantity,\n        bytes calldata userData\n    ) external view virtual override whenStarted returns (uint256 totalPrice, bytes32[] memory pricingData) {\n        _requireNotPaused();\n        PurchaseData memory purchase;\n        purchase.purchaser = _msgSender();\n        purchase.recipient = recipient;\n        purchase.token = token;\n        purchase.sku = sku;\n        purchase.quantity = quantity;\n        purchase.userData = userData;\n\n        return _estimatePurchase(purchase);\n    }\n\n    /**\n     * Returns the information relative to a SKU.\n     * @dev WARNING: it is the responsibility of the implementer to ensure that the\n     * number of payment tokens is bounded, so that this function does not run out of gas.\n     * @dev Reverts if `sku` does not exist.\n     * @param sku The SKU identifier.\n     * @return totalSupply The initial total supply for sale.\n     * @return remainingSupply The remaining supply for sale.\n     * @return maxQuantityPerPurchase The maximum allowed quantity for a single purchase.\n     * @return notificationsReceiver The address of a contract on which to call the `onPurchaseNotificationReceived` function.\n     * @return tokens The list of supported payment tokens.\n     * @return prices The list of associated prices for each of the `tokens`.\n     */\n    function getSkuInfo(bytes32 sku)\n        external\n        view\n        override\n        returns (\n            uint256 totalSupply,\n            uint256 remainingSupply,\n            uint256 maxQuantityPerPurchase,\n            address notificationsReceiver,\n            address[] memory tokens,\n            uint256[] memory prices\n        )\n    {\n        SkuInfo storage skuInfo = _skuInfos[sku];\n        uint256 length = skuInfo.prices.length();\n\n        totalSupply = skuInfo.totalSupply;\n        require(totalSupply != 0, \"Sale: non-existent sku\");\n        remainingSupply = skuInfo.remainingSupply;\n        maxQuantityPerPurchase = skuInfo.maxQuantityPerPurchase;\n        notificationsReceiver = skuInfo.notificationsReceiver;\n\n        tokens = new address[](length);\n        prices = new uint256[](length);\n        for (uint256 i = 0; i < length; ++i) {\n            (bytes32 token, bytes32 price) = skuInfo.prices.at(i);\n            tokens[i] = address(uint256(token));\n            prices[i] = uint256(price);\n        }\n    }\n\n    /**\n     * Returns the list of created SKU identifiers.\n     * @return skus the list of created SKU identifiers.\n     */\n    function getSkus() external view override returns (bytes32[] memory skus) {\n        skus = _skus.values;\n    }\n\n    /*                               Internal Utility Functions                                  */\n\n    /**\n     * Creates an SKU.\n     * @dev Reverts if `totalSupply` is zero.\n     * @dev Reverts if `sku` already exists.\n     * @dev Reverts if `notificationsReceiver` is not the zero address and is not a contract address.\n     * @dev Reverts if the update results in too many SKUs.\n     * @dev Emits the `SkuCreation` event.\n     * @param sku the SKU identifier.\n     * @param totalSupply the initial total supply.\n     * @param maxQuantityPerPurchase The maximum allowed quantity for a single purchase.\n     * @param notificationsReceiver The purchase notifications receiver contract address.\n     *  If set to the zero address, the notification is not enabled.\n     */\n    function _createSku(\n        bytes32 sku,\n        uint256 totalSupply,\n        uint256 maxQuantityPerPurchase,\n        address notificationsReceiver\n    ) internal virtual {\n        require(totalSupply != 0, \"Sale: zero supply\");\n        require(_skus.length() < _skusCapacity, \"Sale: too many skus\");\n        require(_skus.add(sku), \"Sale: sku already created\");\n        if (notificationsReceiver != address(0)) {\n            require(notificationsReceiver.isContract(), \"Sale: non-contract receiver\");\n        }\n        SkuInfo storage skuInfo = _skuInfos[sku];\n        skuInfo.totalSupply = totalSupply;\n        skuInfo.remainingSupply = totalSupply;\n        skuInfo.maxQuantityPerPurchase = maxQuantityPerPurchase;\n        skuInfo.notificationsReceiver = notificationsReceiver;\n        emit SkuCreation(sku, totalSupply, maxQuantityPerPurchase, notificationsReceiver);\n    }\n\n    /**\n     * Updates SKU token prices.\n     * @dev Reverts if one of the `tokens` is the zero address.\n     * @dev Reverts if the update results in too many tokens for the SKU.\n     * @param tokenPrices Storage pointer to a mapping of SKU token prices to update.\n     * @param tokens The list of payment tokens to update.\n     * @param prices The list of prices to apply for each payment token.\n     *  Zero price values are used to disable a payment token.\n     */\n    function _setTokenPrices(\n        EnumMap.Map storage tokenPrices,\n        address[] memory tokens,\n        uint256[] memory prices\n    ) internal virtual {\n        for (uint256 i = 0; i < tokens.length; ++i) {\n            address token = tokens[i];\n            require(token != address(0), \"Sale: zero address token\");\n            uint256 price = prices[i];\n            if (price == 0) {\n                tokenPrices.remove(bytes32(uint256(token)));\n            } else {\n                tokenPrices.set(bytes32(uint256(token)), bytes32(price));\n            }\n        }\n        require(tokenPrices.length() <= _tokensPerSkuCapacity, \"Sale: too many tokens\");\n    }\n\n    /*                            Internal Life Cycle Step Functions                             */\n\n    /**\n     * Lifecycle step which validates the purchase pre-conditions.\n     * @dev Responsibilities:\n     *  - Ensure that the purchase pre-conditions are met and revert if not.\n     * @dev Reverts if `purchase.recipient` is the zero address.\n     * @dev Reverts if `purchase.token` is the zero address.\n     * @dev Reverts if `purchase.quantity` is zero.\n     * @dev Reverts if `purchase.quantity` is greater than the SKU's `maxQuantityPerPurchase`.\n     * @dev Reverts if `purchase.quantity` is greater than the available supply.\n     * @dev Reverts if `purchase.sku` does not exist.\n     * @dev Reverts if `purchase.sku` exists but does not have a price set for `purchase.token`.\n     * @dev If this function is overriden, the implementer SHOULD super call this before.\n     * @param purchase The purchase conditions.\n     */\n    function _validation(PurchaseData memory purchase) internal view virtual override {\n        require(purchase.recipient != address(0), \"Sale: zero address recipient\");\n        require(purchase.token != address(0), \"Sale: zero address token\");\n        require(purchase.quantity != 0, \"Sale: zero quantity purchase\");\n        SkuInfo storage skuInfo = _skuInfos[purchase.sku];\n        require(skuInfo.totalSupply != 0, \"Sale: non-existent sku\");\n        require(skuInfo.maxQuantityPerPurchase >= purchase.quantity, \"Sale: above max quantity\");\n        if (skuInfo.totalSupply != SUPPLY_UNLIMITED) {\n            require(skuInfo.remainingSupply >= purchase.quantity, \"Sale: insufficient supply\");\n        }\n        bytes32 priceKey = bytes32(uint256(purchase.token));\n        require(skuInfo.prices.contains(priceKey), \"Sale: non-existent sku token\");\n    }\n\n    /**\n     * Lifecycle step which delivers the purchased SKUs to the recipient.\n     * @dev Responsibilities:\n     *  - Ensure the product is delivered to the recipient, if that is the contract's responsibility.\n     *  - Handle any internal logic related to the delivery, including the remaining supply update;\n     *  - Add any relevant extra data related to delivery in `purchase.deliveryData` and document how to interpret it.\n     * @dev Reverts if there is not enough available supply.\n     * @dev If this function is overriden, the implementer SHOULD super call it.\n     * @param purchase The purchase conditions.\n     */\n    function _delivery(PurchaseData memory purchase) internal virtual override {\n        SkuInfo storage skuInfo = _skuInfos[purchase.sku];\n        if (skuInfo.totalSupply != SUPPLY_UNLIMITED) {\n            _skuInfos[purchase.sku].remainingSupply = skuInfo.remainingSupply.sub(purchase.quantity);\n        }\n    }\n\n    /**\n     * Lifecycle step which notifies of the purchase.\n     * @dev Responsibilities:\n     *  - Manage after-purchase event(s) emission.\n     *  - Handle calls to the notifications receiver contract's `onPurchaseNotificationReceived` function, if applicable.\n     * @dev Reverts if `onPurchaseNotificationReceived` throws or returns an incorrect value.\n     * @dev Emits the `Purchase` event. The values of `purchaseData` are the concatenated values of `priceData`, `paymentData`\n     * and `deliveryData`. If not empty, the implementer MUST document how to interpret these values.\n     * @dev If this function is overriden, the implementer SHOULD super call it.\n     * @param purchase The purchase conditions.\n     */\n    function _notification(PurchaseData memory purchase) internal virtual override {\n        emit Purchase(\n            purchase.purchaser,\n            purchase.recipient,\n            purchase.token,\n            purchase.sku,\n            purchase.quantity,\n            purchase.userData,\n            purchase.totalPrice,\n            abi.encodePacked(purchase.pricingData, purchase.paymentData, purchase.deliveryData)\n        );\n\n        address notificationsReceiver = _skuInfos[purchase.sku].notificationsReceiver;\n        if (notificationsReceiver != address(0)) {\n            require(\n                IPurchaseNotificationsReceiver(notificationsReceiver).onPurchaseNotificationReceived(\n                    purchase.purchaser,\n                    purchase.recipient,\n                    purchase.token,\n                    purchase.sku,\n                    purchase.quantity,\n                    purchase.userData,\n                    purchase.totalPrice,\n                    purchase.pricingData,\n                    purchase.paymentData,\n                    purchase.deliveryData\n                ) == IPurchaseNotificationsReceiver(address(0)).onPurchaseNotificationReceived.selector, // TODO precompute return value\n                \"Sale: notification refused\"\n            );\n        }\n    }\n}\n"},"contracts/sale/abstract/SwapSale.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity >=0.7.6 <0.8.0;\n\nimport {ISwapSale} from \"../interfaces/ISwapSale.sol\";\nimport {EnumMap, SafeMath} from \"./Sale.sol\";\nimport {IWrappedERC20, ERC20Wrapper} from \"../FixedPricesSale.sol\";\nimport {OracleSale} from \"./OracleSale.sol\";\n\n/**\n * @title SwapSale\n * An OracleSale which implements support for an oracle-based token swap pricing strategy. The\n *  final implementer is responsible for implementing any additional pricing and/or delivery logic.\n *\n * PurchaseData.pricingData:\n *  - a zero length array for fixed pricing data.\n *  - a non-zero length array for oracle-based pricing data\n *  - [0] uint256: the uninterpolated unit price (i.e. magic value).\n *  - [1] uint256: the token conversion/swap rate used for oracle-based pricing.\n *\n * PurchaseData.paymentData:\n *  - [0] uint256: the actual payment price in terms of the purchase token.\n */\nabstract contract SwapSale is OracleSale, ISwapSale {\n    using ERC20Wrapper for IWrappedERC20;\n    using SafeMath for uint256;\n    using EnumMap for EnumMap.Map;\n\n    uint256 public constant override PRICE_SWAP_VIA_ORACLE = PRICE_CONVERT_VIA_ORACLE - 1;\n\n    /**\n     * Constructor.\n     * @dev Emits the `MagicValues` event.\n     * @dev Emits the `Paused` event.\n     * @param payoutWallet_ The payout wallet.\n     * @param skusCapacity The cap for the number of managed SKUs.\n     * @param tokensPerSkuCapacity The cap for the number of tokens managed per SKU.\n     * @param referenceToken The token to use for oracle-based token swaps.\n     */\n    constructor(\n        address payable payoutWallet_,\n        uint256 skusCapacity,\n        uint256 tokensPerSkuCapacity,\n        address referenceToken\n    ) OracleSale(payoutWallet_, skusCapacity, tokensPerSkuCapacity, referenceToken) {\n        bytes32[] memory names = new bytes32[](1);\n        bytes32[] memory values = new bytes32[](1);\n        (names[0], values[0]) = (\"PRICE_SWAP_VIA_ORACLE\", bytes32(PRICE_SWAP_VIA_ORACLE));\n        emit MagicValues(names, values);\n    }\n\n    /*                            Public ISwapSale Functions                               */\n\n    /**\n     * Retrieves the token swap rates for the `tokens`/`referenceToken` pairs via the oracle.\n     * @dev Reverts if the oracle does not provide a swap rate for one of the token pairs.\n     * @param tokens The list of tokens to retrieve the swap rates for.\n     * @param referenceAmount The amount of `referenceToken` to retrieve the swap rates for.\n     * @param data Additional data with no specified format for deriving the swap rates.\n     * @return rates The swap rates for the `tokens`/`referenceToken` pairs, retrieved via the oracle.\n     */\n    function swapRates(\n        address[] calldata tokens,\n        uint256 referenceAmount,\n        bytes calldata data\n    ) external view virtual override returns (uint256[] memory rates) {\n        uint256 length = tokens.length;\n        rates = new uint256[](length);\n        for (uint256 i = 0; i < length; ++i) {\n            uint256 tokenAmount = _estimateSwap(tokens[i], referenceToken, referenceAmount, data);\n            rates[i] = referenceAmount.mul(10**18).div(tokenAmount);\n        }\n    }\n\n    /*                               Internal Life Cycle Functions                               */\n\n    /**\n     * Lifecycle step which manages the transfer of funds from the purchaser.\n     * @dev Responsibilities:\n     *  - Ensure the payment reaches destination in the expected output token;\n     *  - Handle any token swap logic;\n     *  - Add any relevant extra data related to payment in `purchase.paymentData` and document how to interpret it.\n     * @dev Reverts in case of payment failure.\n     * @param purchase The purchase conditions.\n     */\n    function _payment(PurchaseData memory purchase) internal virtual override {\n        if ((purchase.pricingData.length == 0) || (uint256(purchase.pricingData[0]) != PRICE_SWAP_VIA_ORACLE)) {\n            super._payment(purchase);\n            return;\n        }\n\n        if (purchase.token == TOKEN_ETH) {\n            require(msg.value >= purchase.totalPrice, \"Sale: insufficient ETH\");\n        } else {\n            // todo remove this transfer\n            IWrappedERC20(purchase.token).wrappedTransferFrom(_msgSender(), address(this), purchase.totalPrice);\n        }\n\n        uint256 swapRate = uint256(purchase.pricingData[1]);\n        uint256 referenceTotalPrice = swapRate.mul(purchase.totalPrice).div(10**18);\n\n        uint256 fromAmount = _swap(purchase.token, referenceToken, referenceTotalPrice, purchase.userData);\n\n        if (purchase.token == TOKEN_ETH) {\n            uint256 change = msg.value.sub(fromAmount);\n\n            if (change != 0) {\n                purchase.purchaser.transfer(change);\n            }\n        } else {\n            uint256 change = purchase.totalPrice.sub(fromAmount);\n\n            if (change != 0) {\n                IWrappedERC20(purchase.token).wrappedTransfer(purchase.purchaser, change);\n            }\n        }\n\n        if (referenceToken == TOKEN_ETH) {\n            payoutWallet.transfer(fromAmount);\n        } else {\n            IWrappedERC20(referenceToken).wrappedTransfer(payoutWallet, fromAmount);\n        }\n    }\n\n    /*                               Internal Utility Functions                                  */\n\n    /**\n     * Estimates the optimal amount of `fromToken` to provide in order to swap for the specified amount of\n     *  `toToken`, via the oracle.\n     * @dev Reverts if the oracle cannot estimate the optimal amount of `fromToken` to provide.\n     * @param fromToken The source token to swap from.\n     * @param toToken The destination token to swap to.\n     * @param toAmount The amount of destination tokens to swap for.\n     * @param data Additional data with no specified format for deriving the swap estimate.\n     * @return fromAmount The estimated optimal amount of `fromToken` to provide in order to perform a swap,\n     *  via the oracle.\n     */\n    function _estimateSwap(\n        address fromToken,\n        address toToken,\n        uint256 toAmount,\n        bytes memory data\n    ) internal view virtual returns (uint256 fromAmount);\n\n    /**\n     * Swaps `fromToken` for the specified amount of `toToken`, via the oracle.\n     * @dev Reverts if the oracle is unable to perform the token swap.\n     * @param fromToken The source token to swap from.\n     * @param toToken The destination token to swap to.\n     * @param toAmount The amount of destination tokens to swap for.\n     * @param data Additional data with no specified format for performing the swap.\n     * return fromAmount The amount of `fromToken` swapped for the specified amount of `toToken`, via the\n     *  oracle.\n     */\n    function _swap(\n        address fromToken,\n        address toToken,\n        uint256 toAmount,\n        bytes memory data\n    ) internal virtual returns (uint256 fromAmount);\n\n    /**\n     * Computes the oracle-based purchase price.\n     * @dev Responsibilities:\n     *  - Computes the oracle-based pricing formula, including any discount logic and price conversion;\n     *  - Set the value of `purchase.totalPrice`;\n     *  - Add any relevant extra data related to pricing in `purchase.pricingData` and document how to interpret it.\n     * @dev Reverts in case of price overflow.\n     * @param purchase The purchase conditions.\n     * @param tokenPrices Storage pointer to a mapping of SKU token prices.\n     * @param unitPrice The unit price of a SKU for the specified payment token.\n     * @return True if oracle pricing was handled, false otherwise.\n     */\n    function _oraclePricing(\n        PurchaseData memory purchase,\n        EnumMap.Map storage tokenPrices,\n        uint256 unitPrice\n    ) internal view virtual override returns (bool) {\n        if (unitPrice != PRICE_SWAP_VIA_ORACLE) {\n            return super._oraclePricing(purchase, tokenPrices, unitPrice);\n        }\n\n        uint256 referenceUnitPrice = uint256(tokenPrices.get(bytes32(uint256(referenceToken))));\n        uint256 referenceTotalPrice = referenceUnitPrice.mul(purchase.quantity);\n\n        uint256 totalPrice = _estimateSwap(purchase.token, referenceToken, referenceTotalPrice, purchase.userData);\n\n        uint256 swapRate = referenceTotalPrice.mul(10**18).div(totalPrice);\n\n        purchase.pricingData = new bytes32[](2);\n        purchase.pricingData[0] = bytes32(unitPrice);\n        purchase.pricingData[1] = bytes32(swapRate);\n\n        purchase.totalPrice = totalPrice;\n\n        return true;\n    }\n}\n"},"contracts/sale/FixedOrderInventorySale.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity >=0.7.6 <0.8.0;\n\nimport {EnumSet} from \"./abstract/Sale.sol\";\nimport {FixedPricesSale} from \"./FixedPricesSale.sol\";\n\n/**\n * @title FixedOrderInventorySale\n * A FixedPricesSale contract that handles the purchase of NFTs of an inventory contract to a\n * receipient. The provisioning of the NFTs occurs in a sequential order defined by a token list.\n * Only a single SKU is supported.\n */\ncontract FixedOrderInventorySale is FixedPricesSale {\n    using EnumSet for EnumSet.Set;\n\n    address public immutable inventory;\n\n    uint256 public tokenIndex;\n\n    uint256[] public tokenList;\n\n    /**\n     * Constructor.\n     * @dev Reverts if `inventory_` is the zero address.\n     * @dev Emits the `MagicValues` event.\n     * @dev Emits the `Paused` event.\n     * @param inventory_ The inventory contract from which the NFT sale supply is attributed from.\n     * @param payoutWallet The payout wallet.\n     * @param tokensPerSkuCapacity the cap for the number of tokens managed per SKU.\n     */\n    constructor(\n        address inventory_,\n        address payable payoutWallet,\n        uint256 tokensPerSkuCapacity\n    )\n        FixedPricesSale(\n            payoutWallet,\n            1, // single SKU\n            tokensPerSkuCapacity\n        )\n    {\n        require(inventory_ != address(0), \"Sale: zero address inventory\");\n        inventory = inventory_;\n    }\n\n    /**\n     * Adds additional tokens to the sale supply.\n     * @dev Reverts if called by any other than the contract owner.\n     * @dev Reverts if `tokens` is empty.\n     * @dev Reverts if any of `tokens` are zero.\n     * @dev The list of tokens specified (in sequence) will be appended to the end of the ordered\n     *  sale supply list.\n     * @param tokens The list of tokens to add.\n     */\n    function addSupply(uint256[] memory tokens) public virtual {\n        _requireOwnership(_msgSender());\n        uint256 numTokens = tokens.length;\n\n        require(numTokens != 0, \"Sale: empty tokens\");\n\n        for (uint256 i = 0; i != numTokens; ++i) {\n            uint256 token = tokens[i];\n\n            require(token != 0, \"Sale: zero supply\");\n\n            tokenList.push(token);\n        }\n\n        if (_skus.length() != 0) {\n            bytes32 sku = _skus.at(0);\n            SkuInfo storage skuInfo = _skuInfos[sku];\n            skuInfo.totalSupply += numTokens;\n            skuInfo.remainingSupply += numTokens;\n        }\n    }\n\n    /**\n     * Sets the tokens of the ordered sale supply list.\n     * @dev Reverts if called by any other than the contract owner.\n     * @dev Reverts if called when the contract is not paused.\n     * @dev Reverts if the sale supply is empty.\n     * @dev Reverts if the lengths of `indexes` and `tokens` do not match.\n     * @dev Reverts if `indexes` is zero length.\n     * @dev Reverts if any of `indexes` are less than `tokenIndex`.\n     * @dev Reverts if any of `indexes` are out-of-bounds.\n     * @dev Reverts it `tokens` is zero length.\n     * @dev Reverts if any of `tokens` are zero.\n     * @dev Does not allow resizing of the sale supply, only the re-ordering or replacment of\n     *  existing tokens.\n     * @dev Because the elements of `indexes` and `tokens` are processed in sequence, duplicate\n     *  entries in either array are permitted, which allows for ordered operations to be performed\n     *  on the ordered sale supply list in the same transaction.\n     * @param indexes The list of indexes in the ordered sale supply list whose element values\n     *  will be set.\n     * @param tokens The new tokens to set in the ordered sale supply list at the corresponding\n     *  positions provided by `indexes`.\n     */\n    function setSupply(uint256[] memory indexes, uint256[] memory tokens) public virtual {\n        _requirePaused();\n        _requireOwnership(_msgSender());\n        uint256 tokenListLength = tokenList.length;\n\n        // todo optimise checks\n\n        require(tokenListLength != 0, \"Sale: empty tokens\");\n\n        uint256 numIndexes = indexes.length;\n\n        require(numIndexes != 0, \"Sale: empty indexes\");\n\n        uint256 numTokens = tokens.length;\n\n        require(numIndexes == numTokens, \"Sale: inconsistent arrays\");\n\n        uint256 tokenIndex_ = tokenIndex;\n\n        for (uint256 i = 0; i != numIndexes; ++i) {\n            uint256 index = indexes[i];\n\n            require(index >= tokenIndex_, \"Sale: invalid index\");\n            require(index < tokenListLength, \"Sale: index out-of-bounds\");\n\n            uint256 token = tokens[i];\n\n            require(token != 0, \"Sale: zero supply\");\n\n            tokenList[index] = token;\n        }\n    }\n\n    /**\n     * Retrieves the amount of total sale supply.\n     * @return The amount of total sale supply.\n     */\n    function getTotalSupply() public view virtual returns (uint256) {\n        return tokenList.length;\n    }\n\n    /**\n     * Lifecycle step which delivers the purchased SKUs to the recipient.\n     * @dev Responsibilities:\n     *  - Ensure the product is delivered to the recipient, if that is the contract's responsibility.\n     *  - Handle any internal logic related to the delivery, including the remaining supply update.\n     *  - Add any relevant extra data related to delivery in `purchase.deliveryData` and document how to interpret it.\n     * @dev Reverts if there is not enough available supply.\n     * @dev Updates `purchase.deliveryData` with the list of tokens allocated from `tokenList` for\n     *  this purchase.\n     * @param purchase The purchase conditions.\n     */\n    function _delivery(PurchaseData memory purchase) internal virtual override {\n        super._delivery(purchase);\n\n        purchase.deliveryData = new bytes32[](purchase.quantity);\n\n        uint256 tokenCount = 0;\n        uint256 tokenIndex_ = tokenIndex;\n\n        while (tokenCount != purchase.quantity) {\n            purchase.deliveryData[tokenCount] = bytes32(tokenList[tokenIndex_]);\n            ++tokenCount;\n            ++tokenIndex_;\n        }\n\n        tokenIndex = tokenIndex_;\n    }\n}\n"},"contracts/sale/FixedPricesSale.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity >=0.7.6 <0.8.0;\n\nimport {ERC20Wrapper, IWrappedERC20} from \"@animoca/ethereum-contracts-core-1.1.2/contracts/utils/ERC20Wrapper.sol\";\nimport {EnumMap, EnumSet, SafeMath, Sale} from \"./abstract/Sale.sol\";\n\n/**\n * @title FixedPricesSale\n * An Sale which implements a fixed prices strategy.\n *  The final implementer is responsible for implementing any additional pricing and/or delivery logic.\n */\nabstract contract FixedPricesSale is Sale {\n    using ERC20Wrapper for IWrappedERC20;\n    using SafeMath for uint256;\n    using EnumMap for EnumMap.Map;\n\n    /**\n     * Constructor.\n     * @dev Emits the `MagicValues` event.\n     * @dev Emits the `Paused` event.\n     * @param payoutWallet_ the payout wallet.\n     * @param skusCapacity the cap for the number of managed SKUs.\n     * @param tokensPerSkuCapacity the cap for the number of tokens managed per SKU.\n     */\n    constructor(\n        address payable payoutWallet_,\n        uint256 skusCapacity,\n        uint256 tokensPerSkuCapacity\n    ) Sale(payoutWallet_, skusCapacity, tokensPerSkuCapacity) {}\n\n    /*                               Internal Life Cycle Functions                               */\n\n    /**\n     * Lifecycle step which computes the purchase price.\n     * @dev Responsibilities:\n     *  - Computes the pricing formula, including any discount logic and price conversion;\n     *  - Set the value of `purchase.totalPrice`;\n     *  - Add any relevant extra data related to pricing in `purchase.pricingData` and document how to interpret it.\n     * @dev Reverts if `purchase.sku` does not exist.\n     * @dev Reverts if `purchase.token` is not supported by the SKU.\n     * @dev Reverts in case of price overflow.\n     * @param purchase The purchase conditions.\n     */\n    function _pricing(PurchaseData memory purchase) internal view virtual override {\n        SkuInfo storage skuInfo = _skuInfos[purchase.sku];\n        require(skuInfo.totalSupply != 0, \"Sale: unsupported SKU\");\n        EnumMap.Map storage prices = skuInfo.prices;\n        uint256 unitPrice = _unitPrice(purchase, prices);\n        purchase.totalPrice = unitPrice.mul(purchase.quantity);\n    }\n\n    /**\n     * Lifecycle step which manages the transfer of funds from the purchaser.\n     * @dev Responsibilities:\n     *  - Ensure the payment reaches destination in the expected output token;\n     *  - Handle any token swap logic;\n     *  - Add any relevant extra data related to payment in `purchase.paymentData` and document how to interpret it.\n     * @dev Reverts in case of payment failure.\n     * @param purchase The purchase conditions.\n     */\n    function _payment(PurchaseData memory purchase) internal virtual override {\n        if (purchase.token == TOKEN_ETH) {\n            require(msg.value >= purchase.totalPrice, \"Sale: insufficient ETH\");\n\n            payoutWallet.transfer(purchase.totalPrice);\n\n            uint256 change = msg.value.sub(purchase.totalPrice);\n\n            if (change != 0) {\n                purchase.purchaser.transfer(change);\n            }\n        } else {\n            IWrappedERC20(purchase.token).wrappedTransferFrom(_msgSender(), payoutWallet, purchase.totalPrice);\n        }\n    }\n\n    /*                               Internal Utility Functions                                  */\n\n    /**\n     * Retrieves the unit price of a SKU for the specified payment token.\n     * @dev Reverts if the specified payment token is unsupported.\n     * @param purchase The purchase conditions specifying the payment token with which the unit price will be retrieved.\n     * @param prices Storage pointer to a mapping of SKU token prices to retrieve the unit price from.\n     * @return unitPrice The unit price of a SKU for the specified payment token.\n     */\n    function _unitPrice(PurchaseData memory purchase, EnumMap.Map storage prices) internal view virtual returns (uint256 unitPrice) {\n        unitPrice = uint256(prices.get(bytes32(uint256(purchase.token))));\n        require(unitPrice != 0, \"Sale: unsupported payment token\");\n    }\n}\n"},"contracts/sale/interfaces/IOracleSale.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity >=0.7.6 <0.8.0;\n\n/**\n * @title IOracleSale\n * An ISale which can manage token conversion rates through an oracle.\n */\n/*is ISale*/\ninterface IOracleSale {\n    /**\n     * Returns the price magic value used to represent an oracle-based token conversion pricing.\n     * @dev MUST NOT be zero. SHOULD BE a prohibitively big value, so that it doesn’t collide with a possible price value.\n     * @return The price magic value used to represent an oracle-based token conversion pricing.\n     */\n    // solhint-disable-next-line func-name-mixedcase\n    function PRICE_CONVERT_VIA_ORACLE() external pure returns (uint256);\n\n    /**\n     * Retrieves the token conversion rates for the `tokens`/`referenceToken` pairs via the oracle.\n     * @dev Reverts if the oracle does not provide a conversion rate for one of the token pairs.\n     * @param tokens The list of tokens to retrieve the conversion rates for.\n     * @param data Additional data with no specified format for deriving the conversion rates.\n     * @return rates The conversion rates for the `tokens`/`referenceToken` pairs, retrieved via the oracle.\n     */\n    function conversionRates(address[] calldata tokens, bytes calldata data) external view returns (uint256[] memory rates);\n}\n"},"contracts/sale/interfaces/IPurchaseNotificationsReceiver.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity >=0.7.6 <0.8.0;\n\n/**\n * @title IPurchaseNotificationsReceiver\n * Interface for any contract that wants to support purchase notifications from a Sale contract.\n */\ninterface IPurchaseNotificationsReceiver {\n    /**\n     * Handles the receipt of a purchase notification.\n     * @dev This function MUST return the function selector, otherwise the caller will revert the transaction.\n     *  The selector to be returned can be obtained as `this.onPurchaseNotificationReceived.selector`\n     * @dev This function MAY throw.\n     * @param purchaser The purchaser of the purchase.\n     * @param recipient The recipient of the purchase.\n     * @param token The token to use as the payment currency.\n     * @param sku The identifier of the SKU to purchase.\n     * @param quantity The quantity to purchase.\n     * @param userData Optional extra user input data.\n     * @param totalPrice The total price paid.\n     * @param pricingData Implementation-specific extra pricing data, such as details about discounts applied.\n     * @param paymentData Implementation-specific extra payment data, such as conversion rates.\n     * @param deliveryData Implementation-specific extra delivery data, such as purchase receipts.\n     * @return `bytes4(keccak256(\n     *  \"onPurchaseNotificationReceived(address,address,address,bytes32,uint256,bytes,uint256,bytes32[],bytes32[],bytes32[])\"))`\n     */\n    function onPurchaseNotificationReceived(\n        address purchaser,\n        address recipient,\n        address token,\n        bytes32 sku,\n        uint256 quantity,\n        bytes calldata userData,\n        uint256 totalPrice,\n        bytes32[] calldata pricingData,\n        bytes32[] calldata paymentData,\n        bytes32[] calldata deliveryData\n    ) external returns (bytes4);\n}\n"},"contracts/sale/interfaces/ISale.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity >=0.7.6 <0.8.0;\n\n/**\n * @title ISale\n *\n * An interface for a contract which allows merchants to display products and customers to purchase them.\n *\n *  Products, designated as SKUs, are represented by bytes32 identifiers so that an identifier can carry an\n *  explicit name under the form of a fixed-length string. Each SKU can be priced via up to several payment\n *  tokens which can be ETH and/or ERC20(s). ETH token is represented by the magic value TOKEN_ETH, which means\n *  this value can be used as the 'token' argument of the purchase-related functions to indicate ETH payment.\n *\n *  The total available supply for a SKU is fixed at its creation. The magic value SUPPLY_UNLIMITED is used\n *  to represent a SKU with an infinite, never-decreasing supply. An optional purchase notifications receiver\n *  contract address can be set for a SKU at its creation: if the value is different from the zero address,\n *  the function `onPurchaseNotificationReceived` will be called on this address upon every purchase of the SKU.\n *\n *  This interface is designed to be consistent while managing a variety of implementation scenarios. It is\n *  also intended to be developer-friendly: all vital information is consistently deductible from the events\n *  (backend-oriented), as well as retrievable through calls to public functions (frontend-oriented).\n */\ninterface ISale {\n    /**\n     * Event emitted to notify about the magic values necessary for interfacing with this contract.\n     * @param names An array of names for the magic values used by the contract.\n     * @param values An array of values for the magic values used by the contract.\n     */\n    event MagicValues(bytes32[] names, bytes32[] values);\n\n    /**\n     * Event emitted to notify about the creation of a SKU.\n     * @param sku The identifier of the created SKU.\n     * @param totalSupply The initial total supply for sale.\n     * @param maxQuantityPerPurchase The maximum allowed quantity for a single purchase.\n     * @param notificationsReceiver If not the zero address, the address of a contract on which `onPurchaseNotificationReceived` will be called after\n     *  each purchase. If this is the zero address, the call is not enabled.\n     */\n    event SkuCreation(bytes32 sku, uint256 totalSupply, uint256 maxQuantityPerPurchase, address notificationsReceiver);\n\n    /**\n     * Event emitted to notify about a change in the pricing of a SKU.\n     * @dev `tokens` and `prices` arrays MUST have the same length.\n     * @param sku The identifier of the updated SKU.\n     * @param tokens An array of updated payment tokens. If empty, interpret as all payment tokens being disabled.\n     * @param prices An array of updated prices for each of the payment tokens.\n     *  Zero price values are used for payment tokens being disabled.\n     */\n    event SkuPricingUpdate(bytes32 indexed sku, address[] tokens, uint256[] prices);\n\n    /**\n     * Event emitted to notify about a purchase.\n     * @param purchaser The initiater and buyer of the purchase.\n     * @param recipient The recipient of the purchase.\n     * @param token The token used as the currency for the payment.\n     * @param sku The identifier of the purchased SKU.\n     * @param quantity The purchased quantity.\n     * @param userData Optional extra user input data.\n     * @param totalPrice The amount of `token` paid.\n     * @param extData Implementation-specific extra purchase data, such as\n     *  details about discounts applied, conversion rates, purchase receipts, etc.\n     */\n    event Purchase(\n        address indexed purchaser,\n        address recipient,\n        address indexed token,\n        bytes32 indexed sku,\n        uint256 quantity,\n        bytes userData,\n        uint256 totalPrice,\n        bytes extData\n    );\n\n    /**\n     * Returns the magic value used to represent the ETH payment token.\n     * @dev MUST NOT be the zero address.\n     * @return the magic value used to represent the ETH payment token.\n     */\n    // solhint-disable-next-line func-name-mixedcase\n    function TOKEN_ETH() external pure returns (address);\n\n    /**\n     * Returns the magic value used to represent an infinite, never-decreasing SKU's supply.\n     * @dev MUST NOT be zero.\n     * @return the magic value used to represent an infinite, never-decreasing SKU's supply.\n     */\n    // solhint-disable-next-line func-name-mixedcase\n    function SUPPLY_UNLIMITED() external pure returns (uint256);\n\n    /**\n     * Performs a purchase.\n     * @dev Reverts if `recipient` is the zero address.\n     * @dev Reverts if `token` is the address zero.\n     * @dev Reverts if `quantity` is zero.\n     * @dev Reverts if `quantity` is greater than the maximum purchase quantity.\n     * @dev Reverts if `quantity` is greater than the remaining supply.\n     * @dev Reverts if `sku` does not exist.\n     * @dev Reverts if `sku` exists but does not have a price set for `token`.\n     * @dev Emits the Purchase event.\n     * @param recipient The recipient of the purchase.\n     * @param token The token to use as the payment currency.\n     * @param sku The identifier of the SKU to purchase.\n     * @param quantity The quantity to purchase.\n     * @param userData Optional extra user input data.\n     */\n    function purchaseFor(\n        address payable recipient,\n        address token,\n        bytes32 sku,\n        uint256 quantity,\n        bytes calldata userData\n    ) external payable;\n\n    /**\n     * Estimates the computed final total amount to pay for a purchase, including any potential discount.\n     * @dev This function MUST compute the same price as `purchaseFor` would in identical conditions (same arguments, same point in time).\n     * @dev If an implementer contract uses the `pricingData` field, it SHOULD document how to interpret the values.\n     * @dev Reverts if `recipient` is the zero address.\n     * @dev Reverts if `token` is the zero address.\n     * @dev Reverts if `quantity` is zero.\n     * @dev Reverts if `quantity` is greater than the maximum purchase quantity.\n     * @dev Reverts if `quantity` is greater than the remaining supply.\n     * @dev Reverts if `sku` does not exist.\n     * @dev Reverts if `sku` exists but does not have a price set for `token`.\n     * @param recipient The recipient of the purchase used to calculate the total price amount.\n     * @param token The payment token used to calculate the total price amount.\n     * @param sku The identifier of the SKU used to calculate the total price amount.\n     * @param quantity The quantity used to calculate the total price amount.\n     * @param userData Optional extra user input data.\n     * @return totalPrice The computed total price to pay.\n     * @return pricingData Implementation-specific extra pricing data, such as details about discounts applied.\n     *  If not empty, the implementer MUST document how to interepret the values.\n     */\n    function estimatePurchase(\n        address payable recipient,\n        address token,\n        bytes32 sku,\n        uint256 quantity,\n        bytes calldata userData\n    ) external view returns (uint256 totalPrice, bytes32[] memory pricingData);\n\n    /**\n     * Returns the information relative to a SKU.\n     * @dev WARNING: it is the responsibility of the implementer to ensure that the\n     *  number of payment tokens is bounded, so that this function does not run out of gas.\n     * @dev Reverts if `sku` does not exist.\n     * @param sku The SKU identifier.\n     * @return totalSupply The initial total supply for sale.\n     * @return remainingSupply The remaining supply for sale.\n     * @return maxQuantityPerPurchase The maximum allowed quantity for a single purchase.\n     * @return notificationsReceiver The address of a contract on which to call the `onPurchaseNotificationReceived` function.\n     * @return tokens The list of supported payment tokens.\n     * @return prices The list of associated prices for each of the `tokens`.\n     */\n    function getSkuInfo(bytes32 sku)\n        external\n        view\n        returns (\n            uint256 totalSupply,\n            uint256 remainingSupply,\n            uint256 maxQuantityPerPurchase,\n            address notificationsReceiver,\n            address[] memory tokens,\n            uint256[] memory prices\n        );\n\n    /**\n     * Returns the list of created SKU identifiers.\n     * @dev WARNING: it is the responsibility of the implementer to ensure that the\n     *  number of SKUs is bounded, so that this function does not run out of gas.\n     * @return skus the list of created SKU identifiers.\n     */\n    function getSkus() external view returns (bytes32[] memory skus);\n}\n"},"contracts/sale/interfaces/ISwapSale.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity >=0.7.6 <0.8.0;\n\n/**\n * @title ISwapSale\n * An IOracleSale which can manage token swaps through an oracle.\n */\n/*is IOracleSale*/\ninterface ISwapSale {\n    /**\n     * Returns the price magic value used to represent an oracle-based token swap pricing.\n     * @dev MUST NOT be zero. SHOULD BE a prohibitively big value, so that it doesn’t collide with a possible price value.\n     * @return The price magic value used to represent an oracle-based token swap pricing.\n     */\n    // solhint-disable-next-line func-name-mixedcase\n    function PRICE_SWAP_VIA_ORACLE() external pure returns (uint256);\n\n    /**\n     * Retrieves the token swap rates for the `tokens`/`referenceToken` pairs via the oracle.\n     * @dev Reverts if the oracle does not provide a swap rate for one of the token pairs.\n     * @param tokens The list of tokens to retrieve the swap rates for.\n     * @param referenceAmount The amount of `referenceToken` to retrieve the swap rates for.\n     * @param data Additional data with no specified format for deriving the swap rates.\n     * @return rates The swap rates for the `tokens`/`referenceToken` pairs, retrieved via the oracle.\n     */\n    function swapRates(\n        address[] calldata tokens,\n        uint256 referenceAmount,\n        bytes calldata data\n    ) external view returns (uint256[] memory rates);\n}\n"},"contracts/sale/UniswapOracleSale.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity >=0.7.6 <0.8.0;\n\nimport {IUniswapV2Router} from \"../oracle/interfaces/IUniswapV2Router.sol\";\nimport {UniswapV2Adapter} from \"../oracle/UniswapV2Adapter.sol\";\nimport {SafeMath, OracleSale} from \"./abstract/OracleSale.sol\";\n\n/**\n * @title UniswapOracleSale\n * An OracleSale which implements a Uniswap-based token conversion pricing strategy. The final\n *  implementer is responsible for implementing any additional pricing and/or delivery logic.\n *\n * PurchaseData.pricingData:\n *  - a non-zero length array indicates Uniswap-based pricing, otherwise indicates fixed pricing.\n *  - [0] uint256: the token conversion rate used for Uniswap-based pricing.\n */\ncontract UniswapOracleSale is OracleSale, UniswapV2Adapter {\n    using SafeMath for uint256;\n\n    /**\n     * Constructor.\n     * @dev Emits the `MagicValues` event.\n     * @dev Emits the `Paused` event.\n     * @param payoutWallet_ The payout wallet.\n     * @param skusCapacity The cap for the number of managed SKUs.\n     * @param tokensPerSkuCapacity The cap for the number of tokens managed per SKU.\n     * @param referenceToken The token to use for oracle-based conversions.\n     * @param uniswapV2Router The UniswapV2 router contract used to facilitate operations against the Uniswap network.\n     */\n    constructor(\n        address payable payoutWallet_,\n        uint256 skusCapacity,\n        uint256 tokensPerSkuCapacity,\n        address referenceToken,\n        IUniswapV2Router uniswapV2Router\n    ) OracleSale(payoutWallet_, skusCapacity, tokensPerSkuCapacity, referenceToken) UniswapV2Adapter(uniswapV2Router) {}\n\n    /*                               Internal Utility Functions                                  */\n\n    /**\n     * Retrieves the conversion rate for the `fromToken`/`toToken` pair via the oracle.\n     * @dev Reverts if the oracle does not provide a conversion rate for the pair.\n     * @param fromToken The source token from which the conversion rate is derived from.\n     * @param toToken the destination token from which the conversion rate is derived from.\n     * @param *data* Additional data with no specified format for deriving the conversion rate.\n     * @return rate The conversion rate for the `fromToken`/`toToken` pair, retrieved via the oracle.\n     */\n    function _conversionRate(\n        address fromToken,\n        address toToken,\n        bytes memory /*data*/\n    ) internal view virtual override returns (uint256 rate) {\n        if (fromToken == TOKEN_ETH) {\n            fromToken = uniswapV2Router.WETH();\n        }\n\n        if (toToken == TOKEN_ETH) {\n            toToken = uniswapV2Router.WETH();\n        }\n\n        (uint256 fromReserve, uint256 toReserve) = _getReserves(fromToken, toToken);\n        rate = toReserve.mul(10**18).div(fromReserve);\n    }\n}\n"},"contracts/sale/UniswapSwapSale.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity >=0.7.6 <0.8.0;\n\nimport {IUniswapV2Router} from \"../oracle/interfaces/IUniswapV2Router.sol\";\nimport {UniswapV2Adapter} from \"../oracle/UniswapV2Adapter.sol\";\nimport {ERC20Wrapper, IWrappedERC20} from \"./FixedPricesSale.sol\";\nimport {SafeMath, SwapSale} from \"./abstract/SwapSale.sol\";\n\n/**\n * @title UniswapSwapSale\n * An SwapSale which implements a UniswapV2-based token conversion pricing strategy. The final\n *  implementer is responsible for implementing any additional pricing and/or delivery logic.\n *\n * PurchaseData.pricingData:\n *  - a non-zero length array indicates Uniswap-based pricing, otherwise indicates fixed pricing.\n *  - [0] uint256: the token conversion rate used for Uniswap-based pricing.\n *\n * PurchaseData.userData MUST be encoded in-place as follows:\n *  - uint256: the maximum amount of purchase tokens to swap for reference tokens, in payment for\n *    a purchase. A value of 0 will use the maximum supported amount (default: type(uint256).max).\n *  - uint256: the token swap deadline as a UNIX timestamp. A value of 0 will not apply any\n *    deadline.\n *  - any additional fields may be defined in-place by deriving contracts (to be documented by the\n *    deriving contract).\n */\ncontract UniswapSwapSale is SwapSale, UniswapV2Adapter {\n    using ERC20Wrapper for IWrappedERC20;\n    using SafeMath for uint256;\n\n    /**\n     * Constructor.\n     * @dev Emits the `MagicValues` event.\n     * @dev Emits the `Paused` event.\n     * @param payoutWallet_ The payout wallet.\n     * @param skusCapacity The cap for the number of managed SKUs.\n     * @param tokensPerSkuCapacity The cap for the number of tokens managed per SKU.\n     * @param referenceToken The token to use for oracle-based conversions.\n     * @param uniswapV2Router The UniswapV2 router contract used to facilitate operations against the Uniswap network.\n     */\n    constructor(\n        address payable payoutWallet_,\n        uint256 skusCapacity,\n        uint256 tokensPerSkuCapacity,\n        address referenceToken,\n        IUniswapV2Router uniswapV2Router\n    ) SwapSale(payoutWallet_, skusCapacity, tokensPerSkuCapacity, referenceToken) UniswapV2Adapter(uniswapV2Router) {}\n\n    /**\n     * Receives refunded ETH from the Uniswap token swapping operation.\n     * @dev Reverts if the sender of ETH isn't the Uniswap V2 router.\n     */\n    receive() external payable {\n        require(_msgSender() == address(uniswapV2Router), \"Sale: Invalid ETH sender\");\n    }\n\n    /*                               Internal Life Cycle Functions                               */\n\n    /**\n     * Lifecycle step which validates the purchase pre-conditions.\n     * @dev Responsibilities:\n     *  - Ensure that the purchase pre-conditions are met and revert if not.\n     * @param purchase The purchase conditions.\n     */\n    function _validation(PurchaseData memory purchase) internal view virtual override {\n        super._validation(purchase);\n        require(purchase.userData.length >= 64, \"Sale: missing user data\");\n    }\n\n    /**\n     * Lifecycle step which manages the transfer of funds from the purchaser.\n     * @dev Responsibilities:\n     *  - Ensure the payment reaches destination in the expected output token;\n     *  - Handle any token swap logic;\n     *  - Add any relevant extra data related to payment in `purchase.paymentData` and document how to interpret it.\n     * @dev Reverts in case of payment failure.\n     * @param purchase The purchase conditions.\n     */\n    function _payment(PurchaseData memory purchase) internal virtual override {\n        if ((purchase.pricingData.length != 0) && (purchase.token != TOKEN_ETH)) {\n            bytes memory data = purchase.userData;\n            uint256 maxFromAmount;\n\n            assembly {\n                maxFromAmount := mload(add(data, 32))\n            }\n\n            if (maxFromAmount == 0) {\n                maxFromAmount = type(uint256).max;\n            }\n\n            IWrappedERC20(purchase.token).wrappedApprove(address(uniswapV2Router), maxFromAmount);\n        }\n        super._payment(purchase);\n    }\n\n    /*                               Internal Utility Functions                                  */\n\n    /**\n     * Retrieves the conversion rate for the `fromToken`/`toToken` pair via the oracle.\n     * @dev Reverts if the oracle does not provide a conversion rate for the pair.\n     * @param fromToken The source token from which the conversion rate is derived from.\n     * @param toToken the destination token from which the conversion rate is derived from.\n     * @param *data* Additional data with no specified format for deriving the conversion rate.\n     * @return rate The conversion rate for the `fromToken`/`toToken` pair, retrieved via the oracle.\n     */\n    function _conversionRate(\n        address fromToken,\n        address toToken,\n        bytes memory /*data*/\n    ) internal view virtual override returns (uint256 rate) {\n        if (fromToken == TOKEN_ETH) {\n            fromToken = uniswapV2Router.WETH();\n        }\n\n        if (toToken == TOKEN_ETH) {\n            toToken = uniswapV2Router.WETH();\n        }\n\n        (uint256 fromReserve, uint256 toReserve) = _getReserves(fromToken, toToken);\n        rate = toReserve.mul(10**18).div(fromReserve);\n    }\n\n    /**\n     * Estimates the optimal amount of `fromToken` to provide in order to swap for the specified amount of\n     *  `toToken`, via the oracle.\n     * @dev Reverts if the oracle cannot estimate the optimal amount of `fromToken` to provide.\n     * @param fromToken The source token to swap from.\n     * @param toToken The destination token to swap to.\n     * @param toAmount The amount of destination tokens to swap for.\n     * @param *data* Additional data with no specified format for deriving the swap estimate.\n     * @return fromAmount The estimated optimal amount of `fromToken` to provide in order to perform a swap,\n     *  via the oracle.\n     */\n    function _estimateSwap(\n        address fromToken,\n        address toToken,\n        uint256 toAmount,\n        bytes memory /*data*/\n    ) internal view virtual override returns (uint256 fromAmount) {\n        if (fromToken == TOKEN_ETH) {\n            fromToken = uniswapV2Router.WETH();\n        }\n\n        if (toToken == TOKEN_ETH) {\n            toToken = uniswapV2Router.WETH();\n        }\n\n        fromAmount = _getAmountsIn(fromToken, toToken, toAmount);\n    }\n\n    /**\n     * Swaps `fromToken` for the specified amount of `toToken`, via the oracle.\n     * @dev Reverts if the oracle is unable to perform the token swap.\n     * @param fromToken The source token to swap from.\n     * @param toToken The destination token to swap to.\n     * @param toAmount The amount of destination tokens to swap for.\n     * @param data Additional data for UniswapV2 (uint256 `maxFromAmount`, uint256 `deadline`).\n     * @return fromAmount The amount of `fromToken` swapped for the specified amount of `toToken`, via the\n     *  oracle.\n     */\n    function _swap(\n        address fromToken,\n        address toToken,\n        uint256 toAmount,\n        bytes memory data\n    ) internal virtual override returns (uint256 fromAmount) {\n        uint256 maxFromAmount;\n        uint256 deadline;\n\n        assembly {\n            maxFromAmount := mload(add(data, 32))\n            deadline := mload(add(data, 64))\n        }\n\n        if (maxFromAmount == 0) {\n            if (fromToken == TOKEN_ETH) {\n                maxFromAmount = msg.value;\n            } else {\n                maxFromAmount = type(uint256).max;\n            }\n        }\n\n        if (deadline == 0) {\n            deadline = type(uint256).max;\n        }\n\n        if (fromToken == TOKEN_ETH) {\n            fromToken = uniswapV2Router.WETH();\n        }\n\n        if (toToken == TOKEN_ETH) {\n            toToken = uniswapV2Router.WETH();\n        }\n\n        fromAmount = _swapTokensForExactAmount(fromToken, toToken, toAmount, maxFromAmount, address(this), deadline);\n    }\n}\n"}},"settings":{"optimizer":{"enabled":true,"runs":2000},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"],"":["ast"]}}}},"output":{"sources":{"@animoca/ethereum-contracts-core-1.1.2/contracts/access/IERC173.sol":{"ast":{"absolutePath":"@animoca/ethereum-contracts-core-1.1.2/contracts/access/IERC173.sol","exportedSymbols":{"IERC173":[22]},"id":23,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":1,"literals":["solidity",">=","0.7",".6","<","0.8",".0"],"nodeType":"PragmaDirective","src":"33:31:0"},{"abstract":false,"baseContracts":[],"contractDependencies":[],"contractKind":"interface","documentation":{"id":2,"nodeType":"StructuredDocumentation","src":"66:118:0","text":" @title ERC-173 Contract Ownership Standard\n Note: the ERC-165 identifier for this interface is 0x7f5828d0"},"fullyImplemented":false,"id":22,"linearizedBaseContracts":[22],"name":"IERC173","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":3,"nodeType":"StructuredDocumentation","src":"209:155:0","text":" Event emited when ownership of a contract changes.\n @param previousOwner the previous owner.\n @param newOwner the new owner."},"id":9,"name":"OwnershipTransferred","nodeType":"EventDefinition","parameters":{"id":8,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5,"indexed":true,"mutability":"mutable","name":"previousOwner","nodeType":"VariableDeclaration","scope":9,"src":"396:29:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4,"name":"address","nodeType":"ElementaryTypeName","src":"396:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7,"indexed":true,"mutability":"mutable","name":"newOwner","nodeType":"VariableDeclaration","scope":9,"src":"427:24:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6,"name":"address","nodeType":"ElementaryTypeName","src":"427:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"395:57:0"},"src":"369:84:0"},{"documentation":{"id":10,"nodeType":"StructuredDocumentation","src":"459:88:0","text":" Get the address of the owner\n @return The address of the owner."},"functionSelector":"8da5cb5b","id":15,"implemented":false,"kind":"function","modifiers":[],"name":"owner","nodeType":"FunctionDefinition","parameters":{"id":11,"nodeType":"ParameterList","parameters":[],"src":"566:2:0"},"returnParameters":{"id":14,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":15,"src":"592:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12,"name":"address","nodeType":"ElementaryTypeName","src":"592:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"591:9:0"},"scope":22,"src":"552:49:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":16,"nodeType":"StructuredDocumentation","src":"607:299:0","text":" Set the address of the new owner of the contract\n Set newOwner to address(0) to renounce any ownership.\n @dev Emits an {OwnershipTransferred} event.\n @param newOwner The address of the new owner of the contract. Using the zero address means renouncing ownership."},"functionSelector":"f2fde38b","id":21,"implemented":false,"kind":"function","modifiers":[],"name":"transferOwnership","nodeType":"FunctionDefinition","parameters":{"id":19,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18,"mutability":"mutable","name":"newOwner","nodeType":"VariableDeclaration","scope":21,"src":"938:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17,"name":"address","nodeType":"ElementaryTypeName","src":"938:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"937:18:0"},"returnParameters":{"id":20,"nodeType":"ParameterList","parameters":[],"src":"964:0:0"},"scope":22,"src":"911:54:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":23,"src":"185:782:0"}],"src":"33:935:0"},"id":0},"@animoca/ethereum-contracts-core-1.1.2/contracts/access/Ownable.sol":{"ast":{"absolutePath":"@animoca/ethereum-contracts-core-1.1.2/contracts/access/Ownable.sol","exportedSymbols":{"IERC173":[22],"ManagedIdentity":[736],"Ownable":[103]},"id":104,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":24,"literals":["solidity",">=","0.7",".6","<","0.8",".0"],"nodeType":"PragmaDirective","src":"33:31:1"},{"absolutePath":"@animoca/ethereum-contracts-core-1.1.2/contracts/metatx/ManagedIdentity.sol","file":"../metatx/ManagedIdentity.sol","id":26,"nodeType":"ImportDirective","scope":104,"sourceUnit":737,"src":"66:62:1","symbolAliases":[{"foreign":{"id":25,"name":"ManagedIdentity","nodeType":"Identifier","overloadedDeclarations":[],"src":"74:15:1","typeDescriptions":{}}}],"unitAlias":""},{"absolutePath":"@animoca/ethereum-contracts-core-1.1.2/contracts/access/IERC173.sol","file":"./IERC173.sol","id":28,"nodeType":"ImportDirective","scope":104,"sourceUnit":23,"src":"129:38:1","symbolAliases":[{"foreign":{"id":27,"name":"IERC173","nodeType":"Identifier","overloadedDeclarations":[],"src":"137:7:1","typeDescriptions":{}}}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":30,"name":"ManagedIdentity","nodeType":"UserDefinedTypeName","referencedDeclaration":736,"src":"693:15:1","typeDescriptions":{"typeIdentifier":"t_contract$_ManagedIdentity_$736","typeString":"contract ManagedIdentity"}},"id":31,"nodeType":"InheritanceSpecifier","src":"693:15:1"},{"baseName":{"id":32,"name":"IERC173","nodeType":"UserDefinedTypeName","referencedDeclaration":22,"src":"710:7:1","typeDescriptions":{"typeIdentifier":"t_contract$_IERC173_$22","typeString":"contract IERC173"}},"id":33,"nodeType":"InheritanceSpecifier","src":"710:7:1"}],"contractDependencies":[22,736],"contractKind":"contract","documentation":{"id":29,"nodeType":"StructuredDocumentation","src":"169:494:1","text":" @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 By default, the owner account will be the one that deploys the contract. This\n can later be changed with {transferOwnership}.\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."},"fullyImplemented":true,"id":103,"linearizedBaseContracts":[103,22,736],"name":"Ownable","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":35,"mutability":"mutable","name":"_owner","nodeType":"VariableDeclaration","scope":103,"src":"724:23:1","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34,"name":"address","nodeType":"ElementaryTypeName","src":"724:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"body":{"id":53,"nodeType":"Block","src":"950:87:1","statements":[{"expression":{"id":43,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":41,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35,"src":"960:6:1","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":42,"name":"owner_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38,"src":"969:6:1","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"960:15:1","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":44,"nodeType":"ExpressionStatement","src":"960:15:1"},{"eventCall":{"arguments":[{"arguments":[{"hexValue":"30","id":48,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1019:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":47,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1011:7:1","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":46,"name":"address","nodeType":"ElementaryTypeName","src":"1011:7:1","typeDescriptions":{}}},"id":49,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1011:10:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":50,"name":"owner_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38,"src":"1023:6:1","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_address","typeString":"address"}],"id":45,"name":"OwnershipTransferred","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9,"src":"990:20:1","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":51,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"990:40:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":52,"nodeType":"EmitStatement","src":"985:45:1"}]},"documentation":{"id":36,"nodeType":"StructuredDocumentation","src":"754:163:1","text":" Initializes the contract, setting the deployer as the initial owner.\n @dev Emits an {IERC173-OwnershipTransferred(address,address)} event."},"id":54,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nodeType":"FunctionDefinition","parameters":{"id":39,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38,"mutability":"mutable","name":"owner_","nodeType":"VariableDeclaration","scope":54,"src":"934:14:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37,"name":"address","nodeType":"ElementaryTypeName","src":"934:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"933:16:1"},"returnParameters":{"id":40,"nodeType":"ParameterList","parameters":[],"src":"950:0:1"},"scope":103,"src":"922:115:1","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[15],"body":{"id":63,"nodeType":"Block","src":"1178:30:1","statements":[{"expression":{"id":61,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35,"src":"1195:6:1","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":60,"id":62,"nodeType":"Return","src":"1188:13:1"}]},"documentation":{"id":55,"nodeType":"StructuredDocumentation","src":"1043:66:1","text":" Gets the address of the current contract owner."},"functionSelector":"8da5cb5b","id":64,"implemented":true,"kind":"function","modifiers":[],"name":"owner","nodeType":"FunctionDefinition","overrides":{"id":57,"nodeType":"OverrideSpecifier","overrides":[],"src":"1151:8:1"},"parameters":{"id":56,"nodeType":"ParameterList","parameters":[],"src":"1128:2:1"},"returnParameters":{"id":60,"nodeType":"ParameterList","parameters":[{"constant":false,"id":59,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":64,"src":"1169:7:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":58,"name":"address","nodeType":"ElementaryTypeName","src":"1169:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1168:9:1"},"scope":103,"src":"1114:94:1","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[21],"body":{"id":85,"nodeType":"Block","src":"1517:128:1","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":72,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":726,"src":"1545:10:1","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":73,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1545:12:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":71,"name":"_requireOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":102,"src":"1527:17:1","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":74,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1527:31:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75,"nodeType":"ExpressionStatement","src":"1527:31:1"},{"expression":{"id":78,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":76,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35,"src":"1568:6:1","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":77,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67,"src":"1577:8:1","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1568:17:1","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":79,"nodeType":"ExpressionStatement","src":"1568:17:1"},{"eventCall":{"arguments":[{"id":81,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35,"src":"1621:6:1","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":82,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67,"src":"1629:8:1","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":80,"name":"OwnershipTransferred","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9,"src":"1600:20:1","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":83,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1600:38:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":84,"nodeType":"EmitStatement","src":"1595:43:1"}]},"documentation":{"id":65,"nodeType":"StructuredDocumentation","src":"1214:229:1","text":" See {IERC173-transferOwnership(address)}\n @dev Reverts if the sender is not the current contract owner.\n @param newOwner the address of the new owner. Use the zero address to renounce the ownership."},"functionSelector":"f2fde38b","id":86,"implemented":true,"kind":"function","modifiers":[],"name":"transferOwnership","nodeType":"FunctionDefinition","overrides":{"id":69,"nodeType":"OverrideSpecifier","overrides":[],"src":"1508:8:1"},"parameters":{"id":68,"nodeType":"ParameterList","parameters":[{"constant":false,"id":67,"mutability":"mutable","name":"newOwner","nodeType":"VariableDeclaration","scope":86,"src":"1475:16:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":66,"name":"address","nodeType":"ElementaryTypeName","src":"1475:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1474:18:1"},"returnParameters":{"id":70,"nodeType":"ParameterList","parameters":[],"src":"1517:0:1"},"scope":103,"src":"1448:197:1","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":101,"nodeType":"Block","src":"1831:75:1","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":97,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":93,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":89,"src":"1849:7:1","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":94,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1860:4:1","typeDescriptions":{"typeIdentifier":"t_contract$_Ownable_$103","typeString":"contract Ownable"}},"id":95,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"owner","nodeType":"MemberAccess","referencedDeclaration":64,"src":"1860:10:1","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":96,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1860:12:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1849:23:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f776e61626c653a206e6f7420746865206f776e6572","id":98,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1874:24:1","typeDescriptions":{"typeIdentifier":"t_stringliteral_3f66c2bea32eba0f3d049dc65c25083896451ab6baac1da5f5b2c90c9678a0e9","typeString":"literal_string \"Ownable: not the owner\""},"value":"Ownable: not the owner"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_3f66c2bea32eba0f3d049dc65c25083896451ab6baac1da5f5b2c90c9678a0e9","typeString":"literal_string \"Ownable: not the owner\""}],"id":92,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1841:7:1","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":99,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1841:58:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":100,"nodeType":"ExpressionStatement","src":"1841:58:1"}]},"documentation":{"id":87,"nodeType":"StructuredDocumentation","src":"1651:114:1","text":" @dev Reverts if `account` is not the contract owner.\n @param account the account to test."},"id":102,"implemented":true,"kind":"function","modifiers":[],"name":"_requireOwnership","nodeType":"FunctionDefinition","parameters":{"id":90,"nodeType":"ParameterList","parameters":[{"constant":false,"id":89,"mutability":"mutable","name":"account","nodeType":"VariableDeclaration","scope":102,"src":"1797:15:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":88,"name":"address","nodeType":"ElementaryTypeName","src":"1797:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1796:17:1"},"returnParameters":{"id":91,"nodeType":"ParameterList","parameters":[],"src":"1831:0:1"},"scope":103,"src":"1770:136:1","stateMutability":"nonpayable","virtual":true,"visibility":"internal"}],"scope":104,"src":"664:1244:1"}],"src":"33:1876:1"},"id":1},"@animoca/ethereum-contracts-core-1.1.2/contracts/algo/EnumMap.sol":{"ast":{"absolutePath":"@animoca/ethereum-contracts-core-1.1.2/contracts/algo/EnumMap.sol","exportedSymbols":{"EnumMap":[362]},"id":363,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":105,"literals":["solidity",">=","0.7",".6","<","0.8",".0"],"nodeType":"PragmaDirective","src":"210:31:2"},{"abstract":false,"baseContracts":[],"contractDependencies":[],"contractKind":"library","documentation":{"id":106,"nodeType":"StructuredDocumentation","src":"243:563:2","text":" @dev Library for managing an enumerable variant of Solidity's\n https://solidity.readthedocs.io/en/latest/types.html#mapping-types[`mapping`]\n type.\n Maps have the following properties:\n - Entries are added, removed, and checked for existence in constant time\n (O(1)).\n - Entries are enumerated in O(n). No guarantees are made on the ordering.\n ```\n contract Example {\n     // Add the library methods\n     using EnumMap for EnumMap.Map;\n     // Declare a set state variable\n     EnumMap.Map private myMap;\n }\n ```"},"fullyImplemented":true,"id":362,"linearizedBaseContracts":[362],"name":"EnumMap","nodeType":"ContractDefinition","nodes":[{"canonicalName":"EnumMap.MapEntry","id":111,"members":[{"constant":false,"id":108,"mutability":"mutable","name":"key","nodeType":"VariableDeclaration","scope":111,"src":"1132:11:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":107,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1132:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":110,"mutability":"mutable","name":"value","nodeType":"VariableDeclaration","scope":111,"src":"1153:13:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":109,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1153:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"name":"MapEntry","nodeType":"StructDefinition","scope":362,"src":"1106:67:2","visibility":"public"},{"canonicalName":"EnumMap.Map","id":119,"members":[{"constant":false,"id":114,"mutability":"mutable","name":"entries","nodeType":"VariableDeclaration","scope":119,"src":"1242:18:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_MapEntry_$111_storage_$dyn_storage_ptr","typeString":"struct EnumMap.MapEntry[]"},"typeName":{"baseType":{"id":112,"name":"MapEntry","nodeType":"UserDefinedTypeName","referencedDeclaration":111,"src":"1242:8:2","typeDescriptions":{"typeIdentifier":"t_struct$_MapEntry_$111_storage_ptr","typeString":"struct EnumMap.MapEntry"}},"id":113,"nodeType":"ArrayTypeName","src":"1242:10:2","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_MapEntry_$111_storage_$dyn_storage_ptr","typeString":"struct EnumMap.MapEntry[]"}},"visibility":"internal"},{"constant":false,"id":118,"mutability":"mutable","name":"indexes","nodeType":"VariableDeclaration","scope":119,"src":"1409:35:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"},"typeName":{"id":117,"keyType":{"id":115,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1417:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Mapping","src":"1409:27:2","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"},"valueType":{"id":116,"name":"uint256","nodeType":"ElementaryTypeName","src":"1428:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"internal"}],"name":"Map","nodeType":"StructDefinition","scope":362,"src":"1179:272:2","visibility":"public"},{"body":{"id":180,"nodeType":"Block","src":"1790:598:2","statements":[{"assignments":[132],"declarations":[{"constant":false,"id":132,"mutability":"mutable","name":"keyIndex","nodeType":"VariableDeclaration","scope":180,"src":"1898:16:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":131,"name":"uint256","nodeType":"ElementaryTypeName","src":"1898:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":137,"initialValue":{"baseExpression":{"expression":{"id":133,"name":"map","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":122,"src":"1917:3:2","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map storage pointer"}},"id":134,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"indexes","nodeType":"MemberAccess","referencedDeclaration":118,"src":"1917:11:2","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":136,"indexExpression":{"id":135,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":124,"src":"1929:3:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1917:16:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1898:35:2"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":140,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":138,"name":"keyIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":132,"src":"1948:8:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":139,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1960:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1948:13:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":178,"nodeType":"Block","src":"2292:90:2","statements":[{"expression":{"id":174,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"expression":{"id":165,"name":"map","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":122,"src":"2306:3:2","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map storage pointer"}},"id":170,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"entries","nodeType":"MemberAccess","referencedDeclaration":114,"src":"2306:11:2","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_MapEntry_$111_storage_$dyn_storage","typeString":"struct EnumMap.MapEntry storage ref[] storage ref"}},"id":171,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":169,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":167,"name":"keyIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":132,"src":"2318:8:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":168,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2329:1:2","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"2318:12:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2306:25:2","typeDescriptions":{"typeIdentifier":"t_struct$_MapEntry_$111_storage","typeString":"struct EnumMap.MapEntry storage ref"}},"id":172,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"value","nodeType":"MemberAccess","referencedDeclaration":110,"src":"2306:31:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":173,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":126,"src":"2340:5:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"2306:39:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":175,"nodeType":"ExpressionStatement","src":"2306:39:2"},{"expression":{"hexValue":"66616c7365","id":176,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2366:5:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":130,"id":177,"nodeType":"Return","src":"2359:12:2"}]},"id":179,"nodeType":"IfStatement","src":"1944:438:2","trueBody":{"id":164,"nodeType":"Block","src":"1963:323:2","statements":[{"expression":{"arguments":[{"arguments":[{"id":147,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":124,"src":"2058:3:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":148,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":126,"src":"2070:5:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":146,"name":"MapEntry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":111,"src":"2043:8:2","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_MapEntry_$111_storage_ptr_$","typeString":"type(struct EnumMap.MapEntry storage pointer)"}},"id":149,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["key","value"],"nodeType":"FunctionCall","src":"2043:34:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_MapEntry_$111_memory_ptr","typeString":"struct EnumMap.MapEntry memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_MapEntry_$111_memory_ptr","typeString":"struct EnumMap.MapEntry memory"}],"expression":{"expression":{"id":141,"name":"map","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":122,"src":"2026:3:2","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map storage pointer"}},"id":144,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"entries","nodeType":"MemberAccess","referencedDeclaration":114,"src":"2026:11:2","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_MapEntry_$111_storage_$dyn_storage","typeString":"struct EnumMap.MapEntry storage ref[] storage ref"}},"id":145,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"push","nodeType":"MemberAccess","src":"2026:16:2","typeDescriptions":{"typeIdentifier":"t_function_arraypush_nonpayable$_t_struct$_MapEntry_$111_storage_$returns$__$","typeString":"function (struct EnumMap.MapEntry storage ref)"}},"id":150,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2026:52:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":151,"nodeType":"ExpressionStatement","src":"2026:52:2"},{"expression":{"id":160,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":152,"name":"map","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":122,"src":"2213:3:2","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map storage pointer"}},"id":155,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"indexes","nodeType":"MemberAccess","referencedDeclaration":118,"src":"2213:11:2","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":156,"indexExpression":{"id":154,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":124,"src":"2225:3:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2213:16:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"expression":{"id":157,"name":"map","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":122,"src":"2232:3:2","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map storage pointer"}},"id":158,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"entries","nodeType":"MemberAccess","referencedDeclaration":114,"src":"2232:11:2","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_MapEntry_$111_storage_$dyn_storage","typeString":"struct EnumMap.MapEntry storage ref[] storage ref"}},"id":159,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"2232:18:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2213:37:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":161,"nodeType":"ExpressionStatement","src":"2213:37:2"},{"expression":{"hexValue":"74727565","id":162,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2271:4:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":130,"id":163,"nodeType":"Return","src":"2264:11:2"}]}}]},"documentation":{"id":120,"nodeType":"StructuredDocumentation","src":"1457:216:2","text":" @dev Adds a key-value pair to a map, or updates the value for an existing\n key. O(1).\n Returns true if the key was added to the map, that is if it was not\n already present."},"id":181,"implemented":true,"kind":"function","modifiers":[],"name":"set","nodeType":"FunctionDefinition","parameters":{"id":127,"nodeType":"ParameterList","parameters":[{"constant":false,"id":122,"mutability":"mutable","name":"map","nodeType":"VariableDeclaration","scope":181,"src":"1700:15:2","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map"},"typeName":{"id":121,"name":"Map","nodeType":"UserDefinedTypeName","referencedDeclaration":119,"src":"1700:3:2","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map"}},"visibility":"internal"},{"constant":false,"id":124,"mutability":"mutable","name":"key","nodeType":"VariableDeclaration","scope":181,"src":"1725:11:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":123,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1725:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":126,"mutability":"mutable","name":"value","nodeType":"VariableDeclaration","scope":181,"src":"1746:13:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":125,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1746:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1690:75:2"},"returnParameters":{"id":130,"nodeType":"ParameterList","parameters":[{"constant":false,"id":129,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":181,"src":"1784:4:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":128,"name":"bool","nodeType":"ElementaryTypeName","src":"1784:4:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1783:6:2"},"scope":362,"src":"1678:710:2","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":261,"nodeType":"Block","src":"2626:1450:2","statements":[{"assignments":[192],"declarations":[{"constant":false,"id":192,"mutability":"mutable","name":"keyIndex","nodeType":"VariableDeclaration","scope":261,"src":"2734:16:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":191,"name":"uint256","nodeType":"ElementaryTypeName","src":"2734:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":197,"initialValue":{"baseExpression":{"expression":{"id":193,"name":"map","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":184,"src":"2753:3:2","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map storage pointer"}},"id":194,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"indexes","nodeType":"MemberAccess","referencedDeclaration":118,"src":"2753:11:2","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":196,"indexExpression":{"id":195,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":186,"src":"2765:3:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2753:16:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2734:35:2"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":200,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":198,"name":"keyIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":192,"src":"2784:8:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":199,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2796:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2784:13:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":259,"nodeType":"Block","src":"4033:37:2","statements":[{"expression":{"hexValue":"66616c7365","id":257,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4054:5:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":190,"id":258,"nodeType":"Return","src":"4047:12:2"}]},"id":260,"nodeType":"IfStatement","src":"2780:1290:2","trueBody":{"id":256,"nodeType":"Block","src":"2799:1228:2","statements":[{"assignments":[202],"declarations":[{"constant":false,"id":202,"mutability":"mutable","name":"toDeleteIndex","nodeType":"VariableDeclaration","scope":256,"src":"3151:21:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":201,"name":"uint256","nodeType":"ElementaryTypeName","src":"3151:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":206,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":205,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":203,"name":"keyIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":192,"src":"3175:8:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":204,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3186:1:2","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3175:12:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3151:36:2"},{"assignments":[208],"declarations":[{"constant":false,"id":208,"mutability":"mutable","name":"lastIndex","nodeType":"VariableDeclaration","scope":256,"src":"3201:17:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":207,"name":"uint256","nodeType":"ElementaryTypeName","src":"3201:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":214,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":213,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":209,"name":"map","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":184,"src":"3221:3:2","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map storage pointer"}},"id":210,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"entries","nodeType":"MemberAccess","referencedDeclaration":114,"src":"3221:11:2","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_MapEntry_$111_storage_$dyn_storage","typeString":"struct EnumMap.MapEntry storage ref[] storage ref"}},"id":211,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"3221:18:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":212,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3242:1:2","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3221:22:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3201:42:2"},{"assignments":[216],"declarations":[{"constant":false,"id":216,"mutability":"mutable","name":"lastEntry","nodeType":"VariableDeclaration","scope":256,"src":"3483:26:2","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_MapEntry_$111_storage_ptr","typeString":"struct EnumMap.MapEntry"},"typeName":{"id":215,"name":"MapEntry","nodeType":"UserDefinedTypeName","referencedDeclaration":111,"src":"3483:8:2","typeDescriptions":{"typeIdentifier":"t_struct$_MapEntry_$111_storage_ptr","typeString":"struct EnumMap.MapEntry"}},"visibility":"internal"}],"id":221,"initialValue":{"baseExpression":{"expression":{"id":217,"name":"map","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":184,"src":"3512:3:2","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map storage pointer"}},"id":218,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"entries","nodeType":"MemberAccess","referencedDeclaration":114,"src":"3512:11:2","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_MapEntry_$111_storage_$dyn_storage","typeString":"struct EnumMap.MapEntry storage ref[] storage ref"}},"id":220,"indexExpression":{"id":219,"name":"lastIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":208,"src":"3524:9:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3512:22:2","typeDescriptions":{"typeIdentifier":"t_struct$_MapEntry_$111_storage","typeString":"struct EnumMap.MapEntry storage ref"}},"nodeType":"VariableDeclarationStatement","src":"3483:51:2"},{"expression":{"id":228,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":222,"name":"map","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":184,"src":"3626:3:2","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map storage pointer"}},"id":225,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"entries","nodeType":"MemberAccess","referencedDeclaration":114,"src":"3626:11:2","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_MapEntry_$111_storage_$dyn_storage","typeString":"struct EnumMap.MapEntry storage ref[] storage ref"}},"id":226,"indexExpression":{"id":224,"name":"toDeleteIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":202,"src":"3638:13:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3626:26:2","typeDescriptions":{"typeIdentifier":"t_struct$_MapEntry_$111_storage","typeString":"struct EnumMap.MapEntry storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":227,"name":"lastEntry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":216,"src":"3655:9:2","typeDescriptions":{"typeIdentifier":"t_struct$_MapEntry_$111_storage_ptr","typeString":"struct EnumMap.MapEntry storage pointer"}},"src":"3626:38:2","typeDescriptions":{"typeIdentifier":"t_struct$_MapEntry_$111_storage","typeString":"struct EnumMap.MapEntry storage ref"}},"id":229,"nodeType":"ExpressionStatement","src":"3626:38:2"},{"expression":{"id":239,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":230,"name":"map","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":184,"src":"3730:3:2","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map storage pointer"}},"id":234,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"indexes","nodeType":"MemberAccess","referencedDeclaration":118,"src":"3730:11:2","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":235,"indexExpression":{"expression":{"id":232,"name":"lastEntry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":216,"src":"3742:9:2","typeDescriptions":{"typeIdentifier":"t_struct$_MapEntry_$111_storage_ptr","typeString":"struct EnumMap.MapEntry storage pointer"}},"id":233,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"key","nodeType":"MemberAccess","referencedDeclaration":108,"src":"3742:13:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3730:26:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":238,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":236,"name":"toDeleteIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":202,"src":"3759:13:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":237,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3775:1:2","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3759:17:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3730:46:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":240,"nodeType":"ExpressionStatement","src":"3730:46:2"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":241,"name":"map","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":184,"src":"3882:3:2","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map storage pointer"}},"id":244,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"entries","nodeType":"MemberAccess","referencedDeclaration":114,"src":"3882:11:2","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_MapEntry_$111_storage_$dyn_storage","typeString":"struct EnumMap.MapEntry storage ref[] storage ref"}},"id":245,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"pop","nodeType":"MemberAccess","src":"3882:15:2","typeDescriptions":{"typeIdentifier":"t_function_arraypop_nonpayable$__$returns$__$","typeString":"function ()"}},"id":246,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3882:17:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":247,"nodeType":"ExpressionStatement","src":"3882:17:2"},{"expression":{"id":252,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"3967:23:2","subExpression":{"baseExpression":{"expression":{"id":248,"name":"map","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":184,"src":"3974:3:2","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map storage pointer"}},"id":249,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"indexes","nodeType":"MemberAccess","referencedDeclaration":118,"src":"3974:11:2","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":251,"indexExpression":{"id":250,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":186,"src":"3986:3:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3974:16:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":253,"nodeType":"ExpressionStatement","src":"3967:23:2"},{"expression":{"hexValue":"74727565","id":254,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4012:4:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":190,"id":255,"nodeType":"Return","src":"4005:11:2"}]}}]},"documentation":{"id":182,"nodeType":"StructuredDocumentation","src":"2394:157:2","text":" @dev Removes a key-value pair from a map. O(1).\n Returns true if the key was removed from the map, that is if it was present."},"id":262,"implemented":true,"kind":"function","modifiers":[],"name":"remove","nodeType":"FunctionDefinition","parameters":{"id":187,"nodeType":"ParameterList","parameters":[{"constant":false,"id":184,"mutability":"mutable","name":"map","nodeType":"VariableDeclaration","scope":262,"src":"2572:15:2","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map"},"typeName":{"id":183,"name":"Map","nodeType":"UserDefinedTypeName","referencedDeclaration":119,"src":"2572:3:2","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map"}},"visibility":"internal"},{"constant":false,"id":186,"mutability":"mutable","name":"key","nodeType":"VariableDeclaration","scope":262,"src":"2589:11:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":185,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2589:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2571:30:2"},"returnParameters":{"id":190,"nodeType":"ParameterList","parameters":[{"constant":false,"id":189,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":262,"src":"2620:4:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":188,"name":"bool","nodeType":"ElementaryTypeName","src":"2620:4:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2619:6:2"},"scope":362,"src":"2556:1520:2","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":279,"nodeType":"Block","src":"4232:45:2","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":277,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":272,"name":"map","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":265,"src":"4249:3:2","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map storage pointer"}},"id":273,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"indexes","nodeType":"MemberAccess","referencedDeclaration":118,"src":"4249:11:2","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":275,"indexExpression":{"id":274,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":267,"src":"4261:3:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4249:16:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":276,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4269:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4249:21:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":271,"id":278,"nodeType":"Return","src":"4242:28:2"}]},"documentation":{"id":263,"nodeType":"StructuredDocumentation","src":"4082:68:2","text":" @dev Returns true if the key is in the map. O(1)."},"id":280,"implemented":true,"kind":"function","modifiers":[],"name":"contains","nodeType":"FunctionDefinition","parameters":{"id":268,"nodeType":"ParameterList","parameters":[{"constant":false,"id":265,"mutability":"mutable","name":"map","nodeType":"VariableDeclaration","scope":280,"src":"4173:15:2","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map"},"typeName":{"id":264,"name":"Map","nodeType":"UserDefinedTypeName","referencedDeclaration":119,"src":"4173:3:2","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map"}},"visibility":"internal"},{"constant":false,"id":267,"mutability":"mutable","name":"key","nodeType":"VariableDeclaration","scope":280,"src":"4190:11:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":266,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4190:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4172:30:2"},"returnParameters":{"id":271,"nodeType":"ParameterList","parameters":[{"constant":false,"id":270,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":280,"src":"4226:4:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":269,"name":"bool","nodeType":"ElementaryTypeName","src":"4226:4:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4225:6:2"},"scope":362,"src":"4155:122:2","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":292,"nodeType":"Block","src":"4432:42:2","statements":[{"expression":{"expression":{"expression":{"id":288,"name":"map","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":283,"src":"4449:3:2","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map storage pointer"}},"id":289,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"entries","nodeType":"MemberAccess","referencedDeclaration":114,"src":"4449:11:2","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_MapEntry_$111_storage_$dyn_storage","typeString":"struct EnumMap.MapEntry storage ref[] storage ref"}},"id":290,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"4449:18:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":287,"id":291,"nodeType":"Return","src":"4442:25:2"}]},"documentation":{"id":281,"nodeType":"StructuredDocumentation","src":"4283:79:2","text":" @dev Returns the number of key-value pairs in the map. O(1)."},"id":293,"implemented":true,"kind":"function","modifiers":[],"name":"length","nodeType":"FunctionDefinition","parameters":{"id":284,"nodeType":"ParameterList","parameters":[{"constant":false,"id":283,"mutability":"mutable","name":"map","nodeType":"VariableDeclaration","scope":293,"src":"4383:15:2","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map"},"typeName":{"id":282,"name":"Map","nodeType":"UserDefinedTypeName","referencedDeclaration":119,"src":"4383:3:2","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map"}},"visibility":"internal"}],"src":"4382:17:2"},"returnParameters":{"id":287,"nodeType":"ParameterList","parameters":[{"constant":false,"id":286,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":293,"src":"4423:7:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":285,"name":"uint256","nodeType":"ElementaryTypeName","src":"4423:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4422:9:2"},"scope":362,"src":"4367:107:2","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":327,"nodeType":"Block","src":"4912:179:2","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":310,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":306,"name":"map","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":296,"src":"4930:3:2","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map storage pointer"}},"id":307,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"entries","nodeType":"MemberAccess","referencedDeclaration":114,"src":"4930:11:2","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_MapEntry_$111_storage_$dyn_storage","typeString":"struct EnumMap.MapEntry storage ref[] storage ref"}},"id":308,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"4930:18:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":309,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":298,"src":"4951:5:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4930:26:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"456e756d4d61703a20696e646578206f7574206f6620626f756e6473","id":311,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4958:30:2","typeDescriptions":{"typeIdentifier":"t_stringliteral_5466cd8cf43bc841eee3c35ac88d574a9c83e697cbaf382b509c22e9cec92562","typeString":"literal_string \"EnumMap: index out of bounds\""},"value":"EnumMap: index out of bounds"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5466cd8cf43bc841eee3c35ac88d574a9c83e697cbaf382b509c22e9cec92562","typeString":"literal_string \"EnumMap: index out of bounds\""}],"id":305,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4922:7:2","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":312,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4922:67:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":313,"nodeType":"ExpressionStatement","src":"4922:67:2"},{"assignments":[315],"declarations":[{"constant":false,"id":315,"mutability":"mutable","name":"entry","nodeType":"VariableDeclaration","scope":327,"src":"5000:22:2","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_MapEntry_$111_storage_ptr","typeString":"struct EnumMap.MapEntry"},"typeName":{"id":314,"name":"MapEntry","nodeType":"UserDefinedTypeName","referencedDeclaration":111,"src":"5000:8:2","typeDescriptions":{"typeIdentifier":"t_struct$_MapEntry_$111_storage_ptr","typeString":"struct EnumMap.MapEntry"}},"visibility":"internal"}],"id":320,"initialValue":{"baseExpression":{"expression":{"id":316,"name":"map","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":296,"src":"5025:3:2","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map storage pointer"}},"id":317,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"entries","nodeType":"MemberAccess","referencedDeclaration":114,"src":"5025:11:2","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_MapEntry_$111_storage_$dyn_storage","typeString":"struct EnumMap.MapEntry storage ref[] storage ref"}},"id":319,"indexExpression":{"id":318,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":298,"src":"5037:5:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5025:18:2","typeDescriptions":{"typeIdentifier":"t_struct$_MapEntry_$111_storage","typeString":"struct EnumMap.MapEntry storage ref"}},"nodeType":"VariableDeclarationStatement","src":"5000:43:2"},{"expression":{"components":[{"expression":{"id":321,"name":"entry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":315,"src":"5061:5:2","typeDescriptions":{"typeIdentifier":"t_struct$_MapEntry_$111_storage_ptr","typeString":"struct EnumMap.MapEntry storage pointer"}},"id":322,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"key","nodeType":"MemberAccess","referencedDeclaration":108,"src":"5061:9:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":323,"name":"entry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":315,"src":"5072:5:2","typeDescriptions":{"typeIdentifier":"t_struct$_MapEntry_$111_storage_ptr","typeString":"struct EnumMap.MapEntry storage pointer"}},"id":324,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"value","nodeType":"MemberAccess","referencedDeclaration":110,"src":"5072:11:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":325,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5060:24:2","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bytes32_$_t_bytes32_$","typeString":"tuple(bytes32,bytes32)"}},"functionReturnParameters":304,"id":326,"nodeType":"Return","src":"5053:31:2"}]},"documentation":{"id":294,"nodeType":"StructuredDocumentation","src":"4480:342:2","text":" @dev Returns the key-value pair stored at position `index` in the map. O(1).\n Note that there are no guarantees on the ordering of entries inside the\n array, and it may change when more entries are added or removed.\n Requirements:\n - `index` must be strictly less than {length}."},"id":328,"implemented":true,"kind":"function","modifiers":[],"name":"at","nodeType":"FunctionDefinition","parameters":{"id":299,"nodeType":"ParameterList","parameters":[{"constant":false,"id":296,"mutability":"mutable","name":"map","nodeType":"VariableDeclaration","scope":328,"src":"4839:15:2","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map"},"typeName":{"id":295,"name":"Map","nodeType":"UserDefinedTypeName","referencedDeclaration":119,"src":"4839:3:2","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map"}},"visibility":"internal"},{"constant":false,"id":298,"mutability":"mutable","name":"index","nodeType":"VariableDeclaration","scope":328,"src":"4856:13:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":297,"name":"uint256","nodeType":"ElementaryTypeName","src":"4856:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4838:32:2"},"returnParameters":{"id":304,"nodeType":"ParameterList","parameters":[{"constant":false,"id":301,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":328,"src":"4894:7:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":300,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4894:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":303,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":328,"src":"4903:7:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":302,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4903:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4893:18:2"},"scope":362,"src":"4827:264:2","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":360,"nodeType":"Block","src":"5318:223:2","statements":[{"assignments":[339],"declarations":[{"constant":false,"id":339,"mutability":"mutable","name":"keyIndex","nodeType":"VariableDeclaration","scope":360,"src":"5328:16:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":338,"name":"uint256","nodeType":"ElementaryTypeName","src":"5328:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":344,"initialValue":{"baseExpression":{"expression":{"id":340,"name":"map","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":331,"src":"5347:3:2","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map storage pointer"}},"id":341,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"indexes","nodeType":"MemberAccess","referencedDeclaration":118,"src":"5347:11:2","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":343,"indexExpression":{"id":342,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":333,"src":"5359:3:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5347:16:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5328:35:2"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":348,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":346,"name":"keyIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":339,"src":"5381:8:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":347,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5393:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5381:13:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"456e756d4d61703a206e6f6e6578697374656e74206b6579","id":349,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5396:26:2","typeDescriptions":{"typeIdentifier":"t_stringliteral_aa5ad83c51258e9d36441ec5fa2732f667c42e4447eaf791ab9e657bbb1f488c","typeString":"literal_string \"EnumMap: nonexistent key\""},"value":"EnumMap: nonexistent key"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_aa5ad83c51258e9d36441ec5fa2732f667c42e4447eaf791ab9e657bbb1f488c","typeString":"literal_string \"EnumMap: nonexistent key\""}],"id":345,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5373:7:2","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":350,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5373:50:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":351,"nodeType":"ExpressionStatement","src":"5373:50:2"},{"expression":{"expression":{"baseExpression":{"expression":{"id":352,"name":"map","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":331,"src":"5476:3:2","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map storage pointer"}},"id":353,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"entries","nodeType":"MemberAccess","referencedDeclaration":114,"src":"5476:11:2","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_MapEntry_$111_storage_$dyn_storage","typeString":"struct EnumMap.MapEntry storage ref[] storage ref"}},"id":357,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":356,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":354,"name":"keyIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":339,"src":"5488:8:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":355,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5499:1:2","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"5488:12:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5476:25:2","typeDescriptions":{"typeIdentifier":"t_struct$_MapEntry_$111_storage","typeString":"struct EnumMap.MapEntry storage ref"}},"id":358,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"value","nodeType":"MemberAccess","referencedDeclaration":110,"src":"5476:31:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":337,"id":359,"nodeType":"Return","src":"5469:38:2"}]},"documentation":{"id":329,"nodeType":"StructuredDocumentation","src":"5097:141:2","text":" @dev Returns the value associated with `key`.  O(1).\n Requirements:\n - `key` must be in the map."},"id":361,"implemented":true,"kind":"function","modifiers":[],"name":"get","nodeType":"FunctionDefinition","parameters":{"id":334,"nodeType":"ParameterList","parameters":[{"constant":false,"id":331,"mutability":"mutable","name":"map","nodeType":"VariableDeclaration","scope":361,"src":"5256:15:2","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map"},"typeName":{"id":330,"name":"Map","nodeType":"UserDefinedTypeName","referencedDeclaration":119,"src":"5256:3:2","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map"}},"visibility":"internal"},{"constant":false,"id":333,"mutability":"mutable","name":"key","nodeType":"VariableDeclaration","scope":361,"src":"5273:11:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":332,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5273:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"5255:30:2"},"returnParameters":{"id":337,"nodeType":"ParameterList","parameters":[{"constant":false,"id":336,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":361,"src":"5309:7:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":335,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5309:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"5308:9:2"},"scope":362,"src":"5243:298:2","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":363,"src":"807:4736:2"}],"src":"210:5334:2"},"id":2},"@animoca/ethereum-contracts-core-1.1.2/contracts/algo/EnumSet.sol":{"ast":{"absolutePath":"@animoca/ethereum-contracts-core-1.1.2/contracts/algo/EnumSet.sol","exportedSymbols":{"EnumSet":[551]},"id":552,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":364,"literals":["solidity",">=","0.7",".6","<","0.8",".0"],"nodeType":"PragmaDirective","src":"210:31:3"},{"abstract":false,"baseContracts":[],"contractDependencies":[],"contractKind":"library","documentation":{"id":365,"nodeType":"StructuredDocumentation","src":"243:526:3","text":" @dev Library for managing\n https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive\n types.\n Sets have the following properties:\n - Elements are added, removed, and checked for existence in constant time\n (O(1)).\n - Elements are enumerated in O(n). No guarantees are made on the ordering.\n ```\n contract Example {\n     // Add the library methods\n     using EnumSet for EnumSet.Set;\n     // Declare a set state variable\n     EnumSet.Set private mySet;\n }\n ```"},"fullyImplemented":true,"id":551,"linearizedBaseContracts":[551],"name":"EnumSet","nodeType":"ContractDefinition","nodes":[{"canonicalName":"EnumSet.Set","id":373,"members":[{"constant":false,"id":368,"mutability":"mutable","name":"values","nodeType":"VariableDeclaration","scope":373,"src":"1120:16:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":366,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1120:7:3","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":367,"nodeType":"ArrayTypeName","src":"1120:9:3","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"},{"constant":false,"id":372,"mutability":"mutable","name":"indexes","nodeType":"VariableDeclaration","scope":373,"src":"1269:35:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"},"typeName":{"id":371,"keyType":{"id":369,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1277:7:3","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Mapping","src":"1269:27:3","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"},"valueType":{"id":370,"name":"uint256","nodeType":"ElementaryTypeName","src":"1288:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"internal"}],"name":"Set","nodeType":"StructDefinition","scope":551,"src":"1066:245:3","visibility":"public"},{"body":{"id":413,"nodeType":"Block","src":"1550:331:3","statements":[{"condition":{"id":387,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"1564:21:3","subExpression":{"arguments":[{"id":384,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":376,"src":"1574:3:3","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$373_storage_ptr","typeString":"struct EnumSet.Set storage pointer"}},{"id":385,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":378,"src":"1579:5:3","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$373_storage_ptr","typeString":"struct EnumSet.Set storage pointer"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":383,"name":"contains","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":512,"src":"1565:8:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$373_storage_ptr_$_t_bytes32_$returns$_t_bool_$","typeString":"function (struct EnumSet.Set storage pointer,bytes32) view returns (bool)"}},"id":386,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1565:20:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":411,"nodeType":"Block","src":"1838:37:3","statements":[{"expression":{"hexValue":"66616c7365","id":409,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1859:5:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":382,"id":410,"nodeType":"Return","src":"1852:12:3"}]},"id":412,"nodeType":"IfStatement","src":"1560:315:3","trueBody":{"id":408,"nodeType":"Block","src":"1587:245:3","statements":[{"expression":{"arguments":[{"id":393,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":378,"src":"1617:5:3","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"expression":{"id":388,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":376,"src":"1601:3:3","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$373_storage_ptr","typeString":"struct EnumSet.Set storage pointer"}},"id":391,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"values","nodeType":"MemberAccess","referencedDeclaration":368,"src":"1601:10:3","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage","typeString":"bytes32[] storage ref"}},"id":392,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"push","nodeType":"MemberAccess","src":"1601:15:3","typeDescriptions":{"typeIdentifier":"t_function_arraypush_nonpayable$_t_bytes32_$returns$__$","typeString":"function (bytes32)"}},"id":394,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1601:22:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":395,"nodeType":"ExpressionStatement","src":"1601:22:3"},{"expression":{"id":404,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":396,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":376,"src":"1758:3:3","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$373_storage_ptr","typeString":"struct EnumSet.Set storage pointer"}},"id":399,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"indexes","nodeType":"MemberAccess","referencedDeclaration":372,"src":"1758:11:3","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":400,"indexExpression":{"id":398,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":378,"src":"1770:5:3","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1758:18:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"expression":{"id":401,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":376,"src":"1779:3:3","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$373_storage_ptr","typeString":"struct EnumSet.Set storage pointer"}},"id":402,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"values","nodeType":"MemberAccess","referencedDeclaration":368,"src":"1779:10:3","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage","typeString":"bytes32[] storage ref"}},"id":403,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"1779:17:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1758:38:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":405,"nodeType":"ExpressionStatement","src":"1758:38:3"},{"expression":{"hexValue":"74727565","id":406,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1817:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":382,"id":407,"nodeType":"Return","src":"1810:11:3"}]}}]},"documentation":{"id":374,"nodeType":"StructuredDocumentation","src":"1317:159:3","text":" @dev Add a value to a set. O(1).\n Returns true if the value was added to the set, that is if it was not\n already present."},"id":414,"implemented":true,"kind":"function","modifiers":[],"name":"add","nodeType":"FunctionDefinition","parameters":{"id":379,"nodeType":"ParameterList","parameters":[{"constant":false,"id":376,"mutability":"mutable","name":"set","nodeType":"VariableDeclaration","scope":414,"src":"1494:15:3","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$373_storage_ptr","typeString":"struct EnumSet.Set"},"typeName":{"id":375,"name":"Set","nodeType":"UserDefinedTypeName","referencedDeclaration":373,"src":"1494:3:3","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$373_storage_ptr","typeString":"struct EnumSet.Set"}},"visibility":"internal"},{"constant":false,"id":378,"mutability":"mutable","name":"value","nodeType":"VariableDeclaration","scope":414,"src":"1511:13:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":377,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1511:7:3","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1493:32:3"},"returnParameters":{"id":382,"nodeType":"ParameterList","parameters":[{"constant":false,"id":381,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":414,"src":"1544:4:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":380,"name":"bool","nodeType":"ElementaryTypeName","src":"1544:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1543:6:3"},"scope":551,"src":"1481:400:3","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":493,"nodeType":"Block","src":"2121:1444:3","statements":[{"assignments":[425],"declarations":[{"constant":false,"id":425,"mutability":"mutable","name":"valueIndex","nodeType":"VariableDeclaration","scope":493,"src":"2231:18:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":424,"name":"uint256","nodeType":"ElementaryTypeName","src":"2231:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":430,"initialValue":{"baseExpression":{"expression":{"id":426,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":417,"src":"2252:3:3","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$373_storage_ptr","typeString":"struct EnumSet.Set storage pointer"}},"id":427,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"indexes","nodeType":"MemberAccess","referencedDeclaration":372,"src":"2252:11:3","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":429,"indexExpression":{"id":428,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":419,"src":"2264:5:3","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2252:18:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2231:39:3"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":433,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":431,"name":"valueIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":425,"src":"2285:10:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":432,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2299:1:3","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2285:15:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":491,"nodeType":"Block","src":"3522:37:3","statements":[{"expression":{"hexValue":"66616c7365","id":489,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3543:5:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":423,"id":490,"nodeType":"Return","src":"3536:12:3"}]},"id":492,"nodeType":"IfStatement","src":"2281:1278:3","trueBody":{"id":488,"nodeType":"Block","src":"2302:1214:3","statements":[{"assignments":[435],"declarations":[{"constant":false,"id":435,"mutability":"mutable","name":"toDeleteIndex","nodeType":"VariableDeclaration","scope":488,"src":"2653:21:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":434,"name":"uint256","nodeType":"ElementaryTypeName","src":"2653:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":439,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":438,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":436,"name":"valueIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":425,"src":"2677:10:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":437,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2690:1:3","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"2677:14:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2653:38:3"},{"assignments":[441],"declarations":[{"constant":false,"id":441,"mutability":"mutable","name":"lastIndex","nodeType":"VariableDeclaration","scope":488,"src":"2705:17:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":440,"name":"uint256","nodeType":"ElementaryTypeName","src":"2705:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":447,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":446,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":442,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":417,"src":"2725:3:3","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$373_storage_ptr","typeString":"struct EnumSet.Set storage pointer"}},"id":443,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"values","nodeType":"MemberAccess","referencedDeclaration":368,"src":"2725:10:3","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage","typeString":"bytes32[] storage ref"}},"id":444,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"2725:17:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":445,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2745:1:3","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"2725:21:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2705:41:3"},{"assignments":[449],"declarations":[{"constant":false,"id":449,"mutability":"mutable","name":"lastvalue","nodeType":"VariableDeclaration","scope":488,"src":"2986:17:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":448,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2986:7:3","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":454,"initialValue":{"baseExpression":{"expression":{"id":450,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":417,"src":"3006:3:3","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$373_storage_ptr","typeString":"struct EnumSet.Set storage pointer"}},"id":451,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"values","nodeType":"MemberAccess","referencedDeclaration":368,"src":"3006:10:3","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage","typeString":"bytes32[] storage ref"}},"id":453,"indexExpression":{"id":452,"name":"lastIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":441,"src":"3017:9:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3006:21:3","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"2986:41:3"},{"expression":{"id":461,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":455,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":417,"src":"3119:3:3","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$373_storage_ptr","typeString":"struct EnumSet.Set storage pointer"}},"id":458,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"values","nodeType":"MemberAccess","referencedDeclaration":368,"src":"3119:10:3","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage","typeString":"bytes32[] storage ref"}},"id":459,"indexExpression":{"id":457,"name":"toDeleteIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":435,"src":"3130:13:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3119:25:3","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":460,"name":"lastvalue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":449,"src":"3147:9:3","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"3119:37:3","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":462,"nodeType":"ExpressionStatement","src":"3119:37:3"},{"expression":{"id":471,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":463,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":417,"src":"3222:3:3","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$373_storage_ptr","typeString":"struct EnumSet.Set storage pointer"}},"id":466,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"indexes","nodeType":"MemberAccess","referencedDeclaration":372,"src":"3222:11:3","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":467,"indexExpression":{"id":465,"name":"lastvalue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":449,"src":"3234:9:3","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3222:22:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":470,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":468,"name":"toDeleteIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":435,"src":"3247:13:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":469,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3263:1:3","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3247:17:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3222:42:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":472,"nodeType":"ExpressionStatement","src":"3222:42:3"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":473,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":417,"src":"3370:3:3","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$373_storage_ptr","typeString":"struct EnumSet.Set storage pointer"}},"id":476,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"values","nodeType":"MemberAccess","referencedDeclaration":368,"src":"3370:10:3","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage","typeString":"bytes32[] storage ref"}},"id":477,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"pop","nodeType":"MemberAccess","src":"3370:14:3","typeDescriptions":{"typeIdentifier":"t_function_arraypop_nonpayable$__$returns$__$","typeString":"function ()"}},"id":478,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3370:16:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":479,"nodeType":"ExpressionStatement","src":"3370:16:3"},{"expression":{"id":484,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"3454:25:3","subExpression":{"baseExpression":{"expression":{"id":480,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":417,"src":"3461:3:3","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$373_storage_ptr","typeString":"struct EnumSet.Set storage pointer"}},"id":481,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"indexes","nodeType":"MemberAccess","referencedDeclaration":372,"src":"3461:11:3","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":483,"indexExpression":{"id":482,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":419,"src":"3473:5:3","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3461:18:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":485,"nodeType":"ExpressionStatement","src":"3454:25:3"},{"expression":{"hexValue":"74727565","id":486,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3501:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":423,"id":487,"nodeType":"Return","src":"3494:11:3"}]}}]},"documentation":{"id":415,"nodeType":"StructuredDocumentation","src":"1887:157:3","text":" @dev Removes a value from a set. O(1).\n Returns true if the value was removed from the set, that is if it was\n present."},"id":494,"implemented":true,"kind":"function","modifiers":[],"name":"remove","nodeType":"FunctionDefinition","parameters":{"id":420,"nodeType":"ParameterList","parameters":[{"constant":false,"id":417,"mutability":"mutable","name":"set","nodeType":"VariableDeclaration","scope":494,"src":"2065:15:3","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$373_storage_ptr","typeString":"struct EnumSet.Set"},"typeName":{"id":416,"name":"Set","nodeType":"UserDefinedTypeName","referencedDeclaration":373,"src":"2065:3:3","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$373_storage_ptr","typeString":"struct EnumSet.Set"}},"visibility":"internal"},{"constant":false,"id":419,"mutability":"mutable","name":"value","nodeType":"VariableDeclaration","scope":494,"src":"2082:13:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":418,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2082:7:3","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2064:32:3"},"returnParameters":{"id":423,"nodeType":"ParameterList","parameters":[{"constant":false,"id":422,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":494,"src":"2115:4:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":421,"name":"bool","nodeType":"ElementaryTypeName","src":"2115:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2114:6:3"},"scope":551,"src":"2049:1516:3","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":511,"nodeType":"Block","src":"3725:47:3","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":509,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":504,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":497,"src":"3742:3:3","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$373_storage_ptr","typeString":"struct EnumSet.Set storage pointer"}},"id":505,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"indexes","nodeType":"MemberAccess","referencedDeclaration":372,"src":"3742:11:3","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":507,"indexExpression":{"id":506,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":499,"src":"3754:5:3","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3742:18:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":508,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3764:1:3","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3742:23:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":503,"id":510,"nodeType":"Return","src":"3735:30:3"}]},"documentation":{"id":495,"nodeType":"StructuredDocumentation","src":"3571:70:3","text":" @dev Returns true if the value is in the set. O(1)."},"id":512,"implemented":true,"kind":"function","modifiers":[],"name":"contains","nodeType":"FunctionDefinition","parameters":{"id":500,"nodeType":"ParameterList","parameters":[{"constant":false,"id":497,"mutability":"mutable","name":"set","nodeType":"VariableDeclaration","scope":512,"src":"3664:15:3","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$373_storage_ptr","typeString":"struct EnumSet.Set"},"typeName":{"id":496,"name":"Set","nodeType":"UserDefinedTypeName","referencedDeclaration":373,"src":"3664:3:3","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$373_storage_ptr","typeString":"struct EnumSet.Set"}},"visibility":"internal"},{"constant":false,"id":499,"mutability":"mutable","name":"value","nodeType":"VariableDeclaration","scope":512,"src":"3681:13:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":498,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3681:7:3","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3663:32:3"},"returnParameters":{"id":503,"nodeType":"ParameterList","parameters":[{"constant":false,"id":502,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":512,"src":"3719:4:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":501,"name":"bool","nodeType":"ElementaryTypeName","src":"3719:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3718:6:3"},"scope":551,"src":"3646:126:3","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":524,"nodeType":"Block","src":"3918:41:3","statements":[{"expression":{"expression":{"expression":{"id":520,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":515,"src":"3935:3:3","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$373_storage_ptr","typeString":"struct EnumSet.Set storage pointer"}},"id":521,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"values","nodeType":"MemberAccess","referencedDeclaration":368,"src":"3935:10:3","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage","typeString":"bytes32[] storage ref"}},"id":522,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"3935:17:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":519,"id":523,"nodeType":"Return","src":"3928:24:3"}]},"documentation":{"id":513,"nodeType":"StructuredDocumentation","src":"3778:70:3","text":" @dev Returns the number of values on the set. O(1)."},"id":525,"implemented":true,"kind":"function","modifiers":[],"name":"length","nodeType":"FunctionDefinition","parameters":{"id":516,"nodeType":"ParameterList","parameters":[{"constant":false,"id":515,"mutability":"mutable","name":"set","nodeType":"VariableDeclaration","scope":525,"src":"3869:15:3","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$373_storage_ptr","typeString":"struct EnumSet.Set"},"typeName":{"id":514,"name":"Set","nodeType":"UserDefinedTypeName","referencedDeclaration":373,"src":"3869:3:3","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$373_storage_ptr","typeString":"struct EnumSet.Set"}},"visibility":"internal"}],"src":"3868:17:3"},"returnParameters":{"id":519,"nodeType":"ParameterList","parameters":[{"constant":false,"id":518,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":525,"src":"3909:7:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":517,"name":"uint256","nodeType":"ElementaryTypeName","src":"3909:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3908:9:3"},"scope":551,"src":"3853:106:3","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":549,"nodeType":"Block","src":"4377:117:3","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":540,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":536,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":528,"src":"4395:3:3","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$373_storage_ptr","typeString":"struct EnumSet.Set storage pointer"}},"id":537,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"values","nodeType":"MemberAccess","referencedDeclaration":368,"src":"4395:10:3","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage","typeString":"bytes32[] storage ref"}},"id":538,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"4395:17:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":539,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":530,"src":"4415:5:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4395:25:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"456e756d5365743a20696e646578206f7574206f6620626f756e6473","id":541,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4422:30:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_188463ba8f8e540abcfe765f373a472c4d9c1f0fdd2f76cf6f30bd48915ea5ea","typeString":"literal_string \"EnumSet: index out of bounds\""},"value":"EnumSet: index out of bounds"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_188463ba8f8e540abcfe765f373a472c4d9c1f0fdd2f76cf6f30bd48915ea5ea","typeString":"literal_string \"EnumSet: index out of bounds\""}],"id":535,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4387:7:3","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":542,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4387:66:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":543,"nodeType":"ExpressionStatement","src":"4387:66:3"},{"expression":{"baseExpression":{"expression":{"id":544,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":528,"src":"4470:3:3","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$373_storage_ptr","typeString":"struct EnumSet.Set storage pointer"}},"id":545,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"values","nodeType":"MemberAccess","referencedDeclaration":368,"src":"4470:10:3","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage","typeString":"bytes32[] storage ref"}},"id":547,"indexExpression":{"id":546,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":530,"src":"4481:5:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4470:17:3","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":534,"id":548,"nodeType":"Return","src":"4463:24:3"}]},"documentation":{"id":526,"nodeType":"StructuredDocumentation","src":"3965:331:3","text":" @dev Returns the value stored at position `index` in the set. O(1).\n Note that there are no guarantees on the ordering of values inside the\n array, and it may change when more values are added or removed.\n Requirements:\n - `index` must be strictly less than {length}."},"id":550,"implemented":true,"kind":"function","modifiers":[],"name":"at","nodeType":"FunctionDefinition","parameters":{"id":531,"nodeType":"ParameterList","parameters":[{"constant":false,"id":528,"mutability":"mutable","name":"set","nodeType":"VariableDeclaration","scope":550,"src":"4313:15:3","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$373_storage_ptr","typeString":"struct EnumSet.Set"},"typeName":{"id":527,"name":"Set","nodeType":"UserDefinedTypeName","referencedDeclaration":373,"src":"4313:3:3","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$373_storage_ptr","typeString":"struct EnumSet.Set"}},"visibility":"internal"},{"constant":false,"id":530,"mutability":"mutable","name":"index","nodeType":"VariableDeclaration","scope":550,"src":"4330:13:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":529,"name":"uint256","nodeType":"ElementaryTypeName","src":"4330:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4312:32:3"},"returnParameters":{"id":534,"nodeType":"ParameterList","parameters":[{"constant":false,"id":533,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":550,"src":"4368:7:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":532,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4368:7:3","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4367:9:3"},"scope":551,"src":"4301:193:3","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":552,"src":"770:3726:3"}],"src":"210:4287:3"},"id":3},"@animoca/ethereum-contracts-core-1.1.2/contracts/introspection/IERC165.sol":{"ast":{"absolutePath":"@animoca/ethereum-contracts-core-1.1.2/contracts/introspection/IERC165.sol","exportedSymbols":{"IERC165":[563]},"id":564,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":553,"literals":["solidity",">=","0.7",".6","<","0.8",".0"],"nodeType":"PragmaDirective","src":"33:31:4"},{"abstract":false,"baseContracts":[],"contractDependencies":[],"contractKind":"interface","documentation":{"id":554,"nodeType":"StructuredDocumentation","src":"66:110:4","text":" @dev Interface of the ERC165 standard, as defined in the\n https://eips.ethereum.org/EIPS/eip-165."},"fullyImplemented":false,"id":563,"linearizedBaseContracts":[563],"name":"IERC165","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":555,"nodeType":"StructuredDocumentation","src":"201:340:4","text":" @dev Returns true if this contract implements the interface defined by\n `interfaceId`. See the corresponding\n https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n to learn more about how these ids are created.\n This function call must use less than 30 000 gas."},"functionSelector":"01ffc9a7","id":562,"implemented":false,"kind":"function","modifiers":[],"name":"supportsInterface","nodeType":"FunctionDefinition","parameters":{"id":558,"nodeType":"ParameterList","parameters":[{"constant":false,"id":557,"mutability":"mutable","name":"interfaceId","nodeType":"VariableDeclaration","scope":562,"src":"573:18:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":556,"name":"bytes4","nodeType":"ElementaryTypeName","src":"573:6:4","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"572:20:4"},"returnParameters":{"id":561,"nodeType":"ParameterList","parameters":[{"constant":false,"id":560,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":562,"src":"616:4:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":559,"name":"bool","nodeType":"ElementaryTypeName","src":"616:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"615:6:4"},"scope":563,"src":"546:76:4","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":564,"src":"177:447:4"}],"src":"33:592:4"},"id":4},"@animoca/ethereum-contracts-core-1.1.2/contracts/lifecycle/Pausable.sol":{"ast":{"absolutePath":"@animoca/ethereum-contracts-core-1.1.2/contracts/lifecycle/Pausable.sol","exportedSymbols":{"ManagedIdentity":[736],"Pausable":[646]},"id":647,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":565,"literals":["solidity",">=","0.7",".6","<","0.8",".0"],"nodeType":"PragmaDirective","src":"33:31:5"},{"absolutePath":"@animoca/ethereum-contracts-core-1.1.2/contracts/metatx/ManagedIdentity.sol","file":"../metatx/ManagedIdentity.sol","id":567,"nodeType":"ImportDirective","scope":647,"sourceUnit":737,"src":"66:62:5","symbolAliases":[{"foreign":{"id":566,"name":"ManagedIdentity","nodeType":"Identifier","overloadedDeclarations":[],"src":"74:15:5","typeDescriptions":{}}}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":569,"name":"ManagedIdentity","nodeType":"UserDefinedTypeName","referencedDeclaration":736,"src":"233:15:5","typeDescriptions":{"typeIdentifier":"t_contract$_ManagedIdentity_$736","typeString":"contract ManagedIdentity"}},"id":570,"nodeType":"InheritanceSpecifier","src":"233:15:5"}],"contractDependencies":[736],"contractKind":"contract","documentation":{"id":568,"nodeType":"StructuredDocumentation","src":"130:72:5","text":" @dev Contract which allows children to implement pausability."},"fullyImplemented":true,"id":646,"linearizedBaseContracts":[646,736],"name":"Pausable","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":571,"nodeType":"StructuredDocumentation","src":"255:73:5","text":" @dev Emitted when the pause is triggered by `account`."},"id":575,"name":"Paused","nodeType":"EventDefinition","parameters":{"id":574,"nodeType":"ParameterList","parameters":[{"constant":false,"id":573,"indexed":false,"mutability":"mutable","name":"account","nodeType":"VariableDeclaration","scope":575,"src":"346:15:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":572,"name":"address","nodeType":"ElementaryTypeName","src":"346:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"345:17:5"},"src":"333:30:5"},{"anonymous":false,"documentation":{"id":576,"nodeType":"StructuredDocumentation","src":"369:70:5","text":" @dev Emitted when the pause is lifted by `account`."},"id":580,"name":"Unpaused","nodeType":"EventDefinition","parameters":{"id":579,"nodeType":"ParameterList","parameters":[{"constant":false,"id":578,"indexed":false,"mutability":"mutable","name":"account","nodeType":"VariableDeclaration","scope":580,"src":"459:15:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":577,"name":"address","nodeType":"ElementaryTypeName","src":"459:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"458:17:5"},"src":"444:32:5"},{"constant":false,"functionSelector":"5c975abb","id":582,"mutability":"mutable","name":"paused","nodeType":"VariableDeclaration","scope":646,"src":"482:18:5","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":581,"name":"bool","nodeType":"ElementaryTypeName","src":"482:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"public"},{"body":{"id":591,"nodeType":"Block","src":"533:33:5","statements":[{"expression":{"id":589,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":587,"name":"paused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":582,"src":"543:6:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":588,"name":"paused_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":584,"src":"552:7:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"543:16:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":590,"nodeType":"ExpressionStatement","src":"543:16:5"}]},"id":592,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nodeType":"FunctionDefinition","parameters":{"id":585,"nodeType":"ParameterList","parameters":[{"constant":false,"id":584,"mutability":"mutable","name":"paused_","nodeType":"VariableDeclaration","scope":592,"src":"519:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":583,"name":"bool","nodeType":"ElementaryTypeName","src":"519:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"518:14:5"},"returnParameters":{"id":586,"nodeType":"ParameterList","parameters":[],"src":"533:0:5"},"scope":646,"src":"507:59:5","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":601,"nodeType":"Block","src":"615:53:5","statements":[{"expression":{"arguments":[{"id":597,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"633:7:5","subExpression":{"id":596,"name":"paused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":582,"src":"634:6:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5061757361626c653a20706175736564","id":598,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"642:18:5","typeDescriptions":{"typeIdentifier":"t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a","typeString":"literal_string \"Pausable: paused\""},"value":"Pausable: paused"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a","typeString":"literal_string \"Pausable: paused\""}],"id":595,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"625:7:5","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":599,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"625:36:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":600,"nodeType":"ExpressionStatement","src":"625:36:5"}]},"id":602,"implemented":true,"kind":"function","modifiers":[],"name":"_requireNotPaused","nodeType":"FunctionDefinition","parameters":{"id":593,"nodeType":"ParameterList","parameters":[],"src":"598:2:5"},"returnParameters":{"id":594,"nodeType":"ParameterList","parameters":[],"src":"615:0:5"},"scope":646,"src":"572:96:5","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":610,"nodeType":"Block","src":"714:56:5","statements":[{"expression":{"arguments":[{"id":606,"name":"paused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":582,"src":"732:6:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5061757361626c653a206e6f7420706175736564","id":607,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"740:22:5","typeDescriptions":{"typeIdentifier":"t_stringliteral_0d1d997348c4b502650619e51f7d09f80514d98b6993be5051d07f703984619a","typeString":"literal_string \"Pausable: not paused\""},"value":"Pausable: not paused"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_0d1d997348c4b502650619e51f7d09f80514d98b6993be5051d07f703984619a","typeString":"literal_string \"Pausable: not paused\""}],"id":605,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"724:7:5","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":608,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"724:39:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":609,"nodeType":"ExpressionStatement","src":"724:39:5"}]},"id":611,"implemented":true,"kind":"function","modifiers":[],"name":"_requirePaused","nodeType":"FunctionDefinition","parameters":{"id":603,"nodeType":"ParameterList","parameters":[],"src":"697:2:5"},"returnParameters":{"id":604,"nodeType":"ParameterList","parameters":[],"src":"714:0:5"},"scope":646,"src":"674:96:5","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":627,"nodeType":"Block","src":"940:94:5","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":615,"name":"_requireNotPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":602,"src":"950:17:5","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":616,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"950:19:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":617,"nodeType":"ExpressionStatement","src":"950:19:5"},{"expression":{"id":620,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":618,"name":"paused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":582,"src":"979:6:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":619,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"988:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"979:13:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":621,"nodeType":"ExpressionStatement","src":"979:13:5"},{"eventCall":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":623,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":726,"src":"1014:10:5","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":624,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1014:12:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":622,"name":"Paused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":575,"src":"1007:6:5","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":625,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1007:20:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":626,"nodeType":"EmitStatement","src":"1002:25:5"}]},"documentation":{"id":612,"nodeType":"StructuredDocumentation","src":"776:124:5","text":" @dev Triggers stopped state.\n Requirements:\n - The contract must not be paused."},"id":628,"implemented":true,"kind":"function","modifiers":[],"name":"_pause","nodeType":"FunctionDefinition","parameters":{"id":613,"nodeType":"ParameterList","parameters":[],"src":"920:2:5"},"returnParameters":{"id":614,"nodeType":"ParameterList","parameters":[],"src":"940:0:5"},"scope":646,"src":"905:129:5","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":644,"nodeType":"Block","src":"1203:94:5","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":632,"name":"_requirePaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":611,"src":"1213:14:5","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":633,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1213:16:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":634,"nodeType":"ExpressionStatement","src":"1213:16:5"},{"expression":{"id":637,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":635,"name":"paused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":582,"src":"1239:6:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"66616c7365","id":636,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1248:5:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"1239:14:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":638,"nodeType":"ExpressionStatement","src":"1239:14:5"},{"eventCall":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":640,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":726,"src":"1277:10:5","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":641,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1277:12:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":639,"name":"Unpaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":580,"src":"1268:8:5","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":642,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1268:22:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":643,"nodeType":"EmitStatement","src":"1263:27:5"}]},"documentation":{"id":629,"nodeType":"StructuredDocumentation","src":"1040:121:5","text":" @dev Returns to normal state.\n Requirements:\n - The contract must be paused."},"id":645,"implemented":true,"kind":"function","modifiers":[],"name":"_unpause","nodeType":"FunctionDefinition","parameters":{"id":630,"nodeType":"ParameterList","parameters":[],"src":"1183:2:5"},"returnParameters":{"id":631,"nodeType":"ParameterList","parameters":[],"src":"1203:0:5"},"scope":646,"src":"1166:131:5","stateMutability":"nonpayable","virtual":true,"visibility":"internal"}],"scope":647,"src":"203:1096:5"}],"src":"33:1267:5"},"id":5},"@animoca/ethereum-contracts-core-1.1.2/contracts/lifecycle/Startable.sol":{"ast":{"absolutePath":"@animoca/ethereum-contracts-core-1.1.2/contracts/lifecycle/Startable.sol","exportedSymbols":{"ManagedIdentity":[736],"Startable":[715]},"id":716,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":648,"literals":["solidity",">=","0.7",".6","<","0.8",".0"],"nodeType":"PragmaDirective","src":"33:31:6"},{"absolutePath":"@animoca/ethereum-contracts-core-1.1.2/contracts/metatx/ManagedIdentity.sol","file":"../metatx/ManagedIdentity.sol","id":650,"nodeType":"ImportDirective","scope":716,"sourceUnit":737,"src":"66:62:6","symbolAliases":[{"foreign":{"id":649,"name":"ManagedIdentity","nodeType":"Identifier","overloadedDeclarations":[],"src":"74:15:6","typeDescriptions":{}}}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":652,"name":"ManagedIdentity","nodeType":"UserDefinedTypeName","referencedDeclaration":736,"src":"553:15:6","typeDescriptions":{"typeIdentifier":"t_contract$_ManagedIdentity_$736","typeString":"contract ManagedIdentity"}},"id":653,"nodeType":"InheritanceSpecifier","src":"553:15:6"}],"contractDependencies":[736],"contractKind":"contract","documentation":{"id":651,"nodeType":"StructuredDocumentation","src":"130:391:6","text":" Contract module which allows derived contracts to implement a mechanism for\n activating, or 'starting', a contract.\n This module is used through inheritance. It will make available the modifiers\n `whenNotStarted` and `whenStarted`, which can be applied to the functions of\n your contract. Those functions will only be 'startable' once the modifiers\n are put in place."},"fullyImplemented":true,"id":715,"linearizedBaseContracts":[715,736],"name":"Startable","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"id":657,"name":"Started","nodeType":"EventDefinition","parameters":{"id":656,"nodeType":"ParameterList","parameters":[{"constant":false,"id":655,"indexed":false,"mutability":"mutable","name":"account","nodeType":"VariableDeclaration","scope":657,"src":"589:15:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":654,"name":"address","nodeType":"ElementaryTypeName","src":"589:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"588:17:6"},"src":"575:31:6"},{"constant":false,"id":659,"mutability":"mutable","name":"_startedAt","nodeType":"VariableDeclaration","scope":715,"src":"612:26:6","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":658,"name":"uint256","nodeType":"ElementaryTypeName","src":"612:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"body":{"id":670,"nodeType":"Block","src":"771:74:6","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":665,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":663,"name":"_startedAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":659,"src":"789:10:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":664,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"803:1:6","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"789:15:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"537461727461626c653a2073746172746564","id":666,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"806:20:6","typeDescriptions":{"typeIdentifier":"t_stringliteral_2562862c009609379500fce6cc5e80485d9e22bdfa8d027767cf2943bb139dd6","typeString":"literal_string \"Startable: started\""},"value":"Startable: started"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_2562862c009609379500fce6cc5e80485d9e22bdfa8d027767cf2943bb139dd6","typeString":"literal_string \"Startable: started\""}],"id":662,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"781:7:6","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":667,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"781:46:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":668,"nodeType":"ExpressionStatement","src":"781:46:6"},{"id":669,"nodeType":"PlaceholderStatement","src":"837:1:6"}]},"documentation":{"id":660,"nodeType":"StructuredDocumentation","src":"645:95:6","text":" Modifier to make a function callable only when the contract has not started."},"id":671,"name":"whenNotStarted","nodeType":"ModifierDefinition","parameters":{"id":661,"nodeType":"ParameterList","parameters":[],"src":"768:2:6"},"src":"745:100:6","virtual":false,"visibility":"internal"},{"body":{"id":682,"nodeType":"Block","src":"970:78:6","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":677,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":675,"name":"_startedAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":659,"src":"988:10:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":676,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1002:1:6","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"988:15:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"537461727461626c653a206e6f742073746172746564","id":678,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1005:24:6","typeDescriptions":{"typeIdentifier":"t_stringliteral_b80b87e2aaff3aac068ccf4b4753ba52c580597b2a4b8a73150fd14e364065f8","typeString":"literal_string \"Startable: not started\""},"value":"Startable: not started"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b80b87e2aaff3aac068ccf4b4753ba52c580597b2a4b8a73150fd14e364065f8","typeString":"literal_string \"Startable: not started\""}],"id":674,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"980:7:6","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":679,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"980:50:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":680,"nodeType":"ExpressionStatement","src":"980:50:6"},{"id":681,"nodeType":"PlaceholderStatement","src":"1040:1:6"}]},"documentation":{"id":672,"nodeType":"StructuredDocumentation","src":"851:91:6","text":" Modifier to make a function callable only when the contract has started."},"id":683,"name":"whenStarted","nodeType":"ModifierDefinition","parameters":{"id":673,"nodeType":"ParameterList","parameters":[],"src":"967:2:6"},"src":"947:101:6","virtual":false,"visibility":"internal"},{"body":{"id":687,"nodeType":"Block","src":"1104:2:6","statements":[]},"documentation":{"id":684,"nodeType":"StructuredDocumentation","src":"1054:31:6","text":" Constructor."},"id":688,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nodeType":"FunctionDefinition","parameters":{"id":685,"nodeType":"ParameterList","parameters":[],"src":"1101:2:6"},"returnParameters":{"id":686,"nodeType":"ParameterList","parameters":[],"src":"1104:0:6"},"scope":715,"src":"1090:16:6","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":696,"nodeType":"Block","src":"1327:34:6","statements":[{"expression":{"id":694,"name":"_startedAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":659,"src":"1344:10:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":693,"id":695,"nodeType":"Return","src":"1337:17:6"}]},"documentation":{"id":689,"nodeType":"StructuredDocumentation","src":"1112:159:6","text":" Returns the timestamp when the contract entered the started state.\n @return The timestamp when the contract entered the started state."},"functionSelector":"f21f537d","id":697,"implemented":true,"kind":"function","modifiers":[],"name":"startedAt","nodeType":"FunctionDefinition","parameters":{"id":690,"nodeType":"ParameterList","parameters":[],"src":"1294:2:6"},"returnParameters":{"id":693,"nodeType":"ParameterList","parameters":[{"constant":false,"id":692,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":697,"src":"1318:7:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":691,"name":"uint256","nodeType":"ElementaryTypeName","src":"1318:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1317:9:6"},"scope":715,"src":"1276:85:6","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":713,"nodeType":"Block","src":"1546:81:6","statements":[{"expression":{"id":706,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":703,"name":"_startedAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":659,"src":"1556:10:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":704,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"1569:5:6","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":705,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","src":"1569:15:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1556:28:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":707,"nodeType":"ExpressionStatement","src":"1556:28:6"},{"eventCall":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":709,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":726,"src":"1607:10:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":710,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1607:12:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":708,"name":"Started","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":657,"src":"1599:7:6","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":711,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1599:21:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":712,"nodeType":"EmitStatement","src":"1594:26:6"}]},"documentation":{"id":698,"nodeType":"StructuredDocumentation","src":"1367:124:6","text":" Triggers the started state.\n @dev Emits the Started event when the function is successfully called."},"id":714,"implemented":true,"kind":"function","modifiers":[{"id":701,"modifierName":{"id":700,"name":"whenNotStarted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":671,"src":"1531:14:6","typeDescriptions":{"typeIdentifier":"t_modifier$__$","typeString":"modifier ()"}},"nodeType":"ModifierInvocation","src":"1531:14:6"}],"name":"_start","nodeType":"FunctionDefinition","parameters":{"id":699,"nodeType":"ParameterList","parameters":[],"src":"1511:2:6"},"returnParameters":{"id":702,"nodeType":"ParameterList","parameters":[],"src":"1546:0:6"},"scope":715,"src":"1496:131:6","stateMutability":"nonpayable","virtual":true,"visibility":"internal"}],"scope":716,"src":"522:1107:6"}],"src":"33:1597:6"},"id":6},"@animoca/ethereum-contracts-core-1.1.2/contracts/metatx/ManagedIdentity.sol":{"ast":{"absolutePath":"@animoca/ethereum-contracts-core-1.1.2/contracts/metatx/ManagedIdentity.sol","exportedSymbols":{"ManagedIdentity":[736]},"id":737,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":717,"literals":["solidity",">=","0.7",".6","<","0.8",".0"],"nodeType":"PragmaDirective","src":"33:31:7"},{"abstract":true,"baseContracts":[],"contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":736,"linearizedBaseContracts":[736],"name":"ManagedIdentity","nodeType":"ContractDefinition","nodes":[{"body":{"id":725,"nodeType":"Block","src":"425:34:7","statements":[{"expression":{"expression":{"id":722,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"442:3:7","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":723,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"442:10:7","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"functionReturnParameters":721,"id":724,"nodeType":"Return","src":"435:17:7"}]},"id":726,"implemented":true,"kind":"function","modifiers":[],"name":"_msgSender","nodeType":"FunctionDefinition","parameters":{"id":718,"nodeType":"ParameterList","parameters":[],"src":"374:2:7"},"returnParameters":{"id":721,"nodeType":"ParameterList","parameters":[{"constant":false,"id":720,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":726,"src":"408:15:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":719,"name":"address","nodeType":"ElementaryTypeName","src":"408:15:7","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"}],"src":"407:17:7"},"scope":736,"src":"355:104:7","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":734,"nodeType":"Block","src":"530:32:7","statements":[{"expression":{"expression":{"id":731,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"547:3:7","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":732,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","src":"547:8:7","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"functionReturnParameters":730,"id":733,"nodeType":"Return","src":"540:15:7"}]},"id":735,"implemented":true,"kind":"function","modifiers":[],"name":"_msgData","nodeType":"FunctionDefinition","parameters":{"id":727,"nodeType":"ParameterList","parameters":[],"src":"482:2:7"},"returnParameters":{"id":730,"nodeType":"ParameterList","parameters":[{"constant":false,"id":729,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":735,"src":"516:12:7","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":728,"name":"bytes","nodeType":"ElementaryTypeName","src":"516:5:7","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"515:14:7"},"scope":736,"src":"465:97:7","stateMutability":"view","virtual":true,"visibility":"internal"}],"scope":737,"src":"315:249:7"}],"src":"33:532:7"},"id":7},"@animoca/ethereum-contracts-core-1.1.2/contracts/payment/PayoutWallet.sol":{"ast":{"absolutePath":"@animoca/ethereum-contracts-core-1.1.2/contracts/payment/PayoutWallet.sol","exportedSymbols":{"ManagedIdentity":[736],"Ownable":[103],"PayoutWallet":[812]},"id":813,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":738,"literals":["solidity",">=","0.7",".6","<","0.8",".0"],"nodeType":"PragmaDirective","src":"33:31:8"},{"absolutePath":"@animoca/ethereum-contracts-core-1.1.2/contracts/metatx/ManagedIdentity.sol","file":"../metatx/ManagedIdentity.sol","id":740,"nodeType":"ImportDirective","scope":813,"sourceUnit":737,"src":"66:62:8","symbolAliases":[{"foreign":{"id":739,"name":"ManagedIdentity","nodeType":"Identifier","overloadedDeclarations":[],"src":"74:15:8","typeDescriptions":{}}}],"unitAlias":""},{"absolutePath":"@animoca/ethereum-contracts-core-1.1.2/contracts/access/Ownable.sol","file":"../access/Ownable.sol","id":742,"nodeType":"ImportDirective","scope":813,"sourceUnit":104,"src":"129:46:8","symbolAliases":[{"foreign":{"id":741,"name":"Ownable","nodeType":"Identifier","overloadedDeclarations":[],"src":"137:7:8","typeDescriptions":{}}}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":744,"name":"ManagedIdentity","nodeType":"UserDefinedTypeName","referencedDeclaration":736,"src":"297:15:8","typeDescriptions":{"typeIdentifier":"t_contract$_ManagedIdentity_$736","typeString":"contract ManagedIdentity"}},"id":745,"nodeType":"InheritanceSpecifier","src":"297:15:8"},{"baseName":{"id":746,"name":"Ownable","nodeType":"UserDefinedTypeName","referencedDeclaration":103,"src":"314:7:8","typeDescriptions":{"typeIdentifier":"t_contract$_Ownable_$103","typeString":"contract Ownable"}},"id":747,"nodeType":"InheritanceSpecifier","src":"314:7:8"}],"contractDependencies":[22,103,736],"contractKind":"contract","documentation":{"id":743,"nodeType":"StructuredDocumentation","src":"177:85:8","text":"@title PayoutWallet\n@dev adds support for a payout wallet\nNote: ."},"fullyImplemented":true,"id":812,"linearizedBaseContracts":[812,103,22,736],"name":"PayoutWallet","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"id":751,"name":"PayoutWalletSet","nodeType":"EventDefinition","parameters":{"id":750,"nodeType":"ParameterList","parameters":[{"constant":false,"id":749,"indexed":false,"mutability":"mutable","name":"payoutWallet_","nodeType":"VariableDeclaration","scope":751,"src":"350:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":748,"name":"address","nodeType":"ElementaryTypeName","src":"350:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"349:23:8"},"src":"328:45:8"},{"constant":false,"functionSelector":"8488bb4e","id":753,"mutability":"mutable","name":"payoutWallet","nodeType":"VariableDeclaration","scope":812,"src":"379:35:8","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":752,"name":"address","nodeType":"ElementaryTypeName","src":"379:15:8","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"public"},{"body":{"id":781,"nodeType":"Block","src":"494:160:8","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"id":769,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":764,"name":"payoutWallet_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":757,"src":"512:13:8","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":767,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"537:1:8","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":766,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"529:7:8","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":765,"name":"address","nodeType":"ElementaryTypeName","src":"529:7:8","typeDescriptions":{}}},"id":768,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"529:10:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"512:27:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5061796f75743a207a65726f2061646472657373","id":770,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"541:22:8","typeDescriptions":{"typeIdentifier":"t_stringliteral_054d9f069e338944c8ae8aa49768be88313bd4ee13a3126b4037afa6b152b3f7","typeString":"literal_string \"Payout: zero address\""},"value":"Payout: zero address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_054d9f069e338944c8ae8aa49768be88313bd4ee13a3126b4037afa6b152b3f7","typeString":"literal_string \"Payout: zero address\""}],"id":763,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"504:7:8","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":771,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"504:60:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":772,"nodeType":"ExpressionStatement","src":"504:60:8"},{"expression":{"id":775,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":773,"name":"payoutWallet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":753,"src":"574:12:8","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":774,"name":"payoutWallet_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":757,"src":"589:13:8","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"574:28:8","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":776,"nodeType":"ExpressionStatement","src":"574:28:8"},{"eventCall":{"arguments":[{"id":778,"name":"payoutWallet_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":757,"src":"633:13:8","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":777,"name":"PayoutWalletSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":751,"src":"617:15:8","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":779,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"617:30:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":780,"nodeType":"EmitStatement","src":"612:35:8"}]},"id":782,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":760,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":755,"src":"487:5:8","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":761,"modifierName":{"id":759,"name":"Ownable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103,"src":"479:7:8","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Ownable_$103_$","typeString":"type(contract Ownable)"}},"nodeType":"ModifierInvocation","src":"479:14:8"}],"name":"","nodeType":"FunctionDefinition","parameters":{"id":758,"nodeType":"ParameterList","parameters":[{"constant":false,"id":755,"mutability":"mutable","name":"owner","nodeType":"VariableDeclaration","scope":782,"src":"433:13:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":754,"name":"address","nodeType":"ElementaryTypeName","src":"433:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":757,"mutability":"mutable","name":"payoutWallet_","nodeType":"VariableDeclaration","scope":782,"src":"448:29:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":756,"name":"address","nodeType":"ElementaryTypeName","src":"448:15:8","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"}],"src":"432:46:8"},"returnParameters":{"id":762,"nodeType":"ParameterList","parameters":[],"src":"494:0:8"},"scope":812,"src":"421:233:8","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":810,"nodeType":"Block","src":"723:200:8","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":788,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":726,"src":"751:10:8","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":789,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"751:12:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":787,"name":"_requireOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":102,"src":"733:17:8","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":790,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"733:31:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":791,"nodeType":"ExpressionStatement","src":"733:31:8"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"id":798,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":793,"name":"payoutWallet_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":784,"src":"782:13:8","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":796,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"807:1:8","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":795,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"799:7:8","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":794,"name":"address","nodeType":"ElementaryTypeName","src":"799:7:8","typeDescriptions":{}}},"id":797,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"799:10:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"782:27:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5061796f75743a207a65726f2061646472657373","id":799,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"811:22:8","typeDescriptions":{"typeIdentifier":"t_stringliteral_054d9f069e338944c8ae8aa49768be88313bd4ee13a3126b4037afa6b152b3f7","typeString":"literal_string \"Payout: zero address\""},"value":"Payout: zero address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_054d9f069e338944c8ae8aa49768be88313bd4ee13a3126b4037afa6b152b3f7","typeString":"literal_string \"Payout: zero address\""}],"id":792,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"774:7:8","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":800,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"774:60:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":801,"nodeType":"ExpressionStatement","src":"774:60:8"},{"expression":{"id":804,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":802,"name":"payoutWallet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":753,"src":"844:12:8","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":803,"name":"payoutWallet_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":784,"src":"859:13:8","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"844:28:8","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":805,"nodeType":"ExpressionStatement","src":"844:28:8"},{"eventCall":{"arguments":[{"id":807,"name":"payoutWallet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":753,"src":"903:12:8","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":806,"name":"PayoutWalletSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":751,"src":"887:15:8","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":808,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"887:29:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":809,"nodeType":"EmitStatement","src":"882:34:8"}]},"functionSelector":"6b8f9c43","id":811,"implemented":true,"kind":"function","modifiers":[],"name":"setPayoutWallet","nodeType":"FunctionDefinition","parameters":{"id":785,"nodeType":"ParameterList","parameters":[{"constant":false,"id":784,"mutability":"mutable","name":"payoutWallet_","nodeType":"VariableDeclaration","scope":811,"src":"685:29:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":783,"name":"address","nodeType":"ElementaryTypeName","src":"685:15:8","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"}],"src":"684:31:8"},"returnParameters":{"id":786,"nodeType":"ParameterList","parameters":[],"src":"723:0:8"},"scope":812,"src":"660:263:8","stateMutability":"nonpayable","virtual":false,"visibility":"public"}],"scope":813,"src":"263:662:8"}],"src":"33:893:8"},"id":8},"@animoca/ethereum-contracts-core-1.1.2/contracts/utils/ERC20Wrapper.sol":{"ast":{"absolutePath":"@animoca/ethereum-contracts-core-1.1.2/contracts/utils/ERC20Wrapper.sol","exportedSymbols":{"AddressIsContract":[1004],"ERC20Wrapper":[953],"IWrappedERC20":[983]},"id":984,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":814,"literals":["solidity",">=","0.7",".6","<","0.8",".0"],"nodeType":"PragmaDirective","src":"33:31:9"},{"absolutePath":"@animoca/ethereum-contracts-core-1.1.2/contracts/utils/types/AddressIsContract.sol","file":"./types/AddressIsContract.sol","id":816,"nodeType":"ImportDirective","scope":984,"sourceUnit":1005,"src":"66:64:9","symbolAliases":[{"foreign":{"id":815,"name":"AddressIsContract","nodeType":"Identifier","overloadedDeclarations":[],"src":"74:17:9","typeDescriptions":{}}}],"unitAlias":""},{"abstract":false,"baseContracts":[],"contractDependencies":[],"contractKind":"library","documentation":{"id":817,"nodeType":"StructuredDocumentation","src":"132:214:9","text":" @title ERC20Wrapper\n Wraps ERC20 functions to support non-standard implementations which do not return a bool value.\n Calls to the wrapped functions revert only if they throw or if they return false."},"fullyImplemented":true,"id":953,"linearizedBaseContracts":[953],"name":"ERC20Wrapper","nodeType":"ContractDefinition","nodes":[{"id":820,"libraryName":{"id":818,"name":"AddressIsContract","nodeType":"UserDefinedTypeName","referencedDeclaration":1004,"src":"380:17:9","typeDescriptions":{"typeIdentifier":"t_contract$_AddressIsContract_$1004","typeString":"library AddressIsContract"}},"nodeType":"UsingForDirective","src":"374:36:9","typeName":{"id":819,"name":"address","nodeType":"ElementaryTypeName","src":"402:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},{"body":{"id":841,"nodeType":"Block","src":"528:111:9","statements":[{"expression":{"arguments":[{"id":830,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":822,"src":"566:5:9","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedERC20_$983","typeString":"contract IWrappedERC20"}},{"arguments":[{"expression":{"expression":{"id":833,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":822,"src":"596:5:9","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedERC20_$983","typeString":"contract IWrappedERC20"}},"id":834,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":962,"src":"596:14:9","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":835,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"selector","nodeType":"MemberAccess","src":"596:23:9","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":836,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":824,"src":"621:2:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":837,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":826,"src":"625:5:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":831,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"573:3:9","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":832,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"573:22:9","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":838,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"573:58:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IWrappedERC20_$983","typeString":"contract IWrappedERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":829,"name":"_callWithOptionalReturnData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":952,"src":"538:27:9","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IWrappedERC20_$983_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IWrappedERC20,bytes memory)"}},"id":839,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"538:94:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":840,"nodeType":"ExpressionStatement","src":"538:94:9"}]},"id":842,"implemented":true,"kind":"function","modifiers":[],"name":"wrappedTransfer","nodeType":"FunctionDefinition","parameters":{"id":827,"nodeType":"ParameterList","parameters":[{"constant":false,"id":822,"mutability":"mutable","name":"token","nodeType":"VariableDeclaration","scope":842,"src":"450:19:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedERC20_$983","typeString":"contract IWrappedERC20"},"typeName":{"id":821,"name":"IWrappedERC20","nodeType":"UserDefinedTypeName","referencedDeclaration":983,"src":"450:13:9","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedERC20_$983","typeString":"contract IWrappedERC20"}},"visibility":"internal"},{"constant":false,"id":824,"mutability":"mutable","name":"to","nodeType":"VariableDeclaration","scope":842,"src":"479:10:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":823,"name":"address","nodeType":"ElementaryTypeName","src":"479:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":826,"mutability":"mutable","name":"value","nodeType":"VariableDeclaration","scope":842,"src":"499:13:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":825,"name":"uint256","nodeType":"ElementaryTypeName","src":"499:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"440:78:9"},"returnParameters":{"id":828,"nodeType":"ParameterList","parameters":[],"src":"528:0:9"},"scope":953,"src":"416:223:9","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":866,"nodeType":"Block","src":"783:121:9","statements":[{"expression":{"arguments":[{"id":854,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":844,"src":"821:5:9","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedERC20_$983","typeString":"contract IWrappedERC20"}},{"arguments":[{"expression":{"expression":{"id":857,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":844,"src":"851:5:9","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedERC20_$983","typeString":"contract IWrappedERC20"}},"id":858,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":973,"src":"851:18:9","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":859,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"selector","nodeType":"MemberAccess","src":"851:27:9","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":860,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":846,"src":"880:4:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":861,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":848,"src":"886:2:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":862,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":850,"src":"890:5:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":855,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"828:3:9","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":856,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"828:22:9","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":863,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"828:68:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IWrappedERC20_$983","typeString":"contract IWrappedERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":853,"name":"_callWithOptionalReturnData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":952,"src":"793:27:9","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IWrappedERC20_$983_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IWrappedERC20,bytes memory)"}},"id":864,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"793:104:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":865,"nodeType":"ExpressionStatement","src":"793:104:9"}]},"id":867,"implemented":true,"kind":"function","modifiers":[],"name":"wrappedTransferFrom","nodeType":"FunctionDefinition","parameters":{"id":851,"nodeType":"ParameterList","parameters":[{"constant":false,"id":844,"mutability":"mutable","name":"token","nodeType":"VariableDeclaration","scope":867,"src":"683:19:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedERC20_$983","typeString":"contract IWrappedERC20"},"typeName":{"id":843,"name":"IWrappedERC20","nodeType":"UserDefinedTypeName","referencedDeclaration":983,"src":"683:13:9","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedERC20_$983","typeString":"contract IWrappedERC20"}},"visibility":"internal"},{"constant":false,"id":846,"mutability":"mutable","name":"from","nodeType":"VariableDeclaration","scope":867,"src":"712:12:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":845,"name":"address","nodeType":"ElementaryTypeName","src":"712:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":848,"mutability":"mutable","name":"to","nodeType":"VariableDeclaration","scope":867,"src":"734:10:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":847,"name":"address","nodeType":"ElementaryTypeName","src":"734:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":850,"mutability":"mutable","name":"value","nodeType":"VariableDeclaration","scope":867,"src":"754:13:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":849,"name":"uint256","nodeType":"ElementaryTypeName","src":"754:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"673:100:9"},"returnParameters":{"id":852,"nodeType":"ParameterList","parameters":[],"src":"783:0:9"},"scope":953,"src":"645:259:9","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":888,"nodeType":"Block","src":"1026:115:9","statements":[{"expression":{"arguments":[{"id":877,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":869,"src":"1064:5:9","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedERC20_$983","typeString":"contract IWrappedERC20"}},{"arguments":[{"expression":{"expression":{"id":880,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":869,"src":"1094:5:9","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedERC20_$983","typeString":"contract IWrappedERC20"}},"id":881,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":982,"src":"1094:13:9","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":882,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"selector","nodeType":"MemberAccess","src":"1094:22:9","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":883,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":871,"src":"1118:7:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":884,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":873,"src":"1127:5:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":878,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1071:3:9","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":879,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"1071:22:9","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":885,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1071:62:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IWrappedERC20_$983","typeString":"contract IWrappedERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":876,"name":"_callWithOptionalReturnData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":952,"src":"1036:27:9","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IWrappedERC20_$983_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IWrappedERC20,bytes memory)"}},"id":886,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1036:98:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":887,"nodeType":"ExpressionStatement","src":"1036:98:9"}]},"id":889,"implemented":true,"kind":"function","modifiers":[],"name":"wrappedApprove","nodeType":"FunctionDefinition","parameters":{"id":874,"nodeType":"ParameterList","parameters":[{"constant":false,"id":869,"mutability":"mutable","name":"token","nodeType":"VariableDeclaration","scope":889,"src":"943:19:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedERC20_$983","typeString":"contract IWrappedERC20"},"typeName":{"id":868,"name":"IWrappedERC20","nodeType":"UserDefinedTypeName","referencedDeclaration":983,"src":"943:13:9","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedERC20_$983","typeString":"contract IWrappedERC20"}},"visibility":"internal"},{"constant":false,"id":871,"mutability":"mutable","name":"spender","nodeType":"VariableDeclaration","scope":889,"src":"972:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":870,"name":"address","nodeType":"ElementaryTypeName","src":"972:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":873,"mutability":"mutable","name":"value","nodeType":"VariableDeclaration","scope":889,"src":"997:13:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":872,"name":"uint256","nodeType":"ElementaryTypeName","src":"997:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"933:83:9"},"returnParameters":{"id":875,"nodeType":"ParameterList","parameters":[],"src":"1026:0:9"},"scope":953,"src":"910:231:9","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":951,"nodeType":"Block","src":"1237:780:9","statements":[{"assignments":[897],"declarations":[{"constant":false,"id":897,"mutability":"mutable","name":"target","nodeType":"VariableDeclaration","scope":951,"src":"1247:14:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":896,"name":"address","nodeType":"ElementaryTypeName","src":"1247:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":902,"initialValue":{"arguments":[{"id":900,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":891,"src":"1272:5:9","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedERC20_$983","typeString":"contract IWrappedERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IWrappedERC20_$983","typeString":"contract IWrappedERC20"}],"id":899,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1264:7:9","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":898,"name":"address","nodeType":"ElementaryTypeName","src":"1264:7:9","typeDescriptions":{}}},"id":901,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1264:14:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"1247:31:9"},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":904,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":897,"src":"1296:6:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":905,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"isContract","nodeType":"MemberAccess","referencedDeclaration":1003,"src":"1296:17:9","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$bound_to$_t_address_$","typeString":"function (address) view returns (bool)"}},"id":906,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1296:19:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4552433230577261707065723a206e6f6e2d636f6e7472616374","id":907,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1317:28:9","typeDescriptions":{"typeIdentifier":"t_stringliteral_d46911ea9505b9a71e075140669484d9822793e573c3bc4caaf050c064e8e475","typeString":"literal_string \"ERC20Wrapper: non-contract\""},"value":"ERC20Wrapper: non-contract"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_d46911ea9505b9a71e075140669484d9822793e573c3bc4caaf050c064e8e475","typeString":"literal_string \"ERC20Wrapper: non-contract\""}],"id":903,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1288:7:9","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":908,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1288:58:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":909,"nodeType":"ExpressionStatement","src":"1288:58:9"},{"assignments":[911,913],"declarations":[{"constant":false,"id":911,"mutability":"mutable","name":"success","nodeType":"VariableDeclaration","scope":951,"src":"1417:12:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":910,"name":"bool","nodeType":"ElementaryTypeName","src":"1417:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":913,"mutability":"mutable","name":"data","nodeType":"VariableDeclaration","scope":951,"src":"1431:17:9","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":912,"name":"bytes","nodeType":"ElementaryTypeName","src":"1431:5:9","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":918,"initialValue":{"arguments":[{"id":916,"name":"callData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":893,"src":"1464:8:9","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":914,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":897,"src":"1452:6:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":915,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"call","nodeType":"MemberAccess","src":"1452:11:9","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":917,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1452:21:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"1416:57:9"},{"condition":{"id":919,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":911,"src":"1487:7:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":949,"nodeType":"Block","src":"1648:363:9","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":941,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":938,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":913,"src":"1720:4:9","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":939,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"1720:11:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":940,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1735:1:9","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1720:16:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":947,"nodeType":"IfStatement","src":"1716:95:9","trueBody":{"id":946,"nodeType":"Block","src":"1738:73:9","statements":[{"expression":{"arguments":[{"hexValue":"4552433230577261707065723a206f7065726174696f6e206661696c6564","id":943,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1763:32:9","typeDescriptions":{"typeIdentifier":"t_stringliteral_a2693bc24863a03d4a9bc9bd3a39eb0b1e30e06ced1710d854be911a8ed7db9b","typeString":"literal_string \"ERC20Wrapper: operation failed\""},"value":"ERC20Wrapper: operation failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_a2693bc24863a03d4a9bc9bd3a39eb0b1e30e06ced1710d854be911a8ed7db9b","typeString":"literal_string \"ERC20Wrapper: operation failed\""}],"id":942,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"1756:6:9","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":944,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1756:40:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":945,"nodeType":"ExpressionStatement","src":"1756:40:9"}]}},{"AST":{"nodeType":"YulBlock","src":"1902:99:9","statements":[{"nodeType":"YulVariableDeclaration","src":"1920:23:9","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"1938:4:9"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1932:5:9"},"nodeType":"YulFunctionCall","src":"1932:11:9"},"variables":[{"name":"size","nodeType":"YulTypedName","src":"1924:4:9","type":""}]},{"expression":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1971:2:9","type":"","value":"32"},{"name":"data","nodeType":"YulIdentifier","src":"1975:4:9"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1967:3:9"},"nodeType":"YulFunctionCall","src":"1967:13:9"},{"name":"size","nodeType":"YulIdentifier","src":"1982:4:9"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1960:6:9"},"nodeType":"YulFunctionCall","src":"1960:27:9"},"nodeType":"YulExpressionStatement","src":"1960:27:9"}]},"evmVersion":"istanbul","externalReferences":[{"declaration":913,"isOffset":false,"isSlot":false,"src":"1938:4:9","valueSize":1},{"declaration":913,"isOffset":false,"isSlot":false,"src":"1975:4:9","valueSize":1}],"id":948,"nodeType":"InlineAssembly","src":"1893:108:9"}]},"id":950,"nodeType":"IfStatement","src":"1483:528:9","trueBody":{"id":937,"nodeType":"Block","src":"1496:146:9","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":923,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":920,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":913,"src":"1514:4:9","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":921,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"1514:11:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":922,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1529:1:9","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1514:16:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":936,"nodeType":"IfStatement","src":"1510:122:9","trueBody":{"id":935,"nodeType":"Block","src":"1532:100:9","statements":[{"expression":{"arguments":[{"arguments":[{"id":927,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":913,"src":"1569:4:9","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":929,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1576:4:9","typeDescriptions":{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"},"typeName":{"id":928,"name":"bool","nodeType":"ElementaryTypeName","src":"1576:4:9","typeDescriptions":{}}}],"id":930,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"1575:6:9","typeDescriptions":{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"}],"expression":{"id":925,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1558:3:9","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":926,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"decode","nodeType":"MemberAccess","src":"1558:10:9","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":931,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1558:24:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4552433230577261707065723a206f7065726174696f6e206661696c6564","id":932,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1584:32:9","typeDescriptions":{"typeIdentifier":"t_stringliteral_a2693bc24863a03d4a9bc9bd3a39eb0b1e30e06ced1710d854be911a8ed7db9b","typeString":"literal_string \"ERC20Wrapper: operation failed\""},"value":"ERC20Wrapper: operation failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_a2693bc24863a03d4a9bc9bd3a39eb0b1e30e06ced1710d854be911a8ed7db9b","typeString":"literal_string \"ERC20Wrapper: operation failed\""}],"id":924,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1550:7:9","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":933,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1550:67:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":934,"nodeType":"ExpressionStatement","src":"1550:67:9"}]}}]}}]},"id":952,"implemented":true,"kind":"function","modifiers":[],"name":"_callWithOptionalReturnData","nodeType":"FunctionDefinition","parameters":{"id":894,"nodeType":"ParameterList","parameters":[{"constant":false,"id":891,"mutability":"mutable","name":"token","nodeType":"VariableDeclaration","scope":952,"src":"1184:19:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedERC20_$983","typeString":"contract IWrappedERC20"},"typeName":{"id":890,"name":"IWrappedERC20","nodeType":"UserDefinedTypeName","referencedDeclaration":983,"src":"1184:13:9","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedERC20_$983","typeString":"contract IWrappedERC20"}},"visibility":"internal"},{"constant":false,"id":893,"mutability":"mutable","name":"callData","nodeType":"VariableDeclaration","scope":952,"src":"1205:21:9","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":892,"name":"bytes","nodeType":"ElementaryTypeName","src":"1205:5:9","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1183:44:9"},"returnParameters":{"id":895,"nodeType":"ParameterList","parameters":[],"src":"1237:0:9"},"scope":953,"src":"1147:870:9","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":984,"src":"347:1672:9"},{"abstract":false,"baseContracts":[],"contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":983,"linearizedBaseContracts":[983],"name":"IWrappedERC20","nodeType":"ContractDefinition","nodes":[{"functionSelector":"a9059cbb","id":962,"implemented":false,"kind":"function","modifiers":[],"name":"transfer","nodeType":"FunctionDefinition","parameters":{"id":958,"nodeType":"ParameterList","parameters":[{"constant":false,"id":955,"mutability":"mutable","name":"to","nodeType":"VariableDeclaration","scope":962,"src":"2069:10:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":954,"name":"address","nodeType":"ElementaryTypeName","src":"2069:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":957,"mutability":"mutable","name":"value","nodeType":"VariableDeclaration","scope":962,"src":"2081:13:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":956,"name":"uint256","nodeType":"ElementaryTypeName","src":"2081:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2068:27:9"},"returnParameters":{"id":961,"nodeType":"ParameterList","parameters":[{"constant":false,"id":960,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":962,"src":"2114:4:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":959,"name":"bool","nodeType":"ElementaryTypeName","src":"2114:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2113:6:9"},"scope":983,"src":"2051:69:9","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"23b872dd","id":973,"implemented":false,"kind":"function","modifiers":[],"name":"transferFrom","nodeType":"FunctionDefinition","parameters":{"id":969,"nodeType":"ParameterList","parameters":[{"constant":false,"id":964,"mutability":"mutable","name":"from","nodeType":"VariableDeclaration","scope":973,"src":"2157:12:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":963,"name":"address","nodeType":"ElementaryTypeName","src":"2157:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":966,"mutability":"mutable","name":"to","nodeType":"VariableDeclaration","scope":973,"src":"2179:10:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":965,"name":"address","nodeType":"ElementaryTypeName","src":"2179:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":968,"mutability":"mutable","name":"value","nodeType":"VariableDeclaration","scope":973,"src":"2199:13:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":967,"name":"uint256","nodeType":"ElementaryTypeName","src":"2199:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2147:71:9"},"returnParameters":{"id":972,"nodeType":"ParameterList","parameters":[{"constant":false,"id":971,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":973,"src":"2237:4:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":970,"name":"bool","nodeType":"ElementaryTypeName","src":"2237:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2236:6:9"},"scope":983,"src":"2126:117:9","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"095ea7b3","id":982,"implemented":false,"kind":"function","modifiers":[],"name":"approve","nodeType":"FunctionDefinition","parameters":{"id":978,"nodeType":"ParameterList","parameters":[{"constant":false,"id":975,"mutability":"mutable","name":"spender","nodeType":"VariableDeclaration","scope":982,"src":"2266:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":974,"name":"address","nodeType":"ElementaryTypeName","src":"2266:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":977,"mutability":"mutable","name":"value","nodeType":"VariableDeclaration","scope":982,"src":"2283:13:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":976,"name":"uint256","nodeType":"ElementaryTypeName","src":"2283:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2265:32:9"},"returnParameters":{"id":981,"nodeType":"ParameterList","parameters":[{"constant":false,"id":980,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":982,"src":"2316:4:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":979,"name":"bool","nodeType":"ElementaryTypeName","src":"2316:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2315:6:9"},"scope":983,"src":"2249:73:9","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":984,"src":"2021:303:9"}],"src":"33:2292:9"},"id":9},"@animoca/ethereum-contracts-core-1.1.2/contracts/utils/types/AddressIsContract.sol":{"ast":{"absolutePath":"@animoca/ethereum-contracts-core-1.1.2/contracts/utils/types/AddressIsContract.sol","exportedSymbols":{"AddressIsContract":[1004]},"id":1005,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":985,"literals":["solidity",">=","0.7",".6","<","0.8",".0"],"nodeType":"PragmaDirective","src":"206:31:10"},{"abstract":false,"baseContracts":[],"contractDependencies":[],"contractKind":"library","documentation":{"id":986,"nodeType":"StructuredDocumentation","src":"239:71:10","text":" @dev Upgrades the address type to check if it is a contract."},"fullyImplemented":true,"id":1004,"linearizedBaseContracts":[1004],"name":"AddressIsContract","nodeType":"ContractDefinition","nodes":[{"body":{"id":1002,"nodeType":"Block","src":"979:311:10","statements":[{"assignments":[995],"declarations":[{"constant":false,"id":995,"mutability":"mutable","name":"size","nodeType":"VariableDeclaration","scope":1002,"src":"1176:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":994,"name":"uint256","nodeType":"ElementaryTypeName","src":"1176:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":996,"nodeType":"VariableDeclarationStatement","src":"1176:12:10"},{"AST":{"nodeType":"YulBlock","src":"1207:52:10","statements":[{"nodeType":"YulAssignment","src":"1221:28:10","value":{"arguments":[{"name":"account","nodeType":"YulIdentifier","src":"1241:7:10"}],"functionName":{"name":"extcodesize","nodeType":"YulIdentifier","src":"1229:11:10"},"nodeType":"YulFunctionCall","src":"1229:20:10"},"variableNames":[{"name":"size","nodeType":"YulIdentifier","src":"1221:4:10"}]}]},"evmVersion":"istanbul","externalReferences":[{"declaration":989,"isOffset":false,"isSlot":false,"src":"1241:7:10","valueSize":1},{"declaration":995,"isOffset":false,"isSlot":false,"src":"1221:4:10","valueSize":1}],"id":997,"nodeType":"InlineAssembly","src":"1198:61:10"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1000,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":998,"name":"size","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":995,"src":"1275:4:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":999,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1282:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1275:8:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":993,"id":1001,"nodeType":"Return","src":"1268:15:10"}]},"documentation":{"id":987,"nodeType":"StructuredDocumentation","src":"343:565:10","text":" @dev Returns true if `account` is a contract.\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 Among others, `isContract` will return false for the following\n types of addresses:\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 ===="},"id":1003,"implemented":true,"kind":"function","modifiers":[],"name":"isContract","nodeType":"FunctionDefinition","parameters":{"id":990,"nodeType":"ParameterList","parameters":[{"constant":false,"id":989,"mutability":"mutable","name":"account","nodeType":"VariableDeclaration","scope":1003,"src":"933:15:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":988,"name":"address","nodeType":"ElementaryTypeName","src":"933:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"932:17:10"},"returnParameters":{"id":993,"nodeType":"ParameterList","parameters":[{"constant":false,"id":992,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":1003,"src":"973:4:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":991,"name":"bool","nodeType":"ElementaryTypeName","src":"973:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"972:6:10"},"scope":1004,"src":"913:377:10","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":1005,"src":"311:981:10"}],"src":"206:1087:10"},"id":10},"@openzeppelin/contracts/math/SafeMath.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/math/SafeMath.sol","exportedSymbols":{"SafeMath":[1359]},"id":1360,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":1006,"literals":["solidity",">=","0.6",".0","<","0.8",".0"],"nodeType":"PragmaDirective","src":"33:31:11"},{"abstract":false,"baseContracts":[],"contractDependencies":[],"contractKind":"library","documentation":{"id":1007,"nodeType":"StructuredDocumentation","src":"66:563:11","text":" @dev Wrappers over Solidity's arithmetic operations with added overflow\n checks.\n Arithmetic operations in Solidity wrap on overflow. This can easily result\n in bugs, because programmers usually assume that an overflow raises an\n error, which is the standard behavior in high level programming languages.\n `SafeMath` restores this intuition by reverting the transaction when an\n operation overflows.\n Using this library instead of the unchecked operations eliminates an entire\n class of bugs, so it's recommended to use it always."},"fullyImplemented":true,"id":1359,"linearizedBaseContracts":[1359],"name":"SafeMath","nodeType":"ContractDefinition","nodes":[{"body":{"id":1037,"nodeType":"Block","src":"865:98:11","statements":[{"assignments":[1020],"declarations":[{"constant":false,"id":1020,"mutability":"mutable","name":"c","nodeType":"VariableDeclaration","scope":1037,"src":"875:9:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1019,"name":"uint256","nodeType":"ElementaryTypeName","src":"875:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1024,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1023,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1021,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1010,"src":"887:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":1022,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1012,"src":"891:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"887:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"875:17:11"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1027,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1025,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1020,"src":"906:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":1026,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1010,"src":"910:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"906:5:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1032,"nodeType":"IfStatement","src":"902:28:11","trueBody":{"expression":{"components":[{"hexValue":"66616c7365","id":1028,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"921:5:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"hexValue":"30","id":1029,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"928:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":1030,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"920:10:11","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_rational_0_by_1_$","typeString":"tuple(bool,int_const 0)"}},"functionReturnParameters":1018,"id":1031,"nodeType":"Return","src":"913:17:11"}},{"expression":{"components":[{"hexValue":"74727565","id":1033,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"948:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"id":1034,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1020,"src":"954:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1035,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"947:9:11","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"functionReturnParameters":1018,"id":1036,"nodeType":"Return","src":"940:16:11"}]},"documentation":{"id":1008,"nodeType":"StructuredDocumentation","src":"653:131:11","text":" @dev Returns the addition of two unsigned integers, with an overflow flag.\n _Available since v3.4._"},"id":1038,"implemented":true,"kind":"function","modifiers":[],"name":"tryAdd","nodeType":"FunctionDefinition","parameters":{"id":1013,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1010,"mutability":"mutable","name":"a","nodeType":"VariableDeclaration","scope":1038,"src":"805:9:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1009,"name":"uint256","nodeType":"ElementaryTypeName","src":"805:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1012,"mutability":"mutable","name":"b","nodeType":"VariableDeclaration","scope":1038,"src":"816:9:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1011,"name":"uint256","nodeType":"ElementaryTypeName","src":"816:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"804:22:11"},"returnParameters":{"id":1018,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1015,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":1038,"src":"850:4:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1014,"name":"bool","nodeType":"ElementaryTypeName","src":"850:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1017,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":1038,"src":"856:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1016,"name":"uint256","nodeType":"ElementaryTypeName","src":"856:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"849:15:11"},"scope":1359,"src":"789:174:11","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1064,"nodeType":"Block","src":"1185:75:11","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1052,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1050,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1043,"src":"1199:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":1051,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1041,"src":"1203:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1199:5:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1057,"nodeType":"IfStatement","src":"1195:28:11","trueBody":{"expression":{"components":[{"hexValue":"66616c7365","id":1053,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1214:5:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"hexValue":"30","id":1054,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1221:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":1055,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"1213:10:11","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_rational_0_by_1_$","typeString":"tuple(bool,int_const 0)"}},"functionReturnParameters":1049,"id":1056,"nodeType":"Return","src":"1206:17:11"}},{"expression":{"components":[{"hexValue":"74727565","id":1058,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1241:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1061,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1059,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1041,"src":"1247:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":1060,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1043,"src":"1251:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1247:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1062,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1240:13:11","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"functionReturnParameters":1049,"id":1063,"nodeType":"Return","src":"1233:20:11"}]},"documentation":{"id":1039,"nodeType":"StructuredDocumentation","src":"969:135:11","text":" @dev Returns the substraction of two unsigned integers, with an overflow flag.\n _Available since v3.4._"},"id":1065,"implemented":true,"kind":"function","modifiers":[],"name":"trySub","nodeType":"FunctionDefinition","parameters":{"id":1044,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1041,"mutability":"mutable","name":"a","nodeType":"VariableDeclaration","scope":1065,"src":"1125:9:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1040,"name":"uint256","nodeType":"ElementaryTypeName","src":"1125:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1043,"mutability":"mutable","name":"b","nodeType":"VariableDeclaration","scope":1065,"src":"1136:9:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1042,"name":"uint256","nodeType":"ElementaryTypeName","src":"1136:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1124:22:11"},"returnParameters":{"id":1049,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1046,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":1065,"src":"1170:4:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1045,"name":"bool","nodeType":"ElementaryTypeName","src":"1170:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1048,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":1065,"src":"1176:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1047,"name":"uint256","nodeType":"ElementaryTypeName","src":"1176:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1169:15:11"},"scope":1359,"src":"1109:151:11","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1105,"nodeType":"Block","src":"1484:359:11","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1079,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1077,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1068,"src":"1716:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":1078,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1721:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1716:6:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1084,"nodeType":"IfStatement","src":"1712:28:11","trueBody":{"expression":{"components":[{"hexValue":"74727565","id":1080,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1732:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"hexValue":"30","id":1081,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1738:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":1082,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"1731:9:11","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_rational_0_by_1_$","typeString":"tuple(bool,int_const 0)"}},"functionReturnParameters":1076,"id":1083,"nodeType":"Return","src":"1724:16:11"}},{"assignments":[1086],"declarations":[{"constant":false,"id":1086,"mutability":"mutable","name":"c","nodeType":"VariableDeclaration","scope":1105,"src":"1750:9:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1085,"name":"uint256","nodeType":"ElementaryTypeName","src":"1750:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1090,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1089,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1087,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1068,"src":"1762:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":1088,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1070,"src":"1766:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1762:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1750:17:11"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1095,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1093,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1091,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1086,"src":"1781:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":1092,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1068,"src":"1785:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1781:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":1094,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1070,"src":"1790:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1781:10:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1100,"nodeType":"IfStatement","src":"1777:33:11","trueBody":{"expression":{"components":[{"hexValue":"66616c7365","id":1096,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1801:5:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"hexValue":"30","id":1097,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1808:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":1098,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"1800:10:11","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_rational_0_by_1_$","typeString":"tuple(bool,int_const 0)"}},"functionReturnParameters":1076,"id":1099,"nodeType":"Return","src":"1793:17:11"}},{"expression":{"components":[{"hexValue":"74727565","id":1101,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1828:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"id":1102,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1086,"src":"1834:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1103,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1827:9:11","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"functionReturnParameters":1076,"id":1104,"nodeType":"Return","src":"1820:16:11"}]},"documentation":{"id":1066,"nodeType":"StructuredDocumentation","src":"1266:137:11","text":" @dev Returns the multiplication of two unsigned integers, with an overflow flag.\n _Available since v3.4._"},"id":1106,"implemented":true,"kind":"function","modifiers":[],"name":"tryMul","nodeType":"FunctionDefinition","parameters":{"id":1071,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1068,"mutability":"mutable","name":"a","nodeType":"VariableDeclaration","scope":1106,"src":"1424:9:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1067,"name":"uint256","nodeType":"ElementaryTypeName","src":"1424:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1070,"mutability":"mutable","name":"b","nodeType":"VariableDeclaration","scope":1106,"src":"1435:9:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1069,"name":"uint256","nodeType":"ElementaryTypeName","src":"1435:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1423:22:11"},"returnParameters":{"id":1076,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1073,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":1106,"src":"1469:4:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1072,"name":"bool","nodeType":"ElementaryTypeName","src":"1469:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1075,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":1106,"src":"1475:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1074,"name":"uint256","nodeType":"ElementaryTypeName","src":"1475:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1468:15:11"},"scope":1359,"src":"1408:435:11","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1132,"nodeType":"Block","src":"2068:76:11","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1120,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1118,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1111,"src":"2082:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":1119,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2087:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2082:6:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1125,"nodeType":"IfStatement","src":"2078:29:11","trueBody":{"expression":{"components":[{"hexValue":"66616c7365","id":1121,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2098:5:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"hexValue":"30","id":1122,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2105:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":1123,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"2097:10:11","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_rational_0_by_1_$","typeString":"tuple(bool,int_const 0)"}},"functionReturnParameters":1117,"id":1124,"nodeType":"Return","src":"2090:17:11"}},{"expression":{"components":[{"hexValue":"74727565","id":1126,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2125:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1129,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1127,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1109,"src":"2131:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":1128,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1111,"src":"2135:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2131:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1130,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2124:13:11","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"functionReturnParameters":1117,"id":1131,"nodeType":"Return","src":"2117:20:11"}]},"documentation":{"id":1107,"nodeType":"StructuredDocumentation","src":"1849:138:11","text":" @dev Returns the division of two unsigned integers, with a division by zero flag.\n _Available since v3.4._"},"id":1133,"implemented":true,"kind":"function","modifiers":[],"name":"tryDiv","nodeType":"FunctionDefinition","parameters":{"id":1112,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1109,"mutability":"mutable","name":"a","nodeType":"VariableDeclaration","scope":1133,"src":"2008:9:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1108,"name":"uint256","nodeType":"ElementaryTypeName","src":"2008:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1111,"mutability":"mutable","name":"b","nodeType":"VariableDeclaration","scope":1133,"src":"2019:9:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1110,"name":"uint256","nodeType":"ElementaryTypeName","src":"2019:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2007:22:11"},"returnParameters":{"id":1117,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1114,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":1133,"src":"2053:4:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1113,"name":"bool","nodeType":"ElementaryTypeName","src":"2053:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1116,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":1133,"src":"2059:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1115,"name":"uint256","nodeType":"ElementaryTypeName","src":"2059:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2052:15:11"},"scope":1359,"src":"1992:152:11","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1159,"nodeType":"Block","src":"2379:76:11","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1147,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1145,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1138,"src":"2393:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":1146,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2398:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2393:6:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1152,"nodeType":"IfStatement","src":"2389:29:11","trueBody":{"expression":{"components":[{"hexValue":"66616c7365","id":1148,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2409:5:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"hexValue":"30","id":1149,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2416:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":1150,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"2408:10:11","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_rational_0_by_1_$","typeString":"tuple(bool,int_const 0)"}},"functionReturnParameters":1144,"id":1151,"nodeType":"Return","src":"2401:17:11"}},{"expression":{"components":[{"hexValue":"74727565","id":1153,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2436:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1156,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1154,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1136,"src":"2442:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"id":1155,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1138,"src":"2446:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2442:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1157,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2435:13:11","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"functionReturnParameters":1144,"id":1158,"nodeType":"Return","src":"2428:20:11"}]},"documentation":{"id":1134,"nodeType":"StructuredDocumentation","src":"2150:148:11","text":" @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\n _Available since v3.4._"},"id":1160,"implemented":true,"kind":"function","modifiers":[],"name":"tryMod","nodeType":"FunctionDefinition","parameters":{"id":1139,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1136,"mutability":"mutable","name":"a","nodeType":"VariableDeclaration","scope":1160,"src":"2319:9:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1135,"name":"uint256","nodeType":"ElementaryTypeName","src":"2319:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1138,"mutability":"mutable","name":"b","nodeType":"VariableDeclaration","scope":1160,"src":"2330:9:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1137,"name":"uint256","nodeType":"ElementaryTypeName","src":"2330:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2318:22:11"},"returnParameters":{"id":1144,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1141,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":1160,"src":"2364:4:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1140,"name":"bool","nodeType":"ElementaryTypeName","src":"2364:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1143,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":1160,"src":"2370:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1142,"name":"uint256","nodeType":"ElementaryTypeName","src":"2370:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2363:15:11"},"scope":1359,"src":"2303:152:11","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1185,"nodeType":"Block","src":"2757:108:11","statements":[{"assignments":[1171],"declarations":[{"constant":false,"id":1171,"mutability":"mutable","name":"c","nodeType":"VariableDeclaration","scope":1185,"src":"2767:9:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1170,"name":"uint256","nodeType":"ElementaryTypeName","src":"2767:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1175,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1174,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1172,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1163,"src":"2779:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":1173,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1165,"src":"2783:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2779:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2767:17:11"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1179,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1177,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1171,"src":"2802:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":1178,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1163,"src":"2807:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2802:6:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"536166654d6174683a206164646974696f6e206f766572666c6f77","id":1180,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2810:29:11","typeDescriptions":{"typeIdentifier":"t_stringliteral_30cc447bcc13b3e22b45cef0dd9b0b514842d836dd9b6eb384e20dedfb47723a","typeString":"literal_string \"SafeMath: addition overflow\""},"value":"SafeMath: addition overflow"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_30cc447bcc13b3e22b45cef0dd9b0b514842d836dd9b6eb384e20dedfb47723a","typeString":"literal_string \"SafeMath: addition overflow\""}],"id":1176,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2794:7:11","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1181,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2794:46:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1182,"nodeType":"ExpressionStatement","src":"2794:46:11"},{"expression":{"id":1183,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1171,"src":"2857:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":1169,"id":1184,"nodeType":"Return","src":"2850:8:11"}]},"documentation":{"id":1161,"nodeType":"StructuredDocumentation","src":"2461:224:11","text":" @dev Returns the addition of two unsigned integers, reverting on\n overflow.\n Counterpart to Solidity's `+` operator.\n Requirements:\n - Addition cannot overflow."},"id":1186,"implemented":true,"kind":"function","modifiers":[],"name":"add","nodeType":"FunctionDefinition","parameters":{"id":1166,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1163,"mutability":"mutable","name":"a","nodeType":"VariableDeclaration","scope":1186,"src":"2703:9:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1162,"name":"uint256","nodeType":"ElementaryTypeName","src":"2703:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1165,"mutability":"mutable","name":"b","nodeType":"VariableDeclaration","scope":1186,"src":"2714:9:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1164,"name":"uint256","nodeType":"ElementaryTypeName","src":"2714:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2702:22:11"},"returnParameters":{"id":1169,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1168,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":1186,"src":"2748:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1167,"name":"uint256","nodeType":"ElementaryTypeName","src":"2748:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2747:9:11"},"scope":1359,"src":"2690:175:11","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1207,"nodeType":"Block","src":"3203:88:11","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1199,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1197,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1191,"src":"3221:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":1198,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1189,"src":"3226:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3221:6:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"536166654d6174683a207375627472616374696f6e206f766572666c6f77","id":1200,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3229:32:11","typeDescriptions":{"typeIdentifier":"t_stringliteral_50b058e9b5320e58880d88223c9801cd9eecdcf90323d5c2318bc1b6b916e862","typeString":"literal_string \"SafeMath: subtraction overflow\""},"value":"SafeMath: subtraction overflow"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_50b058e9b5320e58880d88223c9801cd9eecdcf90323d5c2318bc1b6b916e862","typeString":"literal_string \"SafeMath: subtraction overflow\""}],"id":1196,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3213:7:11","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1201,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3213:49:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1202,"nodeType":"ExpressionStatement","src":"3213:49:11"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1205,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1203,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1189,"src":"3279:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":1204,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1191,"src":"3283:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3279:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":1195,"id":1206,"nodeType":"Return","src":"3272:12:11"}]},"documentation":{"id":1187,"nodeType":"StructuredDocumentation","src":"2871:260:11","text":" @dev Returns the subtraction of two unsigned integers, reverting on\n overflow (when the result is negative).\n Counterpart to Solidity's `-` operator.\n Requirements:\n - Subtraction cannot overflow."},"id":1208,"implemented":true,"kind":"function","modifiers":[],"name":"sub","nodeType":"FunctionDefinition","parameters":{"id":1192,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1189,"mutability":"mutable","name":"a","nodeType":"VariableDeclaration","scope":1208,"src":"3149:9:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1188,"name":"uint256","nodeType":"ElementaryTypeName","src":"3149:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1191,"mutability":"mutable","name":"b","nodeType":"VariableDeclaration","scope":1208,"src":"3160:9:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1190,"name":"uint256","nodeType":"ElementaryTypeName","src":"3160:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3148:22:11"},"returnParameters":{"id":1195,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1194,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":1208,"src":"3194:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1193,"name":"uint256","nodeType":"ElementaryTypeName","src":"3194:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3193:9:11"},"scope":1359,"src":"3136:155:11","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1241,"nodeType":"Block","src":"3605:148:11","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1220,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1218,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1211,"src":"3619:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":1219,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3624:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3619:6:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1223,"nodeType":"IfStatement","src":"3615:20:11","trueBody":{"expression":{"hexValue":"30","id":1221,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3634:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":1217,"id":1222,"nodeType":"Return","src":"3627:8:11"}},{"assignments":[1225],"declarations":[{"constant":false,"id":1225,"mutability":"mutable","name":"c","nodeType":"VariableDeclaration","scope":1241,"src":"3645:9:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1224,"name":"uint256","nodeType":"ElementaryTypeName","src":"3645:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1229,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1228,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1226,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1211,"src":"3657:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":1227,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1213,"src":"3661:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3657:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3645:17:11"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1235,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1233,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1231,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1225,"src":"3680:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":1232,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1211,"src":"3684:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3680:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":1234,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1213,"src":"3689:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3680:10:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77","id":1236,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3692:35:11","typeDescriptions":{"typeIdentifier":"t_stringliteral_9113bb53c2876a3805b2c9242029423fc540a728243ce887ab24c82cf119fba3","typeString":"literal_string \"SafeMath: multiplication overflow\""},"value":"SafeMath: multiplication overflow"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_9113bb53c2876a3805b2c9242029423fc540a728243ce887ab24c82cf119fba3","typeString":"literal_string \"SafeMath: multiplication overflow\""}],"id":1230,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3672:7:11","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1237,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3672:56:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1238,"nodeType":"ExpressionStatement","src":"3672:56:11"},{"expression":{"id":1239,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1225,"src":"3745:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":1217,"id":1240,"nodeType":"Return","src":"3738:8:11"}]},"documentation":{"id":1209,"nodeType":"StructuredDocumentation","src":"3297:236:11","text":" @dev Returns the multiplication of two unsigned integers, reverting on\n overflow.\n Counterpart to Solidity's `*` operator.\n Requirements:\n - Multiplication cannot overflow."},"id":1242,"implemented":true,"kind":"function","modifiers":[],"name":"mul","nodeType":"FunctionDefinition","parameters":{"id":1214,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1211,"mutability":"mutable","name":"a","nodeType":"VariableDeclaration","scope":1242,"src":"3551:9:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1210,"name":"uint256","nodeType":"ElementaryTypeName","src":"3551:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1213,"mutability":"mutable","name":"b","nodeType":"VariableDeclaration","scope":1242,"src":"3562:9:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1212,"name":"uint256","nodeType":"ElementaryTypeName","src":"3562:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3550:22:11"},"returnParameters":{"id":1217,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1216,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":1242,"src":"3596:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1215,"name":"uint256","nodeType":"ElementaryTypeName","src":"3596:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3595:9:11"},"scope":1359,"src":"3538:215:11","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1263,"nodeType":"Block","src":"4284:83:11","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1255,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1253,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1247,"src":"4302:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":1254,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4306:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4302:5:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"536166654d6174683a206469766973696f6e206279207a65726f","id":1256,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4309:28:11","typeDescriptions":{"typeIdentifier":"t_stringliteral_5b7cc70dda4dc2143e5adb63bd5d1f349504f461dbdfd9bc76fac1f8ca6d019f","typeString":"literal_string \"SafeMath: division by zero\""},"value":"SafeMath: division by zero"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5b7cc70dda4dc2143e5adb63bd5d1f349504f461dbdfd9bc76fac1f8ca6d019f","typeString":"literal_string \"SafeMath: division by zero\""}],"id":1252,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4294:7:11","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1257,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4294:44:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1258,"nodeType":"ExpressionStatement","src":"4294:44:11"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1261,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1259,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1245,"src":"4355:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":1260,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1247,"src":"4359:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4355:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":1251,"id":1262,"nodeType":"Return","src":"4348:12:11"}]},"documentation":{"id":1243,"nodeType":"StructuredDocumentation","src":"3759:453:11","text":" @dev Returns the integer division of two unsigned integers, reverting on\n division by zero. The result is rounded towards zero.\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 Requirements:\n - The divisor cannot be zero."},"id":1264,"implemented":true,"kind":"function","modifiers":[],"name":"div","nodeType":"FunctionDefinition","parameters":{"id":1248,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1245,"mutability":"mutable","name":"a","nodeType":"VariableDeclaration","scope":1264,"src":"4230:9:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1244,"name":"uint256","nodeType":"ElementaryTypeName","src":"4230:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1247,"mutability":"mutable","name":"b","nodeType":"VariableDeclaration","scope":1264,"src":"4241:9:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1246,"name":"uint256","nodeType":"ElementaryTypeName","src":"4241:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4229:22:11"},"returnParameters":{"id":1251,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1250,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":1264,"src":"4275:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1249,"name":"uint256","nodeType":"ElementaryTypeName","src":"4275:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4274:9:11"},"scope":1359,"src":"4217:150:11","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1285,"nodeType":"Block","src":"4887:81:11","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1277,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1275,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1269,"src":"4905:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":1276,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4909:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4905:5:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"536166654d6174683a206d6f64756c6f206279207a65726f","id":1278,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4912:26:11","typeDescriptions":{"typeIdentifier":"t_stringliteral_726e51f7b81fce0a68f5f214f445e275313b20b1633f08ce954ee39abf8d7832","typeString":"literal_string \"SafeMath: modulo by zero\""},"value":"SafeMath: modulo by zero"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_726e51f7b81fce0a68f5f214f445e275313b20b1633f08ce954ee39abf8d7832","typeString":"literal_string \"SafeMath: modulo by zero\""}],"id":1274,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4897:7:11","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1279,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4897:42:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1280,"nodeType":"ExpressionStatement","src":"4897:42:11"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1283,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1281,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1267,"src":"4956:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"id":1282,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1269,"src":"4960:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4956:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":1273,"id":1284,"nodeType":"Return","src":"4949:12:11"}]},"documentation":{"id":1265,"nodeType":"StructuredDocumentation","src":"4373:442:11","text":" @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n reverting when dividing by zero.\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 Requirements:\n - The divisor cannot be zero."},"id":1286,"implemented":true,"kind":"function","modifiers":[],"name":"mod","nodeType":"FunctionDefinition","parameters":{"id":1270,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1267,"mutability":"mutable","name":"a","nodeType":"VariableDeclaration","scope":1286,"src":"4833:9:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1266,"name":"uint256","nodeType":"ElementaryTypeName","src":"4833:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1269,"mutability":"mutable","name":"b","nodeType":"VariableDeclaration","scope":1286,"src":"4844:9:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1268,"name":"uint256","nodeType":"ElementaryTypeName","src":"4844:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4832:22:11"},"returnParameters":{"id":1273,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1272,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":1286,"src":"4878:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1271,"name":"uint256","nodeType":"ElementaryTypeName","src":"4878:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4877:9:11"},"scope":1359,"src":"4820:148:11","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1309,"nodeType":"Block","src":"5527:68:11","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1301,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1299,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1291,"src":"5545:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":1300,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1289,"src":"5550:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5545:6:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":1302,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1293,"src":"5553:12:11","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":1298,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5537:7:11","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1303,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5537:29:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1304,"nodeType":"ExpressionStatement","src":"5537:29:11"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1307,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1305,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1289,"src":"5583:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":1306,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1291,"src":"5587:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5583:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":1297,"id":1308,"nodeType":"Return","src":"5576:12:11"}]},"documentation":{"id":1287,"nodeType":"StructuredDocumentation","src":"4974:453:11","text":" @dev Returns the subtraction of two unsigned integers, reverting with custom message on\n overflow (when the result is negative).\n CAUTION: This function is deprecated because it requires allocating memory for the error\n message unnecessarily. For custom revert reasons use {trySub}.\n Counterpart to Solidity's `-` operator.\n Requirements:\n - Subtraction cannot overflow."},"id":1310,"implemented":true,"kind":"function","modifiers":[],"name":"sub","nodeType":"FunctionDefinition","parameters":{"id":1294,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1289,"mutability":"mutable","name":"a","nodeType":"VariableDeclaration","scope":1310,"src":"5445:9:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1288,"name":"uint256","nodeType":"ElementaryTypeName","src":"5445:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1291,"mutability":"mutable","name":"b","nodeType":"VariableDeclaration","scope":1310,"src":"5456:9:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1290,"name":"uint256","nodeType":"ElementaryTypeName","src":"5456:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1293,"mutability":"mutable","name":"errorMessage","nodeType":"VariableDeclaration","scope":1310,"src":"5467:26:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":1292,"name":"string","nodeType":"ElementaryTypeName","src":"5467:6:11","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"5444:50:11"},"returnParameters":{"id":1297,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1296,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":1310,"src":"5518:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1295,"name":"uint256","nodeType":"ElementaryTypeName","src":"5518:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5517:9:11"},"scope":1359,"src":"5432:163:11","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1333,"nodeType":"Block","src":"6347:67:11","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1325,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1323,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1315,"src":"6365:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":1324,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6369:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6365:5:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":1326,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1317,"src":"6372:12:11","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":1322,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"6357:7:11","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1327,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6357:28:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1328,"nodeType":"ExpressionStatement","src":"6357:28:11"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1331,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1329,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1313,"src":"6402:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":1330,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1315,"src":"6406:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6402:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":1321,"id":1332,"nodeType":"Return","src":"6395:12:11"}]},"documentation":{"id":1311,"nodeType":"StructuredDocumentation","src":"5601:646:11","text":" @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 CAUTION: This function is deprecated because it requires allocating memory for the error\n message unnecessarily. For custom revert reasons use {tryDiv}.\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 Requirements:\n - The divisor cannot be zero."},"id":1334,"implemented":true,"kind":"function","modifiers":[],"name":"div","nodeType":"FunctionDefinition","parameters":{"id":1318,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1313,"mutability":"mutable","name":"a","nodeType":"VariableDeclaration","scope":1334,"src":"6265:9:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1312,"name":"uint256","nodeType":"ElementaryTypeName","src":"6265:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1315,"mutability":"mutable","name":"b","nodeType":"VariableDeclaration","scope":1334,"src":"6276:9:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1314,"name":"uint256","nodeType":"ElementaryTypeName","src":"6276:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1317,"mutability":"mutable","name":"errorMessage","nodeType":"VariableDeclaration","scope":1334,"src":"6287:26:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":1316,"name":"string","nodeType":"ElementaryTypeName","src":"6287:6:11","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"6264:50:11"},"returnParameters":{"id":1321,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1320,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":1334,"src":"6338:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1319,"name":"uint256","nodeType":"ElementaryTypeName","src":"6338:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6337:9:11"},"scope":1359,"src":"6252:162:11","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1357,"nodeType":"Block","src":"7155:67:11","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1349,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1347,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1339,"src":"7173:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":1348,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7177:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7173:5:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":1350,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1341,"src":"7180:12:11","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":1346,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"7165:7:11","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1351,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7165:28:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1352,"nodeType":"ExpressionStatement","src":"7165:28:11"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1355,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1353,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1337,"src":"7210:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"id":1354,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1339,"src":"7214:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7210:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":1345,"id":1356,"nodeType":"Return","src":"7203:12:11"}]},"documentation":{"id":1335,"nodeType":"StructuredDocumentation","src":"6420:635:11","text":" @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n reverting with custom message when dividing by zero.\n CAUTION: This function is deprecated because it requires allocating memory for the error\n message unnecessarily. For custom revert reasons use {tryMod}.\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 Requirements:\n - The divisor cannot be zero."},"id":1358,"implemented":true,"kind":"function","modifiers":[],"name":"mod","nodeType":"FunctionDefinition","parameters":{"id":1342,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1337,"mutability":"mutable","name":"a","nodeType":"VariableDeclaration","scope":1358,"src":"7073:9:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1336,"name":"uint256","nodeType":"ElementaryTypeName","src":"7073:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1339,"mutability":"mutable","name":"b","nodeType":"VariableDeclaration","scope":1358,"src":"7084:9:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1338,"name":"uint256","nodeType":"ElementaryTypeName","src":"7084:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1341,"mutability":"mutable","name":"errorMessage","nodeType":"VariableDeclaration","scope":1358,"src":"7095:26:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":1340,"name":"string","nodeType":"ElementaryTypeName","src":"7095:6:11","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"7072:50:11"},"returnParameters":{"id":1345,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1344,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":1358,"src":"7146:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1343,"name":"uint256","nodeType":"ElementaryTypeName","src":"7146:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7145:9:11"},"scope":1359,"src":"7060:162:11","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":1360,"src":"630:6594:11"}],"src":"33:7192:11"},"id":11},"@openzeppelin/contracts/utils/SafeCast.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/SafeCast.sol","exportedSymbols":{"SafeCast":[1672]},"id":1673,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":1361,"literals":["solidity",">=","0.6",".0","<","0.8",".0"],"nodeType":"PragmaDirective","src":"33:31:12"},{"abstract":false,"baseContracts":[],"contractDependencies":[],"contractKind":"library","documentation":{"id":1362,"nodeType":"StructuredDocumentation","src":"67:709:12","text":" @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow\n checks.\n Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\n easily result in undesired exploitation or bugs, since developers usually\n assume that overflows raise errors. `SafeCast` restores this intuition by\n reverting the transaction when such an operation overflows.\n Using this library instead of the unchecked operations eliminates an entire\n class of bugs, so it's recommended to use it always.\n Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\n all math on `uint256` and `int256` and then downcasting."},"fullyImplemented":true,"id":1672,"linearizedBaseContracts":[1672],"name":"SafeCast","nodeType":"ContractDefinition","nodes":[{"body":{"id":1384,"nodeType":"Block","src":"1152:115:12","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1375,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1371,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1365,"src":"1170:5:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_rational_340282366920938463463374607431768211456_by_1","typeString":"int_const 3402...(31 digits omitted)...1456"},"id":1374,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":1372,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1178:1:12","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"313238","id":1373,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1181:3:12","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"src":"1178:6:12","typeDescriptions":{"typeIdentifier":"t_rational_340282366920938463463374607431768211456_by_1","typeString":"int_const 3402...(31 digits omitted)...1456"}},"src":"1170:14:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e203132382062697473","id":1376,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1186:42:12","typeDescriptions":{"typeIdentifier":"t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c","typeString":"literal_string \"SafeCast: value doesn't fit in 128 bits\""},"value":"SafeCast: value doesn't fit in 128 bits"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c","typeString":"literal_string \"SafeCast: value doesn't fit in 128 bits\""}],"id":1370,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1162:7:12","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1377,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1162:67:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1378,"nodeType":"ExpressionStatement","src":"1162:67:12"},{"expression":{"arguments":[{"id":1381,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1365,"src":"1254:5:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1380,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1246:7:12","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":1379,"name":"uint128","nodeType":"ElementaryTypeName","src":"1246:7:12","typeDescriptions":{}}},"id":1382,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1246:14:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"functionReturnParameters":1369,"id":1383,"nodeType":"Return","src":"1239:21:12"}]},"documentation":{"id":1363,"nodeType":"StructuredDocumentation","src":"801:280:12","text":" @dev Returns the downcasted uint128 from uint256, reverting on\n overflow (when the input is greater than largest uint128).\n Counterpart to Solidity's `uint128` operator.\n Requirements:\n - input must fit into 128 bits"},"id":1385,"implemented":true,"kind":"function","modifiers":[],"name":"toUint128","nodeType":"FunctionDefinition","parameters":{"id":1366,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1365,"mutability":"mutable","name":"value","nodeType":"VariableDeclaration","scope":1385,"src":"1105:13:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1364,"name":"uint256","nodeType":"ElementaryTypeName","src":"1105:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1104:15:12"},"returnParameters":{"id":1369,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1368,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":1385,"src":"1143:7:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":1367,"name":"uint128","nodeType":"ElementaryTypeName","src":"1143:7:12","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"1142:9:12"},"scope":1672,"src":"1086:181:12","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1407,"nodeType":"Block","src":"1618:112:12","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1398,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1394,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1388,"src":"1636:5:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_rational_18446744073709551616_by_1","typeString":"int_const 18446744073709551616"},"id":1397,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":1395,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1644:1:12","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3634","id":1396,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1647:2:12","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"1644:5:12","typeDescriptions":{"typeIdentifier":"t_rational_18446744073709551616_by_1","typeString":"int_const 18446744073709551616"}},"src":"1636:13:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e2036342062697473","id":1399,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1651:41:12","typeDescriptions":{"typeIdentifier":"t_stringliteral_93ae0c6bf6ffaece591a770b1865daa9f65157e541970aa9d8dc5f89a9490939","typeString":"literal_string \"SafeCast: value doesn't fit in 64 bits\""},"value":"SafeCast: value doesn't fit in 64 bits"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_93ae0c6bf6ffaece591a770b1865daa9f65157e541970aa9d8dc5f89a9490939","typeString":"literal_string \"SafeCast: value doesn't fit in 64 bits\""}],"id":1393,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1628:7:12","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1400,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1628:65:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1401,"nodeType":"ExpressionStatement","src":"1628:65:12"},{"expression":{"arguments":[{"id":1404,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1388,"src":"1717:5:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1403,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1710:6:12","typeDescriptions":{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"},"typeName":{"id":1402,"name":"uint64","nodeType":"ElementaryTypeName","src":"1710:6:12","typeDescriptions":{}}},"id":1405,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1710:13:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"functionReturnParameters":1392,"id":1406,"nodeType":"Return","src":"1703:20:12"}]},"documentation":{"id":1386,"nodeType":"StructuredDocumentation","src":"1273:276:12","text":" @dev Returns the downcasted uint64 from uint256, reverting on\n overflow (when the input is greater than largest uint64).\n Counterpart to Solidity's `uint64` operator.\n Requirements:\n - input must fit into 64 bits"},"id":1408,"implemented":true,"kind":"function","modifiers":[],"name":"toUint64","nodeType":"FunctionDefinition","parameters":{"id":1389,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1388,"mutability":"mutable","name":"value","nodeType":"VariableDeclaration","scope":1408,"src":"1572:13:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1387,"name":"uint256","nodeType":"ElementaryTypeName","src":"1572:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1571:15:12"},"returnParameters":{"id":1392,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1391,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":1408,"src":"1610:6:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":1390,"name":"uint64","nodeType":"ElementaryTypeName","src":"1610:6:12","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"1609:8:12"},"scope":1672,"src":"1554:176:12","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1430,"nodeType":"Block","src":"2081:112:12","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1421,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1417,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1411,"src":"2099:5:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_rational_4294967296_by_1","typeString":"int_const 4294967296"},"id":1420,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":1418,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2107:1:12","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3332","id":1419,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2110:2:12","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"2107:5:12","typeDescriptions":{"typeIdentifier":"t_rational_4294967296_by_1","typeString":"int_const 4294967296"}},"src":"2099:13:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e2033322062697473","id":1422,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2114:41:12","typeDescriptions":{"typeIdentifier":"t_stringliteral_c907489dafcfb622d3b83f2657a14d6da2f59e0de3116af0d6a80554c1a7cb19","typeString":"literal_string \"SafeCast: value doesn't fit in 32 bits\""},"value":"SafeCast: value doesn't fit in 32 bits"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_c907489dafcfb622d3b83f2657a14d6da2f59e0de3116af0d6a80554c1a7cb19","typeString":"literal_string \"SafeCast: value doesn't fit in 32 bits\""}],"id":1416,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2091:7:12","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1423,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2091:65:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1424,"nodeType":"ExpressionStatement","src":"2091:65:12"},{"expression":{"arguments":[{"id":1427,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1411,"src":"2180:5:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1426,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2173:6:12","typeDescriptions":{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"},"typeName":{"id":1425,"name":"uint32","nodeType":"ElementaryTypeName","src":"2173:6:12","typeDescriptions":{}}},"id":1428,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2173:13:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"functionReturnParameters":1415,"id":1429,"nodeType":"Return","src":"2166:20:12"}]},"documentation":{"id":1409,"nodeType":"StructuredDocumentation","src":"1736:276:12","text":" @dev Returns the downcasted uint32 from uint256, reverting on\n overflow (when the input is greater than largest uint32).\n Counterpart to Solidity's `uint32` operator.\n Requirements:\n - input must fit into 32 bits"},"id":1431,"implemented":true,"kind":"function","modifiers":[],"name":"toUint32","nodeType":"FunctionDefinition","parameters":{"id":1412,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1411,"mutability":"mutable","name":"value","nodeType":"VariableDeclaration","scope":1431,"src":"2035:13:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1410,"name":"uint256","nodeType":"ElementaryTypeName","src":"2035:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2034:15:12"},"returnParameters":{"id":1415,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1414,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":1431,"src":"2073:6:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":1413,"name":"uint32","nodeType":"ElementaryTypeName","src":"2073:6:12","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"2072:8:12"},"scope":1672,"src":"2017:176:12","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1453,"nodeType":"Block","src":"2544:112:12","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1444,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1440,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1434,"src":"2562:5:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_rational_65536_by_1","typeString":"int_const 65536"},"id":1443,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":1441,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2570:1:12","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3136","id":1442,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2573:2:12","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"2570:5:12","typeDescriptions":{"typeIdentifier":"t_rational_65536_by_1","typeString":"int_const 65536"}},"src":"2562:13:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e2031362062697473","id":1445,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2577:41:12","typeDescriptions":{"typeIdentifier":"t_stringliteral_13d3a66f9e0e5c92bbe7743bcd3bdb4695009d5f3a96e5ff49718d715b484033","typeString":"literal_string \"SafeCast: value doesn't fit in 16 bits\""},"value":"SafeCast: value doesn't fit in 16 bits"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_13d3a66f9e0e5c92bbe7743bcd3bdb4695009d5f3a96e5ff49718d715b484033","typeString":"literal_string \"SafeCast: value doesn't fit in 16 bits\""}],"id":1439,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2554:7:12","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1446,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2554:65:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1447,"nodeType":"ExpressionStatement","src":"2554:65:12"},{"expression":{"arguments":[{"id":1450,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1434,"src":"2643:5:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1449,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2636:6:12","typeDescriptions":{"typeIdentifier":"t_type$_t_uint16_$","typeString":"type(uint16)"},"typeName":{"id":1448,"name":"uint16","nodeType":"ElementaryTypeName","src":"2636:6:12","typeDescriptions":{}}},"id":1451,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2636:13:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"functionReturnParameters":1438,"id":1452,"nodeType":"Return","src":"2629:20:12"}]},"documentation":{"id":1432,"nodeType":"StructuredDocumentation","src":"2199:276:12","text":" @dev Returns the downcasted uint16 from uint256, reverting on\n overflow (when the input is greater than largest uint16).\n Counterpart to Solidity's `uint16` operator.\n Requirements:\n - input must fit into 16 bits"},"id":1454,"implemented":true,"kind":"function","modifiers":[],"name":"toUint16","nodeType":"FunctionDefinition","parameters":{"id":1435,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1434,"mutability":"mutable","name":"value","nodeType":"VariableDeclaration","scope":1454,"src":"2498:13:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1433,"name":"uint256","nodeType":"ElementaryTypeName","src":"2498:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2497:15:12"},"returnParameters":{"id":1438,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1437,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":1454,"src":"2536:6:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":1436,"name":"uint16","nodeType":"ElementaryTypeName","src":"2536:6:12","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"2535:8:12"},"scope":1672,"src":"2480:176:12","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1476,"nodeType":"Block","src":"3002:109:12","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1467,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1463,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1457,"src":"3020:5:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_rational_256_by_1","typeString":"int_const 256"},"id":1466,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":1464,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3028:1:12","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"38","id":1465,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3031:1:12","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"3028:4:12","typeDescriptions":{"typeIdentifier":"t_rational_256_by_1","typeString":"int_const 256"}},"src":"3020:12:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e20382062697473","id":1468,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3034:40:12","typeDescriptions":{"typeIdentifier":"t_stringliteral_2610961ba53259047cd57c60366c5ad0b8aabf5eb4132487619b736715a740d1","typeString":"literal_string \"SafeCast: value doesn't fit in 8 bits\""},"value":"SafeCast: value doesn't fit in 8 bits"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_2610961ba53259047cd57c60366c5ad0b8aabf5eb4132487619b736715a740d1","typeString":"literal_string \"SafeCast: value doesn't fit in 8 bits\""}],"id":1462,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3012:7:12","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1469,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3012:63:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1470,"nodeType":"ExpressionStatement","src":"3012:63:12"},{"expression":{"arguments":[{"id":1473,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1457,"src":"3098:5:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1472,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3092:5:12","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":1471,"name":"uint8","nodeType":"ElementaryTypeName","src":"3092:5:12","typeDescriptions":{}}},"id":1474,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3092:12:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"functionReturnParameters":1461,"id":1475,"nodeType":"Return","src":"3085:19:12"}]},"documentation":{"id":1455,"nodeType":"StructuredDocumentation","src":"2662:273:12","text":" @dev Returns the downcasted uint8 from uint256, reverting on\n overflow (when the input is greater than largest uint8).\n Counterpart to Solidity's `uint8` operator.\n Requirements:\n - input must fit into 8 bits."},"id":1477,"implemented":true,"kind":"function","modifiers":[],"name":"toUint8","nodeType":"FunctionDefinition","parameters":{"id":1458,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1457,"mutability":"mutable","name":"value","nodeType":"VariableDeclaration","scope":1477,"src":"2957:13:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1456,"name":"uint256","nodeType":"ElementaryTypeName","src":"2957:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2956:15:12"},"returnParameters":{"id":1461,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1460,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":1477,"src":"2995:5:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":1459,"name":"uint8","nodeType":"ElementaryTypeName","src":"2995:5:12","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"2994:7:12"},"scope":1672,"src":"2940:171:12","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1497,"nodeType":"Block","src":"3347:103:12","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":1488,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1486,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1480,"src":"3365:5:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"hexValue":"30","id":1487,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3374:1:12","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3365:10:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616665436173743a2076616c7565206d75737420626520706f736974697665","id":1489,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3377:34:12","typeDescriptions":{"typeIdentifier":"t_stringliteral_74e6d3a4204092bea305532ded31d3763fc378e46be3884a93ceff08a0761807","typeString":"literal_string \"SafeCast: value must be positive\""},"value":"SafeCast: value must be positive"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_74e6d3a4204092bea305532ded31d3763fc378e46be3884a93ceff08a0761807","typeString":"literal_string \"SafeCast: value must be positive\""}],"id":1485,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3357:7:12","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1490,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3357:55:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1491,"nodeType":"ExpressionStatement","src":"3357:55:12"},{"expression":{"arguments":[{"id":1494,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1480,"src":"3437:5:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":1493,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3429:7:12","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":1492,"name":"uint256","nodeType":"ElementaryTypeName","src":"3429:7:12","typeDescriptions":{}}},"id":1495,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3429:14:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":1484,"id":1496,"nodeType":"Return","src":"3422:21:12"}]},"documentation":{"id":1478,"nodeType":"StructuredDocumentation","src":"3117:160:12","text":" @dev Converts a signed int256 into an unsigned uint256.\n Requirements:\n - input must be greater than or equal to 0."},"id":1498,"implemented":true,"kind":"function","modifiers":[],"name":"toUint256","nodeType":"FunctionDefinition","parameters":{"id":1481,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1480,"mutability":"mutable","name":"value","nodeType":"VariableDeclaration","scope":1498,"src":"3301:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":1479,"name":"int256","nodeType":"ElementaryTypeName","src":"3301:6:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"3300:14:12"},"returnParameters":{"id":1484,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1483,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":1498,"src":"3338:7:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1482,"name":"uint256","nodeType":"ElementaryTypeName","src":"3338:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3337:9:12"},"scope":1672,"src":"3282:168:12","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1527,"nodeType":"Block","src":"3874:134:12","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":1518,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":1512,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1507,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1501,"src":"3892:5:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_minus_170141183460469231731687303715884105728_by_1","typeString":"int_const -170...(32 digits omitted)...5728"},"id":1511,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":1509,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"3901:2:12","subExpression":{"hexValue":"32","id":1508,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3902:1:12","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"typeDescriptions":{"typeIdentifier":"t_rational_minus_2_by_1","typeString":"int_const -2"}},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"313237","id":1510,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3905:3:12","typeDescriptions":{"typeIdentifier":"t_rational_127_by_1","typeString":"int_const 127"},"value":"127"},"src":"3901:7:12","typeDescriptions":{"typeIdentifier":"t_rational_minus_170141183460469231731687303715884105728_by_1","typeString":"int_const -170...(32 digits omitted)...5728"}},"src":"3892:16:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":1517,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1513,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1501,"src":"3912:5:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_rational_170141183460469231731687303715884105728_by_1","typeString":"int_const 1701...(31 digits omitted)...5728"},"id":1516,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":1514,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3920:1:12","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"313237","id":1515,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3923:3:12","typeDescriptions":{"typeIdentifier":"t_rational_127_by_1","typeString":"int_const 127"},"value":"127"},"src":"3920:6:12","typeDescriptions":{"typeIdentifier":"t_rational_170141183460469231731687303715884105728_by_1","typeString":"int_const 1701...(31 digits omitted)...5728"}},"src":"3912:14:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"3892:34:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e203132382062697473","id":1519,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3928:42:12","typeDescriptions":{"typeIdentifier":"t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c","typeString":"literal_string \"SafeCast: value doesn't fit in 128 bits\""},"value":"SafeCast: value doesn't fit in 128 bits"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c","typeString":"literal_string \"SafeCast: value doesn't fit in 128 bits\""}],"id":1506,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3884:7:12","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1520,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3884:87:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1521,"nodeType":"ExpressionStatement","src":"3884:87:12"},{"expression":{"arguments":[{"id":1524,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1501,"src":"3995:5:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":1523,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3988:6:12","typeDescriptions":{"typeIdentifier":"t_type$_t_int128_$","typeString":"type(int128)"},"typeName":{"id":1522,"name":"int128","nodeType":"ElementaryTypeName","src":"3988:6:12","typeDescriptions":{}}},"id":1525,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3988:13:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"functionReturnParameters":1505,"id":1526,"nodeType":"Return","src":"3981:20:12"}]},"documentation":{"id":1499,"nodeType":"StructuredDocumentation","src":"3456:350:12","text":" @dev Returns the downcasted int128 from int256, reverting on\n overflow (when the input is less than smallest int128 or\n greater than largest int128).\n Counterpart to Solidity's `int128` operator.\n Requirements:\n - input must fit into 128 bits\n _Available since v3.1._"},"id":1528,"implemented":true,"kind":"function","modifiers":[],"name":"toInt128","nodeType":"FunctionDefinition","parameters":{"id":1502,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1501,"mutability":"mutable","name":"value","nodeType":"VariableDeclaration","scope":1528,"src":"3829:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":1500,"name":"int256","nodeType":"ElementaryTypeName","src":"3829:6:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"3828:14:12"},"returnParameters":{"id":1505,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1504,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":1528,"src":"3866:6:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"},"typeName":{"id":1503,"name":"int128","nodeType":"ElementaryTypeName","src":"3866:6:12","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"visibility":"internal"}],"src":"3865:8:12"},"scope":1672,"src":"3811:197:12","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1557,"nodeType":"Block","src":"4425:130:12","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":1548,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":1542,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1537,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1531,"src":"4443:5:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_minus_9223372036854775808_by_1","typeString":"int_const -9223372036854775808"},"id":1541,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":1539,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"4452:2:12","subExpression":{"hexValue":"32","id":1538,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4453:1:12","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"typeDescriptions":{"typeIdentifier":"t_rational_minus_2_by_1","typeString":"int_const -2"}},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3633","id":1540,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4456:2:12","typeDescriptions":{"typeIdentifier":"t_rational_63_by_1","typeString":"int_const 63"},"value":"63"},"src":"4452:6:12","typeDescriptions":{"typeIdentifier":"t_rational_minus_9223372036854775808_by_1","typeString":"int_const -9223372036854775808"}},"src":"4443:15:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":1547,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1543,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1531,"src":"4462:5:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_rational_9223372036854775808_by_1","typeString":"int_const 9223372036854775808"},"id":1546,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":1544,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4470:1:12","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3633","id":1545,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4473:2:12","typeDescriptions":{"typeIdentifier":"t_rational_63_by_1","typeString":"int_const 63"},"value":"63"},"src":"4470:5:12","typeDescriptions":{"typeIdentifier":"t_rational_9223372036854775808_by_1","typeString":"int_const 9223372036854775808"}},"src":"4462:13:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"4443:32:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e2036342062697473","id":1549,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4477:41:12","typeDescriptions":{"typeIdentifier":"t_stringliteral_93ae0c6bf6ffaece591a770b1865daa9f65157e541970aa9d8dc5f89a9490939","typeString":"literal_string \"SafeCast: value doesn't fit in 64 bits\""},"value":"SafeCast: value doesn't fit in 64 bits"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_93ae0c6bf6ffaece591a770b1865daa9f65157e541970aa9d8dc5f89a9490939","typeString":"literal_string \"SafeCast: value doesn't fit in 64 bits\""}],"id":1536,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4435:7:12","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1550,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4435:84:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1551,"nodeType":"ExpressionStatement","src":"4435:84:12"},{"expression":{"arguments":[{"id":1554,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1531,"src":"4542:5:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":1553,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4536:5:12","typeDescriptions":{"typeIdentifier":"t_type$_t_int64_$","typeString":"type(int64)"},"typeName":{"id":1552,"name":"int64","nodeType":"ElementaryTypeName","src":"4536:5:12","typeDescriptions":{}}},"id":1555,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4536:12:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"functionReturnParameters":1535,"id":1556,"nodeType":"Return","src":"4529:19:12"}]},"documentation":{"id":1529,"nodeType":"StructuredDocumentation","src":"4014:345:12","text":" @dev Returns the downcasted int64 from int256, reverting on\n overflow (when the input is less than smallest int64 or\n greater than largest int64).\n Counterpart to Solidity's `int64` operator.\n Requirements:\n - input must fit into 64 bits\n _Available since v3.1._"},"id":1558,"implemented":true,"kind":"function","modifiers":[],"name":"toInt64","nodeType":"FunctionDefinition","parameters":{"id":1532,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1531,"mutability":"mutable","name":"value","nodeType":"VariableDeclaration","scope":1558,"src":"4381:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":1530,"name":"int256","nodeType":"ElementaryTypeName","src":"4381:6:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"4380:14:12"},"returnParameters":{"id":1535,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1534,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":1558,"src":"4418:5:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"},"typeName":{"id":1533,"name":"int64","nodeType":"ElementaryTypeName","src":"4418:5:12","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"visibility":"internal"}],"src":"4417:7:12"},"scope":1672,"src":"4364:191:12","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1587,"nodeType":"Block","src":"4972:130:12","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":1578,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":1572,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1567,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1561,"src":"4990:5:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_minus_2147483648_by_1","typeString":"int_const -2147483648"},"id":1571,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":1569,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"4999:2:12","subExpression":{"hexValue":"32","id":1568,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5000:1:12","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"typeDescriptions":{"typeIdentifier":"t_rational_minus_2_by_1","typeString":"int_const -2"}},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3331","id":1570,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5003:2:12","typeDescriptions":{"typeIdentifier":"t_rational_31_by_1","typeString":"int_const 31"},"value":"31"},"src":"4999:6:12","typeDescriptions":{"typeIdentifier":"t_rational_minus_2147483648_by_1","typeString":"int_const -2147483648"}},"src":"4990:15:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":1577,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1573,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1561,"src":"5009:5:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_rational_2147483648_by_1","typeString":"int_const 2147483648"},"id":1576,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":1574,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5017:1:12","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3331","id":1575,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5020:2:12","typeDescriptions":{"typeIdentifier":"t_rational_31_by_1","typeString":"int_const 31"},"value":"31"},"src":"5017:5:12","typeDescriptions":{"typeIdentifier":"t_rational_2147483648_by_1","typeString":"int_const 2147483648"}},"src":"5009:13:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"4990:32:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e2033322062697473","id":1579,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5024:41:12","typeDescriptions":{"typeIdentifier":"t_stringliteral_c907489dafcfb622d3b83f2657a14d6da2f59e0de3116af0d6a80554c1a7cb19","typeString":"literal_string \"SafeCast: value doesn't fit in 32 bits\""},"value":"SafeCast: value doesn't fit in 32 bits"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_c907489dafcfb622d3b83f2657a14d6da2f59e0de3116af0d6a80554c1a7cb19","typeString":"literal_string \"SafeCast: value doesn't fit in 32 bits\""}],"id":1566,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4982:7:12","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1580,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4982:84:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1581,"nodeType":"ExpressionStatement","src":"4982:84:12"},{"expression":{"arguments":[{"id":1584,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1561,"src":"5089:5:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":1583,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5083:5:12","typeDescriptions":{"typeIdentifier":"t_type$_t_int32_$","typeString":"type(int32)"},"typeName":{"id":1582,"name":"int32","nodeType":"ElementaryTypeName","src":"5083:5:12","typeDescriptions":{}}},"id":1585,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5083:12:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"functionReturnParameters":1565,"id":1586,"nodeType":"Return","src":"5076:19:12"}]},"documentation":{"id":1559,"nodeType":"StructuredDocumentation","src":"4561:345:12","text":" @dev Returns the downcasted int32 from int256, reverting on\n overflow (when the input is less than smallest int32 or\n greater than largest int32).\n Counterpart to Solidity's `int32` operator.\n Requirements:\n - input must fit into 32 bits\n _Available since v3.1._"},"id":1588,"implemented":true,"kind":"function","modifiers":[],"name":"toInt32","nodeType":"FunctionDefinition","parameters":{"id":1562,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1561,"mutability":"mutable","name":"value","nodeType":"VariableDeclaration","scope":1588,"src":"4928:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":1560,"name":"int256","nodeType":"ElementaryTypeName","src":"4928:6:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"4927:14:12"},"returnParameters":{"id":1565,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1564,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":1588,"src":"4965:5:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"},"typeName":{"id":1563,"name":"int32","nodeType":"ElementaryTypeName","src":"4965:5:12","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"visibility":"internal"}],"src":"4964:7:12"},"scope":1672,"src":"4911:191:12","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1617,"nodeType":"Block","src":"5519:130:12","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":1608,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":1602,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1597,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1591,"src":"5537:5:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_minus_32768_by_1","typeString":"int_const -32768"},"id":1601,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":1599,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"5546:2:12","subExpression":{"hexValue":"32","id":1598,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5547:1:12","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"typeDescriptions":{"typeIdentifier":"t_rational_minus_2_by_1","typeString":"int_const -2"}},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3135","id":1600,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5550:2:12","typeDescriptions":{"typeIdentifier":"t_rational_15_by_1","typeString":"int_const 15"},"value":"15"},"src":"5546:6:12","typeDescriptions":{"typeIdentifier":"t_rational_minus_32768_by_1","typeString":"int_const -32768"}},"src":"5537:15:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":1607,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1603,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1591,"src":"5556:5:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_rational_32768_by_1","typeString":"int_const 32768"},"id":1606,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":1604,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5564:1:12","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3135","id":1605,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5567:2:12","typeDescriptions":{"typeIdentifier":"t_rational_15_by_1","typeString":"int_const 15"},"value":"15"},"src":"5564:5:12","typeDescriptions":{"typeIdentifier":"t_rational_32768_by_1","typeString":"int_const 32768"}},"src":"5556:13:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5537:32:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e2031362062697473","id":1609,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5571:41:12","typeDescriptions":{"typeIdentifier":"t_stringliteral_13d3a66f9e0e5c92bbe7743bcd3bdb4695009d5f3a96e5ff49718d715b484033","typeString":"literal_string \"SafeCast: value doesn't fit in 16 bits\""},"value":"SafeCast: value doesn't fit in 16 bits"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_13d3a66f9e0e5c92bbe7743bcd3bdb4695009d5f3a96e5ff49718d715b484033","typeString":"literal_string \"SafeCast: value doesn't fit in 16 bits\""}],"id":1596,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5529:7:12","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1610,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5529:84:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1611,"nodeType":"ExpressionStatement","src":"5529:84:12"},{"expression":{"arguments":[{"id":1614,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1591,"src":"5636:5:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":1613,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5630:5:12","typeDescriptions":{"typeIdentifier":"t_type$_t_int16_$","typeString":"type(int16)"},"typeName":{"id":1612,"name":"int16","nodeType":"ElementaryTypeName","src":"5630:5:12","typeDescriptions":{}}},"id":1615,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5630:12:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"functionReturnParameters":1595,"id":1616,"nodeType":"Return","src":"5623:19:12"}]},"documentation":{"id":1589,"nodeType":"StructuredDocumentation","src":"5108:345:12","text":" @dev Returns the downcasted int16 from int256, reverting on\n overflow (when the input is less than smallest int16 or\n greater than largest int16).\n Counterpart to Solidity's `int16` operator.\n Requirements:\n - input must fit into 16 bits\n _Available since v3.1._"},"id":1618,"implemented":true,"kind":"function","modifiers":[],"name":"toInt16","nodeType":"FunctionDefinition","parameters":{"id":1592,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1591,"mutability":"mutable","name":"value","nodeType":"VariableDeclaration","scope":1618,"src":"5475:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":1590,"name":"int256","nodeType":"ElementaryTypeName","src":"5475:6:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"5474:14:12"},"returnParameters":{"id":1595,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1594,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":1618,"src":"5512:5:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"},"typeName":{"id":1593,"name":"int16","nodeType":"ElementaryTypeName","src":"5512:5:12","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"visibility":"internal"}],"src":"5511:7:12"},"scope":1672,"src":"5458:191:12","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1647,"nodeType":"Block","src":"6060:126:12","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":1638,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":1632,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1627,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1621,"src":"6078:5:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_minus_128_by_1","typeString":"int_const -128"},"id":1631,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":1629,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"6087:2:12","subExpression":{"hexValue":"32","id":1628,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6088:1:12","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"typeDescriptions":{"typeIdentifier":"t_rational_minus_2_by_1","typeString":"int_const -2"}},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"37","id":1630,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6091:1:12","typeDescriptions":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"},"value":"7"},"src":"6087:5:12","typeDescriptions":{"typeIdentifier":"t_rational_minus_128_by_1","typeString":"int_const -128"}},"src":"6078:14:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":1637,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1633,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1621,"src":"6096:5:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"id":1636,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":1634,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6104:1:12","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"37","id":1635,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6107:1:12","typeDescriptions":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"},"value":"7"},"src":"6104:4:12","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"}},"src":"6096:12:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6078:30:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e20382062697473","id":1639,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6110:40:12","typeDescriptions":{"typeIdentifier":"t_stringliteral_2610961ba53259047cd57c60366c5ad0b8aabf5eb4132487619b736715a740d1","typeString":"literal_string \"SafeCast: value doesn't fit in 8 bits\""},"value":"SafeCast: value doesn't fit in 8 bits"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_2610961ba53259047cd57c60366c5ad0b8aabf5eb4132487619b736715a740d1","typeString":"literal_string \"SafeCast: value doesn't fit in 8 bits\""}],"id":1626,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"6070:7:12","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1640,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6070:81:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1641,"nodeType":"ExpressionStatement","src":"6070:81:12"},{"expression":{"arguments":[{"id":1644,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1621,"src":"6173:5:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":1643,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6168:4:12","typeDescriptions":{"typeIdentifier":"t_type$_t_int8_$","typeString":"type(int8)"},"typeName":{"id":1642,"name":"int8","nodeType":"ElementaryTypeName","src":"6168:4:12","typeDescriptions":{}}},"id":1645,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6168:11:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"functionReturnParameters":1625,"id":1646,"nodeType":"Return","src":"6161:18:12"}]},"documentation":{"id":1619,"nodeType":"StructuredDocumentation","src":"5655:341:12","text":" @dev Returns the downcasted int8 from int256, reverting on\n overflow (when the input is less than smallest int8 or\n greater than largest int8).\n Counterpart to Solidity's `int8` operator.\n Requirements:\n - input must fit into 8 bits.\n _Available since v3.1._"},"id":1648,"implemented":true,"kind":"function","modifiers":[],"name":"toInt8","nodeType":"FunctionDefinition","parameters":{"id":1622,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1621,"mutability":"mutable","name":"value","nodeType":"VariableDeclaration","scope":1648,"src":"6017:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":1620,"name":"int256","nodeType":"ElementaryTypeName","src":"6017:6:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"6016:14:12"},"returnParameters":{"id":1625,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1624,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":1648,"src":"6054:4:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"},"typeName":{"id":1623,"name":"int8","nodeType":"ElementaryTypeName","src":"6054:4:12","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"visibility":"internal"}],"src":"6053:6:12"},"scope":1672,"src":"6001:185:12","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1670,"nodeType":"Block","src":"6426:114:12","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1661,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1657,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1651,"src":"6444:5:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_rational_57896044618658097711785492504343953926634992332820282019728792003956564819968_by_1","typeString":"int_const 5789...(69 digits omitted)...9968"},"id":1660,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":1658,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6452:1:12","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"323535","id":1659,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6455:3:12","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"255"},"src":"6452:6:12","typeDescriptions":{"typeIdentifier":"t_rational_57896044618658097711785492504343953926634992332820282019728792003956564819968_by_1","typeString":"int_const 5789...(69 digits omitted)...9968"}},"src":"6444:14:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e20616e20696e74323536","id":1662,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6460:42:12","typeDescriptions":{"typeIdentifier":"t_stringliteral_d70dcf21692b3c91b4c5fbb89ed57f464aa42efbe5b0ea96c4acb7c080144227","typeString":"literal_string \"SafeCast: value doesn't fit in an int256\""},"value":"SafeCast: value doesn't fit in an int256"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_d70dcf21692b3c91b4c5fbb89ed57f464aa42efbe5b0ea96c4acb7c080144227","typeString":"literal_string \"SafeCast: value doesn't fit in an int256\""}],"id":1656,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"6436:7:12","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1663,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6436:67:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1664,"nodeType":"ExpressionStatement","src":"6436:67:12"},{"expression":{"arguments":[{"id":1667,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1651,"src":"6527:5:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1666,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6520:6:12","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":1665,"name":"int256","nodeType":"ElementaryTypeName","src":"6520:6:12","typeDescriptions":{}}},"id":1668,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6520:13:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":1655,"id":1669,"nodeType":"Return","src":"6513:20:12"}]},"documentation":{"id":1649,"nodeType":"StructuredDocumentation","src":"6192:165:12","text":" @dev Converts an unsigned uint256 into a signed int256.\n Requirements:\n - input must be less than or equal to maxInt256."},"id":1671,"implemented":true,"kind":"function","modifiers":[],"name":"toInt256","nodeType":"FunctionDefinition","parameters":{"id":1652,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1651,"mutability":"mutable","name":"value","nodeType":"VariableDeclaration","scope":1671,"src":"6380:13:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1650,"name":"uint256","nodeType":"ElementaryTypeName","src":"6380:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6379:15:12"},"returnParameters":{"id":1655,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1654,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":1671,"src":"6418:6:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":1653,"name":"int256","nodeType":"ElementaryTypeName","src":"6418:6:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"6417:8:12"},"scope":1672,"src":"6362:178:12","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":1673,"src":"777:5765:12"}],"src":"33:6510:12"},"id":12},"contracts/mocks/sale/FixedOrderInventorySaleMock.sol":{"ast":{"absolutePath":"contracts/mocks/sale/FixedOrderInventorySaleMock.sol","exportedSymbols":{"FixedOrderInventorySale":[4567],"FixedOrderInventorySaleMock":[1838]},"id":1839,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":1674,"literals":["solidity",">=","0.7",".6","<","0.8",".0"],"nodeType":"PragmaDirective","src":"33:31:13"},{"absolutePath":"contracts/sale/FixedOrderInventorySale.sol","file":"../../sale/FixedOrderInventorySale.sol","id":1676,"nodeType":"ImportDirective","scope":1839,"sourceUnit":4568,"src":"66:79:13","symbolAliases":[{"foreign":{"id":1675,"name":"FixedOrderInventorySale","nodeType":"Identifier","overloadedDeclarations":[],"src":"74:23:13","typeDescriptions":{}}}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":1678,"name":"FixedOrderInventorySale","nodeType":"UserDefinedTypeName","referencedDeclaration":4567,"src":"480:23:13","typeDescriptions":{"typeIdentifier":"t_contract$_FixedOrderInventorySale_$4567","typeString":"contract FixedOrderInventorySale"}},"id":1679,"nodeType":"InheritanceSpecifier","src":"480:23:13"}],"contractDependencies":[22,103,646,715,736,812,4567,4753,5671,6694,7346],"contractKind":"contract","documentation":{"id":1677,"nodeType":"StructuredDocumentation","src":"147:292:13","text":" @title FixedOrderInventorySaleMock\n A FixedPricesSale contract mock implementation that handles the purchase of NFTs of an inventory\n contract to a receipient. The provisioning of the NFTs occurs in a sequential order defined by a\n token list. Only a single SKU is supported."},"fullyImplemented":true,"id":1838,"linearizedBaseContracts":[1838,4567,4753,6694,646,715,812,103,22,736,7346,5671],"name":"FixedOrderInventorySaleMock","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"id":1684,"name":"DeliveryData","nodeType":"EventDefinition","parameters":{"id":1683,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1682,"indexed":false,"mutability":"mutable","name":"tokens","nodeType":"VariableDeclaration","scope":1684,"src":"529:16:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":1680,"name":"bytes32","nodeType":"ElementaryTypeName","src":"529:7:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":1681,"nodeType":"ArrayTypeName","src":"529:9:13","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"src":"528:18:13"},"src":"510:37:13"},{"body":{"id":1699,"nodeType":"Block","src":"1187:2:13","statements":[]},"documentation":{"id":1685,"nodeType":"StructuredDocumentation","src":"553:435:13","text":" Constructor.\n @dev Reverts if `inventory_` is the zero address.\n @dev Emits the `MagicValues` event.\n @dev Emits the `Paused` event.\n @param inventory_ The IFixedOrderInventoryTransferable contract from which the sale\ninventory NFTs are attributed from.\n @param payoutWallet The payout wallet.\n @param tokensPerSkuCapacity the cap for the number of tokens managed per SKU."},"id":1700,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":1694,"name":"inventory_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1687,"src":"1139:10:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1695,"name":"payoutWallet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1689,"src":"1151:12:13","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":1696,"name":"tokensPerSkuCapacity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1691,"src":"1165:20:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1697,"modifierName":{"id":1693,"name":"FixedOrderInventorySale","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4567,"src":"1115:23:13","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedOrderInventorySale_$4567_$","typeString":"type(contract FixedOrderInventorySale)"}},"nodeType":"ModifierInvocation","src":"1115:71:13"}],"name":"","nodeType":"FunctionDefinition","parameters":{"id":1692,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1687,"mutability":"mutable","name":"inventory_","nodeType":"VariableDeclaration","scope":1700,"src":"1014:18:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1686,"name":"address","nodeType":"ElementaryTypeName","src":"1014:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1689,"mutability":"mutable","name":"payoutWallet","nodeType":"VariableDeclaration","scope":1700,"src":"1042:28:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":1688,"name":"address","nodeType":"ElementaryTypeName","src":"1042:15:13","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":1691,"mutability":"mutable","name":"tokensPerSkuCapacity","nodeType":"VariableDeclaration","scope":1700,"src":"1080:28:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1690,"name":"uint256","nodeType":"ElementaryTypeName","src":"1080:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1004:110:13"},"returnParameters":{"id":1698,"nodeType":"ParameterList","parameters":[],"src":"1187:0:13"},"scope":1838,"src":"993:196:13","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":1718,"nodeType":"Block","src":"1969:97:13","statements":[{"expression":{"arguments":[{"id":1711,"name":"sku","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1703,"src":"1990:3:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":1712,"name":"tokenList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4266,"src":"1995:9:13","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":1713,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"1995:16:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1714,"name":"maxQuantityPerPurchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1705,"src":"2013:22:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1715,"name":"notificationsReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1707,"src":"2037:21:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":1710,"name":"_createSku","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6383,"src":"1979:10:13","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_uint256_$_t_uint256_$_t_address_$returns$__$","typeString":"function (bytes32,uint256,uint256,address)"}},"id":1716,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1979:80:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1717,"nodeType":"ExpressionStatement","src":"1979:80:13"}]},"documentation":{"id":1701,"nodeType":"StructuredDocumentation","src":"1195:635:13","text":" Creates an SKU.\n @dev Reverts if the initial sale supply is empty.\n @dev Reverts if `sku` already exists.\n @dev Reverts if `notificationsReceiver` is not the zero address and is not a contract\n  address.\n @dev Reverts if the update results in too many SKUs.\n @dev Emits the `SkuCreation` event.\n @param sku The SKU identifier.\n @param maxQuantityPerPurchase The maximum allowed quantity for a single purchase.\n @param notificationsReceiver The purchase notifications receiver contract address. If\n  set to the zero address, the notification is not enabled."},"functionSelector":"85b3cfac","id":1719,"implemented":true,"kind":"function","modifiers":[],"name":"createSku","nodeType":"FunctionDefinition","parameters":{"id":1708,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1703,"mutability":"mutable","name":"sku","nodeType":"VariableDeclaration","scope":1719,"src":"1863:11:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1702,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1863:7:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1705,"mutability":"mutable","name":"maxQuantityPerPurchase","nodeType":"VariableDeclaration","scope":1719,"src":"1884:30:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1704,"name":"uint256","nodeType":"ElementaryTypeName","src":"1884:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1707,"mutability":"mutable","name":"notificationsReceiver","nodeType":"VariableDeclaration","scope":1719,"src":"1924:29:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1706,"name":"address","nodeType":"ElementaryTypeName","src":"1924:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1853:106:13"},"returnParameters":{"id":1709,"nodeType":"ParameterList","parameters":[],"src":"1969:0:13"},"scope":1838,"src":"1835:231:13","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":1727,"nodeType":"Block","src":"2224:37:13","statements":[{"expression":{"id":1725,"name":"_skusCapacity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5785,"src":"2241:13:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":1724,"id":1726,"nodeType":"Return","src":"2234:20:13"}]},"documentation":{"id":1720,"nodeType":"StructuredDocumentation","src":"2072:89:13","text":" Retrieves the sale SKU capacity.\n @return The sale SKU capacity."},"functionSelector":"3628bd93","id":1728,"implemented":true,"kind":"function","modifiers":[],"name":"getSkuCapacity","nodeType":"FunctionDefinition","parameters":{"id":1721,"nodeType":"ParameterList","parameters":[],"src":"2189:2:13"},"returnParameters":{"id":1724,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1723,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":1728,"src":"2215:7:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1722,"name":"uint256","nodeType":"ElementaryTypeName","src":"2215:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2214:9:13"},"scope":1838,"src":"2166:95:13","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":1736,"nodeType":"Block","src":"2450:45:13","statements":[{"expression":{"id":1734,"name":"_tokensPerSkuCapacity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5787,"src":"2467:21:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":1733,"id":1735,"nodeType":"Return","src":"2460:28:13"}]},"documentation":{"id":1729,"nodeType":"StructuredDocumentation","src":"2267:111:13","text":" Retrieves the sale tokens-per-sku capacity.\n @return The sale tokens-per-sku capacity."},"functionSelector":"451b31a2","id":1737,"implemented":true,"kind":"function","modifiers":[],"name":"getTokensPerSkuCapacity","nodeType":"FunctionDefinition","parameters":{"id":1730,"nodeType":"ParameterList","parameters":[],"src":"2415:2:13"},"returnParameters":{"id":1733,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1732,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":1737,"src":"2441:7:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1731,"name":"uint256","nodeType":"ElementaryTypeName","src":"2441:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2440:9:13"},"scope":1838,"src":"2383:112:13","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":1746,"nodeType":"Block","src":"2646:33:13","statements":[{"expression":{"id":1744,"name":"tokenList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4266,"src":"2663:9:13","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"functionReturnParameters":1743,"id":1745,"nodeType":"Return","src":"2656:16:13"}]},"documentation":{"id":1738,"nodeType":"StructuredDocumentation","src":"2501:75:13","text":" Retrieves the token list.\n @return The token list."},"functionSelector":"273cbaa0","id":1747,"implemented":true,"kind":"function","modifiers":[],"name":"getTokenList","nodeType":"FunctionDefinition","parameters":{"id":1739,"nodeType":"ParameterList","parameters":[],"src":"2602:2:13"},"returnParameters":{"id":1743,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1742,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":1747,"src":"2628:16:13","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1740,"name":"uint256","nodeType":"ElementaryTypeName","src":"2628:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1741,"nodeType":"ArrayTypeName","src":"2628:9:13","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"2627:18:13"},"scope":1838,"src":"2581:98:13","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":1836,"nodeType":"Block","src":"3599:524:13","statements":[{"assignments":[1770],"declarations":[{"constant":false,"id":1770,"mutability":"mutable","name":"purchaseData","nodeType":"VariableDeclaration","scope":1836,"src":"3609:32:13","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"},"typeName":{"id":1769,"name":"PurchaseData","nodeType":"UserDefinedTypeName","referencedDeclaration":5583,"src":"3609:12:13","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_storage_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"}},"visibility":"internal"}],"id":1771,"nodeType":"VariableDeclarationStatement","src":"3609:32:13"},{"expression":{"id":1777,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":1772,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1770,"src":"3652:12:13","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":1774,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"purchaser","nodeType":"MemberAccess","referencedDeclaration":5561,"src":"3652:22:13","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":1775,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":726,"src":"3677:10:13","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":1776,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3677:12:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"3652:37:13","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":1778,"nodeType":"ExpressionStatement","src":"3652:37:13"},{"expression":{"id":1783,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":1779,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1770,"src":"3699:12:13","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":1781,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"recipient","nodeType":"MemberAccess","referencedDeclaration":5563,"src":"3699:22:13","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":1782,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1750,"src":"3724:9:13","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"3699:34:13","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":1784,"nodeType":"ExpressionStatement","src":"3699:34:13"},{"expression":{"id":1789,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":1785,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1770,"src":"3743:12:13","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":1787,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"token","nodeType":"MemberAccess","referencedDeclaration":5565,"src":"3743:18:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":1788,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1752,"src":"3764:5:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3743:26:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1790,"nodeType":"ExpressionStatement","src":"3743:26:13"},{"expression":{"id":1795,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":1791,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1770,"src":"3779:12:13","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":1793,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"sku","nodeType":"MemberAccess","referencedDeclaration":5567,"src":"3779:16:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":1794,"name":"sku","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1754,"src":"3798:3:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"3779:22:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":1796,"nodeType":"ExpressionStatement","src":"3779:22:13"},{"expression":{"id":1801,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":1797,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1770,"src":"3811:12:13","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":1799,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"quantity","nodeType":"MemberAccess","referencedDeclaration":5569,"src":"3811:21:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":1800,"name":"quantity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1756,"src":"3835:8:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3811:32:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1802,"nodeType":"ExpressionStatement","src":"3811:32:13"},{"expression":{"id":1807,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":1803,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1770,"src":"3853:12:13","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":1805,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"userData","nodeType":"MemberAccess","referencedDeclaration":5571,"src":"3853:21:13","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":1806,"name":"userData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1758,"src":"3877:8:13","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"src":"3853:32:13","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":1808,"nodeType":"ExpressionStatement","src":"3853:32:13"},{"expression":{"id":1813,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":1809,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1770,"src":"3895:12:13","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":1811,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"totalPrice","nodeType":"MemberAccess","referencedDeclaration":5573,"src":"3895:23:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":1812,"name":"totalPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1760,"src":"3921:10:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3895:36:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1814,"nodeType":"ExpressionStatement","src":"3895:36:13"},{"expression":{"id":1819,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":1815,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1770,"src":"3941:12:13","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":1817,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"pricingData","nodeType":"MemberAccess","referencedDeclaration":5576,"src":"3941:24:13","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":1818,"name":"pricingData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1763,"src":"3968:11:13","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[] calldata"}},"src":"3941:38:13","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"id":1820,"nodeType":"ExpressionStatement","src":"3941:38:13"},{"expression":{"id":1825,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":1821,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1770,"src":"3989:12:13","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":1823,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"paymentData","nodeType":"MemberAccess","referencedDeclaration":5579,"src":"3989:24:13","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":1824,"name":"paymentData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1766,"src":"4016:11:13","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[] calldata"}},"src":"3989:38:13","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"id":1826,"nodeType":"ExpressionStatement","src":"3989:38:13"},{"expression":{"arguments":[{"id":1828,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1770,"src":"4048:12:13","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}],"id":1827,"name":"_delivery","nodeType":"Identifier","overloadedDeclarations":[4566],"referencedDeclaration":4566,"src":"4038:9:13","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_PurchaseData_$5583_memory_ptr_$returns$__$","typeString":"function (struct PurchaseLifeCycles.PurchaseData memory)"}},"id":1829,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4038:23:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1830,"nodeType":"ExpressionStatement","src":"4038:23:13"},{"eventCall":{"arguments":[{"expression":{"id":1832,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1770,"src":"4090:12:13","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":1833,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"deliveryData","nodeType":"MemberAccess","referencedDeclaration":5582,"src":"4090:25:13","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}],"id":1831,"name":"DeliveryData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1684,"src":"4077:12:13","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_array$_t_bytes32_$dyn_memory_ptr_$returns$__$","typeString":"function (bytes32[] memory)"}},"id":1834,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4077:39:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1835,"nodeType":"EmitStatement","src":"4072:44:13"}]},"documentation":{"id":1748,"nodeType":"StructuredDocumentation","src":"2685:620:13","text":" Calls the internal `_delivery()` purchase lifecycle function.\n @dev Emits the DeliveryData event.\n @param recipient The recipient of the purchase.\n @param token The token to use as the payment currency.\n @param sku The identifier of the SKU to purchase.\n @param quantity The quantity to purchase.\n @param userData Optional extra user input data.\n @param totalPrice The amount of `token` paid.\n @param pricingData Data set by the `_pricing()` purchase lifecycle function.\n @param paymentData Data set by the `_payment()` puchase lifecycle function."},"functionSelector":"15469171","id":1837,"implemented":true,"kind":"function","modifiers":[],"name":"underscoreDelivery","nodeType":"FunctionDefinition","parameters":{"id":1767,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1750,"mutability":"mutable","name":"recipient","nodeType":"VariableDeclaration","scope":1837,"src":"3347:25:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":1749,"name":"address","nodeType":"ElementaryTypeName","src":"3347:15:13","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":1752,"mutability":"mutable","name":"token","nodeType":"VariableDeclaration","scope":1837,"src":"3382:13:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1751,"name":"address","nodeType":"ElementaryTypeName","src":"3382:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1754,"mutability":"mutable","name":"sku","nodeType":"VariableDeclaration","scope":1837,"src":"3405:11:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1753,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3405:7:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1756,"mutability":"mutable","name":"quantity","nodeType":"VariableDeclaration","scope":1837,"src":"3426:16:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1755,"name":"uint256","nodeType":"ElementaryTypeName","src":"3426:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1758,"mutability":"mutable","name":"userData","nodeType":"VariableDeclaration","scope":1837,"src":"3452:23:13","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":1757,"name":"bytes","nodeType":"ElementaryTypeName","src":"3452:5:13","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":1760,"mutability":"mutable","name":"totalPrice","nodeType":"VariableDeclaration","scope":1837,"src":"3485:18:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1759,"name":"uint256","nodeType":"ElementaryTypeName","src":"3485:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1763,"mutability":"mutable","name":"pricingData","nodeType":"VariableDeclaration","scope":1837,"src":"3513:30:13","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":1761,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3513:7:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":1762,"nodeType":"ArrayTypeName","src":"3513:9:13","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"},{"constant":false,"id":1766,"mutability":"mutable","name":"paymentData","nodeType":"VariableDeclaration","scope":1837,"src":"3553:30:13","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":1764,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3553:7:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":1765,"nodeType":"ArrayTypeName","src":"3553:9:13","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"src":"3337:252:13"},"returnParameters":{"id":1768,"nodeType":"ParameterList","parameters":[],"src":"3599:0:13"},"scope":1838,"src":"3310:813:13","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":1839,"src":"440:3685:13"}],"src":"33:4093:13"},"id":13},"contracts/mocks/sale/FixedPricesSaleMock.sol":{"ast":{"absolutePath":"contracts/mocks/sale/FixedPricesSaleMock.sol","exportedSymbols":{"FixedPricesSale":[4753],"FixedPricesSaleMock":[1880]},"id":1881,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":1840,"literals":["solidity",">=","0.7",".6","<","0.8",".0"],"nodeType":"PragmaDirective","src":"33:31:14"},{"absolutePath":"contracts/sale/FixedPricesSale.sol","file":"../../sale/FixedPricesSale.sol","id":1842,"nodeType":"ImportDirective","scope":1881,"sourceUnit":4754,"src":"66:63:14","symbolAliases":[{"foreign":{"id":1841,"name":"FixedPricesSale","nodeType":"Identifier","overloadedDeclarations":[],"src":"74:15:14","typeDescriptions":{}}}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":1843,"name":"FixedPricesSale","nodeType":"UserDefinedTypeName","referencedDeclaration":4753,"src":"163:15:14","typeDescriptions":{"typeIdentifier":"t_contract$_FixedPricesSale_$4753","typeString":"contract FixedPricesSale"}},"id":1844,"nodeType":"InheritanceSpecifier","src":"163:15:14"}],"contractDependencies":[22,103,646,715,736,812,4753,5671,6694,7346],"contractKind":"contract","fullyImplemented":true,"id":1880,"linearizedBaseContracts":[1880,4753,6694,646,715,812,103,22,736,7346,5671],"name":"FixedPricesSaleMock","nodeType":"ContractDefinition","nodes":[{"body":{"id":1859,"nodeType":"Block","src":"693:2:14","statements":[]},"documentation":{"id":1845,"nodeType":"StructuredDocumentation","src":"185:311:14","text":" Constructor.\n @dev Emits the `MagicValues` event.\n @dev Emits the `Paused` event.\n @param payoutWallet_ the payout wallet.\n @param skusCapacity the cap for the number of managed SKUs.\n @param tokensPerSkuCapacity the cap for the number of tokens managed per SKU."},"id":1860,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":1854,"name":"payoutWallet_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1847,"src":"642:13:14","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":1855,"name":"skusCapacity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1849,"src":"657:12:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1856,"name":"tokensPerSkuCapacity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1851,"src":"671:20:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1857,"modifierName":{"id":1853,"name":"FixedPricesSale","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4753,"src":"626:15:14","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPricesSale_$4753_$","typeString":"type(contract FixedPricesSale)"}},"nodeType":"ModifierInvocation","src":"626:66:14"}],"name":"","nodeType":"FunctionDefinition","parameters":{"id":1852,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1847,"mutability":"mutable","name":"payoutWallet_","nodeType":"VariableDeclaration","scope":1860,"src":"522:29:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":1846,"name":"address","nodeType":"ElementaryTypeName","src":"522:15:14","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":1849,"mutability":"mutable","name":"skusCapacity","nodeType":"VariableDeclaration","scope":1860,"src":"561:20:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1848,"name":"uint256","nodeType":"ElementaryTypeName","src":"561:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1851,"mutability":"mutable","name":"tokensPerSkuCapacity","nodeType":"VariableDeclaration","scope":1860,"src":"591:28:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1850,"name":"uint256","nodeType":"ElementaryTypeName","src":"591:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"512:113:14"},"returnParameters":{"id":1858,"nodeType":"ParameterList","parameters":[],"src":"693:0:14"},"scope":1880,"src":"501:194:14","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":1878,"nodeType":"Block","src":"864:92:14","statements":[{"expression":{"arguments":[{"id":1872,"name":"sku","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1862,"src":"885:3:14","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":1873,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1864,"src":"890:11:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1874,"name":"maxQuantityPerPurchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1866,"src":"903:22:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1875,"name":"notificationsReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1868,"src":"927:21:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":1871,"name":"_createSku","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6383,"src":"874:10:14","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_uint256_$_t_uint256_$_t_address_$returns$__$","typeString":"function (bytes32,uint256,uint256,address)"}},"id":1876,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"874:75:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1877,"nodeType":"ExpressionStatement","src":"874:75:14"}]},"functionSelector":"2c87927b","id":1879,"implemented":true,"kind":"function","modifiers":[],"name":"createSku","nodeType":"FunctionDefinition","parameters":{"id":1869,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1862,"mutability":"mutable","name":"sku","nodeType":"VariableDeclaration","scope":1879,"src":"729:11:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1861,"name":"bytes32","nodeType":"ElementaryTypeName","src":"729:7:14","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1864,"mutability":"mutable","name":"totalSupply","nodeType":"VariableDeclaration","scope":1879,"src":"750:19:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1863,"name":"uint256","nodeType":"ElementaryTypeName","src":"750:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1866,"mutability":"mutable","name":"maxQuantityPerPurchase","nodeType":"VariableDeclaration","scope":1879,"src":"779:30:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1865,"name":"uint256","nodeType":"ElementaryTypeName","src":"779:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1868,"mutability":"mutable","name":"notificationsReceiver","nodeType":"VariableDeclaration","scope":1879,"src":"819:29:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1867,"name":"address","nodeType":"ElementaryTypeName","src":"819:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"719:135:14"},"returnParameters":{"id":1870,"nodeType":"ParameterList","parameters":[],"src":"864:0:14"},"scope":1880,"src":"701:255:14","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":1881,"src":"131:827:14"}],"src":"33:926:14"},"id":14},"contracts/mocks/sale/SaleMock.sol":{"ast":{"absolutePath":"contracts/mocks/sale/SaleMock.sol","exportedSymbols":{"EnumMap":[362],"EnumSet":[551],"Sale":[6694],"SaleMock":[2261]},"id":2262,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":1882,"literals":["solidity",">=","0.7",".6","<","0.8",".0"],"nodeType":"PragmaDirective","src":"33:31:15"},{"absolutePath":"contracts/sale/abstract/Sale.sol","file":"../../sale/abstract/Sale.sol","id":1886,"nodeType":"ImportDirective","scope":2262,"sourceUnit":6695,"src":"66:68:15","symbolAliases":[{"foreign":{"id":1883,"name":"EnumSet","nodeType":"Identifier","overloadedDeclarations":[],"src":"74:7:15","typeDescriptions":{}}},{"foreign":{"id":1884,"name":"EnumMap","nodeType":"Identifier","overloadedDeclarations":[],"src":"83:7:15","typeDescriptions":{}}},{"foreign":{"id":1885,"name":"Sale","nodeType":"Identifier","overloadedDeclarations":[],"src":"92:4:15","typeDescriptions":{}}}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":1887,"name":"Sale","nodeType":"UserDefinedTypeName","referencedDeclaration":6694,"src":"157:4:15","typeDescriptions":{"typeIdentifier":"t_contract$_Sale_$6694","typeString":"contract Sale"}},"id":1888,"nodeType":"InheritanceSpecifier","src":"157:4:15"}],"contractDependencies":[22,103,646,715,736,812,5671,6694,7346],"contractKind":"contract","fullyImplemented":true,"id":2261,"linearizedBaseContracts":[2261,6694,646,715,812,103,22,736,7346,5671],"name":"SaleMock","nodeType":"ContractDefinition","nodes":[{"id":1891,"libraryName":{"id":1889,"name":"EnumSet","nodeType":"UserDefinedTypeName","referencedDeclaration":551,"src":"174:7:15","typeDescriptions":{"typeIdentifier":"t_contract$_EnumSet_$551","typeString":"library EnumSet"}},"nodeType":"UsingForDirective","src":"168:30:15","typeName":{"id":1890,"name":"EnumSet.Set","nodeType":"UserDefinedTypeName","referencedDeclaration":373,"src":"186:11:15","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$373_storage_ptr","typeString":"struct EnumSet.Set"}}},{"id":1894,"libraryName":{"id":1892,"name":"EnumMap","nodeType":"UserDefinedTypeName","referencedDeclaration":362,"src":"209:7:15","typeDescriptions":{"typeIdentifier":"t_contract$_EnumMap_$362","typeString":"library EnumMap"}},"nodeType":"UsingForDirective","src":"203:30:15","typeName":{"id":1893,"name":"EnumMap.Map","nodeType":"UserDefinedTypeName","referencedDeclaration":119,"src":"221:11:15","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map"}}},{"anonymous":false,"id":1906,"name":"PurchaseForCalled","nodeType":"EventDefinition","parameters":{"id":1905,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1896,"indexed":false,"mutability":"mutable","name":"recipient","nodeType":"VariableDeclaration","scope":1906,"src":"263:25:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":1895,"name":"address","nodeType":"ElementaryTypeName","src":"263:15:15","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":1898,"indexed":false,"mutability":"mutable","name":"token","nodeType":"VariableDeclaration","scope":1906,"src":"290:13:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1897,"name":"address","nodeType":"ElementaryTypeName","src":"290:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1900,"indexed":false,"mutability":"mutable","name":"sku","nodeType":"VariableDeclaration","scope":1906,"src":"305:11:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1899,"name":"bytes32","nodeType":"ElementaryTypeName","src":"305:7:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1902,"indexed":false,"mutability":"mutable","name":"quantity","nodeType":"VariableDeclaration","scope":1906,"src":"318:16:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1901,"name":"uint256","nodeType":"ElementaryTypeName","src":"318:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1904,"indexed":false,"mutability":"mutable","name":"userData","nodeType":"VariableDeclaration","scope":1906,"src":"336:14:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1903,"name":"bytes","nodeType":"ElementaryTypeName","src":"336:5:15","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"262:89:15"},"src":"239:113:15"},{"body":{"id":1920,"nodeType":"Block","src":"539:2:15","statements":[]},"id":1921,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":1915,"name":"payoutWallet_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1908,"src":"488:13:15","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":1916,"name":"skusCapacity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1910,"src":"503:12:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1917,"name":"tokensPerSkuCapacity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1912,"src":"517:20:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1918,"modifierName":{"id":1914,"name":"Sale","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6694,"src":"483:4:15","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Sale_$6694_$","typeString":"type(contract Sale)"}},"nodeType":"ModifierInvocation","src":"483:55:15"}],"name":"","nodeType":"FunctionDefinition","parameters":{"id":1913,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1908,"mutability":"mutable","name":"payoutWallet_","nodeType":"VariableDeclaration","scope":1921,"src":"379:29:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":1907,"name":"address","nodeType":"ElementaryTypeName","src":"379:15:15","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":1910,"mutability":"mutable","name":"skusCapacity","nodeType":"VariableDeclaration","scope":1921,"src":"418:20:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1909,"name":"uint256","nodeType":"ElementaryTypeName","src":"418:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1912,"mutability":"mutable","name":"tokensPerSkuCapacity","nodeType":"VariableDeclaration","scope":1921,"src":"448:28:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1911,"name":"uint256","nodeType":"ElementaryTypeName","src":"448:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"369:113:15"},"returnParameters":{"id":1919,"nodeType":"ParameterList","parameters":[],"src":"539:0:15"},"scope":2261,"src":"358:183:15","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":1936,"nodeType":"Block","src":"588:102:15","statements":[{"condition":{"id":1926,"name":"paused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1923,"src":"602:6:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":1934,"nodeType":"Block","src":"649:35:15","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":1931,"name":"_unpause","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":645,"src":"663:8:15","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":1932,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"663:10:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1933,"nodeType":"ExpressionStatement","src":"663:10:15"}]},"id":1935,"nodeType":"IfStatement","src":"598:86:15","trueBody":{"id":1930,"nodeType":"Block","src":"610:33:15","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":1927,"name":"_pause","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":628,"src":"624:6:15","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":1928,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"624:8:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1929,"nodeType":"ExpressionStatement","src":"624:8:15"}]}}]},"functionSelector":"16c38b3c","id":1937,"implemented":true,"kind":"function","modifiers":[],"name":"setPaused","nodeType":"FunctionDefinition","parameters":{"id":1924,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1923,"mutability":"mutable","name":"paused","nodeType":"VariableDeclaration","scope":1937,"src":"566:11:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1922,"name":"bool","nodeType":"ElementaryTypeName","src":"566:4:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"565:13:15"},"returnParameters":{"id":1925,"nodeType":"ParameterList","parameters":[],"src":"588:0:15"},"scope":2261,"src":"547:143:15","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":1955,"nodeType":"Block","src":"859:92:15","statements":[{"expression":{"arguments":[{"id":1949,"name":"sku","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1939,"src":"880:3:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":1950,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1941,"src":"885:11:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1951,"name":"maxQuantityPerPurchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1943,"src":"898:22:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1952,"name":"notificationsReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1945,"src":"922:21:15","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":1948,"name":"_createSku","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6383,"src":"869:10:15","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_uint256_$_t_uint256_$_t_address_$returns$__$","typeString":"function (bytes32,uint256,uint256,address)"}},"id":1953,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"869:75:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1954,"nodeType":"ExpressionStatement","src":"869:75:15"}]},"functionSelector":"2c87927b","id":1956,"implemented":true,"kind":"function","modifiers":[],"name":"createSku","nodeType":"FunctionDefinition","parameters":{"id":1946,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1939,"mutability":"mutable","name":"sku","nodeType":"VariableDeclaration","scope":1956,"src":"724:11:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1938,"name":"bytes32","nodeType":"ElementaryTypeName","src":"724:7:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1941,"mutability":"mutable","name":"totalSupply","nodeType":"VariableDeclaration","scope":1956,"src":"745:19:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1940,"name":"uint256","nodeType":"ElementaryTypeName","src":"745:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1943,"mutability":"mutable","name":"maxQuantityPerPurchase","nodeType":"VariableDeclaration","scope":1956,"src":"774:30:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1942,"name":"uint256","nodeType":"ElementaryTypeName","src":"774:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1945,"mutability":"mutable","name":"notificationsReceiver","nodeType":"VariableDeclaration","scope":1956,"src":"814:29:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1944,"name":"address","nodeType":"ElementaryTypeName","src":"814:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"714:135:15"},"returnParameters":{"id":1947,"nodeType":"ParameterList","parameters":[],"src":"859:0:15"},"scope":2261,"src":"696:255:15","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":1986,"nodeType":"Block","src":"1087:169:15","statements":[{"assignments":[1968],"declarations":[{"constant":false,"id":1968,"mutability":"mutable","name":"skuInfo","nodeType":"VariableDeclaration","scope":1986,"src":"1097:23:15","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage_ptr","typeString":"struct Sale.SkuInfo"},"typeName":{"id":1967,"name":"SkuInfo","nodeType":"UserDefinedTypeName","referencedDeclaration":5762,"src":"1097:7:15","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage_ptr","typeString":"struct Sale.SkuInfo"}},"visibility":"internal"}],"id":1972,"initialValue":{"baseExpression":{"id":1969,"name":"_skuInfos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5783,"src":"1123:9:15","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_SkuInfo_$5762_storage_$","typeString":"mapping(bytes32 => struct Sale.SkuInfo storage ref)"}},"id":1971,"indexExpression":{"id":1970,"name":"sku","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1958,"src":"1133:3:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1123:14:15","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage","typeString":"struct Sale.SkuInfo storage ref"}},"nodeType":"VariableDeclarationStatement","src":"1097:40:15"},{"assignments":[1976],"declarations":[{"constant":false,"id":1976,"mutability":"mutable","name":"tokenPrices","nodeType":"VariableDeclaration","scope":1986,"src":"1147:31:15","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map"},"typeName":{"id":1975,"name":"EnumMap.Map","nodeType":"UserDefinedTypeName","referencedDeclaration":119,"src":"1147:11:15","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map"}},"visibility":"internal"}],"id":1979,"initialValue":{"expression":{"id":1977,"name":"skuInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1968,"src":"1181:7:15","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage_ptr","typeString":"struct Sale.SkuInfo storage pointer"}},"id":1978,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"prices","nodeType":"MemberAccess","referencedDeclaration":5761,"src":"1181:14:15","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage","typeString":"struct EnumMap.Map storage ref"}},"nodeType":"VariableDeclarationStatement","src":"1147:48:15"},{"expression":{"arguments":[{"id":1981,"name":"tokenPrices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1976,"src":"1221:11:15","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map storage pointer"}},{"id":1982,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1961,"src":"1234:6:15","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},{"id":1983,"name":"prices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1964,"src":"1242:6:15","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map storage pointer"},{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"},{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}],"id":1980,"name":"_setTokenPrices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6474,"src":"1205:15:15","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Map_$119_storage_ptr_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$","typeString":"function (struct EnumMap.Map storage pointer,address[] memory,uint256[] memory)"}},"id":1984,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1205:44:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1985,"nodeType":"ExpressionStatement","src":"1205:44:15"}]},"functionSelector":"460b7e84","id":1987,"implemented":true,"kind":"function","modifiers":[],"name":"setTokenPrices","nodeType":"FunctionDefinition","parameters":{"id":1965,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1958,"mutability":"mutable","name":"sku","nodeType":"VariableDeclaration","scope":1987,"src":"990:11:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1957,"name":"bytes32","nodeType":"ElementaryTypeName","src":"990:7:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1961,"mutability":"mutable","name":"tokens","nodeType":"VariableDeclaration","scope":1987,"src":"1011:25:15","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":1959,"name":"address","nodeType":"ElementaryTypeName","src":"1011:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1960,"nodeType":"ArrayTypeName","src":"1011:9:15","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":1964,"mutability":"mutable","name":"prices","nodeType":"VariableDeclaration","scope":1987,"src":"1046:25:15","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1962,"name":"uint256","nodeType":"ElementaryTypeName","src":"1046:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1963,"nodeType":"ArrayTypeName","src":"1046:9:15","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"980:97:15"},"returnParameters":{"id":1966,"nodeType":"ParameterList","parameters":[],"src":"1087:0:15"},"scope":2261,"src":"957:299:15","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":2029,"nodeType":"Block","src":"1589:317:15","statements":[{"assignments":[2012],"declarations":[{"constant":false,"id":2012,"mutability":"mutable","name":"purchaseData","nodeType":"VariableDeclaration","scope":2029,"src":"1599:32:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"},"typeName":{"id":2011,"name":"PurchaseData","nodeType":"UserDefinedTypeName","referencedDeclaration":5583,"src":"1599:12:15","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_storage_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"}},"visibility":"internal"}],"id":2024,"initialValue":{"arguments":[{"id":2014,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1989,"src":"1664:9:15","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":2015,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1991,"src":"1687:5:15","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2016,"name":"sku","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1993,"src":"1706:3:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":2017,"name":"quantity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1995,"src":"1723:8:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2018,"name":"userData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1997,"src":"1745:8:15","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":2019,"name":"totalPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1999,"src":"1767:10:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2020,"name":"pricingData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2002,"src":"1791:11:15","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[] calldata"}},{"id":2021,"name":"paymentData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2005,"src":"1816:11:15","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[] calldata"}},{"id":2022,"name":"deliveryData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2008,"src":"1841:12:15","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[] calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[] calldata"},{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[] calldata"},{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[] calldata"}],"id":2013,"name":"_getPurchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2260,"src":"1634:16:15","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_payable_$_t_address_$_t_bytes32_$_t_uint256_$_t_bytes_memory_ptr_$_t_uint256_$_t_array$_t_bytes32_$dyn_memory_ptr_$_t_array$_t_bytes32_$dyn_memory_ptr_$_t_array$_t_bytes32_$dyn_memory_ptr_$returns$_t_struct$_PurchaseData_$5583_memory_ptr_$","typeString":"function (address payable,address,bytes32,uint256,bytes memory,uint256,bytes32[] memory,bytes32[] memory,bytes32[] memory) view returns (struct PurchaseLifeCycles.PurchaseData memory)"}},"id":2023,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1634:229:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"nodeType":"VariableDeclarationStatement","src":"1599:264:15"},{"expression":{"arguments":[{"id":2026,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2012,"src":"1886:12:15","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}],"id":2025,"name":"_validation","nodeType":"Identifier","overloadedDeclarations":[6571],"referencedDeclaration":6571,"src":"1874:11:15","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_PurchaseData_$5583_memory_ptr_$returns$__$","typeString":"function (struct PurchaseLifeCycles.PurchaseData memory) view"}},"id":2027,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1874:25:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2028,"nodeType":"ExpressionStatement","src":"1874:25:15"}]},"functionSelector":"9bbeb124","id":2030,"implemented":true,"kind":"function","modifiers":[],"name":"validation","nodeType":"FunctionDefinition","parameters":{"id":2009,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1989,"mutability":"mutable","name":"recipient","nodeType":"VariableDeclaration","scope":2030,"src":"1291:25:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":1988,"name":"address","nodeType":"ElementaryTypeName","src":"1291:15:15","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":1991,"mutability":"mutable","name":"token","nodeType":"VariableDeclaration","scope":2030,"src":"1326:13:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1990,"name":"address","nodeType":"ElementaryTypeName","src":"1326:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1993,"mutability":"mutable","name":"sku","nodeType":"VariableDeclaration","scope":2030,"src":"1349:11:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1992,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1349:7:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1995,"mutability":"mutable","name":"quantity","nodeType":"VariableDeclaration","scope":2030,"src":"1370:16:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1994,"name":"uint256","nodeType":"ElementaryTypeName","src":"1370:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1997,"mutability":"mutable","name":"userData","nodeType":"VariableDeclaration","scope":2030,"src":"1396:23:15","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":1996,"name":"bytes","nodeType":"ElementaryTypeName","src":"1396:5:15","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":1999,"mutability":"mutable","name":"totalPrice","nodeType":"VariableDeclaration","scope":2030,"src":"1429:18:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1998,"name":"uint256","nodeType":"ElementaryTypeName","src":"1429:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2002,"mutability":"mutable","name":"pricingData","nodeType":"VariableDeclaration","scope":2030,"src":"1457:30:15","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":2000,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1457:7:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":2001,"nodeType":"ArrayTypeName","src":"1457:9:15","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"},{"constant":false,"id":2005,"mutability":"mutable","name":"paymentData","nodeType":"VariableDeclaration","scope":2030,"src":"1497:30:15","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":2003,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1497:7:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":2004,"nodeType":"ArrayTypeName","src":"1497:9:15","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"},{"constant":false,"id":2008,"mutability":"mutable","name":"deliveryData","nodeType":"VariableDeclaration","scope":2030,"src":"1537:31:15","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":2006,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1537:7:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":2007,"nodeType":"ArrayTypeName","src":"1537:9:15","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"src":"1281:293:15"},"returnParameters":{"id":2010,"nodeType":"ParameterList","parameters":[],"src":"1589:0:15"},"scope":2261,"src":"1262:644:15","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":2072,"nodeType":"Block","src":"2232:315:15","statements":[{"assignments":[2055],"declarations":[{"constant":false,"id":2055,"mutability":"mutable","name":"purchaseData","nodeType":"VariableDeclaration","scope":2072,"src":"2242:32:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"},"typeName":{"id":2054,"name":"PurchaseData","nodeType":"UserDefinedTypeName","referencedDeclaration":5583,"src":"2242:12:15","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_storage_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"}},"visibility":"internal"}],"id":2067,"initialValue":{"arguments":[{"id":2057,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2032,"src":"2307:9:15","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":2058,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2034,"src":"2330:5:15","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2059,"name":"sku","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2036,"src":"2349:3:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":2060,"name":"quantity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2038,"src":"2366:8:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2061,"name":"userData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2040,"src":"2388:8:15","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":2062,"name":"totalPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2042,"src":"2410:10:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2063,"name":"pricingData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2045,"src":"2434:11:15","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[] calldata"}},{"id":2064,"name":"paymentData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2048,"src":"2459:11:15","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[] calldata"}},{"id":2065,"name":"deliveryData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2051,"src":"2484:12:15","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[] calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[] calldata"},{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[] calldata"},{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[] calldata"}],"id":2056,"name":"_getPurchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2260,"src":"2277:16:15","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_payable_$_t_address_$_t_bytes32_$_t_uint256_$_t_bytes_memory_ptr_$_t_uint256_$_t_array$_t_bytes32_$dyn_memory_ptr_$_t_array$_t_bytes32_$dyn_memory_ptr_$_t_array$_t_bytes32_$dyn_memory_ptr_$returns$_t_struct$_PurchaseData_$5583_memory_ptr_$","typeString":"function (address payable,address,bytes32,uint256,bytes memory,uint256,bytes32[] memory,bytes32[] memory,bytes32[] memory) view returns (struct PurchaseLifeCycles.PurchaseData memory)"}},"id":2066,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2277:229:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"nodeType":"VariableDeclarationStatement","src":"2242:264:15"},{"expression":{"arguments":[{"id":2069,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2055,"src":"2527:12:15","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}],"id":2068,"name":"_delivery","nodeType":"Identifier","overloadedDeclarations":[6605],"referencedDeclaration":6605,"src":"2517:9:15","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_PurchaseData_$5583_memory_ptr_$returns$__$","typeString":"function (struct PurchaseLifeCycles.PurchaseData memory)"}},"id":2070,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2517:23:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2071,"nodeType":"ExpressionStatement","src":"2517:23:15"}]},"functionSelector":"bb955d78","id":2073,"implemented":true,"kind":"function","modifiers":[],"name":"delivery","nodeType":"FunctionDefinition","parameters":{"id":2052,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2032,"mutability":"mutable","name":"recipient","nodeType":"VariableDeclaration","scope":2073,"src":"1939:25:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":2031,"name":"address","nodeType":"ElementaryTypeName","src":"1939:15:15","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":2034,"mutability":"mutable","name":"token","nodeType":"VariableDeclaration","scope":2073,"src":"1974:13:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2033,"name":"address","nodeType":"ElementaryTypeName","src":"1974:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2036,"mutability":"mutable","name":"sku","nodeType":"VariableDeclaration","scope":2073,"src":"1997:11:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2035,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1997:7:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":2038,"mutability":"mutable","name":"quantity","nodeType":"VariableDeclaration","scope":2073,"src":"2018:16:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2037,"name":"uint256","nodeType":"ElementaryTypeName","src":"2018:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2040,"mutability":"mutable","name":"userData","nodeType":"VariableDeclaration","scope":2073,"src":"2044:23:15","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2039,"name":"bytes","nodeType":"ElementaryTypeName","src":"2044:5:15","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2042,"mutability":"mutable","name":"totalPrice","nodeType":"VariableDeclaration","scope":2073,"src":"2077:18:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2041,"name":"uint256","nodeType":"ElementaryTypeName","src":"2077:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2045,"mutability":"mutable","name":"pricingData","nodeType":"VariableDeclaration","scope":2073,"src":"2105:30:15","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":2043,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2105:7:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":2044,"nodeType":"ArrayTypeName","src":"2105:9:15","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"},{"constant":false,"id":2048,"mutability":"mutable","name":"paymentData","nodeType":"VariableDeclaration","scope":2073,"src":"2145:30:15","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":2046,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2145:7:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":2047,"nodeType":"ArrayTypeName","src":"2145:9:15","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"},{"constant":false,"id":2051,"mutability":"mutable","name":"deliveryData","nodeType":"VariableDeclaration","scope":2073,"src":"2185:31:15","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":2049,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2185:7:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":2050,"nodeType":"ArrayTypeName","src":"2185:9:15","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"src":"1929:293:15"},"returnParameters":{"id":2053,"nodeType":"ParameterList","parameters":[],"src":"2232:0:15"},"scope":2261,"src":"1912:635:15","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":2115,"nodeType":"Block","src":"2877:319:15","statements":[{"assignments":[2098],"declarations":[{"constant":false,"id":2098,"mutability":"mutable","name":"purchaseData","nodeType":"VariableDeclaration","scope":2115,"src":"2887:32:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"},"typeName":{"id":2097,"name":"PurchaseData","nodeType":"UserDefinedTypeName","referencedDeclaration":5583,"src":"2887:12:15","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_storage_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"}},"visibility":"internal"}],"id":2110,"initialValue":{"arguments":[{"id":2100,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2075,"src":"2952:9:15","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":2101,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2077,"src":"2975:5:15","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2102,"name":"sku","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2079,"src":"2994:3:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":2103,"name":"quantity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2081,"src":"3011:8:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2104,"name":"userData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2083,"src":"3033:8:15","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":2105,"name":"totalPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2085,"src":"3055:10:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2106,"name":"pricingData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2088,"src":"3079:11:15","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[] calldata"}},{"id":2107,"name":"paymentData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2091,"src":"3104:11:15","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[] calldata"}},{"id":2108,"name":"deliveryData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2094,"src":"3129:12:15","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[] calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[] calldata"},{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[] calldata"},{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[] calldata"}],"id":2099,"name":"_getPurchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2260,"src":"2922:16:15","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_payable_$_t_address_$_t_bytes32_$_t_uint256_$_t_bytes_memory_ptr_$_t_uint256_$_t_array$_t_bytes32_$dyn_memory_ptr_$_t_array$_t_bytes32_$dyn_memory_ptr_$_t_array$_t_bytes32_$dyn_memory_ptr_$returns$_t_struct$_PurchaseData_$5583_memory_ptr_$","typeString":"function (address payable,address,bytes32,uint256,bytes memory,uint256,bytes32[] memory,bytes32[] memory,bytes32[] memory) view returns (struct PurchaseLifeCycles.PurchaseData memory)"}},"id":2109,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2922:229:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"nodeType":"VariableDeclarationStatement","src":"2887:264:15"},{"expression":{"arguments":[{"id":2112,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2098,"src":"3176:12:15","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}],"id":2111,"name":"_notification","nodeType":"Identifier","overloadedDeclarations":[6693],"referencedDeclaration":6693,"src":"3162:13:15","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_PurchaseData_$5583_memory_ptr_$returns$__$","typeString":"function (struct PurchaseLifeCycles.PurchaseData memory)"}},"id":2113,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3162:27:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2114,"nodeType":"ExpressionStatement","src":"3162:27:15"}]},"functionSelector":"9674ab1e","id":2116,"implemented":true,"kind":"function","modifiers":[],"name":"notification","nodeType":"FunctionDefinition","parameters":{"id":2095,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2075,"mutability":"mutable","name":"recipient","nodeType":"VariableDeclaration","scope":2116,"src":"2584:25:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":2074,"name":"address","nodeType":"ElementaryTypeName","src":"2584:15:15","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":2077,"mutability":"mutable","name":"token","nodeType":"VariableDeclaration","scope":2116,"src":"2619:13:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2076,"name":"address","nodeType":"ElementaryTypeName","src":"2619:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2079,"mutability":"mutable","name":"sku","nodeType":"VariableDeclaration","scope":2116,"src":"2642:11:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2078,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2642:7:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":2081,"mutability":"mutable","name":"quantity","nodeType":"VariableDeclaration","scope":2116,"src":"2663:16:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2080,"name":"uint256","nodeType":"ElementaryTypeName","src":"2663:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2083,"mutability":"mutable","name":"userData","nodeType":"VariableDeclaration","scope":2116,"src":"2689:23:15","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2082,"name":"bytes","nodeType":"ElementaryTypeName","src":"2689:5:15","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2085,"mutability":"mutable","name":"totalPrice","nodeType":"VariableDeclaration","scope":2116,"src":"2722:18:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2084,"name":"uint256","nodeType":"ElementaryTypeName","src":"2722:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2088,"mutability":"mutable","name":"pricingData","nodeType":"VariableDeclaration","scope":2116,"src":"2750:30:15","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":2086,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2750:7:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":2087,"nodeType":"ArrayTypeName","src":"2750:9:15","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"},{"constant":false,"id":2091,"mutability":"mutable","name":"paymentData","nodeType":"VariableDeclaration","scope":2116,"src":"2790:30:15","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":2089,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2790:7:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":2090,"nodeType":"ArrayTypeName","src":"2790:9:15","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"},{"constant":false,"id":2094,"mutability":"mutable","name":"deliveryData","nodeType":"VariableDeclaration","scope":2116,"src":"2830:31:15","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":2092,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2830:7:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":2093,"nodeType":"ArrayTypeName","src":"2830:9:15","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"src":"2574:293:15"},"returnParameters":{"id":2096,"nodeType":"ParameterList","parameters":[],"src":"2877:0:15"},"scope":2261,"src":"2553:643:15","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5652],"body":{"id":2164,"nodeType":"Block","src":"3273:268:15","statements":[{"assignments":[2123],"declarations":[{"constant":false,"id":2123,"mutability":"mutable","name":"skuInfo","nodeType":"VariableDeclaration","scope":2164,"src":"3283:23:15","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage_ptr","typeString":"struct Sale.SkuInfo"},"typeName":{"id":2122,"name":"SkuInfo","nodeType":"UserDefinedTypeName","referencedDeclaration":5762,"src":"3283:7:15","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage_ptr","typeString":"struct Sale.SkuInfo"}},"visibility":"internal"}],"id":2128,"initialValue":{"baseExpression":{"id":2124,"name":"_skuInfos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5783,"src":"3309:9:15","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_SkuInfo_$5762_storage_$","typeString":"mapping(bytes32 => struct Sale.SkuInfo storage ref)"}},"id":2127,"indexExpression":{"expression":{"id":2125,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2118,"src":"3319:8:15","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":2126,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"sku","nodeType":"MemberAccess","referencedDeclaration":5567,"src":"3319:12:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3309:23:15","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage","typeString":"struct Sale.SkuInfo storage ref"}},"nodeType":"VariableDeclarationStatement","src":"3283:49:15"},{"assignments":[2130],"declarations":[{"constant":false,"id":2130,"mutability":"mutable","name":"key","nodeType":"VariableDeclaration","scope":2164,"src":"3342:11:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2129,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3342:7:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":2139,"initialValue":{"arguments":[{"arguments":[{"expression":{"id":2135,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2118,"src":"3372:8:15","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":2136,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"token","nodeType":"MemberAccess","referencedDeclaration":5565,"src":"3372:14:15","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2134,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3364:7:15","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":2133,"name":"uint256","nodeType":"ElementaryTypeName","src":"3364:7:15","typeDescriptions":{}}},"id":2137,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3364:23:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2132,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3356:7:15","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":2131,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3356:7:15","typeDescriptions":{}}},"id":2138,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3356:32:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"3342:46:15"},{"assignments":[2141],"declarations":[{"constant":false,"id":2141,"mutability":"mutable","name":"value","nodeType":"VariableDeclaration","scope":2164,"src":"3398:13:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2140,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3398:7:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":2147,"initialValue":{"arguments":[{"id":2145,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2130,"src":"3433:3:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"expression":{"id":2142,"name":"skuInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2123,"src":"3414:7:15","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage_ptr","typeString":"struct Sale.SkuInfo storage pointer"}},"id":2143,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"prices","nodeType":"MemberAccess","referencedDeclaration":5761,"src":"3414:14:15","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage","typeString":"struct EnumMap.Map storage ref"}},"id":2144,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"get","nodeType":"MemberAccess","referencedDeclaration":361,"src":"3414:18:15","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Map_$119_storage_ptr_$_t_bytes32_$returns$_t_bytes32_$bound_to$_t_struct$_Map_$119_storage_ptr_$","typeString":"function (struct EnumMap.Map storage pointer,bytes32) view returns (bytes32)"}},"id":2146,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3414:23:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"3398:39:15"},{"assignments":[2149],"declarations":[{"constant":false,"id":2149,"mutability":"mutable","name":"price","nodeType":"VariableDeclaration","scope":2164,"src":"3447:13:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2148,"name":"uint256","nodeType":"ElementaryTypeName","src":"3447:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2154,"initialValue":{"arguments":[{"id":2152,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2141,"src":"3471:5:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":2151,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3463:7:15","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":2150,"name":"uint256","nodeType":"ElementaryTypeName","src":"3463:7:15","typeDescriptions":{}}},"id":2153,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3463:14:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3447:30:15"},{"expression":{"id":2162,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":2155,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2118,"src":"3487:8:15","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":2157,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"totalPrice","nodeType":"MemberAccess","referencedDeclaration":5573,"src":"3487:19:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2161,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2158,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2118,"src":"3509:8:15","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":2159,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"quantity","nodeType":"MemberAccess","referencedDeclaration":5569,"src":"3509:17:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":2160,"name":"price","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2149,"src":"3529:5:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3509:25:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3487:47:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2163,"nodeType":"ExpressionStatement","src":"3487:47:15"}]},"id":2165,"implemented":true,"kind":"function","modifiers":[],"name":"_pricing","nodeType":"FunctionDefinition","overrides":{"id":2120,"nodeType":"OverrideSpecifier","overrides":[],"src":"3264:8:15"},"parameters":{"id":2119,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2118,"mutability":"mutable","name":"purchase","nodeType":"VariableDeclaration","scope":2165,"src":"3220:28:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"},"typeName":{"id":2117,"name":"PurchaseData","nodeType":"UserDefinedTypeName","referencedDeclaration":5583,"src":"3220:12:15","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_storage_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"}},"visibility":"internal"}],"src":"3219:30:15"},"returnParameters":{"id":2121,"nodeType":"ParameterList","parameters":[],"src":"3273:0:15"},"scope":2261,"src":"3202:339:15","stateMutability":"view","virtual":false,"visibility":"internal"},{"baseFunctions":[5658],"body":{"id":2171,"nodeType":"Block","src":"3631:2:15","statements":[]},"id":2172,"implemented":true,"kind":"function","modifiers":[],"name":"_payment","nodeType":"FunctionDefinition","overrides":{"id":2169,"nodeType":"OverrideSpecifier","overrides":[],"src":"3622:8:15"},"parameters":{"id":2168,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2167,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":2172,"src":"3574:19:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"},"typeName":{"id":2166,"name":"PurchaseData","nodeType":"UserDefinedTypeName","referencedDeclaration":5583,"src":"3574:12:15","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_storage_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"}},"visibility":"internal"}],"src":"3564:48:15"},"returnParameters":{"id":2170,"nodeType":"ParameterList","parameters":[],"src":"3631:0:15"},"scope":2261,"src":"3547:86:15","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2259,"nodeType":"Block","src":"4003:402:15","statements":[{"expression":{"id":2203,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":2198,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2196,"src":"4013:8:15","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":2200,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"purchaser","nodeType":"MemberAccess","referencedDeclaration":5561,"src":"4013:18:15","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":2201,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":726,"src":"4034:10:15","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":2202,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4034:12:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"4013:33:15","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":2204,"nodeType":"ExpressionStatement","src":"4013:33:15"},{"expression":{"id":2209,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":2205,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2196,"src":"4056:8:15","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":2207,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"recipient","nodeType":"MemberAccess","referencedDeclaration":5563,"src":"4056:18:15","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2208,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2174,"src":"4077:9:15","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"4056:30:15","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":2210,"nodeType":"ExpressionStatement","src":"4056:30:15"},{"expression":{"id":2215,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":2211,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2196,"src":"4096:8:15","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":2213,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"token","nodeType":"MemberAccess","referencedDeclaration":5565,"src":"4096:14:15","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2214,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2176,"src":"4113:5:15","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4096:22:15","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2216,"nodeType":"ExpressionStatement","src":"4096:22:15"},{"expression":{"id":2221,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":2217,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2196,"src":"4128:8:15","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":2219,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"sku","nodeType":"MemberAccess","referencedDeclaration":5567,"src":"4128:12:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2220,"name":"sku","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2178,"src":"4143:3:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"4128:18:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":2222,"nodeType":"ExpressionStatement","src":"4128:18:15"},{"expression":{"id":2227,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":2223,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2196,"src":"4156:8:15","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":2225,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"quantity","nodeType":"MemberAccess","referencedDeclaration":5569,"src":"4156:17:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2226,"name":"quantity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2180,"src":"4176:8:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4156:28:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2228,"nodeType":"ExpressionStatement","src":"4156:28:15"},{"expression":{"id":2233,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":2229,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2196,"src":"4194:8:15","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":2231,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"userData","nodeType":"MemberAccess","referencedDeclaration":5571,"src":"4194:17:15","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2232,"name":"userData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2182,"src":"4214:8:15","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"4194:28:15","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":2234,"nodeType":"ExpressionStatement","src":"4194:28:15"},{"expression":{"id":2239,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":2235,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2196,"src":"4232:8:15","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":2237,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"totalPrice","nodeType":"MemberAccess","referencedDeclaration":5573,"src":"4232:19:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2238,"name":"totalPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2184,"src":"4254:10:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4232:32:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2240,"nodeType":"ExpressionStatement","src":"4232:32:15"},{"expression":{"id":2245,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":2241,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2196,"src":"4274:8:15","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":2243,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"pricingData","nodeType":"MemberAccess","referencedDeclaration":5576,"src":"4274:20:15","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2244,"name":"pricingData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2187,"src":"4297:11:15","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"src":"4274:34:15","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"id":2246,"nodeType":"ExpressionStatement","src":"4274:34:15"},{"expression":{"id":2251,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":2247,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2196,"src":"4318:8:15","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":2249,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"paymentData","nodeType":"MemberAccess","referencedDeclaration":5579,"src":"4318:20:15","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2250,"name":"paymentData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2190,"src":"4341:11:15","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"src":"4318:34:15","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"id":2252,"nodeType":"ExpressionStatement","src":"4318:34:15"},{"expression":{"id":2257,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":2253,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2196,"src":"4362:8:15","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":2255,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"deliveryData","nodeType":"MemberAccess","referencedDeclaration":5582,"src":"4362:21:15","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2256,"name":"deliveryData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2193,"src":"4386:12:15","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"src":"4362:36:15","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"id":2258,"nodeType":"ExpressionStatement","src":"4362:36:15"}]},"id":2260,"implemented":true,"kind":"function","modifiers":[],"name":"_getPurchaseData","nodeType":"FunctionDefinition","parameters":{"id":2194,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2174,"mutability":"mutable","name":"recipient","nodeType":"VariableDeclaration","scope":2260,"src":"3674:25:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":2173,"name":"address","nodeType":"ElementaryTypeName","src":"3674:15:15","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":2176,"mutability":"mutable","name":"token","nodeType":"VariableDeclaration","scope":2260,"src":"3709:13:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2175,"name":"address","nodeType":"ElementaryTypeName","src":"3709:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2178,"mutability":"mutable","name":"sku","nodeType":"VariableDeclaration","scope":2260,"src":"3732:11:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2177,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3732:7:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":2180,"mutability":"mutable","name":"quantity","nodeType":"VariableDeclaration","scope":2260,"src":"3753:16:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2179,"name":"uint256","nodeType":"ElementaryTypeName","src":"3753:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2182,"mutability":"mutable","name":"userData","nodeType":"VariableDeclaration","scope":2260,"src":"3779:21:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2181,"name":"bytes","nodeType":"ElementaryTypeName","src":"3779:5:15","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2184,"mutability":"mutable","name":"totalPrice","nodeType":"VariableDeclaration","scope":2260,"src":"3810:18:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2183,"name":"uint256","nodeType":"ElementaryTypeName","src":"3810:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2187,"mutability":"mutable","name":"pricingData","nodeType":"VariableDeclaration","scope":2260,"src":"3838:28:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":2185,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3838:7:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":2186,"nodeType":"ArrayTypeName","src":"3838:9:15","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"},{"constant":false,"id":2190,"mutability":"mutable","name":"paymentData","nodeType":"VariableDeclaration","scope":2260,"src":"3876:28:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":2188,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3876:7:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":2189,"nodeType":"ArrayTypeName","src":"3876:9:15","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"},{"constant":false,"id":2193,"mutability":"mutable","name":"deliveryData","nodeType":"VariableDeclaration","scope":2260,"src":"3914:29:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":2191,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3914:7:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":2192,"nodeType":"ArrayTypeName","src":"3914:9:15","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"src":"3664:285:15"},"returnParameters":{"id":2197,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2196,"mutability":"mutable","name":"purchase","nodeType":"VariableDeclaration","scope":2260,"src":"3973:28:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"},"typeName":{"id":2195,"name":"PurchaseData","nodeType":"UserDefinedTypeName","referencedDeclaration":5583,"src":"3973:12:15","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_storage_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"}},"visibility":"internal"}],"src":"3972:30:15"},"scope":2261,"src":"3639:766:15","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":2262,"src":"136:4271:15"}],"src":"33:4375:15"},"id":15},"contracts/mocks/sale/UniswapOracleSaleMock.sol":{"ast":{"absolutePath":"contracts/mocks/sale/UniswapOracleSaleMock.sol","exportedSymbols":{"IUniswapV2Router":[4247],"UniswapOracleSale":[4852],"UniswapOracleSaleMock":[2372]},"id":2373,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":2263,"literals":["solidity",">=","0.7",".6","<","0.8",".0"],"nodeType":"PragmaDirective","src":"33:31:16"},{"absolutePath":"contracts/sale/UniswapOracleSale.sol","file":"../../sale/UniswapOracleSale.sol","id":2266,"nodeType":"ImportDirective","scope":2373,"sourceUnit":4853,"src":"66:85:16","symbolAliases":[{"foreign":{"id":2264,"name":"IUniswapV2Router","nodeType":"Identifier","overloadedDeclarations":[],"src":"74:16:16","typeDescriptions":{}}},{"foreign":{"id":2265,"name":"UniswapOracleSale","nodeType":"Identifier","overloadedDeclarations":[],"src":"92:17:16","typeDescriptions":{}}}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":2267,"name":"UniswapOracleSale","nodeType":"UserDefinedTypeName","referencedDeclaration":4852,"src":"187:17:16","typeDescriptions":{"typeIdentifier":"t_contract$_UniswapOracleSale_$4852","typeString":"contract UniswapOracleSale"}},"id":2268,"nodeType":"InheritanceSpecifier","src":"187:17:16"}],"contractDependencies":[22,103,646,715,736,812,4153,4753,4852,5556,5671,6694,7187,7346],"contractKind":"contract","fullyImplemented":true,"id":2372,"linearizedBaseContracts":[2372,4852,4153,5556,4753,6694,646,715,812,103,22,736,7346,5671,7187],"name":"UniswapOracleSaleMock","nodeType":"ContractDefinition","nodes":[{"body":{"id":2288,"nodeType":"Block","src":"512:2:16","statements":[]},"id":2289,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":2281,"name":"payoutWallet_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2270,"src":"428:13:16","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":2282,"name":"skusCapacity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2272,"src":"443:12:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2283,"name":"tokensPerSkuCapacity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2274,"src":"457:20:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2284,"name":"referenceToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2276,"src":"479:14:16","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2285,"name":"uniswapV2Router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2278,"src":"495:15:16","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapV2Router_$4247","typeString":"contract IUniswapV2Router"}}],"id":2286,"modifierName":{"id":2280,"name":"UniswapOracleSale","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4852,"src":"410:17:16","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_UniswapOracleSale_$4852_$","typeString":"type(contract UniswapOracleSale)"}},"nodeType":"ModifierInvocation","src":"410:101:16"}],"name":"","nodeType":"FunctionDefinition","parameters":{"id":2279,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2270,"mutability":"mutable","name":"payoutWallet_","nodeType":"VariableDeclaration","scope":2289,"src":"232:29:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":2269,"name":"address","nodeType":"ElementaryTypeName","src":"232:15:16","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":2272,"mutability":"mutable","name":"skusCapacity","nodeType":"VariableDeclaration","scope":2289,"src":"271:20:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2271,"name":"uint256","nodeType":"ElementaryTypeName","src":"271:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2274,"mutability":"mutable","name":"tokensPerSkuCapacity","nodeType":"VariableDeclaration","scope":2289,"src":"301:28:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2273,"name":"uint256","nodeType":"ElementaryTypeName","src":"301:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2276,"mutability":"mutable","name":"referenceToken","nodeType":"VariableDeclaration","scope":2289,"src":"339:22:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2275,"name":"address","nodeType":"ElementaryTypeName","src":"339:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2278,"mutability":"mutable","name":"uniswapV2Router","nodeType":"VariableDeclaration","scope":2289,"src":"371:32:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapV2Router_$4247","typeString":"contract IUniswapV2Router"},"typeName":{"id":2277,"name":"IUniswapV2Router","nodeType":"UserDefinedTypeName","referencedDeclaration":4247,"src":"371:16:16","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapV2Router_$4247","typeString":"contract IUniswapV2Router"}},"visibility":"internal"}],"src":"222:187:16"},"returnParameters":{"id":2287,"nodeType":"ParameterList","parameters":[],"src":"512:0:16"},"scope":2372,"src":"211:303:16","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":2307,"nodeType":"Block","src":"683:92:16","statements":[{"expression":{"arguments":[{"id":2301,"name":"sku","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2291,"src":"704:3:16","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":2302,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2293,"src":"709:11:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2303,"name":"maxQuantityPerPurchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2295,"src":"722:22:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2304,"name":"notificationsReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2297,"src":"746:21:16","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":2300,"name":"_createSku","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6383,"src":"693:10:16","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_uint256_$_t_uint256_$_t_address_$returns$__$","typeString":"function (bytes32,uint256,uint256,address)"}},"id":2305,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"693:75:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2306,"nodeType":"ExpressionStatement","src":"693:75:16"}]},"functionSelector":"2c87927b","id":2308,"implemented":true,"kind":"function","modifiers":[],"name":"createSku","nodeType":"FunctionDefinition","parameters":{"id":2298,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2291,"mutability":"mutable","name":"sku","nodeType":"VariableDeclaration","scope":2308,"src":"548:11:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2290,"name":"bytes32","nodeType":"ElementaryTypeName","src":"548:7:16","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":2293,"mutability":"mutable","name":"totalSupply","nodeType":"VariableDeclaration","scope":2308,"src":"569:19:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2292,"name":"uint256","nodeType":"ElementaryTypeName","src":"569:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2295,"mutability":"mutable","name":"maxQuantityPerPurchase","nodeType":"VariableDeclaration","scope":2308,"src":"598:30:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2294,"name":"uint256","nodeType":"ElementaryTypeName","src":"598:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2297,"mutability":"mutable","name":"notificationsReceiver","nodeType":"VariableDeclaration","scope":2308,"src":"638:29:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2296,"name":"address","nodeType":"ElementaryTypeName","src":"638:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"538:135:16"},"returnParameters":{"id":2299,"nodeType":"ParameterList","parameters":[],"src":"683:0:16"},"scope":2372,"src":"520:255:16","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":2327,"nodeType":"Block","src":"943:65:16","statements":[{"expression":{"id":2325,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2319,"name":"rate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2317,"src":"953:4:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":2321,"name":"fromToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2310,"src":"976:9:16","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2322,"name":"toToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2312,"src":"987:7:16","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2323,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2314,"src":"996:4:16","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":2320,"name":"_conversionRate","nodeType":"Identifier","overloadedDeclarations":[4851],"referencedDeclaration":4851,"src":"960:15:16","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$_t_bytes_memory_ptr_$returns$_t_uint256_$","typeString":"function (address,address,bytes memory) view returns (uint256)"}},"id":2324,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"960:41:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"953:48:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2326,"nodeType":"ExpressionStatement","src":"953:48:16"}]},"functionSelector":"a1e16908","id":2328,"implemented":true,"kind":"function","modifiers":[],"name":"callUnderscoreConversionRate","nodeType":"FunctionDefinition","parameters":{"id":2315,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2310,"mutability":"mutable","name":"fromToken","nodeType":"VariableDeclaration","scope":2328,"src":"828:17:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2309,"name":"address","nodeType":"ElementaryTypeName","src":"828:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2312,"mutability":"mutable","name":"toToken","nodeType":"VariableDeclaration","scope":2328,"src":"855:15:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2311,"name":"address","nodeType":"ElementaryTypeName","src":"855:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2314,"mutability":"mutable","name":"data","nodeType":"VariableDeclaration","scope":2328,"src":"880:19:16","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2313,"name":"bytes","nodeType":"ElementaryTypeName","src":"880:5:16","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"818:87:16"},"returnParameters":{"id":2318,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2317,"mutability":"mutable","name":"rate","nodeType":"VariableDeclaration","scope":2328,"src":"929:12:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2316,"name":"uint256","nodeType":"ElementaryTypeName","src":"929:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"928:14:16"},"scope":2372,"src":"781:227:16","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":2370,"nodeType":"Block","src":"1126:250:16","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2341,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2339,"name":"tokenA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2330,"src":"1140:6:16","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":2340,"name":"TOKEN_ETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5769,"src":"1150:9:16","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1140:19:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2349,"nodeType":"IfStatement","src":"1136:81:16","trueBody":{"id":2348,"nodeType":"Block","src":"1161:56:16","statements":[{"expression":{"id":2346,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2342,"name":"tokenA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2330,"src":"1175:6:16","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":2343,"name":"uniswapV2Router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3822,"src":"1184:15:16","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapV2Router_$4247","typeString":"contract IUniswapV2Router"}},"id":2344,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"WETH","nodeType":"MemberAccess","referencedDeclaration":4182,"src":"1184:20:16","typeDescriptions":{"typeIdentifier":"t_function_external_pure$__$returns$_t_address_$","typeString":"function () pure external returns (address)"}},"id":2345,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1184:22:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1175:31:16","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2347,"nodeType":"ExpressionStatement","src":"1175:31:16"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2352,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2350,"name":"tokenB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2332,"src":"1231:6:16","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":2351,"name":"TOKEN_ETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5769,"src":"1241:9:16","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1231:19:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2360,"nodeType":"IfStatement","src":"1227:81:16","trueBody":{"id":2359,"nodeType":"Block","src":"1252:56:16","statements":[{"expression":{"id":2357,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2353,"name":"tokenB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2332,"src":"1266:6:16","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":2354,"name":"uniswapV2Router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3822,"src":"1275:15:16","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapV2Router_$4247","typeString":"contract IUniswapV2Router"}},"id":2355,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"WETH","nodeType":"MemberAccess","referencedDeclaration":4182,"src":"1275:20:16","typeDescriptions":{"typeIdentifier":"t_function_external_pure$__$returns$_t_address_$","typeString":"function () pure external returns (address)"}},"id":2356,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1275:22:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1266:31:16","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2358,"nodeType":"ExpressionStatement","src":"1266:31:16"}]}},{"expression":{"id":2368,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":2361,"name":"reserveA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2335,"src":"1319:8:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2362,"name":"reserveB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2337,"src":"1329:8:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2363,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"1318:20:16","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":2365,"name":"tokenA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2330,"src":"1354:6:16","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2366,"name":"tokenB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2332,"src":"1362:6:16","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":2364,"name":"_getReserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3968,"src":"1341:12:16","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$returns$_t_uint256_$_t_uint256_$","typeString":"function (address,address) view returns (uint256,uint256)"}},"id":2367,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1341:28:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"1318:51:16","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2369,"nodeType":"ExpressionStatement","src":"1318:51:16"}]},"functionSelector":"d52bb6f4","id":2371,"implemented":true,"kind":"function","modifiers":[],"name":"getReserves","nodeType":"FunctionDefinition","parameters":{"id":2333,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2330,"mutability":"mutable","name":"tokenA","nodeType":"VariableDeclaration","scope":2371,"src":"1035:14:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2329,"name":"address","nodeType":"ElementaryTypeName","src":"1035:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2332,"mutability":"mutable","name":"tokenB","nodeType":"VariableDeclaration","scope":2371,"src":"1051:14:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2331,"name":"address","nodeType":"ElementaryTypeName","src":"1051:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1034:32:16"},"returnParameters":{"id":2338,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2335,"mutability":"mutable","name":"reserveA","nodeType":"VariableDeclaration","scope":2371,"src":"1090:16:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2334,"name":"uint256","nodeType":"ElementaryTypeName","src":"1090:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2337,"mutability":"mutable","name":"reserveB","nodeType":"VariableDeclaration","scope":2371,"src":"1108:16:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2336,"name":"uint256","nodeType":"ElementaryTypeName","src":"1108:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1089:36:16"},"scope":2372,"src":"1014:362:16","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":2373,"src":"153:1225:16"}],"src":"33:1346:16"},"id":16},"contracts/mocks/sale/UniswapSwapSaleMock.sol":{"ast":{"absolutePath":"contracts/mocks/sale/UniswapSwapSaleMock.sol","exportedSymbols":{"ERC20Wrapper":[953],"IUniswapV2Router":[4247],"IWrappedERC20":[983],"UniswapSwapSale":[5200],"UniswapSwapSaleMock":[2783],"UniswapV2Adapter":[4153]},"id":2784,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":2374,"literals":["solidity",">=","0.7",".6","<","0.8",".0"],"nodeType":"PragmaDirective","src":"33:31:17"},{"absolutePath":"contracts/sale/FixedPricesSale.sol","file":"../../sale/FixedPricesSale.sol","id":2377,"nodeType":"ImportDirective","scope":2784,"sourceUnit":4754,"src":"66:75:17","symbolAliases":[{"foreign":{"id":2375,"name":"ERC20Wrapper","nodeType":"Identifier","overloadedDeclarations":[],"src":"74:12:17","typeDescriptions":{}}},{"foreign":{"id":2376,"name":"IWrappedERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"88:13:17","typeDescriptions":{}}}],"unitAlias":""},{"absolutePath":"contracts/sale/UniswapSwapSale.sol","file":"../../sale/UniswapSwapSale.sol","id":2381,"nodeType":"ImportDirective","scope":2784,"sourceUnit":5201,"src":"142:99:17","symbolAliases":[{"foreign":{"id":2378,"name":"UniswapV2Adapter","nodeType":"Identifier","overloadedDeclarations":[],"src":"150:16:17","typeDescriptions":{}}},{"foreign":{"id":2379,"name":"IUniswapV2Router","nodeType":"Identifier","overloadedDeclarations":[],"src":"168:16:17","typeDescriptions":{}}},{"foreign":{"id":2380,"name":"UniswapSwapSale","nodeType":"Identifier","overloadedDeclarations":[],"src":"186:15:17","typeDescriptions":{}}}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":2382,"name":"UniswapSwapSale","nodeType":"UserDefinedTypeName","referencedDeclaration":5200,"src":"275:15:17","typeDescriptions":{"typeIdentifier":"t_contract$_UniswapSwapSale_$5200","typeString":"contract UniswapSwapSale"}},"id":2383,"nodeType":"InheritanceSpecifier","src":"275:15:17"}],"contractDependencies":[22,103,646,715,736,812,4153,4753,5200,5556,5671,6694,7165,7187,7346,7370],"contractKind":"contract","fullyImplemented":true,"id":2783,"linearizedBaseContracts":[2783,5200,4153,7165,7370,5556,4753,6694,646,715,812,103,22,736,7346,5671,7187],"name":"UniswapSwapSaleMock","nodeType":"ContractDefinition","nodes":[{"id":2386,"libraryName":{"id":2384,"name":"ERC20Wrapper","nodeType":"UserDefinedTypeName","referencedDeclaration":953,"src":"303:12:17","typeDescriptions":{"typeIdentifier":"t_contract$_ERC20Wrapper_$953","typeString":"library ERC20Wrapper"}},"nodeType":"UsingForDirective","src":"297:37:17","typeName":{"id":2385,"name":"IWrappedERC20","nodeType":"UserDefinedTypeName","referencedDeclaration":983,"src":"320:13:17","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedERC20_$983","typeString":"contract IWrappedERC20"}}},{"anonymous":false,"id":2390,"name":"UnderscoreSwapResult","nodeType":"EventDefinition","parameters":{"id":2389,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2388,"indexed":false,"mutability":"mutable","name":"fromAmount","nodeType":"VariableDeclaration","scope":2390,"src":"366:18:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2387,"name":"uint256","nodeType":"ElementaryTypeName","src":"366:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"365:20:17"},"src":"339:47:17"},{"body":{"id":2410,"nodeType":"Block","src":"691:2:17","statements":[]},"id":2411,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":2403,"name":"payoutWallet_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2392,"src":"607:13:17","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":2404,"name":"skusCapacity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2394,"src":"622:12:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2405,"name":"tokensPerSkuCapacity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2396,"src":"636:20:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2406,"name":"referenceToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2398,"src":"658:14:17","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2407,"name":"uniswapV2Router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2400,"src":"674:15:17","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapV2Router_$4247","typeString":"contract IUniswapV2Router"}}],"id":2408,"modifierName":{"id":2402,"name":"UniswapSwapSale","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5200,"src":"591:15:17","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_UniswapSwapSale_$5200_$","typeString":"type(contract UniswapSwapSale)"}},"nodeType":"ModifierInvocation","src":"591:99:17"}],"name":"","nodeType":"FunctionDefinition","parameters":{"id":2401,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2392,"mutability":"mutable","name":"payoutWallet_","nodeType":"VariableDeclaration","scope":2411,"src":"413:29:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":2391,"name":"address","nodeType":"ElementaryTypeName","src":"413:15:17","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":2394,"mutability":"mutable","name":"skusCapacity","nodeType":"VariableDeclaration","scope":2411,"src":"452:20:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2393,"name":"uint256","nodeType":"ElementaryTypeName","src":"452:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2396,"mutability":"mutable","name":"tokensPerSkuCapacity","nodeType":"VariableDeclaration","scope":2411,"src":"482:28:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2395,"name":"uint256","nodeType":"ElementaryTypeName","src":"482:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2398,"mutability":"mutable","name":"referenceToken","nodeType":"VariableDeclaration","scope":2411,"src":"520:22:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2397,"name":"address","nodeType":"ElementaryTypeName","src":"520:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2400,"mutability":"mutable","name":"uniswapV2Router","nodeType":"VariableDeclaration","scope":2411,"src":"552:32:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapV2Router_$4247","typeString":"contract IUniswapV2Router"},"typeName":{"id":2399,"name":"IUniswapV2Router","nodeType":"UserDefinedTypeName","referencedDeclaration":4247,"src":"552:16:17","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapV2Router_$4247","typeString":"contract IUniswapV2Router"}},"visibility":"internal"}],"src":"403:187:17"},"returnParameters":{"id":2409,"nodeType":"ParameterList","parameters":[],"src":"691:0:17"},"scope":2783,"src":"392:301:17","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":2429,"nodeType":"Block","src":"862:92:17","statements":[{"expression":{"arguments":[{"id":2423,"name":"sku","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2413,"src":"883:3:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":2424,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2415,"src":"888:11:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2425,"name":"maxQuantityPerPurchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2417,"src":"901:22:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2426,"name":"notificationsReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2419,"src":"925:21:17","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":2422,"name":"_createSku","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6383,"src":"872:10:17","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_uint256_$_t_uint256_$_t_address_$returns$__$","typeString":"function (bytes32,uint256,uint256,address)"}},"id":2427,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"872:75:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2428,"nodeType":"ExpressionStatement","src":"872:75:17"}]},"functionSelector":"2c87927b","id":2430,"implemented":true,"kind":"function","modifiers":[],"name":"createSku","nodeType":"FunctionDefinition","parameters":{"id":2420,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2413,"mutability":"mutable","name":"sku","nodeType":"VariableDeclaration","scope":2430,"src":"727:11:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2412,"name":"bytes32","nodeType":"ElementaryTypeName","src":"727:7:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":2415,"mutability":"mutable","name":"totalSupply","nodeType":"VariableDeclaration","scope":2430,"src":"748:19:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2414,"name":"uint256","nodeType":"ElementaryTypeName","src":"748:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2417,"mutability":"mutable","name":"maxQuantityPerPurchase","nodeType":"VariableDeclaration","scope":2430,"src":"777:30:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2416,"name":"uint256","nodeType":"ElementaryTypeName","src":"777:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2419,"mutability":"mutable","name":"notificationsReceiver","nodeType":"VariableDeclaration","scope":2430,"src":"817:29:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2418,"name":"address","nodeType":"ElementaryTypeName","src":"817:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"717:135:17"},"returnParameters":{"id":2421,"nodeType":"ParameterList","parameters":[],"src":"862:0:17"},"scope":2783,"src":"699:255:17","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":2433,"nodeType":"Block","src":"995:2:17","statements":[]},"functionSelector":"c2ac3aff","id":2434,"implemented":true,"kind":"function","modifiers":[],"name":"addEth","nodeType":"FunctionDefinition","parameters":{"id":2431,"nodeType":"ParameterList","parameters":[],"src":"975:2:17"},"returnParameters":{"id":2432,"nodeType":"ParameterList","parameters":[],"src":"995:0:17"},"scope":2783,"src":"960:37:17","stateMutability":"payable","virtual":false,"visibility":"external"},{"body":{"id":2491,"nodeType":"Block","src":"1195:328:17","statements":[{"assignments":[2448],"declarations":[{"constant":false,"id":2448,"mutability":"mutable","name":"purchaseData","nodeType":"VariableDeclaration","scope":2491,"src":"1205:32:17","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"},"typeName":{"id":2447,"name":"PurchaseData","nodeType":"UserDefinedTypeName","referencedDeclaration":5583,"src":"1205:12:17","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_storage_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"}},"visibility":"internal"}],"id":2449,"nodeType":"VariableDeclarationStatement","src":"1205:32:17"},{"expression":{"id":2455,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":2450,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2448,"src":"1247:12:17","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":2452,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"purchaser","nodeType":"MemberAccess","referencedDeclaration":5561,"src":"1247:22:17","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":2453,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":726,"src":"1272:10:17","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":2454,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1272:12:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"1247:37:17","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":2456,"nodeType":"ExpressionStatement","src":"1247:37:17"},{"expression":{"id":2461,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":2457,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2448,"src":"1294:12:17","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":2459,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"recipient","nodeType":"MemberAccess","referencedDeclaration":5563,"src":"1294:22:17","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2460,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2436,"src":"1319:9:17","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"1294:34:17","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":2462,"nodeType":"ExpressionStatement","src":"1294:34:17"},{"expression":{"id":2467,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":2463,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2448,"src":"1338:12:17","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":2465,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"token","nodeType":"MemberAccess","referencedDeclaration":5565,"src":"1338:18:17","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2466,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2438,"src":"1359:5:17","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1338:26:17","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2468,"nodeType":"ExpressionStatement","src":"1338:26:17"},{"expression":{"id":2473,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":2469,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2448,"src":"1374:12:17","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":2471,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"sku","nodeType":"MemberAccess","referencedDeclaration":5567,"src":"1374:16:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2472,"name":"sku","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2440,"src":"1393:3:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"1374:22:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":2474,"nodeType":"ExpressionStatement","src":"1374:22:17"},{"expression":{"id":2479,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":2475,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2448,"src":"1406:12:17","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":2477,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"quantity","nodeType":"MemberAccess","referencedDeclaration":5569,"src":"1406:21:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2478,"name":"quantity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2442,"src":"1430:8:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1406:32:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2480,"nodeType":"ExpressionStatement","src":"1406:32:17"},{"expression":{"id":2485,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":2481,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2448,"src":"1448:12:17","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":2483,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"userData","nodeType":"MemberAccess","referencedDeclaration":5571,"src":"1448:21:17","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2484,"name":"userData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2444,"src":"1472:8:17","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"src":"1448:32:17","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":2486,"nodeType":"ExpressionStatement","src":"1448:32:17"},{"expression":{"arguments":[{"id":2488,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2448,"src":"1503:12:17","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}],"id":2487,"name":"_validation","nodeType":"Identifier","overloadedDeclarations":[4938],"referencedDeclaration":4938,"src":"1491:11:17","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_PurchaseData_$5583_memory_ptr_$returns$__$","typeString":"function (struct PurchaseLifeCycles.PurchaseData memory) view"}},"id":2489,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1491:25:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2490,"nodeType":"ExpressionStatement","src":"1491:25:17"}]},"functionSelector":"56c1476e","id":2492,"implemented":true,"kind":"function","modifiers":[],"name":"callUnderscoreValidation","nodeType":"FunctionDefinition","parameters":{"id":2445,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2436,"mutability":"mutable","name":"recipient","nodeType":"VariableDeclaration","scope":2492,"src":"1046:25:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":2435,"name":"address","nodeType":"ElementaryTypeName","src":"1046:15:17","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":2438,"mutability":"mutable","name":"token","nodeType":"VariableDeclaration","scope":2492,"src":"1081:13:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2437,"name":"address","nodeType":"ElementaryTypeName","src":"1081:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2440,"mutability":"mutable","name":"sku","nodeType":"VariableDeclaration","scope":2492,"src":"1104:11:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2439,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1104:7:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":2442,"mutability":"mutable","name":"quantity","nodeType":"VariableDeclaration","scope":2492,"src":"1125:16:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2441,"name":"uint256","nodeType":"ElementaryTypeName","src":"1125:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2444,"mutability":"mutable","name":"userData","nodeType":"VariableDeclaration","scope":2492,"src":"1151:23:17","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2443,"name":"bytes","nodeType":"ElementaryTypeName","src":"1151:5:17","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1036:144:17"},"returnParameters":{"id":2446,"nodeType":"ParameterList","parameters":[],"src":"1195:0:17"},"scope":2783,"src":"1003:520:17","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":2564,"nodeType":"Block","src":"1777:420:17","statements":[{"assignments":[2511],"declarations":[{"constant":false,"id":2511,"mutability":"mutable","name":"purchaseData","nodeType":"VariableDeclaration","scope":2564,"src":"1787:32:17","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"},"typeName":{"id":2510,"name":"PurchaseData","nodeType":"UserDefinedTypeName","referencedDeclaration":5583,"src":"1787:12:17","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_storage_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"}},"visibility":"internal"}],"id":2512,"nodeType":"VariableDeclarationStatement","src":"1787:32:17"},{"expression":{"id":2518,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":2513,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2511,"src":"1829:12:17","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":2515,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"purchaser","nodeType":"MemberAccess","referencedDeclaration":5561,"src":"1829:22:17","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":2516,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":726,"src":"1854:10:17","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":2517,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1854:12:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"1829:37:17","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":2519,"nodeType":"ExpressionStatement","src":"1829:37:17"},{"expression":{"id":2524,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":2520,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2511,"src":"1876:12:17","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":2522,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"recipient","nodeType":"MemberAccess","referencedDeclaration":5563,"src":"1876:22:17","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2523,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2494,"src":"1901:9:17","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"1876:34:17","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":2525,"nodeType":"ExpressionStatement","src":"1876:34:17"},{"expression":{"id":2530,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":2526,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2511,"src":"1920:12:17","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":2528,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"token","nodeType":"MemberAccess","referencedDeclaration":5565,"src":"1920:18:17","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2529,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2496,"src":"1941:5:17","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1920:26:17","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2531,"nodeType":"ExpressionStatement","src":"1920:26:17"},{"expression":{"id":2536,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":2532,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2511,"src":"1956:12:17","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":2534,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"sku","nodeType":"MemberAccess","referencedDeclaration":5567,"src":"1956:16:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2535,"name":"sku","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2498,"src":"1975:3:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"1956:22:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":2537,"nodeType":"ExpressionStatement","src":"1956:22:17"},{"expression":{"id":2542,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":2538,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2511,"src":"1988:12:17","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":2540,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"quantity","nodeType":"MemberAccess","referencedDeclaration":5569,"src":"1988:21:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2541,"name":"quantity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2500,"src":"2012:8:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1988:32:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2543,"nodeType":"ExpressionStatement","src":"1988:32:17"},{"expression":{"id":2548,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":2544,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2511,"src":"2030:12:17","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":2546,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"userData","nodeType":"MemberAccess","referencedDeclaration":5571,"src":"2030:21:17","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2547,"name":"userData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2502,"src":"2054:8:17","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"src":"2030:32:17","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":2549,"nodeType":"ExpressionStatement","src":"2030:32:17"},{"expression":{"arguments":[{"id":2551,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2511,"src":"2082:12:17","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}],"id":2550,"name":"_pricing","nodeType":"Identifier","overloadedDeclarations":[5348],"referencedDeclaration":5348,"src":"2073:8:17","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_PurchaseData_$5583_memory_ptr_$returns$__$","typeString":"function (struct PurchaseLifeCycles.PurchaseData memory) view"}},"id":2552,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2073:22:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2553,"nodeType":"ExpressionStatement","src":"2073:22:17"},{"expression":{"id":2557,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2554,"name":"totalPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2505,"src":"2106:10:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":2555,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2511,"src":"2119:12:17","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":2556,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalPrice","nodeType":"MemberAccess","referencedDeclaration":5573,"src":"2119:23:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2106:36:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2558,"nodeType":"ExpressionStatement","src":"2106:36:17"},{"expression":{"id":2562,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2559,"name":"pricingData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2508,"src":"2152:11:17","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":2560,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2511,"src":"2166:12:17","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":2561,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"pricingData","nodeType":"MemberAccess","referencedDeclaration":5576,"src":"2166:24:17","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"src":"2152:38:17","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"id":2563,"nodeType":"ExpressionStatement","src":"2152:38:17"}]},"functionSelector":"97309b44","id":2565,"implemented":true,"kind":"function","modifiers":[],"name":"callUnderscorePricing","nodeType":"FunctionDefinition","parameters":{"id":2503,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2494,"mutability":"mutable","name":"recipient","nodeType":"VariableDeclaration","scope":2565,"src":"1569:25:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":2493,"name":"address","nodeType":"ElementaryTypeName","src":"1569:15:17","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":2496,"mutability":"mutable","name":"token","nodeType":"VariableDeclaration","scope":2565,"src":"1604:13:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2495,"name":"address","nodeType":"ElementaryTypeName","src":"1604:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2498,"mutability":"mutable","name":"sku","nodeType":"VariableDeclaration","scope":2565,"src":"1627:11:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2497,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1627:7:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":2500,"mutability":"mutable","name":"quantity","nodeType":"VariableDeclaration","scope":2565,"src":"1648:16:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2499,"name":"uint256","nodeType":"ElementaryTypeName","src":"1648:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2502,"mutability":"mutable","name":"userData","nodeType":"VariableDeclaration","scope":2565,"src":"1674:23:17","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2501,"name":"bytes","nodeType":"ElementaryTypeName","src":"1674:5:17","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1559:144:17"},"returnParameters":{"id":2509,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2505,"mutability":"mutable","name":"totalPrice","nodeType":"VariableDeclaration","scope":2565,"src":"1727:18:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2504,"name":"uint256","nodeType":"ElementaryTypeName","src":"1727:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2508,"mutability":"mutable","name":"pricingData","nodeType":"VariableDeclaration","scope":2565,"src":"1747:28:17","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":2506,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1747:7:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":2507,"nodeType":"ArrayTypeName","src":"1747:9:17","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"src":"1726:50:17"},"scope":2783,"src":"1529:668:17","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":2639,"nodeType":"Block","src":"2463:419:17","statements":[{"assignments":[2584],"declarations":[{"constant":false,"id":2584,"mutability":"mutable","name":"purchaseData","nodeType":"VariableDeclaration","scope":2639,"src":"2473:32:17","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"},"typeName":{"id":2583,"name":"PurchaseData","nodeType":"UserDefinedTypeName","referencedDeclaration":5583,"src":"2473:12:17","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_storage_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"}},"visibility":"internal"}],"id":2585,"nodeType":"VariableDeclarationStatement","src":"2473:32:17"},{"expression":{"id":2591,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":2586,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2584,"src":"2515:12:17","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":2588,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"purchaser","nodeType":"MemberAccess","referencedDeclaration":5561,"src":"2515:22:17","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":2589,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":726,"src":"2540:10:17","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":2590,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2540:12:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"2515:37:17","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":2592,"nodeType":"ExpressionStatement","src":"2515:37:17"},{"expression":{"id":2597,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":2593,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2584,"src":"2562:12:17","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":2595,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"recipient","nodeType":"MemberAccess","referencedDeclaration":5563,"src":"2562:22:17","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2596,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2567,"src":"2587:9:17","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"2562:34:17","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":2598,"nodeType":"ExpressionStatement","src":"2562:34:17"},{"expression":{"id":2603,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":2599,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2584,"src":"2606:12:17","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":2601,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"token","nodeType":"MemberAccess","referencedDeclaration":5565,"src":"2606:18:17","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2602,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2569,"src":"2627:5:17","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2606:26:17","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2604,"nodeType":"ExpressionStatement","src":"2606:26:17"},{"expression":{"id":2609,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":2605,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2584,"src":"2642:12:17","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":2607,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"sku","nodeType":"MemberAccess","referencedDeclaration":5567,"src":"2642:16:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2608,"name":"sku","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2571,"src":"2661:3:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"2642:22:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":2610,"nodeType":"ExpressionStatement","src":"2642:22:17"},{"expression":{"id":2615,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":2611,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2584,"src":"2674:12:17","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":2613,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"quantity","nodeType":"MemberAccess","referencedDeclaration":5569,"src":"2674:21:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2614,"name":"quantity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2573,"src":"2698:8:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2674:32:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2616,"nodeType":"ExpressionStatement","src":"2674:32:17"},{"expression":{"id":2621,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":2617,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2584,"src":"2716:12:17","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":2619,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"userData","nodeType":"MemberAccess","referencedDeclaration":5571,"src":"2716:21:17","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2620,"name":"userData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2575,"src":"2740:8:17","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"src":"2716:32:17","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":2622,"nodeType":"ExpressionStatement","src":"2716:32:17"},{"expression":{"id":2627,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":2623,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2584,"src":"2758:12:17","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":2625,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"totalPrice","nodeType":"MemberAccess","referencedDeclaration":5573,"src":"2758:23:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2626,"name":"totalPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2577,"src":"2784:10:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2758:36:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2628,"nodeType":"ExpressionStatement","src":"2758:36:17"},{"expression":{"id":2633,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":2629,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2584,"src":"2804:12:17","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":2631,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"pricingData","nodeType":"MemberAccess","referencedDeclaration":5576,"src":"2804:24:17","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2632,"name":"pricingData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2580,"src":"2831:11:17","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[] calldata"}},"src":"2804:38:17","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"id":2634,"nodeType":"ExpressionStatement","src":"2804:38:17"},{"expression":{"arguments":[{"id":2636,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2584,"src":"2862:12:17","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}],"id":2635,"name":"_payment","nodeType":"Identifier","overloadedDeclarations":[5000],"referencedDeclaration":5000,"src":"2853:8:17","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_PurchaseData_$5583_memory_ptr_$returns$__$","typeString":"function (struct PurchaseLifeCycles.PurchaseData memory)"}},"id":2637,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2853:22:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2638,"nodeType":"ExpressionStatement","src":"2853:22:17"}]},"functionSelector":"8ce507eb","id":2640,"implemented":true,"kind":"function","modifiers":[],"name":"callUnderscorePayment","nodeType":"FunctionDefinition","parameters":{"id":2581,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2567,"mutability":"mutable","name":"recipient","nodeType":"VariableDeclaration","scope":2640,"src":"2243:25:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":2566,"name":"address","nodeType":"ElementaryTypeName","src":"2243:15:17","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":2569,"mutability":"mutable","name":"token","nodeType":"VariableDeclaration","scope":2640,"src":"2278:13:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2568,"name":"address","nodeType":"ElementaryTypeName","src":"2278:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2571,"mutability":"mutable","name":"sku","nodeType":"VariableDeclaration","scope":2640,"src":"2301:11:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2570,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2301:7:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":2573,"mutability":"mutable","name":"quantity","nodeType":"VariableDeclaration","scope":2640,"src":"2322:16:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2572,"name":"uint256","nodeType":"ElementaryTypeName","src":"2322:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2575,"mutability":"mutable","name":"userData","nodeType":"VariableDeclaration","scope":2640,"src":"2348:23:17","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2574,"name":"bytes","nodeType":"ElementaryTypeName","src":"2348:5:17","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2577,"mutability":"mutable","name":"totalPrice","nodeType":"VariableDeclaration","scope":2640,"src":"2381:18:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2576,"name":"uint256","nodeType":"ElementaryTypeName","src":"2381:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2580,"mutability":"mutable","name":"pricingData","nodeType":"VariableDeclaration","scope":2640,"src":"2409:30:17","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":2578,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2409:7:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":2579,"nodeType":"ArrayTypeName","src":"2409:9:17","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"src":"2233:212:17"},"returnParameters":{"id":2582,"nodeType":"ParameterList","parameters":[],"src":"2463:0:17"},"scope":2783,"src":"2203:679:17","stateMutability":"payable","virtual":false,"visibility":"external"},{"body":{"id":2659,"nodeType":"Block","src":"3050:65:17","statements":[{"expression":{"id":2657,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2651,"name":"rate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2649,"src":"3060:4:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":2653,"name":"fromToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2642,"src":"3083:9:17","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2654,"name":"toToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2644,"src":"3094:7:17","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2655,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2646,"src":"3103:4:17","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":2652,"name":"_conversionRate","nodeType":"Identifier","overloadedDeclarations":[5057],"referencedDeclaration":5057,"src":"3067:15:17","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$_t_bytes_memory_ptr_$returns$_t_uint256_$","typeString":"function (address,address,bytes memory) view returns (uint256)"}},"id":2656,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3067:41:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3060:48:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2658,"nodeType":"ExpressionStatement","src":"3060:48:17"}]},"functionSelector":"a1e16908","id":2660,"implemented":true,"kind":"function","modifiers":[],"name":"callUnderscoreConversionRate","nodeType":"FunctionDefinition","parameters":{"id":2647,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2642,"mutability":"mutable","name":"fromToken","nodeType":"VariableDeclaration","scope":2660,"src":"2935:17:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2641,"name":"address","nodeType":"ElementaryTypeName","src":"2935:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2644,"mutability":"mutable","name":"toToken","nodeType":"VariableDeclaration","scope":2660,"src":"2962:15:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2643,"name":"address","nodeType":"ElementaryTypeName","src":"2962:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2646,"mutability":"mutable","name":"data","nodeType":"VariableDeclaration","scope":2660,"src":"2987:19:17","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2645,"name":"bytes","nodeType":"ElementaryTypeName","src":"2987:5:17","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2925:87:17"},"returnParameters":{"id":2650,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2649,"mutability":"mutable","name":"rate","nodeType":"VariableDeclaration","scope":2660,"src":"3036:12:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2648,"name":"uint256","nodeType":"ElementaryTypeName","src":"3036:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3035:14:17"},"scope":2783,"src":"2888:227:17","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":2682,"nodeType":"Block","src":"3313:79:17","statements":[{"expression":{"id":2680,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2673,"name":"fromAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2671,"src":"3323:10:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":2675,"name":"fromToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2662,"src":"3350:9:17","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2676,"name":"toToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2664,"src":"3361:7:17","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2677,"name":"toAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2666,"src":"3370:8:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2678,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2668,"src":"3380:4:17","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":2674,"name":"_estimateSwap","nodeType":"Identifier","overloadedDeclarations":[5103],"referencedDeclaration":5103,"src":"3336:13:17","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_uint256_$","typeString":"function (address,address,uint256,bytes memory) view returns (uint256)"}},"id":2679,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3336:49:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3323:62:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2681,"nodeType":"ExpressionStatement","src":"3323:62:17"}]},"functionSelector":"151229f7","id":2683,"implemented":true,"kind":"function","modifiers":[],"name":"callUnderscoreEstimateSwap","nodeType":"FunctionDefinition","parameters":{"id":2669,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2662,"mutability":"mutable","name":"fromToken","nodeType":"VariableDeclaration","scope":2683,"src":"3166:17:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2661,"name":"address","nodeType":"ElementaryTypeName","src":"3166:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2664,"mutability":"mutable","name":"toToken","nodeType":"VariableDeclaration","scope":2683,"src":"3193:15:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2663,"name":"address","nodeType":"ElementaryTypeName","src":"3193:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2666,"mutability":"mutable","name":"toAmount","nodeType":"VariableDeclaration","scope":2683,"src":"3218:16:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2665,"name":"uint256","nodeType":"ElementaryTypeName","src":"3218:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2668,"mutability":"mutable","name":"data","nodeType":"VariableDeclaration","scope":2683,"src":"3244:19:17","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2667,"name":"bytes","nodeType":"ElementaryTypeName","src":"3244:5:17","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3156:113:17"},"returnParameters":{"id":2672,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2671,"mutability":"mutable","name":"fromAmount","nodeType":"VariableDeclaration","scope":2683,"src":"3293:18:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2670,"name":"uint256","nodeType":"ElementaryTypeName","src":"3293:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3292:20:17"},"scope":2783,"src":"3121:271:17","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":2738,"nodeType":"Block","src":"3584:511:17","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2698,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2696,"name":"fromToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2685,"src":"3598:9:17","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":2697,"name":"TOKEN_ETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5769,"src":"3611:9:17","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3598:22:17","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2724,"nodeType":"IfStatement","src":"3594:384:17","trueBody":{"id":2723,"nodeType":"Block","src":"3622:356:17","statements":[{"expression":{"arguments":[{"arguments":[{"id":2705,"name":"uniswapV2Router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3822,"src":"3684:15:17","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapV2Router_$4247","typeString":"contract IUniswapV2Router"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IUniswapV2Router_$4247","typeString":"contract IUniswapV2Router"}],"id":2704,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3676:7:17","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2703,"name":"address","nodeType":"ElementaryTypeName","src":"3676:7:17","typeDescriptions":{}}},"id":2706,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3676:24:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2707,"name":"fromAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2687,"src":"3702:10:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":2700,"name":"fromToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2685,"src":"3650:9:17","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2699,"name":"IWrappedERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":983,"src":"3636:13:17","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IWrappedERC20_$983_$","typeString":"type(contract IWrappedERC20)"}},"id":2701,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3636:24:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedERC20_$983","typeString":"contract IWrappedERC20"}},"id":2702,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"wrappedApprove","nodeType":"MemberAccess","referencedDeclaration":889,"src":"3636:39:17","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IWrappedERC20_$983_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IWrappedERC20_$983_$","typeString":"function (contract IWrappedERC20,address,uint256)"}},"id":2708,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3636:77:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2709,"nodeType":"ExpressionStatement","src":"3636:77:17"},{"expression":{"arguments":[{"expression":{"id":2714,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3929:3:17","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2715,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"3929:10:17","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"arguments":[{"id":2718,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3949:4:17","typeDescriptions":{"typeIdentifier":"t_contract$_UniswapSwapSaleMock_$2783","typeString":"contract UniswapSwapSaleMock"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_UniswapSwapSaleMock_$2783","typeString":"contract UniswapSwapSaleMock"}],"id":2717,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3941:7:17","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2716,"name":"address","nodeType":"ElementaryTypeName","src":"3941:7:17","typeDescriptions":{}}},"id":2719,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3941:13:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":2720,"name":"fromAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2687,"src":"3956:10:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":2711,"name":"fromToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2685,"src":"3898:9:17","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2710,"name":"IWrappedERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":983,"src":"3884:13:17","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IWrappedERC20_$983_$","typeString":"type(contract IWrappedERC20)"}},"id":2712,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3884:24:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedERC20_$983","typeString":"contract IWrappedERC20"}},"id":2713,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"wrappedTransferFrom","nodeType":"MemberAccess","referencedDeclaration":867,"src":"3884:44:17","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IWrappedERC20_$983_$_t_address_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IWrappedERC20_$983_$","typeString":"function (contract IWrappedERC20,address,address,uint256)"}},"id":2721,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3884:83:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2722,"nodeType":"ExpressionStatement","src":"3884:83:17"}]}},{"expression":{"id":2732,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2725,"name":"fromAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2687,"src":"3987:10:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":2727,"name":"fromToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2685,"src":"4006:9:17","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2728,"name":"toToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2689,"src":"4017:7:17","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2729,"name":"toAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2691,"src":"4026:8:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2730,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2693,"src":"4036:4:17","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":2726,"name":"_swap","nodeType":"Identifier","overloadedDeclarations":[5199],"referencedDeclaration":5199,"src":"4000:5:17","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_uint256_$","typeString":"function (address,address,uint256,bytes memory) returns (uint256)"}},"id":2731,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4000:41:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3987:54:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2733,"nodeType":"ExpressionStatement","src":"3987:54:17"},{"eventCall":{"arguments":[{"id":2735,"name":"fromAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2687,"src":"4077:10:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2734,"name":"UnderscoreSwapResult","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2390,"src":"4056:20:17","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":2736,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4056:32:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2737,"nodeType":"EmitStatement","src":"4051:37:17"}]},"functionSelector":"a541f89c","id":2739,"implemented":true,"kind":"function","modifiers":[],"name":"callUnderscoreSwap","nodeType":"FunctionDefinition","parameters":{"id":2694,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2685,"mutability":"mutable","name":"fromToken","nodeType":"VariableDeclaration","scope":2739,"src":"3435:17:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2684,"name":"address","nodeType":"ElementaryTypeName","src":"3435:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2687,"mutability":"mutable","name":"fromAmount","nodeType":"VariableDeclaration","scope":2739,"src":"3462:18:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2686,"name":"uint256","nodeType":"ElementaryTypeName","src":"3462:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2689,"mutability":"mutable","name":"toToken","nodeType":"VariableDeclaration","scope":2739,"src":"3490:15:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2688,"name":"address","nodeType":"ElementaryTypeName","src":"3490:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2691,"mutability":"mutable","name":"toAmount","nodeType":"VariableDeclaration","scope":2739,"src":"3515:16:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2690,"name":"uint256","nodeType":"ElementaryTypeName","src":"3515:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2693,"mutability":"mutable","name":"data","nodeType":"VariableDeclaration","scope":2739,"src":"3541:19:17","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2692,"name":"bytes","nodeType":"ElementaryTypeName","src":"3541:5:17","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3425:141:17"},"returnParameters":{"id":2695,"nodeType":"ParameterList","parameters":[],"src":"3584:0:17"},"scope":2783,"src":"3398:697:17","stateMutability":"payable","virtual":false,"visibility":"external"},{"body":{"id":2781,"nodeType":"Block","src":"4213:250:17","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2752,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2750,"name":"tokenA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2741,"src":"4227:6:17","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":2751,"name":"TOKEN_ETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5769,"src":"4237:9:17","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4227:19:17","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2760,"nodeType":"IfStatement","src":"4223:81:17","trueBody":{"id":2759,"nodeType":"Block","src":"4248:56:17","statements":[{"expression":{"id":2757,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2753,"name":"tokenA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2741,"src":"4262:6:17","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":2754,"name":"uniswapV2Router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3822,"src":"4271:15:17","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapV2Router_$4247","typeString":"contract IUniswapV2Router"}},"id":2755,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"WETH","nodeType":"MemberAccess","referencedDeclaration":4182,"src":"4271:20:17","typeDescriptions":{"typeIdentifier":"t_function_external_pure$__$returns$_t_address_$","typeString":"function () pure external returns (address)"}},"id":2756,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4271:22:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4262:31:17","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2758,"nodeType":"ExpressionStatement","src":"4262:31:17"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2763,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2761,"name":"tokenB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2743,"src":"4318:6:17","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":2762,"name":"TOKEN_ETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5769,"src":"4328:9:17","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4318:19:17","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2771,"nodeType":"IfStatement","src":"4314:81:17","trueBody":{"id":2770,"nodeType":"Block","src":"4339:56:17","statements":[{"expression":{"id":2768,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2764,"name":"tokenB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2743,"src":"4353:6:17","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":2765,"name":"uniswapV2Router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3822,"src":"4362:15:17","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapV2Router_$4247","typeString":"contract IUniswapV2Router"}},"id":2766,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"WETH","nodeType":"MemberAccess","referencedDeclaration":4182,"src":"4362:20:17","typeDescriptions":{"typeIdentifier":"t_function_external_pure$__$returns$_t_address_$","typeString":"function () pure external returns (address)"}},"id":2767,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4362:22:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4353:31:17","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2769,"nodeType":"ExpressionStatement","src":"4353:31:17"}]}},{"expression":{"id":2779,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":2772,"name":"reserveA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2746,"src":"4406:8:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2773,"name":"reserveB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2748,"src":"4416:8:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2774,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"4405:20:17","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":2776,"name":"tokenA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2741,"src":"4441:6:17","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2777,"name":"tokenB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2743,"src":"4449:6:17","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":2775,"name":"_getReserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3968,"src":"4428:12:17","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$returns$_t_uint256_$_t_uint256_$","typeString":"function (address,address) view returns (uint256,uint256)"}},"id":2778,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4428:28:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"4405:51:17","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2780,"nodeType":"ExpressionStatement","src":"4405:51:17"}]},"functionSelector":"d52bb6f4","id":2782,"implemented":true,"kind":"function","modifiers":[],"name":"getReserves","nodeType":"FunctionDefinition","parameters":{"id":2744,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2741,"mutability":"mutable","name":"tokenA","nodeType":"VariableDeclaration","scope":2782,"src":"4122:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2740,"name":"address","nodeType":"ElementaryTypeName","src":"4122:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2743,"mutability":"mutable","name":"tokenB","nodeType":"VariableDeclaration","scope":2782,"src":"4138:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2742,"name":"address","nodeType":"ElementaryTypeName","src":"4138:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4121:32:17"},"returnParameters":{"id":2749,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2746,"mutability":"mutable","name":"reserveA","nodeType":"VariableDeclaration","scope":2782,"src":"4177:16:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2745,"name":"uint256","nodeType":"ElementaryTypeName","src":"4177:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2748,"mutability":"mutable","name":"reserveB","nodeType":"VariableDeclaration","scope":2782,"src":"4195:16:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2747,"name":"uint256","nodeType":"ElementaryTypeName","src":"4195:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4176:36:17"},"scope":2783,"src":"4101:362:17","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":2784,"src":"243:4222:17"}],"src":"33:4433:17"},"id":17},"contracts/mocks/sale/abstract/OracleSaleMock.sol":{"ast":{"absolutePath":"contracts/mocks/sale/abstract/OracleSaleMock.sol","exportedSymbols":{"EnumMap":[362],"OracleSale":[5556],"OracleSaleMock":[3010]},"id":3011,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":2785,"literals":["solidity",">=","0.7",".6","<","0.8",".0"],"nodeType":"PragmaDirective","src":"33:31:18"},{"absolutePath":"contracts/sale/abstract/OracleSale.sol","file":"../../../sale/abstract/OracleSale.sol","id":2788,"nodeType":"ImportDirective","scope":3011,"sourceUnit":5557,"src":"66:74:18","symbolAliases":[{"foreign":{"id":2786,"name":"EnumMap","nodeType":"Identifier","overloadedDeclarations":[],"src":"74:7:18","typeDescriptions":{}}},{"foreign":{"id":2787,"name":"OracleSale","nodeType":"Identifier","overloadedDeclarations":[],"src":"83:10:18","typeDescriptions":{}}}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":2789,"name":"OracleSale","nodeType":"UserDefinedTypeName","referencedDeclaration":5556,"src":"169:10:18","typeDescriptions":{"typeIdentifier":"t_contract$_OracleSale_$5556","typeString":"contract OracleSale"}},"id":2790,"nodeType":"InheritanceSpecifier","src":"169:10:18"}],"contractDependencies":[22,103,646,715,736,812,4753,5556,5671,6694,7187,7346],"contractKind":"contract","fullyImplemented":true,"id":3010,"linearizedBaseContracts":[3010,5556,4753,6694,646,715,812,103,22,736,7346,5671,7187],"name":"OracleSaleMock","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"id":2799,"name":"UnderscoreOraclePricingResult","nodeType":"EventDefinition","parameters":{"id":2798,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2792,"indexed":false,"mutability":"mutable","name":"handled","nodeType":"VariableDeclaration","scope":2799,"src":"222:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2791,"name":"bool","nodeType":"ElementaryTypeName","src":"222:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2795,"indexed":false,"mutability":"mutable","name":"pricingData","nodeType":"VariableDeclaration","scope":2799,"src":"236:21:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":2793,"name":"bytes32","nodeType":"ElementaryTypeName","src":"236:7:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":2794,"nodeType":"ArrayTypeName","src":"236:9:18","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"},{"constant":false,"id":2797,"indexed":false,"mutability":"mutable","name":"totalPrice","nodeType":"VariableDeclaration","scope":2799,"src":"259:18:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2796,"name":"uint256","nodeType":"ElementaryTypeName","src":"259:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"221:57:18"},"src":"186:93:18"},{"constant":false,"functionSelector":"d2da1539","id":2805,"mutability":"mutable","name":"mockConversionRates","nodeType":"VariableDeclaration","scope":3010,"src":"285:74:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"typeName":{"id":2804,"keyType":{"id":2800,"name":"address","nodeType":"ElementaryTypeName","src":"293:7:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"285:47:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"valueType":{"id":2803,"keyType":{"id":2801,"name":"address","nodeType":"ElementaryTypeName","src":"312:7:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"304:27:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueType":{"id":2802,"name":"uint256","nodeType":"ElementaryTypeName","src":"323:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}}},"visibility":"public"},{"body":{"id":2822,"nodeType":"Block","src":"601:2:18","statements":[]},"id":2823,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":2816,"name":"payoutWallet_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2807,"src":"534:13:18","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":2817,"name":"skusCapacity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2809,"src":"549:12:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2818,"name":"tokensPerSkuCapacity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2811,"src":"563:20:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2819,"name":"referenceToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2813,"src":"585:14:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":2820,"modifierName":{"id":2815,"name":"OracleSale","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5556,"src":"523:10:18","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_OracleSale_$5556_$","typeString":"type(contract OracleSale)"}},"nodeType":"ModifierInvocation","src":"523:77:18"}],"name":"","nodeType":"FunctionDefinition","parameters":{"id":2814,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2807,"mutability":"mutable","name":"payoutWallet_","nodeType":"VariableDeclaration","scope":2823,"src":"387:29:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":2806,"name":"address","nodeType":"ElementaryTypeName","src":"387:15:18","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":2809,"mutability":"mutable","name":"skusCapacity","nodeType":"VariableDeclaration","scope":2823,"src":"426:20:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2808,"name":"uint256","nodeType":"ElementaryTypeName","src":"426:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2811,"mutability":"mutable","name":"tokensPerSkuCapacity","nodeType":"VariableDeclaration","scope":2823,"src":"456:28:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2810,"name":"uint256","nodeType":"ElementaryTypeName","src":"456:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2813,"mutability":"mutable","name":"referenceToken","nodeType":"VariableDeclaration","scope":2823,"src":"494:22:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2812,"name":"address","nodeType":"ElementaryTypeName","src":"494:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"377:145:18"},"returnParameters":{"id":2821,"nodeType":"ParameterList","parameters":[],"src":"601:0:18"},"scope":3010,"src":"366:237:18","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":2841,"nodeType":"Block","src":"772:92:18","statements":[{"expression":{"arguments":[{"id":2835,"name":"sku","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2825,"src":"793:3:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":2836,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2827,"src":"798:11:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2837,"name":"maxQuantityPerPurchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2829,"src":"811:22:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2838,"name":"notificationsReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2831,"src":"835:21:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":2834,"name":"_createSku","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6383,"src":"782:10:18","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_uint256_$_t_uint256_$_t_address_$returns$__$","typeString":"function (bytes32,uint256,uint256,address)"}},"id":2839,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"782:75:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2840,"nodeType":"ExpressionStatement","src":"782:75:18"}]},"functionSelector":"2c87927b","id":2842,"implemented":true,"kind":"function","modifiers":[],"name":"createSku","nodeType":"FunctionDefinition","parameters":{"id":2832,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2825,"mutability":"mutable","name":"sku","nodeType":"VariableDeclaration","scope":2842,"src":"637:11:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2824,"name":"bytes32","nodeType":"ElementaryTypeName","src":"637:7:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":2827,"mutability":"mutable","name":"totalSupply","nodeType":"VariableDeclaration","scope":2842,"src":"658:19:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2826,"name":"uint256","nodeType":"ElementaryTypeName","src":"658:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2829,"mutability":"mutable","name":"maxQuantityPerPurchase","nodeType":"VariableDeclaration","scope":2842,"src":"687:30:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2828,"name":"uint256","nodeType":"ElementaryTypeName","src":"687:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2831,"mutability":"mutable","name":"notificationsReceiver","nodeType":"VariableDeclaration","scope":2842,"src":"727:29:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2830,"name":"address","nodeType":"ElementaryTypeName","src":"727:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"627:135:18"},"returnParameters":{"id":2833,"nodeType":"ParameterList","parameters":[],"src":"772:0:18"},"scope":3010,"src":"609:255:18","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":2859,"nodeType":"Block","src":"990:63:18","statements":[{"expression":{"id":2857,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":2851,"name":"mockConversionRates","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2805,"src":"1000:19:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":2854,"indexExpression":{"id":2852,"name":"fromToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2844,"src":"1020:9:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1000:30:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":2855,"indexExpression":{"id":2853,"name":"toToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2846,"src":"1031:7:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1000:39:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2856,"name":"rate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2848,"src":"1042:4:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1000:46:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2858,"nodeType":"ExpressionStatement","src":"1000:46:18"}]},"functionSelector":"de965215","id":2860,"implemented":true,"kind":"function","modifiers":[],"name":"setMockConversionRate","nodeType":"FunctionDefinition","parameters":{"id":2849,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2844,"mutability":"mutable","name":"fromToken","nodeType":"VariableDeclaration","scope":2860,"src":"910:17:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2843,"name":"address","nodeType":"ElementaryTypeName","src":"910:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2846,"mutability":"mutable","name":"toToken","nodeType":"VariableDeclaration","scope":2860,"src":"937:15:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2845,"name":"address","nodeType":"ElementaryTypeName","src":"937:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2848,"mutability":"mutable","name":"rate","nodeType":"VariableDeclaration","scope":2860,"src":"962:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2847,"name":"uint256","nodeType":"ElementaryTypeName","src":"962:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"900:80:18"},"returnParameters":{"id":2850,"nodeType":"ParameterList","parameters":[],"src":"990:0:18"},"scope":3010,"src":"870:183:18","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":2949,"nodeType":"Block","src":"1249:651:18","statements":[{"assignments":[2874],"declarations":[{"constant":false,"id":2874,"mutability":"mutable","name":"purchaseData","nodeType":"VariableDeclaration","scope":2949,"src":"1259:32:18","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"},"typeName":{"id":2873,"name":"PurchaseData","nodeType":"UserDefinedTypeName","referencedDeclaration":5583,"src":"1259:12:18","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_storage_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"}},"visibility":"internal"}],"id":2875,"nodeType":"VariableDeclarationStatement","src":"1259:32:18"},{"expression":{"id":2881,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":2876,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2874,"src":"1301:12:18","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":2878,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"purchaser","nodeType":"MemberAccess","referencedDeclaration":5561,"src":"1301:22:18","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":2879,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":726,"src":"1326:10:18","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":2880,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1326:12:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"1301:37:18","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":2882,"nodeType":"ExpressionStatement","src":"1301:37:18"},{"expression":{"id":2887,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":2883,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2874,"src":"1348:12:18","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":2885,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"recipient","nodeType":"MemberAccess","referencedDeclaration":5563,"src":"1348:22:18","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2886,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2862,"src":"1373:9:18","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"1348:34:18","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":2888,"nodeType":"ExpressionStatement","src":"1348:34:18"},{"expression":{"id":2893,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":2889,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2874,"src":"1392:12:18","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":2891,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"token","nodeType":"MemberAccess","referencedDeclaration":5565,"src":"1392:18:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2892,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2864,"src":"1413:5:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1392:26:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2894,"nodeType":"ExpressionStatement","src":"1392:26:18"},{"expression":{"id":2899,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":2895,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2874,"src":"1428:12:18","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":2897,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"sku","nodeType":"MemberAccess","referencedDeclaration":5567,"src":"1428:16:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2898,"name":"sku","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2866,"src":"1447:3:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"1428:22:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":2900,"nodeType":"ExpressionStatement","src":"1428:22:18"},{"expression":{"id":2905,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":2901,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2874,"src":"1460:12:18","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":2903,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"quantity","nodeType":"MemberAccess","referencedDeclaration":5569,"src":"1460:21:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2904,"name":"quantity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2868,"src":"1484:8:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1460:32:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2906,"nodeType":"ExpressionStatement","src":"1460:32:18"},{"expression":{"id":2911,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":2907,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2874,"src":"1502:12:18","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":2909,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"userData","nodeType":"MemberAccess","referencedDeclaration":5571,"src":"1502:21:18","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2910,"name":"userData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2870,"src":"1526:8:18","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"src":"1502:32:18","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":2912,"nodeType":"ExpressionStatement","src":"1502:32:18"},{"assignments":[2914],"declarations":[{"constant":false,"id":2914,"mutability":"mutable","name":"skuInfo","nodeType":"VariableDeclaration","scope":2949,"src":"1545:23:18","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage_ptr","typeString":"struct Sale.SkuInfo"},"typeName":{"id":2913,"name":"SkuInfo","nodeType":"UserDefinedTypeName","referencedDeclaration":5762,"src":"1545:7:18","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage_ptr","typeString":"struct Sale.SkuInfo"}},"visibility":"internal"}],"id":2918,"initialValue":{"baseExpression":{"id":2915,"name":"_skuInfos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5783,"src":"1571:9:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_SkuInfo_$5762_storage_$","typeString":"mapping(bytes32 => struct Sale.SkuInfo storage ref)"}},"id":2917,"indexExpression":{"id":2916,"name":"sku","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2866,"src":"1581:3:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1571:14:18","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage","typeString":"struct Sale.SkuInfo storage ref"}},"nodeType":"VariableDeclarationStatement","src":"1545:40:18"},{"assignments":[2922],"declarations":[{"constant":false,"id":2922,"mutability":"mutable","name":"tokenPrices","nodeType":"VariableDeclaration","scope":2949,"src":"1595:31:18","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map"},"typeName":{"id":2921,"name":"EnumMap.Map","nodeType":"UserDefinedTypeName","referencedDeclaration":119,"src":"1595:11:18","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map"}},"visibility":"internal"}],"id":2925,"initialValue":{"expression":{"id":2923,"name":"skuInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2914,"src":"1629:7:18","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage_ptr","typeString":"struct Sale.SkuInfo storage pointer"}},"id":2924,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"prices","nodeType":"MemberAccess","referencedDeclaration":5761,"src":"1629:14:18","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage","typeString":"struct EnumMap.Map storage ref"}},"nodeType":"VariableDeclarationStatement","src":"1595:48:18"},{"assignments":[2927],"declarations":[{"constant":false,"id":2927,"mutability":"mutable","name":"unitPrice","nodeType":"VariableDeclaration","scope":2949,"src":"1653:17:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2926,"name":"uint256","nodeType":"ElementaryTypeName","src":"1653:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2932,"initialValue":{"arguments":[{"id":2929,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2874,"src":"1684:12:18","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},{"id":2930,"name":"tokenPrices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2922,"src":"1698:11:18","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"},{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map storage pointer"}],"id":2928,"name":"_unitPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4752,"src":"1673:10:18","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_PurchaseData_$5583_memory_ptr_$_t_struct$_Map_$119_storage_ptr_$returns$_t_uint256_$","typeString":"function (struct PurchaseLifeCycles.PurchaseData memory,struct EnumMap.Map storage pointer) view returns (uint256)"}},"id":2931,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1673:37:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1653:57:18"},{"assignments":[2934],"declarations":[{"constant":false,"id":2934,"mutability":"mutable","name":"handled","nodeType":"VariableDeclaration","scope":2949,"src":"1721:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2933,"name":"bool","nodeType":"ElementaryTypeName","src":"1721:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":2940,"initialValue":{"arguments":[{"id":2936,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2874,"src":"1751:12:18","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},{"id":2937,"name":"tokenPrices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2922,"src":"1765:11:18","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map storage pointer"}},{"id":2938,"name":"unitPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2927,"src":"1778:9:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"},{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map storage pointer"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2935,"name":"_oraclePricing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5543,"src":"1736:14:18","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_PurchaseData_$5583_memory_ptr_$_t_struct$_Map_$119_storage_ptr_$_t_uint256_$returns$_t_bool_$","typeString":"function (struct PurchaseLifeCycles.PurchaseData memory,struct EnumMap.Map storage pointer,uint256) view returns (bool)"}},"id":2939,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1736:52:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"1721:67:18"},{"eventCall":{"arguments":[{"id":2942,"name":"handled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2934,"src":"1834:7:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":2943,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2874,"src":"1843:12:18","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":2944,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"pricingData","nodeType":"MemberAccess","referencedDeclaration":5576,"src":"1843:24:18","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},{"expression":{"id":2945,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2874,"src":"1869:12:18","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":2946,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalPrice","nodeType":"MemberAccess","referencedDeclaration":5573,"src":"1869:23:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2941,"name":"UnderscoreOraclePricingResult","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2799,"src":"1804:29:18","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bool_$_t_array$_t_bytes32_$dyn_memory_ptr_$_t_uint256_$returns$__$","typeString":"function (bool,bytes32[] memory,uint256)"}},"id":2947,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1804:89:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2948,"nodeType":"EmitStatement","src":"1799:94:18"}]},"functionSelector":"a0cf0735","id":2950,"implemented":true,"kind":"function","modifiers":[],"name":"callUnderscoreOraclePricing","nodeType":"FunctionDefinition","parameters":{"id":2871,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2862,"mutability":"mutable","name":"recipient","nodeType":"VariableDeclaration","scope":2950,"src":"1105:25:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":2861,"name":"address","nodeType":"ElementaryTypeName","src":"1105:15:18","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":2864,"mutability":"mutable","name":"token","nodeType":"VariableDeclaration","scope":2950,"src":"1140:13:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2863,"name":"address","nodeType":"ElementaryTypeName","src":"1140:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2866,"mutability":"mutable","name":"sku","nodeType":"VariableDeclaration","scope":2950,"src":"1163:11:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2865,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1163:7:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":2868,"mutability":"mutable","name":"quantity","nodeType":"VariableDeclaration","scope":2950,"src":"1184:16:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2867,"name":"uint256","nodeType":"ElementaryTypeName","src":"1184:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2870,"mutability":"mutable","name":"userData","nodeType":"VariableDeclaration","scope":2950,"src":"1210:23:18","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2869,"name":"bytes","nodeType":"ElementaryTypeName","src":"1210:5:18","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1095:144:18"},"returnParameters":{"id":2872,"nodeType":"ParameterList","parameters":[],"src":"1249:0:18"},"scope":3010,"src":"1059:841:18","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":2980,"nodeType":"Block","src":"2050:169:18","statements":[{"assignments":[2962],"declarations":[{"constant":false,"id":2962,"mutability":"mutable","name":"skuInfo","nodeType":"VariableDeclaration","scope":2980,"src":"2060:23:18","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage_ptr","typeString":"struct Sale.SkuInfo"},"typeName":{"id":2961,"name":"SkuInfo","nodeType":"UserDefinedTypeName","referencedDeclaration":5762,"src":"2060:7:18","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage_ptr","typeString":"struct Sale.SkuInfo"}},"visibility":"internal"}],"id":2966,"initialValue":{"baseExpression":{"id":2963,"name":"_skuInfos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5783,"src":"2086:9:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_SkuInfo_$5762_storage_$","typeString":"mapping(bytes32 => struct Sale.SkuInfo storage ref)"}},"id":2965,"indexExpression":{"id":2964,"name":"sku","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2952,"src":"2096:3:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2086:14:18","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage","typeString":"struct Sale.SkuInfo storage ref"}},"nodeType":"VariableDeclarationStatement","src":"2060:40:18"},{"assignments":[2970],"declarations":[{"constant":false,"id":2970,"mutability":"mutable","name":"tokenPrices","nodeType":"VariableDeclaration","scope":2980,"src":"2110:31:18","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map"},"typeName":{"id":2969,"name":"EnumMap.Map","nodeType":"UserDefinedTypeName","referencedDeclaration":119,"src":"2110:11:18","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map"}},"visibility":"internal"}],"id":2973,"initialValue":{"expression":{"id":2971,"name":"skuInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2962,"src":"2144:7:18","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage_ptr","typeString":"struct Sale.SkuInfo storage pointer"}},"id":2972,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"prices","nodeType":"MemberAccess","referencedDeclaration":5761,"src":"2144:14:18","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage","typeString":"struct EnumMap.Map storage ref"}},"nodeType":"VariableDeclarationStatement","src":"2110:48:18"},{"expression":{"arguments":[{"id":2975,"name":"tokenPrices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2970,"src":"2184:11:18","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map storage pointer"}},{"id":2976,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2955,"src":"2197:6:18","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},{"id":2977,"name":"prices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2958,"src":"2205:6:18","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map storage pointer"},{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"},{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}],"id":2974,"name":"_setTokenPrices","nodeType":"Identifier","overloadedDeclarations":[5441],"referencedDeclaration":5441,"src":"2168:15:18","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Map_$119_storage_ptr_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$","typeString":"function (struct EnumMap.Map storage pointer,address[] memory,uint256[] memory)"}},"id":2978,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2168:44:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2979,"nodeType":"ExpressionStatement","src":"2168:44:18"}]},"functionSelector":"b3150ef0","id":2981,"implemented":true,"kind":"function","modifiers":[],"name":"callUnderscoreSetTokenPrices","nodeType":"FunctionDefinition","parameters":{"id":2959,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2952,"mutability":"mutable","name":"sku","nodeType":"VariableDeclaration","scope":2981,"src":"1953:11:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2951,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1953:7:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":2955,"mutability":"mutable","name":"tokens","nodeType":"VariableDeclaration","scope":2981,"src":"1974:25:18","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":2953,"name":"address","nodeType":"ElementaryTypeName","src":"1974:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2954,"nodeType":"ArrayTypeName","src":"1974:9:18","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":2958,"mutability":"mutable","name":"prices","nodeType":"VariableDeclaration","scope":2981,"src":"2009:25:18","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2956,"name":"uint256","nodeType":"ElementaryTypeName","src":"2009:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2957,"nodeType":"ArrayTypeName","src":"2009:9:18","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"1943:97:18"},"returnParameters":{"id":2960,"nodeType":"ParameterList","parameters":[],"src":"2050:0:18"},"scope":3010,"src":"1906:313:18","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5555],"body":{"id":3008,"nodeType":"Block","src":"2385:115:18","statements":[{"expression":{"id":2999,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2993,"name":"rate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2991,"src":"2395:4:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"baseExpression":{"id":2994,"name":"mockConversionRates","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2805,"src":"2402:19:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":2996,"indexExpression":{"id":2995,"name":"fromToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2983,"src":"2422:9:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2402:30:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":2998,"indexExpression":{"id":2997,"name":"toToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2985,"src":"2433:7:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2402:39:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2395:46:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3000,"nodeType":"ExpressionStatement","src":"2395:46:18"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3004,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3002,"name":"rate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2991,"src":"2459:4:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":3003,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2467:1:18","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2459:9:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616c653a20756e646566696e65642072617465","id":3005,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2470:22:18","typeDescriptions":{"typeIdentifier":"t_stringliteral_a5126163b79ed5c50bb8421cb2d96d088511f1b3a52d653c4275474201a49876","typeString":"literal_string \"Sale: undefined rate\""},"value":"Sale: undefined rate"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_a5126163b79ed5c50bb8421cb2d96d088511f1b3a52d653c4275474201a49876","typeString":"literal_string \"Sale: undefined rate\""}],"id":3001,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2451:7:18","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":3006,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2451:42:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3007,"nodeType":"ExpressionStatement","src":"2451:42:18"}]},"id":3009,"implemented":true,"kind":"function","modifiers":[],"name":"_conversionRate","nodeType":"FunctionDefinition","overrides":{"id":2989,"nodeType":"OverrideSpecifier","overrides":[],"src":"2353:8:18"},"parameters":{"id":2988,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2983,"mutability":"mutable","name":"fromToken","nodeType":"VariableDeclaration","scope":3009,"src":"2259:17:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2982,"name":"address","nodeType":"ElementaryTypeName","src":"2259:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2985,"mutability":"mutable","name":"toToken","nodeType":"VariableDeclaration","scope":3009,"src":"2286:15:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2984,"name":"address","nodeType":"ElementaryTypeName","src":"2286:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2987,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":3009,"src":"2311:12:18","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2986,"name":"bytes","nodeType":"ElementaryTypeName","src":"2311:5:18","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2249:89:18"},"returnParameters":{"id":2992,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2991,"mutability":"mutable","name":"rate","nodeType":"VariableDeclaration","scope":3009,"src":"2371:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2990,"name":"uint256","nodeType":"ElementaryTypeName","src":"2371:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2370:14:18"},"scope":3010,"src":"2225:275:18","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":3011,"src":"142:2360:18"}],"src":"33:2470:18"},"id":18},"contracts/mocks/sale/abstract/PurchaseLifeCyclesMock.sol":{"ast":{"absolutePath":"contracts/mocks/sale/abstract/PurchaseLifeCyclesMock.sol","exportedSymbols":{"PurchaseLifeCycles":[5671],"PurchaseLifeCyclesMock":[3312]},"id":3313,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":3012,"literals":["solidity",">=","0.7",".6","<","0.8",".0"],"nodeType":"PragmaDirective","src":"33:31:19"},{"absolutePath":"contracts/sale/abstract/PurchaseLifeCycles.sol","file":"../../../sale/abstract/PurchaseLifeCycles.sol","id":3014,"nodeType":"ImportDirective","scope":3313,"sourceUnit":5672,"src":"66:81:19","symbolAliases":[{"foreign":{"id":3013,"name":"PurchaseLifeCycles","nodeType":"Identifier","overloadedDeclarations":[],"src":"74:18:19","typeDescriptions":{}}}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":3015,"name":"PurchaseLifeCycles","nodeType":"UserDefinedTypeName","referencedDeclaration":5671,"src":"184:18:19","typeDescriptions":{"typeIdentifier":"t_contract$_PurchaseLifeCycles_$5671","typeString":"contract PurchaseLifeCycles"}},"id":3016,"nodeType":"InheritanceSpecifier","src":"184:18:19"}],"contractDependencies":[5671],"contractKind":"contract","fullyImplemented":true,"id":3312,"linearizedBaseContracts":[3312,5671],"name":"PurchaseLifeCyclesMock","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"id":3020,"name":"PurchaseLifeCyclePath","nodeType":"EventDefinition","parameters":{"id":3019,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3018,"indexed":false,"mutability":"mutable","name":"path","nodeType":"VariableDeclaration","scope":3020,"src":"237:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3017,"name":"uint256","nodeType":"ElementaryTypeName","src":"237:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"236:14:19"},"src":"209:42:19"},{"constant":true,"functionSelector":"f5df5e0f","id":3025,"mutability":"constant","name":"LIFECYCLE_STEP_VALIDATION","nodeType":"VariableDeclaration","scope":3312,"src":"257:58:19","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3021,"name":"uint256","nodeType":"ElementaryTypeName","src":"257:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"id":3024,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":3022,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"309:1:19","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"31","id":3023,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"314:1:19","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"309:6:19","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"}},"visibility":"public"},{"constant":true,"functionSelector":"079de861","id":3030,"mutability":"constant","name":"LIFECYCLE_STEP_PRICING","nodeType":"VariableDeclaration","scope":3312,"src":"321:55:19","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3026,"name":"uint256","nodeType":"ElementaryTypeName","src":"321:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"id":3029,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":3027,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"370:1:19","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"32","id":3028,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"375:1:19","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"370:6:19","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"}},"visibility":"public"},{"constant":true,"functionSelector":"653496fd","id":3035,"mutability":"constant","name":"LIFECYCLE_STEP_PAYMENT","nodeType":"VariableDeclaration","scope":3312,"src":"382:55:19","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3031,"name":"uint256","nodeType":"ElementaryTypeName","src":"382:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"id":3034,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":3032,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"431:1:19","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"33","id":3033,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"436:1:19","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"431:6:19","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"}},"visibility":"public"},{"constant":true,"functionSelector":"32d1757e","id":3040,"mutability":"constant","name":"LIFECYCLE_STEP_DELIVERY","nodeType":"VariableDeclaration","scope":3312,"src":"443:56:19","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3036,"name":"uint256","nodeType":"ElementaryTypeName","src":"443:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"id":3039,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":3037,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"493:1:19","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"34","id":3038,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"498:1:19","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"493:6:19","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"}},"visibility":"public"},{"constant":true,"functionSelector":"7e78ce54","id":3045,"mutability":"constant","name":"LIFECYCLE_STEP_NOTIFICATION","nodeType":"VariableDeclaration","scope":3312,"src":"505:60:19","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3041,"name":"uint256","nodeType":"ElementaryTypeName","src":"505:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"id":3044,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":3042,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"559:1:19","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"35","id":3043,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"564:1:19","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"value":"5"},"src":"559:6:19","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"}},"visibility":"public"},{"body":{"id":3093,"nodeType":"Block","src":"767:390:19","statements":[{"assignments":[3059],"declarations":[{"constant":false,"id":3059,"mutability":"mutable","name":"purchaseData","nodeType":"VariableDeclaration","scope":3093,"src":"777:32:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"},"typeName":{"id":3058,"name":"PurchaseData","nodeType":"UserDefinedTypeName","referencedDeclaration":5583,"src":"777:12:19","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_storage_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"}},"visibility":"internal"}],"id":3083,"initialValue":{"arguments":[{"id":3061,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3047,"src":"842:9:19","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":3062,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3049,"src":"865:5:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3063,"name":"sku","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3051,"src":"884:3:19","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":3064,"name":"quantity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3053,"src":"901:8:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3065,"name":"userData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3055,"src":"923:8:19","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"hexValue":"30","id":3066,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"945:1:19","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"arguments":[{"hexValue":"30","id":3070,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"974:1:19","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3069,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"960:13:19","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (bytes32[] memory)"},"typeName":{"baseType":{"id":3067,"name":"bytes32","nodeType":"ElementaryTypeName","src":"964:7:19","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3068,"nodeType":"ArrayTypeName","src":"964:9:19","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}}},"id":3071,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"960:16:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},{"arguments":[{"hexValue":"30","id":3075,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1004:1:19","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3074,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"990:13:19","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (bytes32[] memory)"},"typeName":{"baseType":{"id":3072,"name":"bytes32","nodeType":"ElementaryTypeName","src":"994:7:19","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3073,"nodeType":"ArrayTypeName","src":"994:9:19","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}}},"id":3076,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"990:16:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},{"arguments":[{"hexValue":"30","id":3080,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1034:1:19","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3079,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"1020:13:19","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (bytes32[] memory)"},"typeName":{"baseType":{"id":3077,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1024:7:19","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3078,"nodeType":"ArrayTypeName","src":"1024:9:19","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}}},"id":3081,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1020:16:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"},{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"},{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}],"id":3060,"name":"_getPurchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3311,"src":"812:16:19","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_payable_$_t_address_$_t_bytes32_$_t_uint256_$_t_bytes_memory_ptr_$_t_uint256_$_t_array$_t_bytes32_$dyn_memory_ptr_$_t_array$_t_bytes32_$dyn_memory_ptr_$_t_array$_t_bytes32_$dyn_memory_ptr_$returns$_t_struct$_PurchaseData_$5583_memory_ptr_$","typeString":"function (address payable,address,bytes32,uint256,bytes memory,uint256,bytes32[] memory,bytes32[] memory,bytes32[] memory) view returns (struct PurchaseLifeCycles.PurchaseData memory)"}},"id":3082,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"812:234:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"nodeType":"VariableDeclarationStatement","src":"777:269:19"},{"expression":{"arguments":[{"id":3085,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3059,"src":"1075:12:19","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}],"id":3084,"name":"_estimatePurchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5613,"src":"1057:17:19","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_PurchaseData_$5583_memory_ptr_$returns$_t_uint256_$_t_array$_t_bytes32_$dyn_memory_ptr_$","typeString":"function (struct PurchaseLifeCycles.PurchaseData memory) view returns (uint256,bytes32[] memory)"}},"id":3086,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1057:31:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_array$_t_bytes32_$dyn_memory_ptr_$","typeString":"tuple(uint256,bytes32[] memory)"}},"id":3087,"nodeType":"ExpressionStatement","src":"1057:31:19"},{"eventCall":{"arguments":[{"expression":{"id":3089,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3059,"src":"1126:12:19","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":3090,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalPrice","nodeType":"MemberAccess","referencedDeclaration":5573,"src":"1126:23:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3088,"name":"PurchaseLifeCyclePath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3020,"src":"1104:21:19","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":3091,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1104:46:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3092,"nodeType":"EmitStatement","src":"1099:51:19"}]},"functionSelector":"9a28c028","id":3094,"implemented":true,"kind":"function","modifiers":[],"name":"getEstimatePurchaseLifeCyclePath","nodeType":"FunctionDefinition","parameters":{"id":3056,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3047,"mutability":"mutable","name":"recipient","nodeType":"VariableDeclaration","scope":3094,"src":"623:25:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":3046,"name":"address","nodeType":"ElementaryTypeName","src":"623:15:19","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":3049,"mutability":"mutable","name":"token","nodeType":"VariableDeclaration","scope":3094,"src":"658:13:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3048,"name":"address","nodeType":"ElementaryTypeName","src":"658:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3051,"mutability":"mutable","name":"sku","nodeType":"VariableDeclaration","scope":3094,"src":"681:11:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3050,"name":"bytes32","nodeType":"ElementaryTypeName","src":"681:7:19","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3053,"mutability":"mutable","name":"quantity","nodeType":"VariableDeclaration","scope":3094,"src":"702:16:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3052,"name":"uint256","nodeType":"ElementaryTypeName","src":"702:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3055,"mutability":"mutable","name":"userData","nodeType":"VariableDeclaration","scope":3094,"src":"728:23:19","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":3054,"name":"bytes","nodeType":"ElementaryTypeName","src":"728:5:19","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"613:144:19"},"returnParameters":{"id":3057,"nodeType":"ParameterList","parameters":[],"src":"767:0:19"},"scope":3312,"src":"572:585:19","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":3142,"nodeType":"Block","src":"1353:385:19","statements":[{"assignments":[3108],"declarations":[{"constant":false,"id":3108,"mutability":"mutable","name":"purchaseData","nodeType":"VariableDeclaration","scope":3142,"src":"1363:32:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"},"typeName":{"id":3107,"name":"PurchaseData","nodeType":"UserDefinedTypeName","referencedDeclaration":5583,"src":"1363:12:19","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_storage_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"}},"visibility":"internal"}],"id":3132,"initialValue":{"arguments":[{"id":3110,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3096,"src":"1428:9:19","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":3111,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3098,"src":"1451:5:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3112,"name":"sku","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3100,"src":"1470:3:19","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":3113,"name":"quantity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3102,"src":"1487:8:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3114,"name":"userData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3104,"src":"1509:8:19","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"hexValue":"30","id":3115,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1531:1:19","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"arguments":[{"hexValue":"30","id":3119,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1560:1:19","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3118,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"1546:13:19","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (bytes32[] memory)"},"typeName":{"baseType":{"id":3116,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1550:7:19","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3117,"nodeType":"ArrayTypeName","src":"1550:9:19","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}}},"id":3120,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1546:16:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},{"arguments":[{"hexValue":"30","id":3124,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1590:1:19","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3123,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"1576:13:19","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (bytes32[] memory)"},"typeName":{"baseType":{"id":3121,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1580:7:19","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3122,"nodeType":"ArrayTypeName","src":"1580:9:19","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}}},"id":3125,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1576:16:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},{"arguments":[{"hexValue":"30","id":3129,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1620:1:19","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3128,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"1606:13:19","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (bytes32[] memory)"},"typeName":{"baseType":{"id":3126,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1610:7:19","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3127,"nodeType":"ArrayTypeName","src":"1610:9:19","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}}},"id":3130,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1606:16:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"},{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"},{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}],"id":3109,"name":"_getPurchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3311,"src":"1398:16:19","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_payable_$_t_address_$_t_bytes32_$_t_uint256_$_t_bytes_memory_ptr_$_t_uint256_$_t_array$_t_bytes32_$dyn_memory_ptr_$_t_array$_t_bytes32_$dyn_memory_ptr_$_t_array$_t_bytes32_$dyn_memory_ptr_$returns$_t_struct$_PurchaseData_$5583_memory_ptr_$","typeString":"function (address payable,address,bytes32,uint256,bytes memory,uint256,bytes32[] memory,bytes32[] memory,bytes32[] memory) view returns (struct PurchaseLifeCycles.PurchaseData memory)"}},"id":3131,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1398:234:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"nodeType":"VariableDeclarationStatement","src":"1363:269:19"},{"expression":{"arguments":[{"id":3134,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3108,"src":"1656:12:19","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}],"id":3133,"name":"_purchaseFor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5640,"src":"1643:12:19","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_PurchaseData_$5583_memory_ptr_$returns$__$","typeString":"function (struct PurchaseLifeCycles.PurchaseData memory)"}},"id":3135,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1643:26:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3136,"nodeType":"ExpressionStatement","src":"1643:26:19"},{"eventCall":{"arguments":[{"expression":{"id":3138,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3108,"src":"1707:12:19","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":3139,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalPrice","nodeType":"MemberAccess","referencedDeclaration":5573,"src":"1707:23:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3137,"name":"PurchaseLifeCyclePath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3020,"src":"1685:21:19","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":3140,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1685:46:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3141,"nodeType":"EmitStatement","src":"1680:51:19"}]},"functionSelector":"f1eaf68e","id":3143,"implemented":true,"kind":"function","modifiers":[],"name":"getPurchaseForLifeCyclePath","nodeType":"FunctionDefinition","parameters":{"id":3105,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3096,"mutability":"mutable","name":"recipient","nodeType":"VariableDeclaration","scope":3143,"src":"1209:25:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":3095,"name":"address","nodeType":"ElementaryTypeName","src":"1209:15:19","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":3098,"mutability":"mutable","name":"token","nodeType":"VariableDeclaration","scope":3143,"src":"1244:13:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3097,"name":"address","nodeType":"ElementaryTypeName","src":"1244:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3100,"mutability":"mutable","name":"sku","nodeType":"VariableDeclaration","scope":3143,"src":"1267:11:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3099,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1267:7:19","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3102,"mutability":"mutable","name":"quantity","nodeType":"VariableDeclaration","scope":3143,"src":"1288:16:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3101,"name":"uint256","nodeType":"ElementaryTypeName","src":"1288:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3104,"mutability":"mutable","name":"userData","nodeType":"VariableDeclaration","scope":3143,"src":"1314:23:19","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":3103,"name":"bytes","nodeType":"ElementaryTypeName","src":"1314:5:19","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1199:144:19"},"returnParameters":{"id":3106,"nodeType":"ParameterList","parameters":[],"src":"1353:0:19"},"scope":3312,"src":"1163:575:19","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5646],"body":{"id":3158,"nodeType":"Block","src":"1826:86:19","statements":[{"expression":{"id":3156,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":3149,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3145,"src":"1836:8:19","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":3151,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"totalPrice","nodeType":"MemberAccess","referencedDeclaration":5573,"src":"1836:19:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3155,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":3152,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3145,"src":"1858:8:19","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":3153,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalPrice","nodeType":"MemberAccess","referencedDeclaration":5573,"src":"1858:19:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"id":3154,"name":"LIFECYCLE_STEP_VALIDATION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3025,"src":"1880:25:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1858:47:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1836:69:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3157,"nodeType":"ExpressionStatement","src":"1836:69:19"}]},"id":3159,"implemented":true,"kind":"function","modifiers":[],"name":"_validation","nodeType":"FunctionDefinition","overrides":{"id":3147,"nodeType":"OverrideSpecifier","overrides":[],"src":"1817:8:19"},"parameters":{"id":3146,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3145,"mutability":"mutable","name":"purchase","nodeType":"VariableDeclaration","scope":3159,"src":"1765:28:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"},"typeName":{"id":3144,"name":"PurchaseData","nodeType":"UserDefinedTypeName","referencedDeclaration":5583,"src":"1765:12:19","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_storage_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"}},"visibility":"internal"}],"src":"1764:30:19"},"returnParameters":{"id":3148,"nodeType":"ParameterList","parameters":[],"src":"1826:0:19"},"scope":3312,"src":"1744:168:19","stateMutability":"view","virtual":true,"visibility":"internal"},{"baseFunctions":[5652],"body":{"id":3174,"nodeType":"Block","src":"1997:83:19","statements":[{"expression":{"id":3172,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":3165,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3161,"src":"2007:8:19","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":3167,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"totalPrice","nodeType":"MemberAccess","referencedDeclaration":5573,"src":"2007:19:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3171,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":3168,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3161,"src":"2029:8:19","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":3169,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalPrice","nodeType":"MemberAccess","referencedDeclaration":5573,"src":"2029:19:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"id":3170,"name":"LIFECYCLE_STEP_PRICING","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3030,"src":"2051:22:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2029:44:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2007:66:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3173,"nodeType":"ExpressionStatement","src":"2007:66:19"}]},"id":3175,"implemented":true,"kind":"function","modifiers":[],"name":"_pricing","nodeType":"FunctionDefinition","overrides":{"id":3163,"nodeType":"OverrideSpecifier","overrides":[],"src":"1988:8:19"},"parameters":{"id":3162,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3161,"mutability":"mutable","name":"purchase","nodeType":"VariableDeclaration","scope":3175,"src":"1936:28:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"},"typeName":{"id":3160,"name":"PurchaseData","nodeType":"UserDefinedTypeName","referencedDeclaration":5583,"src":"1936:12:19","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_storage_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"}},"visibility":"internal"}],"src":"1935:30:19"},"returnParameters":{"id":3164,"nodeType":"ParameterList","parameters":[],"src":"1997:0:19"},"scope":3312,"src":"1918:162:19","stateMutability":"view","virtual":true,"visibility":"internal"},{"baseFunctions":[5658],"body":{"id":3190,"nodeType":"Block","src":"2160:83:19","statements":[{"expression":{"id":3188,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":3181,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3177,"src":"2170:8:19","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":3183,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"totalPrice","nodeType":"MemberAccess","referencedDeclaration":5573,"src":"2170:19:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3187,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":3184,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3177,"src":"2192:8:19","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":3185,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalPrice","nodeType":"MemberAccess","referencedDeclaration":5573,"src":"2192:19:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"id":3186,"name":"LIFECYCLE_STEP_PAYMENT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3035,"src":"2214:22:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2192:44:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2170:66:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3189,"nodeType":"ExpressionStatement","src":"2170:66:19"}]},"id":3191,"implemented":true,"kind":"function","modifiers":[],"name":"_payment","nodeType":"FunctionDefinition","overrides":{"id":3179,"nodeType":"OverrideSpecifier","overrides":[],"src":"2151:8:19"},"parameters":{"id":3178,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3177,"mutability":"mutable","name":"purchase","nodeType":"VariableDeclaration","scope":3191,"src":"2104:28:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"},"typeName":{"id":3176,"name":"PurchaseData","nodeType":"UserDefinedTypeName","referencedDeclaration":5583,"src":"2104:12:19","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_storage_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"}},"visibility":"internal"}],"src":"2103:30:19"},"returnParameters":{"id":3180,"nodeType":"ParameterList","parameters":[],"src":"2160:0:19"},"scope":3312,"src":"2086:157:19","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"baseFunctions":[5664],"body":{"id":3206,"nodeType":"Block","src":"2324:84:19","statements":[{"expression":{"id":3204,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":3197,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3193,"src":"2334:8:19","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":3199,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"totalPrice","nodeType":"MemberAccess","referencedDeclaration":5573,"src":"2334:19:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3203,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":3200,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3193,"src":"2356:8:19","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":3201,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalPrice","nodeType":"MemberAccess","referencedDeclaration":5573,"src":"2356:19:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"id":3202,"name":"LIFECYCLE_STEP_DELIVERY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3040,"src":"2378:23:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2356:45:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2334:67:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3205,"nodeType":"ExpressionStatement","src":"2334:67:19"}]},"id":3207,"implemented":true,"kind":"function","modifiers":[],"name":"_delivery","nodeType":"FunctionDefinition","overrides":{"id":3195,"nodeType":"OverrideSpecifier","overrides":[],"src":"2315:8:19"},"parameters":{"id":3194,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3193,"mutability":"mutable","name":"purchase","nodeType":"VariableDeclaration","scope":3207,"src":"2268:28:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"},"typeName":{"id":3192,"name":"PurchaseData","nodeType":"UserDefinedTypeName","referencedDeclaration":5583,"src":"2268:12:19","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_storage_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"}},"visibility":"internal"}],"src":"2267:30:19"},"returnParameters":{"id":3196,"nodeType":"ParameterList","parameters":[],"src":"2324:0:19"},"scope":3312,"src":"2249:159:19","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"baseFunctions":[5670],"body":{"id":3222,"nodeType":"Block","src":"2493:88:19","statements":[{"expression":{"id":3220,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":3213,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3209,"src":"2503:8:19","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":3215,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"totalPrice","nodeType":"MemberAccess","referencedDeclaration":5573,"src":"2503:19:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3219,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":3216,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3209,"src":"2525:8:19","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":3217,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalPrice","nodeType":"MemberAccess","referencedDeclaration":5573,"src":"2525:19:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"id":3218,"name":"LIFECYCLE_STEP_NOTIFICATION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3045,"src":"2547:27:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2525:49:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2503:71:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3221,"nodeType":"ExpressionStatement","src":"2503:71:19"}]},"id":3223,"implemented":true,"kind":"function","modifiers":[],"name":"_notification","nodeType":"FunctionDefinition","overrides":{"id":3211,"nodeType":"OverrideSpecifier","overrides":[],"src":"2484:8:19"},"parameters":{"id":3210,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3209,"mutability":"mutable","name":"purchase","nodeType":"VariableDeclaration","scope":3223,"src":"2437:28:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"},"typeName":{"id":3208,"name":"PurchaseData","nodeType":"UserDefinedTypeName","referencedDeclaration":5583,"src":"2437:12:19","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_storage_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"}},"visibility":"internal"}],"src":"2436:30:19"},"returnParameters":{"id":3212,"nodeType":"ParameterList","parameters":[],"src":"2493:0:19"},"scope":3312,"src":"2414:167:19","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":3310,"nodeType":"Block","src":"2951:400:19","statements":[{"expression":{"id":3254,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":3249,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3247,"src":"2961:8:19","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":3251,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"purchaser","nodeType":"MemberAccess","referencedDeclaration":5561,"src":"2961:18:19","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":3252,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2982:3:19","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3253,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"2982:10:19","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"2961:31:19","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":3255,"nodeType":"ExpressionStatement","src":"2961:31:19"},{"expression":{"id":3260,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":3256,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3247,"src":"3002:8:19","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":3258,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"recipient","nodeType":"MemberAccess","referencedDeclaration":5563,"src":"3002:18:19","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3259,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3225,"src":"3023:9:19","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"3002:30:19","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":3261,"nodeType":"ExpressionStatement","src":"3002:30:19"},{"expression":{"id":3266,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":3262,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3247,"src":"3042:8:19","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":3264,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"token","nodeType":"MemberAccess","referencedDeclaration":5565,"src":"3042:14:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3265,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3227,"src":"3059:5:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3042:22:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3267,"nodeType":"ExpressionStatement","src":"3042:22:19"},{"expression":{"id":3272,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":3268,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3247,"src":"3074:8:19","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":3270,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"sku","nodeType":"MemberAccess","referencedDeclaration":5567,"src":"3074:12:19","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3271,"name":"sku","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3229,"src":"3089:3:19","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"3074:18:19","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3273,"nodeType":"ExpressionStatement","src":"3074:18:19"},{"expression":{"id":3278,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":3274,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3247,"src":"3102:8:19","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":3276,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"quantity","nodeType":"MemberAccess","referencedDeclaration":5569,"src":"3102:17:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3277,"name":"quantity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3231,"src":"3122:8:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3102:28:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3279,"nodeType":"ExpressionStatement","src":"3102:28:19"},{"expression":{"id":3284,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":3280,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3247,"src":"3140:8:19","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":3282,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"userData","nodeType":"MemberAccess","referencedDeclaration":5571,"src":"3140:17:19","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3283,"name":"userData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3233,"src":"3160:8:19","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"3140:28:19","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":3285,"nodeType":"ExpressionStatement","src":"3140:28:19"},{"expression":{"id":3290,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":3286,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3247,"src":"3178:8:19","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":3288,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"totalPrice","nodeType":"MemberAccess","referencedDeclaration":5573,"src":"3178:19:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3289,"name":"totalPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3235,"src":"3200:10:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3178:32:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3291,"nodeType":"ExpressionStatement","src":"3178:32:19"},{"expression":{"id":3296,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":3292,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3247,"src":"3220:8:19","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":3294,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"pricingData","nodeType":"MemberAccess","referencedDeclaration":5576,"src":"3220:20:19","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3295,"name":"pricingData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3238,"src":"3243:11:19","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"src":"3220:34:19","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"id":3297,"nodeType":"ExpressionStatement","src":"3220:34:19"},{"expression":{"id":3302,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":3298,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3247,"src":"3264:8:19","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":3300,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"paymentData","nodeType":"MemberAccess","referencedDeclaration":5579,"src":"3264:20:19","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3301,"name":"paymentData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3241,"src":"3287:11:19","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"src":"3264:34:19","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"id":3303,"nodeType":"ExpressionStatement","src":"3264:34:19"},{"expression":{"id":3308,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":3304,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3247,"src":"3308:8:19","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":3306,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"deliveryData","nodeType":"MemberAccess","referencedDeclaration":5582,"src":"3308:21:19","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3307,"name":"deliveryData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3244,"src":"3332:12:19","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"src":"3308:36:19","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"id":3309,"nodeType":"ExpressionStatement","src":"3308:36:19"}]},"id":3311,"implemented":true,"kind":"function","modifiers":[],"name":"_getPurchaseData","nodeType":"FunctionDefinition","parameters":{"id":3245,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3225,"mutability":"mutable","name":"recipient","nodeType":"VariableDeclaration","scope":3311,"src":"2622:25:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":3224,"name":"address","nodeType":"ElementaryTypeName","src":"2622:15:19","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":3227,"mutability":"mutable","name":"token","nodeType":"VariableDeclaration","scope":3311,"src":"2657:13:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3226,"name":"address","nodeType":"ElementaryTypeName","src":"2657:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3229,"mutability":"mutable","name":"sku","nodeType":"VariableDeclaration","scope":3311,"src":"2680:11:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3228,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2680:7:19","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3231,"mutability":"mutable","name":"quantity","nodeType":"VariableDeclaration","scope":3311,"src":"2701:16:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3230,"name":"uint256","nodeType":"ElementaryTypeName","src":"2701:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3233,"mutability":"mutable","name":"userData","nodeType":"VariableDeclaration","scope":3311,"src":"2727:21:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3232,"name":"bytes","nodeType":"ElementaryTypeName","src":"2727:5:19","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":3235,"mutability":"mutable","name":"totalPrice","nodeType":"VariableDeclaration","scope":3311,"src":"2758:18:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3234,"name":"uint256","nodeType":"ElementaryTypeName","src":"2758:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3238,"mutability":"mutable","name":"pricingData","nodeType":"VariableDeclaration","scope":3311,"src":"2786:28:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":3236,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2786:7:19","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3237,"nodeType":"ArrayTypeName","src":"2786:9:19","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"},{"constant":false,"id":3241,"mutability":"mutable","name":"paymentData","nodeType":"VariableDeclaration","scope":3311,"src":"2824:28:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":3239,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2824:7:19","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3240,"nodeType":"ArrayTypeName","src":"2824:9:19","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"},{"constant":false,"id":3244,"mutability":"mutable","name":"deliveryData","nodeType":"VariableDeclaration","scope":3311,"src":"2862:29:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":3242,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2862:7:19","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3243,"nodeType":"ArrayTypeName","src":"2862:9:19","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"src":"2612:285:19"},"returnParameters":{"id":3248,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3247,"mutability":"mutable","name":"purchase","nodeType":"VariableDeclaration","scope":3311,"src":"2921:28:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"},"typeName":{"id":3246,"name":"PurchaseData","nodeType":"UserDefinedTypeName","referencedDeclaration":5583,"src":"2921:12:19","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_storage_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"}},"visibility":"internal"}],"src":"2920:30:19"},"scope":3312,"src":"2587:764:19","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":3313,"src":"149:3204:19"}],"src":"33:3321:19"},"id":19},"contracts/mocks/sale/abstract/PurchaseNotificationsReceiverMock.sol":{"ast":{"absolutePath":"contracts/mocks/sale/abstract/PurchaseNotificationsReceiverMock.sol","exportedSymbols":{"PurchaseNotificationsReceiver":[5706],"PurchaseNotificationsReceiverMock":[3376]},"id":3377,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":3314,"literals":["solidity",">=","0.7",".6","<","0.8",".0"],"nodeType":"PragmaDirective","src":"33:31:20"},{"absolutePath":"contracts/sale/abstract/PurchaseNotificationsReceiver.sol","file":"../../../sale/abstract/PurchaseNotificationsReceiver.sol","id":3316,"nodeType":"ImportDirective","scope":3377,"sourceUnit":5707,"src":"66:103:20","symbolAliases":[{"foreign":{"id":3315,"name":"PurchaseNotificationsReceiver","nodeType":"Identifier","overloadedDeclarations":[],"src":"74:29:20","typeDescriptions":{}}}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":3317,"name":"PurchaseNotificationsReceiver","nodeType":"UserDefinedTypeName","referencedDeclaration":5706,"src":"217:29:20","typeDescriptions":{"typeIdentifier":"t_contract$_PurchaseNotificationsReceiver_$5706","typeString":"contract PurchaseNotificationsReceiver"}},"id":3318,"nodeType":"InheritanceSpecifier","src":"217:29:20"}],"contractDependencies":[563,5706,7220],"contractKind":"contract","fullyImplemented":true,"id":3376,"linearizedBaseContracts":[3376,5706,563,7220],"name":"PurchaseNotificationsReceiverMock","nodeType":"ContractDefinition","nodes":[{"constant":true,"functionSelector":"c9dde556","id":3326,"mutability":"constant","name":"PURCHASE_NOTIFICATION_RECEIVED_RESULT","nodeType":"VariableDeclaration","scope":3376,"src":"253:207:20","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":3319,"name":"bytes4","nodeType":"ElementaryTypeName","src":"253:6:20","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"value":{"arguments":[{"arguments":[{"hexValue":"6f6e50757263686173654e6f74696669636174696f6e526563656976656428616464726573732c616464726573732c616464726573732c627974657333322c75696e743235362c62797465732c75696e743235362c627974657333325b5d2c627974657333325b5d2c627974657333325b5d29","id":3323,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"341:117:20","typeDescriptions":{"typeIdentifier":"t_stringliteral_61eceae836ef303712cdd0c44537fcca4d240bda4dd998b83d4cb046607177a9","typeString":"literal_string \"onPurchaseNotificationReceived(address,address,address,bytes32,uint256,bytes,uint256,bytes32[],bytes32[],bytes32[])\""},"value":"onPurchaseNotificationReceived(address,address,address,bytes32,uint256,bytes,uint256,bytes32[],bytes32[],bytes32[])"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_61eceae836ef303712cdd0c44537fcca4d240bda4dd998b83d4cb046607177a9","typeString":"literal_string \"onPurchaseNotificationReceived(address,address,address,bytes32,uint256,bytes,uint256,bytes32[],bytes32[],bytes32[])\""}],"id":3322,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"331:9:20","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":3324,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"331:128:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":3321,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"324:6:20","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes4_$","typeString":"type(bytes4)"},"typeName":{"id":3320,"name":"bytes4","nodeType":"ElementaryTypeName","src":"324:6:20","typeDescriptions":{}}},"id":3325,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"324:136:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"public"},{"anonymous":false,"id":3328,"name":"PurchaseNotificationReceived","nodeType":"EventDefinition","parameters":{"id":3327,"nodeType":"ParameterList","parameters":[],"src":"501:2:20"},"src":"467:37:20"},{"anonymous":false,"id":3332,"name":"OnPurchaseNotificationReceivedResult","nodeType":"EventDefinition","parameters":{"id":3331,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3330,"indexed":false,"mutability":"mutable","name":"result","nodeType":"VariableDeclaration","scope":3332,"src":"552:13:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":3329,"name":"bytes4","nodeType":"ElementaryTypeName","src":"552:6:20","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"551:15:20"},"src":"509:58:20"},{"baseFunctions":[7219],"body":{"id":3374,"nodeType":"Block","src":"1020:197:20","statements":[{"eventCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3361,"name":"PurchaseNotificationReceived","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3328,"src":"1035:28:20","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$__$returns$__$","typeString":"function ()"}},"id":3362,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1035:30:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3363,"nodeType":"EmitStatement","src":"1030:35:20"},{"assignments":[3365],"declarations":[{"constant":false,"id":3365,"mutability":"mutable","name":"result","nodeType":"VariableDeclaration","scope":3374,"src":"1075:13:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":3364,"name":"bytes4","nodeType":"ElementaryTypeName","src":"1075:6:20","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"id":3367,"initialValue":{"id":3366,"name":"PURCHASE_NOTIFICATION_RECEIVED_RESULT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3326,"src":"1091:37:20","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"VariableDeclarationStatement","src":"1075:53:20"},{"eventCall":{"arguments":[{"id":3369,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3365,"src":"1180:6:20","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"id":3368,"name":"OnPurchaseNotificationReceivedResult","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3332,"src":"1143:36:20","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes4_$returns$__$","typeString":"function (bytes4)"}},"id":3370,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1143:44:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3371,"nodeType":"EmitStatement","src":"1138:49:20"},{"expression":{"id":3372,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3365,"src":"1204:6:20","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"functionReturnParameters":3360,"id":3373,"nodeType":"Return","src":"1197:13:20"}]},"functionSelector":"61eceae8","id":3375,"implemented":true,"kind":"function","modifiers":[],"name":"onPurchaseNotificationReceived","nodeType":"FunctionDefinition","overrides":{"id":3357,"nodeType":"OverrideSpecifier","overrides":[],"src":"994:8:20"},"parameters":{"id":3356,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3334,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":3375,"src":"622:7:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3333,"name":"address","nodeType":"ElementaryTypeName","src":"622:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3336,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":3375,"src":"655:7:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3335,"name":"address","nodeType":"ElementaryTypeName","src":"655:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3338,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":3375,"src":"688:7:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3337,"name":"address","nodeType":"ElementaryTypeName","src":"688:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3340,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":3375,"src":"717:7:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3339,"name":"bytes32","nodeType":"ElementaryTypeName","src":"717:7:20","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3342,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":3375,"src":"744:7:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3341,"name":"uint256","nodeType":"ElementaryTypeName","src":"744:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3344,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":3375,"src":"776:14:20","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":3343,"name":"bytes","nodeType":"ElementaryTypeName","src":"776:5:20","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":3346,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":3375,"src":"815:7:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3345,"name":"uint256","nodeType":"ElementaryTypeName","src":"815:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3349,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":3375,"src":"849:18:20","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":3347,"name":"bytes32","nodeType":"ElementaryTypeName","src":"849:7:20","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3348,"nodeType":"ArrayTypeName","src":"849:9:20","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"},{"constant":false,"id":3352,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":3375,"src":"895:18:20","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":3350,"name":"bytes32","nodeType":"ElementaryTypeName","src":"895:7:20","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3351,"nodeType":"ArrayTypeName","src":"895:9:20","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"},{"constant":false,"id":3355,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":3375,"src":"941:18:20","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":3353,"name":"bytes32","nodeType":"ElementaryTypeName","src":"941:7:20","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3354,"nodeType":"ArrayTypeName","src":"941:9:20","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"src":"612:372:20"},"returnParameters":{"id":3360,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3359,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":3375,"src":"1012:6:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":3358,"name":"bytes4","nodeType":"ElementaryTypeName","src":"1012:6:20","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"1011:8:20"},"scope":3376,"src":"573:644:20","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":3377,"src":"171:1048:20"}],"src":"33:1187:20"},"id":20},"contracts/mocks/sale/abstract/SwapSaleMock.sol":{"ast":{"absolutePath":"contracts/mocks/sale/abstract/SwapSaleMock.sol","exportedSymbols":{"EnumMap":[362],"SafeCast":[1672],"SafeMath":[1359],"SwapSale":[7165],"SwapSaleMock":[3804]},"id":3805,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":3378,"literals":["solidity",">=","0.7",".6","<","0.8",".0"],"nodeType":"PragmaDirective","src":"33:31:21"},{"absolutePath":"@openzeppelin/contracts/utils/SafeCast.sol","file":"@openzeppelin/contracts/utils/SafeCast.sol","id":3380,"nodeType":"ImportDirective","scope":3805,"sourceUnit":1673,"src":"66:68:21","symbolAliases":[{"foreign":{"id":3379,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"src":"74:8:21","typeDescriptions":{}}}],"unitAlias":""},{"absolutePath":"contracts/sale/abstract/SwapSale.sol","file":"../../../sale/abstract/SwapSale.sol","id":3384,"nodeType":"ImportDirective","scope":3805,"sourceUnit":7166,"src":"135:80:21","symbolAliases":[{"foreign":{"id":3381,"name":"EnumMap","nodeType":"Identifier","overloadedDeclarations":[],"src":"143:7:21","typeDescriptions":{}}},{"foreign":{"id":3382,"name":"SafeMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"152:8:21","typeDescriptions":{}}},{"foreign":{"id":3383,"name":"SwapSale","nodeType":"Identifier","overloadedDeclarations":[],"src":"162:8:21","typeDescriptions":{}}}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":3385,"name":"SwapSale","nodeType":"UserDefinedTypeName","referencedDeclaration":7165,"src":"242:8:21","typeDescriptions":{"typeIdentifier":"t_contract$_SwapSale_$7165","typeString":"contract SwapSale"}},"id":3386,"nodeType":"InheritanceSpecifier","src":"242:8:21"}],"contractDependencies":[22,103,646,715,736,812,4753,5556,5671,6694,7165,7187,7346,7370],"contractKind":"contract","fullyImplemented":true,"id":3804,"linearizedBaseContracts":[3804,7165,7370,5556,4753,6694,646,715,812,103,22,736,7346,5671,7187],"name":"SwapSaleMock","nodeType":"ContractDefinition","nodes":[{"id":3389,"libraryName":{"id":3387,"name":"SafeMath","nodeType":"UserDefinedTypeName","referencedDeclaration":1359,"src":"263:8:21","typeDescriptions":{"typeIdentifier":"t_contract$_SafeMath_$1359","typeString":"library SafeMath"}},"nodeType":"UsingForDirective","src":"257:27:21","typeName":{"id":3388,"name":"uint256","nodeType":"ElementaryTypeName","src":"276:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":3392,"libraryName":{"id":3390,"name":"SafeCast","nodeType":"UserDefinedTypeName","referencedDeclaration":1672,"src":"295:8:21","typeDescriptions":{"typeIdentifier":"t_contract$_SafeCast_$1672","typeString":"library SafeCast"}},"nodeType":"UsingForDirective","src":"289:26:21","typeName":{"id":3391,"name":"int256","nodeType":"ElementaryTypeName","src":"308:6:21","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}},{"constant":false,"functionSelector":"c931f7c9","id":3398,"mutability":"mutable","name":"mockSwapRates","nodeType":"VariableDeclaration","scope":3804,"src":"321:68:21","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"typeName":{"id":3397,"keyType":{"id":3393,"name":"address","nodeType":"ElementaryTypeName","src":"329:7:21","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"321:47:21","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"valueType":{"id":3396,"keyType":{"id":3394,"name":"address","nodeType":"ElementaryTypeName","src":"348:7:21","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"340:27:21","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueType":{"id":3395,"name":"uint256","nodeType":"ElementaryTypeName","src":"359:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}}},"visibility":"public"},{"constant":false,"functionSelector":"558884bd","id":3400,"mutability":"mutable","name":"mockSwapVariance","nodeType":"VariableDeclaration","scope":3804,"src":"396:30:21","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3399,"name":"int256","nodeType":"ElementaryTypeName","src":"396:6:21","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"public"},{"body":{"id":3417,"nodeType":"Block","src":"666:2:21","statements":[]},"id":3418,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":3411,"name":"payoutWallet_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3402,"src":"599:13:21","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":3412,"name":"skusCapacity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3404,"src":"614:12:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3413,"name":"tokensPerSkuCapacity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3406,"src":"628:20:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3414,"name":"referenceToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3408,"src":"650:14:21","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":3415,"modifierName":{"id":3410,"name":"SwapSale","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7165,"src":"590:8:21","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SwapSale_$7165_$","typeString":"type(contract SwapSale)"}},"nodeType":"ModifierInvocation","src":"590:75:21"}],"name":"","nodeType":"FunctionDefinition","parameters":{"id":3409,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3402,"mutability":"mutable","name":"payoutWallet_","nodeType":"VariableDeclaration","scope":3418,"src":"454:29:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":3401,"name":"address","nodeType":"ElementaryTypeName","src":"454:15:21","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":3404,"mutability":"mutable","name":"skusCapacity","nodeType":"VariableDeclaration","scope":3418,"src":"493:20:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3403,"name":"uint256","nodeType":"ElementaryTypeName","src":"493:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3406,"mutability":"mutable","name":"tokensPerSkuCapacity","nodeType":"VariableDeclaration","scope":3418,"src":"523:28:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3405,"name":"uint256","nodeType":"ElementaryTypeName","src":"523:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3408,"mutability":"mutable","name":"referenceToken","nodeType":"VariableDeclaration","scope":3418,"src":"561:22:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3407,"name":"address","nodeType":"ElementaryTypeName","src":"561:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"444:145:21"},"returnParameters":{"id":3416,"nodeType":"ParameterList","parameters":[],"src":"666:0:21"},"scope":3804,"src":"433:235:21","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":3436,"nodeType":"Block","src":"837:92:21","statements":[{"expression":{"arguments":[{"id":3430,"name":"sku","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3420,"src":"858:3:21","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":3431,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3422,"src":"863:11:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3432,"name":"maxQuantityPerPurchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3424,"src":"876:22:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3433,"name":"notificationsReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3426,"src":"900:21:21","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":3429,"name":"_createSku","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6383,"src":"847:10:21","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_uint256_$_t_uint256_$_t_address_$returns$__$","typeString":"function (bytes32,uint256,uint256,address)"}},"id":3434,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"847:75:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3435,"nodeType":"ExpressionStatement","src":"847:75:21"}]},"functionSelector":"2c87927b","id":3437,"implemented":true,"kind":"function","modifiers":[],"name":"createSku","nodeType":"FunctionDefinition","parameters":{"id":3427,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3420,"mutability":"mutable","name":"sku","nodeType":"VariableDeclaration","scope":3437,"src":"702:11:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3419,"name":"bytes32","nodeType":"ElementaryTypeName","src":"702:7:21","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3422,"mutability":"mutable","name":"totalSupply","nodeType":"VariableDeclaration","scope":3437,"src":"723:19:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3421,"name":"uint256","nodeType":"ElementaryTypeName","src":"723:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3424,"mutability":"mutable","name":"maxQuantityPerPurchase","nodeType":"VariableDeclaration","scope":3437,"src":"752:30:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3423,"name":"uint256","nodeType":"ElementaryTypeName","src":"752:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3426,"mutability":"mutable","name":"notificationsReceiver","nodeType":"VariableDeclaration","scope":3437,"src":"792:29:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3425,"name":"address","nodeType":"ElementaryTypeName","src":"792:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"692:135:21"},"returnParameters":{"id":3428,"nodeType":"ParameterList","parameters":[],"src":"837:0:21"},"scope":3804,"src":"674:255:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":3454,"nodeType":"Block","src":"1049:57:21","statements":[{"expression":{"id":3452,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":3446,"name":"mockSwapRates","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3398,"src":"1059:13:21","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":3449,"indexExpression":{"id":3447,"name":"fromToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3439,"src":"1073:9:21","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1059:24:21","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3450,"indexExpression":{"id":3448,"name":"toToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3441,"src":"1084:7:21","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1059:33:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3451,"name":"rate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3443,"src":"1095:4:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1059:40:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3453,"nodeType":"ExpressionStatement","src":"1059:40:21"}]},"functionSelector":"3c33c51e","id":3455,"implemented":true,"kind":"function","modifiers":[],"name":"setMockSwapRate","nodeType":"FunctionDefinition","parameters":{"id":3444,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3439,"mutability":"mutable","name":"fromToken","nodeType":"VariableDeclaration","scope":3455,"src":"969:17:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3438,"name":"address","nodeType":"ElementaryTypeName","src":"969:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3441,"mutability":"mutable","name":"toToken","nodeType":"VariableDeclaration","scope":3455,"src":"996:15:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3440,"name":"address","nodeType":"ElementaryTypeName","src":"996:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3443,"mutability":"mutable","name":"rate","nodeType":"VariableDeclaration","scope":3455,"src":"1021:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3442,"name":"uint256","nodeType":"ElementaryTypeName","src":"1021:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"959:80:21"},"returnParameters":{"id":3445,"nodeType":"ParameterList","parameters":[],"src":"1049:0:21"},"scope":3804,"src":"935:171:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":3464,"nodeType":"Block","src":"1164:41:21","statements":[{"expression":{"id":3462,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3460,"name":"mockSwapVariance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3400,"src":"1174:16:21","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3461,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3457,"src":"1193:5:21","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"1174:24:21","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3463,"nodeType":"ExpressionStatement","src":"1174:24:21"}]},"functionSelector":"607dc017","id":3465,"implemented":true,"kind":"function","modifiers":[],"name":"setMockSwapVariance","nodeType":"FunctionDefinition","parameters":{"id":3458,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3457,"mutability":"mutable","name":"value","nodeType":"VariableDeclaration","scope":3465,"src":"1141:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3456,"name":"int256","nodeType":"ElementaryTypeName","src":"1141:6:21","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"1140:14:21"},"returnParameters":{"id":3459,"nodeType":"ParameterList","parameters":[],"src":"1164:0:21"},"scope":3804,"src":"1112:93:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":3537,"nodeType":"Block","src":"1459:420:21","statements":[{"assignments":[3484],"declarations":[{"constant":false,"id":3484,"mutability":"mutable","name":"purchaseData","nodeType":"VariableDeclaration","scope":3537,"src":"1469:32:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"},"typeName":{"id":3483,"name":"PurchaseData","nodeType":"UserDefinedTypeName","referencedDeclaration":5583,"src":"1469:12:21","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_storage_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"}},"visibility":"internal"}],"id":3485,"nodeType":"VariableDeclarationStatement","src":"1469:32:21"},{"expression":{"id":3491,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":3486,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3484,"src":"1511:12:21","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":3488,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"purchaser","nodeType":"MemberAccess","referencedDeclaration":5561,"src":"1511:22:21","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":3489,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":726,"src":"1536:10:21","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":3490,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1536:12:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"1511:37:21","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":3492,"nodeType":"ExpressionStatement","src":"1511:37:21"},{"expression":{"id":3497,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":3493,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3484,"src":"1558:12:21","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":3495,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"recipient","nodeType":"MemberAccess","referencedDeclaration":5563,"src":"1558:22:21","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3496,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3467,"src":"1583:9:21","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"1558:34:21","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":3498,"nodeType":"ExpressionStatement","src":"1558:34:21"},{"expression":{"id":3503,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":3499,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3484,"src":"1602:12:21","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":3501,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"token","nodeType":"MemberAccess","referencedDeclaration":5565,"src":"1602:18:21","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3502,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3469,"src":"1623:5:21","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1602:26:21","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3504,"nodeType":"ExpressionStatement","src":"1602:26:21"},{"expression":{"id":3509,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":3505,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3484,"src":"1638:12:21","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":3507,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"sku","nodeType":"MemberAccess","referencedDeclaration":5567,"src":"1638:16:21","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3508,"name":"sku","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3471,"src":"1657:3:21","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"1638:22:21","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3510,"nodeType":"ExpressionStatement","src":"1638:22:21"},{"expression":{"id":3515,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":3511,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3484,"src":"1670:12:21","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":3513,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"quantity","nodeType":"MemberAccess","referencedDeclaration":5569,"src":"1670:21:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3514,"name":"quantity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3473,"src":"1694:8:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1670:32:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3516,"nodeType":"ExpressionStatement","src":"1670:32:21"},{"expression":{"id":3521,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":3517,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3484,"src":"1712:12:21","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":3519,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"userData","nodeType":"MemberAccess","referencedDeclaration":5571,"src":"1712:21:21","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3520,"name":"userData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3475,"src":"1736:8:21","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"src":"1712:32:21","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":3522,"nodeType":"ExpressionStatement","src":"1712:32:21"},{"expression":{"arguments":[{"id":3524,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3484,"src":"1764:12:21","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}],"id":3523,"name":"_pricing","nodeType":"Identifier","overloadedDeclarations":[5348],"referencedDeclaration":5348,"src":"1755:8:21","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_PurchaseData_$5583_memory_ptr_$returns$__$","typeString":"function (struct PurchaseLifeCycles.PurchaseData memory) view"}},"id":3525,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1755:22:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3526,"nodeType":"ExpressionStatement","src":"1755:22:21"},{"expression":{"id":3530,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3527,"name":"totalPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3478,"src":"1788:10:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":3528,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3484,"src":"1801:12:21","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":3529,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalPrice","nodeType":"MemberAccess","referencedDeclaration":5573,"src":"1801:23:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1788:36:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3531,"nodeType":"ExpressionStatement","src":"1788:36:21"},{"expression":{"id":3535,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3532,"name":"pricingData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3481,"src":"1834:11:21","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":3533,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3484,"src":"1848:12:21","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":3534,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"pricingData","nodeType":"MemberAccess","referencedDeclaration":5576,"src":"1848:24:21","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"src":"1834:38:21","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"id":3536,"nodeType":"ExpressionStatement","src":"1834:38:21"}]},"functionSelector":"97309b44","id":3538,"implemented":true,"kind":"function","modifiers":[],"name":"callUnderscorePricing","nodeType":"FunctionDefinition","parameters":{"id":3476,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3467,"mutability":"mutable","name":"recipient","nodeType":"VariableDeclaration","scope":3538,"src":"1251:25:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":3466,"name":"address","nodeType":"ElementaryTypeName","src":"1251:15:21","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":3469,"mutability":"mutable","name":"token","nodeType":"VariableDeclaration","scope":3538,"src":"1286:13:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3468,"name":"address","nodeType":"ElementaryTypeName","src":"1286:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3471,"mutability":"mutable","name":"sku","nodeType":"VariableDeclaration","scope":3538,"src":"1309:11:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3470,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1309:7:21","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3473,"mutability":"mutable","name":"quantity","nodeType":"VariableDeclaration","scope":3538,"src":"1330:16:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3472,"name":"uint256","nodeType":"ElementaryTypeName","src":"1330:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3475,"mutability":"mutable","name":"userData","nodeType":"VariableDeclaration","scope":3538,"src":"1356:23:21","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":3474,"name":"bytes","nodeType":"ElementaryTypeName","src":"1356:5:21","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1241:144:21"},"returnParameters":{"id":3482,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3478,"mutability":"mutable","name":"totalPrice","nodeType":"VariableDeclaration","scope":3538,"src":"1409:18:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3477,"name":"uint256","nodeType":"ElementaryTypeName","src":"1409:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3481,"mutability":"mutable","name":"pricingData","nodeType":"VariableDeclaration","scope":3538,"src":"1429:28:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":3479,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1429:7:21","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3480,"nodeType":"ArrayTypeName","src":"1429:9:21","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"src":"1408:50:21"},"scope":3804,"src":"1211:668:21","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":3612,"nodeType":"Block","src":"2145:419:21","statements":[{"assignments":[3557],"declarations":[{"constant":false,"id":3557,"mutability":"mutable","name":"purchaseData","nodeType":"VariableDeclaration","scope":3612,"src":"2155:32:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"},"typeName":{"id":3556,"name":"PurchaseData","nodeType":"UserDefinedTypeName","referencedDeclaration":5583,"src":"2155:12:21","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_storage_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"}},"visibility":"internal"}],"id":3558,"nodeType":"VariableDeclarationStatement","src":"2155:32:21"},{"expression":{"id":3564,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":3559,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3557,"src":"2197:12:21","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":3561,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"purchaser","nodeType":"MemberAccess","referencedDeclaration":5561,"src":"2197:22:21","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":3562,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":726,"src":"2222:10:21","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":3563,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2222:12:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"2197:37:21","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":3565,"nodeType":"ExpressionStatement","src":"2197:37:21"},{"expression":{"id":3570,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":3566,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3557,"src":"2244:12:21","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":3568,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"recipient","nodeType":"MemberAccess","referencedDeclaration":5563,"src":"2244:22:21","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3569,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3540,"src":"2269:9:21","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"2244:34:21","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":3571,"nodeType":"ExpressionStatement","src":"2244:34:21"},{"expression":{"id":3576,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":3572,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3557,"src":"2288:12:21","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":3574,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"token","nodeType":"MemberAccess","referencedDeclaration":5565,"src":"2288:18:21","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3575,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3542,"src":"2309:5:21","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2288:26:21","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3577,"nodeType":"ExpressionStatement","src":"2288:26:21"},{"expression":{"id":3582,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":3578,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3557,"src":"2324:12:21","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":3580,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"sku","nodeType":"MemberAccess","referencedDeclaration":5567,"src":"2324:16:21","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3581,"name":"sku","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3544,"src":"2343:3:21","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"2324:22:21","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3583,"nodeType":"ExpressionStatement","src":"2324:22:21"},{"expression":{"id":3588,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":3584,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3557,"src":"2356:12:21","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":3586,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"quantity","nodeType":"MemberAccess","referencedDeclaration":5569,"src":"2356:21:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3587,"name":"quantity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3546,"src":"2380:8:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2356:32:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3589,"nodeType":"ExpressionStatement","src":"2356:32:21"},{"expression":{"id":3594,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":3590,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3557,"src":"2398:12:21","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":3592,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"userData","nodeType":"MemberAccess","referencedDeclaration":5571,"src":"2398:21:21","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3593,"name":"userData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3548,"src":"2422:8:21","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"src":"2398:32:21","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":3595,"nodeType":"ExpressionStatement","src":"2398:32:21"},{"expression":{"id":3600,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":3596,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3557,"src":"2440:12:21","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":3598,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"totalPrice","nodeType":"MemberAccess","referencedDeclaration":5573,"src":"2440:23:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3599,"name":"totalPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3550,"src":"2466:10:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2440:36:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3601,"nodeType":"ExpressionStatement","src":"2440:36:21"},{"expression":{"id":3606,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":3602,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3557,"src":"2486:12:21","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":3604,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"pricingData","nodeType":"MemberAccess","referencedDeclaration":5576,"src":"2486:24:21","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3605,"name":"pricingData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3553,"src":"2513:11:21","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[] calldata"}},"src":"2486:38:21","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"id":3607,"nodeType":"ExpressionStatement","src":"2486:38:21"},{"expression":{"arguments":[{"id":3609,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3557,"src":"2544:12:21","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}],"id":3608,"name":"_payment","nodeType":"Identifier","overloadedDeclarations":[7023],"referencedDeclaration":7023,"src":"2535:8:21","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_PurchaseData_$5583_memory_ptr_$returns$__$","typeString":"function (struct PurchaseLifeCycles.PurchaseData memory)"}},"id":3610,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2535:22:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3611,"nodeType":"ExpressionStatement","src":"2535:22:21"}]},"functionSelector":"8ce507eb","id":3613,"implemented":true,"kind":"function","modifiers":[],"name":"callUnderscorePayment","nodeType":"FunctionDefinition","parameters":{"id":3554,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3540,"mutability":"mutable","name":"recipient","nodeType":"VariableDeclaration","scope":3613,"src":"1925:25:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":3539,"name":"address","nodeType":"ElementaryTypeName","src":"1925:15:21","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":3542,"mutability":"mutable","name":"token","nodeType":"VariableDeclaration","scope":3613,"src":"1960:13:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3541,"name":"address","nodeType":"ElementaryTypeName","src":"1960:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3544,"mutability":"mutable","name":"sku","nodeType":"VariableDeclaration","scope":3613,"src":"1983:11:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3543,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1983:7:21","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3546,"mutability":"mutable","name":"quantity","nodeType":"VariableDeclaration","scope":3613,"src":"2004:16:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3545,"name":"uint256","nodeType":"ElementaryTypeName","src":"2004:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3548,"mutability":"mutable","name":"userData","nodeType":"VariableDeclaration","scope":3613,"src":"2030:23:21","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":3547,"name":"bytes","nodeType":"ElementaryTypeName","src":"2030:5:21","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":3550,"mutability":"mutable","name":"totalPrice","nodeType":"VariableDeclaration","scope":3613,"src":"2063:18:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3549,"name":"uint256","nodeType":"ElementaryTypeName","src":"2063:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3553,"mutability":"mutable","name":"pricingData","nodeType":"VariableDeclaration","scope":3613,"src":"2091:30:21","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":3551,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2091:7:21","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3552,"nodeType":"ArrayTypeName","src":"2091:9:21","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"src":"1915:212:21"},"returnParameters":{"id":3555,"nodeType":"ParameterList","parameters":[],"src":"2145:0:21"},"scope":3804,"src":"1885:679:21","stateMutability":"payable","virtual":false,"visibility":"external"},{"body":{"id":3711,"nodeType":"Block","src":"2912:636:21","statements":[{"assignments":[3634],"declarations":[{"constant":false,"id":3634,"mutability":"mutable","name":"purchaseData","nodeType":"VariableDeclaration","scope":3711,"src":"2922:32:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"},"typeName":{"id":3633,"name":"PurchaseData","nodeType":"UserDefinedTypeName","referencedDeclaration":5583,"src":"2922:12:21","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_storage_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"}},"visibility":"internal"}],"id":3635,"nodeType":"VariableDeclarationStatement","src":"2922:32:21"},{"expression":{"id":3641,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":3636,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3634,"src":"2964:12:21","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":3638,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"purchaser","nodeType":"MemberAccess","referencedDeclaration":5561,"src":"2964:22:21","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":3639,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":726,"src":"2989:10:21","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":3640,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2989:12:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"2964:37:21","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":3642,"nodeType":"ExpressionStatement","src":"2964:37:21"},{"expression":{"id":3647,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":3643,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3634,"src":"3011:12:21","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":3645,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"recipient","nodeType":"MemberAccess","referencedDeclaration":5563,"src":"3011:22:21","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3646,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3615,"src":"3036:9:21","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"3011:34:21","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":3648,"nodeType":"ExpressionStatement","src":"3011:34:21"},{"expression":{"id":3653,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":3649,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3634,"src":"3055:12:21","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":3651,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"token","nodeType":"MemberAccess","referencedDeclaration":5565,"src":"3055:18:21","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3652,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3617,"src":"3076:5:21","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3055:26:21","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3654,"nodeType":"ExpressionStatement","src":"3055:26:21"},{"expression":{"id":3659,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":3655,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3634,"src":"3091:12:21","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":3657,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"sku","nodeType":"MemberAccess","referencedDeclaration":5567,"src":"3091:16:21","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3658,"name":"sku","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3619,"src":"3110:3:21","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"3091:22:21","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3660,"nodeType":"ExpressionStatement","src":"3091:22:21"},{"expression":{"id":3665,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":3661,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3634,"src":"3123:12:21","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":3663,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"quantity","nodeType":"MemberAccess","referencedDeclaration":5569,"src":"3123:21:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3664,"name":"quantity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3621,"src":"3147:8:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3123:32:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3666,"nodeType":"ExpressionStatement","src":"3123:32:21"},{"expression":{"id":3671,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":3667,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3634,"src":"3165:12:21","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":3669,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"userData","nodeType":"MemberAccess","referencedDeclaration":5571,"src":"3165:21:21","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3670,"name":"userData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3623,"src":"3189:8:21","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"src":"3165:32:21","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":3672,"nodeType":"ExpressionStatement","src":"3165:32:21"},{"assignments":[3674],"declarations":[{"constant":false,"id":3674,"mutability":"mutable","name":"skuInfo","nodeType":"VariableDeclaration","scope":3711,"src":"3208:23:21","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage_ptr","typeString":"struct Sale.SkuInfo"},"typeName":{"id":3673,"name":"SkuInfo","nodeType":"UserDefinedTypeName","referencedDeclaration":5762,"src":"3208:7:21","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage_ptr","typeString":"struct Sale.SkuInfo"}},"visibility":"internal"}],"id":3678,"initialValue":{"baseExpression":{"id":3675,"name":"_skuInfos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5783,"src":"3234:9:21","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_SkuInfo_$5762_storage_$","typeString":"mapping(bytes32 => struct Sale.SkuInfo storage ref)"}},"id":3677,"indexExpression":{"id":3676,"name":"sku","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3619,"src":"3244:3:21","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3234:14:21","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage","typeString":"struct Sale.SkuInfo storage ref"}},"nodeType":"VariableDeclarationStatement","src":"3208:40:21"},{"assignments":[3682],"declarations":[{"constant":false,"id":3682,"mutability":"mutable","name":"tokenPrices","nodeType":"VariableDeclaration","scope":3711,"src":"3258:31:21","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map"},"typeName":{"id":3681,"name":"EnumMap.Map","nodeType":"UserDefinedTypeName","referencedDeclaration":119,"src":"3258:11:21","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map"}},"visibility":"internal"}],"id":3685,"initialValue":{"expression":{"id":3683,"name":"skuInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3674,"src":"3292:7:21","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage_ptr","typeString":"struct Sale.SkuInfo storage pointer"}},"id":3684,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"prices","nodeType":"MemberAccess","referencedDeclaration":5761,"src":"3292:14:21","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage","typeString":"struct EnumMap.Map storage ref"}},"nodeType":"VariableDeclarationStatement","src":"3258:48:21"},{"assignments":[3687],"declarations":[{"constant":false,"id":3687,"mutability":"mutable","name":"unitPrice","nodeType":"VariableDeclaration","scope":3711,"src":"3316:17:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3686,"name":"uint256","nodeType":"ElementaryTypeName","src":"3316:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3692,"initialValue":{"arguments":[{"id":3689,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3634,"src":"3347:12:21","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},{"id":3690,"name":"tokenPrices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3682,"src":"3361:11:21","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"},{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map storage pointer"}],"id":3688,"name":"_unitPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4752,"src":"3336:10:21","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_PurchaseData_$5583_memory_ptr_$_t_struct$_Map_$119_storage_ptr_$returns$_t_uint256_$","typeString":"function (struct PurchaseLifeCycles.PurchaseData memory,struct EnumMap.Map storage pointer) view returns (uint256)"}},"id":3691,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3336:37:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3316:57:21"},{"expression":{"id":3699,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3693,"name":"handled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3626,"src":"3384:7:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":3695,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3634,"src":"3409:12:21","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},{"id":3696,"name":"tokenPrices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3682,"src":"3423:11:21","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map storage pointer"}},{"id":3697,"name":"unitPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3687,"src":"3436:9:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"},{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map storage pointer"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3694,"name":"_oraclePricing","nodeType":"Identifier","overloadedDeclarations":[7164],"referencedDeclaration":7164,"src":"3394:14:21","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_PurchaseData_$5583_memory_ptr_$_t_struct$_Map_$119_storage_ptr_$_t_uint256_$returns$_t_bool_$","typeString":"function (struct PurchaseLifeCycles.PurchaseData memory,struct EnumMap.Map storage pointer,uint256) view returns (bool)"}},"id":3698,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3394:52:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"3384:62:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3700,"nodeType":"ExpressionStatement","src":"3384:62:21"},{"expression":{"id":3704,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3701,"name":"totalPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3628,"src":"3457:10:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":3702,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3634,"src":"3470:12:21","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":3703,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalPrice","nodeType":"MemberAccess","referencedDeclaration":5573,"src":"3470:23:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3457:36:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3705,"nodeType":"ExpressionStatement","src":"3457:36:21"},{"expression":{"id":3709,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3706,"name":"pricingData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3631,"src":"3503:11:21","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":3707,"name":"purchaseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3634,"src":"3517:12:21","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":3708,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"pricingData","nodeType":"MemberAccess","referencedDeclaration":5576,"src":"3517:24:21","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"src":"3503:38:21","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"id":3710,"nodeType":"ExpressionStatement","src":"3503:38:21"}]},"functionSelector":"a0cf0735","id":3712,"implemented":true,"kind":"function","modifiers":[],"name":"callUnderscoreOraclePricing","nodeType":"FunctionDefinition","parameters":{"id":3624,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3615,"mutability":"mutable","name":"recipient","nodeType":"VariableDeclaration","scope":3712,"src":"2616:25:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":3614,"name":"address","nodeType":"ElementaryTypeName","src":"2616:15:21","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":3617,"mutability":"mutable","name":"token","nodeType":"VariableDeclaration","scope":3712,"src":"2651:13:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3616,"name":"address","nodeType":"ElementaryTypeName","src":"2651:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3619,"mutability":"mutable","name":"sku","nodeType":"VariableDeclaration","scope":3712,"src":"2674:11:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3618,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2674:7:21","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3621,"mutability":"mutable","name":"quantity","nodeType":"VariableDeclaration","scope":3712,"src":"2695:16:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3620,"name":"uint256","nodeType":"ElementaryTypeName","src":"2695:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3623,"mutability":"mutable","name":"userData","nodeType":"VariableDeclaration","scope":3712,"src":"2721:23:21","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":3622,"name":"bytes","nodeType":"ElementaryTypeName","src":"2721:5:21","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2606:144:21"},"returnParameters":{"id":3632,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3626,"mutability":"mutable","name":"handled","nodeType":"VariableDeclaration","scope":3712,"src":"2811:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3625,"name":"bool","nodeType":"ElementaryTypeName","src":"2811:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":3628,"mutability":"mutable","name":"totalPrice","nodeType":"VariableDeclaration","scope":3712,"src":"2837:18:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3627,"name":"uint256","nodeType":"ElementaryTypeName","src":"2837:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3631,"mutability":"mutable","name":"pricingData","nodeType":"VariableDeclaration","scope":3712,"src":"2869:28:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":3629,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2869:7:21","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3630,"nodeType":"ArrayTypeName","src":"2869:9:21","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"src":"2797:110:21"},"scope":3804,"src":"2570:978:21","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[5555],"body":{"id":3728,"nodeType":"Block","src":"3730:25:21","statements":[{"expression":{"id":3726,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3724,"name":"rate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3722,"src":"3740:4:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"31","id":3725,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3747:1:21","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3740:8:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3727,"nodeType":"ExpressionStatement","src":"3740:8:21"}]},"id":3729,"implemented":true,"kind":"function","modifiers":[],"name":"_conversionRate","nodeType":"FunctionDefinition","overrides":{"id":3720,"nodeType":"OverrideSpecifier","overrides":[],"src":"3698:8:21"},"parameters":{"id":3719,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3714,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":3729,"src":"3588:7:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3713,"name":"address","nodeType":"ElementaryTypeName","src":"3588:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3716,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":3729,"src":"3619:7:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3715,"name":"address","nodeType":"ElementaryTypeName","src":"3619:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3718,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":3729,"src":"3648:12:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3717,"name":"bytes","nodeType":"ElementaryTypeName","src":"3648:5:21","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3578:97:21"},"returnParameters":{"id":3723,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3722,"mutability":"mutable","name":"rate","nodeType":"VariableDeclaration","scope":3729,"src":"3716:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3721,"name":"uint256","nodeType":"ElementaryTypeName","src":"3716:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3715:14:21"},"scope":3804,"src":"3554:201:21","stateMutability":"view","virtual":true,"visibility":"internal"},{"baseFunctions":[7037],"body":{"id":3770,"nodeType":"Block","src":"3959:182:21","statements":[{"assignments":[3744],"declarations":[{"constant":false,"id":3744,"mutability":"mutable","name":"swapRate","nodeType":"VariableDeclaration","scope":3770,"src":"3969:16:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3743,"name":"uint256","nodeType":"ElementaryTypeName","src":"3969:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3750,"initialValue":{"baseExpression":{"baseExpression":{"id":3745,"name":"mockSwapRates","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3398,"src":"3988:13:21","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":3747,"indexExpression":{"id":3746,"name":"fromToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3731,"src":"4002:9:21","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3988:24:21","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3749,"indexExpression":{"id":3748,"name":"toToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3733,"src":"4013:7:21","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3988:33:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3969:52:21"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3754,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3752,"name":"swapRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3744,"src":"4039:8:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":3753,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4051:1:21","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4039:13:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616c653a20756e646566696e65642072617465","id":3755,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4054:22:21","typeDescriptions":{"typeIdentifier":"t_stringliteral_a5126163b79ed5c50bb8421cb2d96d088511f1b3a52d653c4275474201a49876","typeString":"literal_string \"Sale: undefined rate\""},"value":"Sale: undefined rate"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_a5126163b79ed5c50bb8421cb2d96d088511f1b3a52d653c4275474201a49876","typeString":"literal_string \"Sale: undefined rate\""}],"id":3751,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4031:7:21","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":3756,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4031:46:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3757,"nodeType":"ExpressionStatement","src":"4031:46:21"},{"expression":{"id":3768,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3758,"name":"fromAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3741,"src":"4087:10:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":3766,"name":"swapRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3744,"src":"4125:8:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"},"id":3763,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":3761,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4113:2:21","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3138","id":3762,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4117:2:21","typeDescriptions":{"typeIdentifier":"t_rational_18_by_1","typeString":"int_const 18"},"value":"18"},"src":"4113:6:21","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"}],"expression":{"id":3759,"name":"toAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3735,"src":"4100:8:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3760,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"mul","nodeType":"MemberAccess","referencedDeclaration":1242,"src":"4100:12:21","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":3764,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4100:20:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3765,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"div","nodeType":"MemberAccess","referencedDeclaration":1264,"src":"4100:24:21","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":3767,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4100:34:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4087:47:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3769,"nodeType":"ExpressionStatement","src":"4087:47:21"}]},"id":3771,"implemented":true,"kind":"function","modifiers":[],"name":"_estimateSwap","nodeType":"FunctionDefinition","overrides":{"id":3739,"nodeType":"OverrideSpecifier","overrides":[],"src":"3921:8:21"},"parameters":{"id":3738,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3731,"mutability":"mutable","name":"fromToken","nodeType":"VariableDeclaration","scope":3771,"src":"3793:17:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3730,"name":"address","nodeType":"ElementaryTypeName","src":"3793:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3733,"mutability":"mutable","name":"toToken","nodeType":"VariableDeclaration","scope":3771,"src":"3820:15:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3732,"name":"address","nodeType":"ElementaryTypeName","src":"3820:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3735,"mutability":"mutable","name":"toAmount","nodeType":"VariableDeclaration","scope":3771,"src":"3845:16:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3734,"name":"uint256","nodeType":"ElementaryTypeName","src":"3845:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3737,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":3771,"src":"3871:12:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3736,"name":"bytes","nodeType":"ElementaryTypeName","src":"3871:5:21","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3783:115:21"},"returnParameters":{"id":3742,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3741,"mutability":"mutable","name":"fromAmount","nodeType":"VariableDeclaration","scope":3771,"src":"3939:18:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3740,"name":"uint256","nodeType":"ElementaryTypeName","src":"3939:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3938:20:21"},"scope":3804,"src":"3761:380:21","stateMutability":"view","virtual":true,"visibility":"internal"},{"baseFunctions":[7051],"body":{"id":3802,"nodeType":"Block","src":"4328:133:21","statements":[{"expression":{"id":3792,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3785,"name":"fromAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3783,"src":"4338:10:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":3787,"name":"fromToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3773,"src":"4365:9:21","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3788,"name":"toToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3775,"src":"4376:7:21","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3789,"name":"toAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3777,"src":"4385:8:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3790,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3779,"src":"4395:4:21","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":3786,"name":"_estimateSwap","nodeType":"Identifier","overloadedDeclarations":[3771],"referencedDeclaration":3771,"src":"4351:13:21","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_uint256_$","typeString":"function (address,address,uint256,bytes memory) view returns (uint256)"}},"id":3791,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4351:49:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4338:62:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3793,"nodeType":"ExpressionStatement","src":"4338:62:21"},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":3797,"name":"mockSwapVariance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3400,"src":"4425:16:21","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3798,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint256","nodeType":"MemberAccess","referencedDeclaration":1498,"src":"4425:26:21","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_uint256_$bound_to$_t_int256_$","typeString":"function (int256) pure returns (uint256)"}},"id":3799,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4425:28:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":3794,"name":"fromAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3783,"src":"4410:10:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3796,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"add","nodeType":"MemberAccess","referencedDeclaration":1186,"src":"4410:14:21","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":3800,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4410:44:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3801,"nodeType":"ExpressionStatement","src":"4410:44:21"}]},"id":3803,"implemented":true,"kind":"function","modifiers":[],"name":"_swap","nodeType":"FunctionDefinition","overrides":{"id":3781,"nodeType":"OverrideSpecifier","overrides":[],"src":"4290:8:21"},"parameters":{"id":3780,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3773,"mutability":"mutable","name":"fromToken","nodeType":"VariableDeclaration","scope":3803,"src":"4171:17:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3772,"name":"address","nodeType":"ElementaryTypeName","src":"4171:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3775,"mutability":"mutable","name":"toToken","nodeType":"VariableDeclaration","scope":3803,"src":"4198:15:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3774,"name":"address","nodeType":"ElementaryTypeName","src":"4198:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3777,"mutability":"mutable","name":"toAmount","nodeType":"VariableDeclaration","scope":3803,"src":"4223:16:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3776,"name":"uint256","nodeType":"ElementaryTypeName","src":"4223:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3779,"mutability":"mutable","name":"data","nodeType":"VariableDeclaration","scope":3803,"src":"4249:17:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3778,"name":"bytes","nodeType":"ElementaryTypeName","src":"4249:5:21","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4161:111:21"},"returnParameters":{"id":3784,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3783,"mutability":"mutable","name":"fromAmount","nodeType":"VariableDeclaration","scope":3803,"src":"4308:18:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3782,"name":"uint256","nodeType":"ElementaryTypeName","src":"4308:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4307:20:21"},"scope":3804,"src":"4147:314:21","stateMutability":"nonpayable","virtual":true,"visibility":"internal"}],"scope":3805,"src":"217:4246:21"}],"src":"33:4431:21"},"id":21},"contracts/oracle/UniswapV2Adapter.sol":{"ast":{"absolutePath":"contracts/oracle/UniswapV2Adapter.sol","exportedSymbols":{"IUniswapV2Pair":[4167],"IUniswapV2Router":[4247],"SafeMath":[1359],"UniswapV2Adapter":[4153]},"id":4154,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":3806,"literals":["solidity",">=","0.7",".6","<","0.8",".0"],"nodeType":"PragmaDirective","src":"33:31:22"},{"absolutePath":"@openzeppelin/contracts/math/SafeMath.sol","file":"@openzeppelin/contracts/math/SafeMath.sol","id":3808,"nodeType":"ImportDirective","scope":4154,"sourceUnit":1360,"src":"66:67:22","symbolAliases":[{"foreign":{"id":3807,"name":"SafeMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"74:8:22","typeDescriptions":{}}}],"unitAlias":""},{"absolutePath":"contracts/oracle/interfaces/IUniswapV2Router.sol","file":"./interfaces/IUniswapV2Router.sol","id":3810,"nodeType":"ImportDirective","scope":4154,"sourceUnit":4248,"src":"134:67:22","symbolAliases":[{"foreign":{"id":3809,"name":"IUniswapV2Router","nodeType":"Identifier","overloadedDeclarations":[],"src":"142:16:22","typeDescriptions":{}}}],"unitAlias":""},{"absolutePath":"contracts/oracle/interfaces/IUniswapV2Pair.sol","file":"./interfaces/IUniswapV2Pair.sol","id":3812,"nodeType":"ImportDirective","scope":4154,"sourceUnit":4168,"src":"202:63:22","symbolAliases":[{"foreign":{"id":3811,"name":"IUniswapV2Pair","nodeType":"Identifier","overloadedDeclarations":[],"src":"210:14:22","typeDescriptions":{}}}],"unitAlias":""},{"abstract":false,"baseContracts":[],"contractDependencies":[],"contractKind":"contract","documentation":{"id":3813,"nodeType":"StructuredDocumentation","src":"267:93:22","text":" @title UniswapV2Adapter\n Contract which helps to interact with UniswapV2 router."},"fullyImplemented":true,"id":4153,"linearizedBaseContracts":[4153],"name":"UniswapV2Adapter","nodeType":"ContractDefinition","nodes":[{"id":3816,"libraryName":{"id":3814,"name":"SafeMath","nodeType":"UserDefinedTypeName","referencedDeclaration":1359,"src":"399:8:22","typeDescriptions":{"typeIdentifier":"t_contract$_SafeMath_$1359","typeString":"library SafeMath"}},"nodeType":"UsingForDirective","src":"393:27:22","typeName":{"id":3815,"name":"uint256","nodeType":"ElementaryTypeName","src":"412:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"anonymous":false,"id":3820,"name":"UniswapV2RouterSet","nodeType":"EventDefinition","parameters":{"id":3819,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3818,"indexed":false,"mutability":"mutable","name":"uniswapV2Router","nodeType":"VariableDeclaration","scope":3820,"src":"451:32:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapV2Router_$4247","typeString":"contract IUniswapV2Router"},"typeName":{"id":3817,"name":"IUniswapV2Router","nodeType":"UserDefinedTypeName","referencedDeclaration":4247,"src":"451:16:22","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapV2Router_$4247","typeString":"contract IUniswapV2Router"}},"visibility":"internal"}],"src":"450:34:22"},"src":"426:59:22"},{"constant":false,"functionSelector":"1694505e","id":3822,"mutability":"mutable","name":"uniswapV2Router","nodeType":"VariableDeclaration","scope":4153,"src":"491:39:22","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapV2Router_$4247","typeString":"contract IUniswapV2Router"},"typeName":{"id":3821,"name":"IUniswapV2Router","nodeType":"UserDefinedTypeName","referencedDeclaration":4247,"src":"491:16:22","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapV2Router_$4247","typeString":"contract IUniswapV2Router"}},"visibility":"public"},{"body":{"id":3831,"nodeType":"Block","src":"584:54:22","statements":[{"expression":{"arguments":[{"id":3828,"name":"uniswapV2Router_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3824,"src":"614:16:22","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapV2Router_$4247","typeString":"contract IUniswapV2Router"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IUniswapV2Router_$4247","typeString":"contract IUniswapV2Router"}],"id":3827,"name":"_setUniswapV2Router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3982,"src":"594:19:22","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IUniswapV2Router_$4247_$returns$__$","typeString":"function (contract IUniswapV2Router)"}},"id":3829,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"594:37:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3830,"nodeType":"ExpressionStatement","src":"594:37:22"}]},"id":3832,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nodeType":"FunctionDefinition","parameters":{"id":3825,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3824,"mutability":"mutable","name":"uniswapV2Router_","nodeType":"VariableDeclaration","scope":3832,"src":"549:33:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapV2Router_$4247","typeString":"contract IUniswapV2Router"},"typeName":{"id":3823,"name":"IUniswapV2Router","nodeType":"UserDefinedTypeName","referencedDeclaration":4247,"src":"549:16:22","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapV2Router_$4247","typeString":"contract IUniswapV2Router"}},"visibility":"internal"}],"src":"548:35:22"},"returnParameters":{"id":3826,"nodeType":"ParameterList","parameters":[],"src":"584:0:22"},"scope":4153,"src":"537:101:22","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":3875,"nodeType":"Block","src":"752:219:22","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3846,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3844,"name":"tokenA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3834,"src":"770:6:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":3845,"name":"tokenB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3836,"src":"780:6:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"770:16:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"556e697377617056323a2073616d6520616464726573736573","id":3847,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"788:27:22","typeDescriptions":{"typeIdentifier":"t_stringliteral_96991c5734035c9a45ed30e77ab655bfc545e8f365f6e21d1939dfa809d174a9","typeString":"literal_string \"UniswapV2: same addresses\""},"value":"UniswapV2: same addresses"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_96991c5734035c9a45ed30e77ab655bfc545e8f365f6e21d1939dfa809d174a9","typeString":"literal_string \"UniswapV2: same addresses\""}],"id":3843,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"762:7:22","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":3848,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"762:54:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3849,"nodeType":"ExpressionStatement","src":"762:54:22"},{"expression":{"id":3863,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":3850,"name":"token0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3839,"src":"827:6:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3851,"name":"token1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3841,"src":"835:6:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":3852,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"826:16:22","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_address_$","typeString":"tuple(address,address)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3855,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3853,"name":"tokenA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3834,"src":"845:6:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":3854,"name":"tokenB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3836,"src":"854:6:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"845:15:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"components":[{"id":3859,"name":"tokenB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3836,"src":"883:6:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3860,"name":"tokenA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3834,"src":"891:6:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":3861,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"882:16:22","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_address_$","typeString":"tuple(address,address)"}},"id":3862,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"845:53:22","trueExpression":{"components":[{"id":3856,"name":"tokenA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3834,"src":"864:6:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3857,"name":"tokenB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3836,"src":"872:6:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":3858,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"863:16:22","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_address_$","typeString":"tuple(address,address)"}},"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_address_$","typeString":"tuple(address,address)"}},"src":"826:72:22","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3864,"nodeType":"ExpressionStatement","src":"826:72:22"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3871,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3866,"name":"token0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3839,"src":"916:6:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":3869,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"934:1:22","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3868,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"926:7:22","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3867,"name":"address","nodeType":"ElementaryTypeName","src":"926:7:22","typeDescriptions":{}}},"id":3870,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"926:10:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"916:20:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"556e697377617056323a207a65726f2061646472657373","id":3872,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"938:25:22","typeDescriptions":{"typeIdentifier":"t_stringliteral_8bc1807cea805aa8e45c542dfdb2d1ae581423724901a778469acfd2bb5efb84","typeString":"literal_string \"UniswapV2: zero address\""},"value":"UniswapV2: zero address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_8bc1807cea805aa8e45c542dfdb2d1ae581423724901a778469acfd2bb5efb84","typeString":"literal_string \"UniswapV2: zero address\""}],"id":3865,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"908:7:22","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":3873,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"908:56:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3874,"nodeType":"ExpressionStatement","src":"908:56:22"}]},"id":3876,"implemented":true,"kind":"function","modifiers":[],"name":"_sortTokens","nodeType":"FunctionDefinition","parameters":{"id":3837,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3834,"mutability":"mutable","name":"tokenA","nodeType":"VariableDeclaration","scope":3876,"src":"665:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3833,"name":"address","nodeType":"ElementaryTypeName","src":"665:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3836,"mutability":"mutable","name":"tokenB","nodeType":"VariableDeclaration","scope":3876,"src":"681:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3835,"name":"address","nodeType":"ElementaryTypeName","src":"681:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"664:32:22"},"returnParameters":{"id":3842,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3839,"mutability":"mutable","name":"token0","nodeType":"VariableDeclaration","scope":3876,"src":"720:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3838,"name":"address","nodeType":"ElementaryTypeName","src":"720:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3841,"mutability":"mutable","name":"token1","nodeType":"VariableDeclaration","scope":3876,"src":"736:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3840,"name":"address","nodeType":"ElementaryTypeName","src":"736:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"719:32:22"},"scope":4153,"src":"644:327:22","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3920,"nodeType":"Block","src":"1064:501:22","statements":[{"assignments":[3886,3888],"declarations":[{"constant":false,"id":3886,"mutability":"mutable","name":"token0","nodeType":"VariableDeclaration","scope":3920,"src":"1075:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3885,"name":"address","nodeType":"ElementaryTypeName","src":"1075:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3888,"mutability":"mutable","name":"token1","nodeType":"VariableDeclaration","scope":3920,"src":"1091:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3887,"name":"address","nodeType":"ElementaryTypeName","src":"1091:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":3893,"initialValue":{"arguments":[{"id":3890,"name":"tokenA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3878,"src":"1121:6:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3891,"name":"tokenB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3880,"src":"1129:6:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":3889,"name":"_sortTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3876,"src":"1109:11:22","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$_t_address_$returns$_t_address_$_t_address_$","typeString":"function (address,address) pure returns (address,address)"}},"id":3892,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1109:27:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_address_$","typeString":"tuple(address,address)"}},"nodeType":"VariableDeclarationStatement","src":"1074:62:22"},{"expression":{"id":3918,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3894,"name":"pair","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3883,"src":"1146:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"hexValue":"ff","id":3902,"isConstant":false,"isLValue":false,"isPure":true,"kind":"hexString","lValueRequested":false,"nodeType":"Literal","src":"1272:7:22","typeDescriptions":{"typeIdentifier":"t_stringliteral_8b1a944cf13a9a1c08facb2c9e98623ef3254d2ddb48113885c3e8e97fec8db9","typeString":"literal_string hex\"ff\""}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":3903,"name":"uniswapV2Router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3822,"src":"1305:15:22","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapV2Router_$4247","typeString":"contract IUniswapV2Router"}},"id":3904,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"factory","nodeType":"MemberAccess","referencedDeclaration":4176,"src":"1305:23:22","typeDescriptions":{"typeIdentifier":"t_function_external_pure$__$returns$_t_address_$","typeString":"function () pure external returns (address)"}},"id":3905,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1305:25:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"arguments":[{"id":3909,"name":"token0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3886,"src":"1383:6:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3910,"name":"token1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3888,"src":"1391:6:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":3907,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1366:3:22","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":3908,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodePacked","nodeType":"MemberAccess","src":"1366:16:22","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":3911,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1366:32:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":3906,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1356:9:22","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":3912,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1356:43:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"hexValue":"96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f","id":3913,"isConstant":false,"isLValue":false,"isPure":true,"kind":"hexString","lValueRequested":false,"nodeType":"Literal","src":"1425:69:22","typeDescriptions":{"typeIdentifier":"t_stringliteral_66d76495d34dc7613deaf40ec013ef0fbd2f03604ae509b7212971c455edfb7a","typeString":"literal_string hex\"96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f\""}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_8b1a944cf13a9a1c08facb2c9e98623ef3254d2ddb48113885c3e8e97fec8db9","typeString":"literal_string hex\"ff\""},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_stringliteral_66d76495d34dc7613deaf40ec013ef0fbd2f03604ae509b7212971c455edfb7a","typeString":"literal_string hex\"96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f\""}],"expression":{"id":3900,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1230:3:22","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":3901,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodePacked","nodeType":"MemberAccess","src":"1230:16:22","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":3914,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1230:286:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":3899,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1199:9:22","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":3915,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1199:335:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":3898,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1174:7:22","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":3897,"name":"uint256","nodeType":"ElementaryTypeName","src":"1174:7:22","typeDescriptions":{}}},"id":3916,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1174:374:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3896,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1153:7:22","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3895,"name":"address","nodeType":"ElementaryTypeName","src":"1153:7:22","typeDescriptions":{}}},"id":3917,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1153:405:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"1146:412:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3919,"nodeType":"ExpressionStatement","src":"1146:412:22"}]},"id":3921,"implemented":true,"kind":"function","modifiers":[],"name":"_pairFor","nodeType":"FunctionDefinition","parameters":{"id":3881,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3878,"mutability":"mutable","name":"tokenA","nodeType":"VariableDeclaration","scope":3921,"src":"995:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3877,"name":"address","nodeType":"ElementaryTypeName","src":"995:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3880,"mutability":"mutable","name":"tokenB","nodeType":"VariableDeclaration","scope":3921,"src":"1011:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3879,"name":"address","nodeType":"ElementaryTypeName","src":"1011:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"994:32:22"},"returnParameters":{"id":3884,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3883,"mutability":"mutable","name":"pair","nodeType":"VariableDeclaration","scope":3921,"src":"1050:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3882,"name":"address","nodeType":"ElementaryTypeName","src":"1050:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1049:14:22"},"scope":4153,"src":"977:588:22","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":3967,"nodeType":"Block","src":"1684:265:22","statements":[{"assignments":[3933,null],"declarations":[{"constant":false,"id":3933,"mutability":"mutable","name":"token0","nodeType":"VariableDeclaration","scope":3967,"src":"1695:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3932,"name":"address","nodeType":"ElementaryTypeName","src":"1695:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},null],"id":3938,"initialValue":{"arguments":[{"id":3935,"name":"tokenA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3923,"src":"1727:6:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3936,"name":"tokenB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3925,"src":"1735:6:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":3934,"name":"_sortTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3876,"src":"1715:11:22","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$_t_address_$returns$_t_address_$_t_address_$","typeString":"function (address,address) pure returns (address,address)"}},"id":3937,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1715:27:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_address_$","typeString":"tuple(address,address)"}},"nodeType":"VariableDeclarationStatement","src":"1694:48:22"},{"assignments":[3940,3942,null],"declarations":[{"constant":false,"id":3940,"mutability":"mutable","name":"reserve0","nodeType":"VariableDeclaration","scope":3967,"src":"1753:16:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3939,"name":"uint256","nodeType":"ElementaryTypeName","src":"1753:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3942,"mutability":"mutable","name":"reserve1","nodeType":"VariableDeclaration","scope":3967,"src":"1771:16:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3941,"name":"uint256","nodeType":"ElementaryTypeName","src":"1771:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},null],"id":3951,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[{"id":3945,"name":"tokenA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3923,"src":"1817:6:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3946,"name":"tokenB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3925,"src":"1825:6:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":3944,"name":"_pairFor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3921,"src":"1808:8:22","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$returns$_t_address_$","typeString":"function (address,address) view returns (address)"}},"id":3947,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1808:24:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3943,"name":"IUniswapV2Pair","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4167,"src":"1793:14:22","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IUniswapV2Pair_$4167_$","typeString":"type(contract IUniswapV2Pair)"}},"id":3948,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1793:40:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapV2Pair_$4167","typeString":"contract IUniswapV2Pair"}},"id":3949,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReserves","nodeType":"MemberAccess","referencedDeclaration":4166,"src":"1793:52:22","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint112_$_t_uint112_$_t_uint32_$","typeString":"function () view external returns (uint112,uint112,uint32)"}},"id":3950,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1793:54:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint112_$_t_uint112_$_t_uint32_$","typeString":"tuple(uint112,uint112,uint32)"}},"nodeType":"VariableDeclarationStatement","src":"1752:95:22"},{"expression":{"id":3965,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":3952,"name":"reserveA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3928,"src":"1858:8:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3953,"name":"reserveB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3930,"src":"1868:8:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":3954,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"1857:20:22","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3957,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3955,"name":"tokenA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3923,"src":"1880:6:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":3956,"name":"token0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3933,"src":"1890:6:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1880:16:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"components":[{"id":3961,"name":"reserve1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3942,"src":"1923:8:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3962,"name":"reserve0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3940,"src":"1933:8:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":3963,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1922:20:22","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"id":3964,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"1880:62:22","trueExpression":{"components":[{"id":3958,"name":"reserve0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3940,"src":"1900:8:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3959,"name":"reserve1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3942,"src":"1910:8:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":3960,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1899:20:22","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"1857:85:22","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3966,"nodeType":"ExpressionStatement","src":"1857:85:22"}]},"id":3968,"implemented":true,"kind":"function","modifiers":[],"name":"_getReserves","nodeType":"FunctionDefinition","parameters":{"id":3926,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3923,"mutability":"mutable","name":"tokenA","nodeType":"VariableDeclaration","scope":3968,"src":"1593:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3922,"name":"address","nodeType":"ElementaryTypeName","src":"1593:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3925,"mutability":"mutable","name":"tokenB","nodeType":"VariableDeclaration","scope":3968,"src":"1609:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3924,"name":"address","nodeType":"ElementaryTypeName","src":"1609:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1592:32:22"},"returnParameters":{"id":3931,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3928,"mutability":"mutable","name":"reserveA","nodeType":"VariableDeclaration","scope":3968,"src":"1648:16:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3927,"name":"uint256","nodeType":"ElementaryTypeName","src":"1648:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3930,"mutability":"mutable","name":"reserveB","nodeType":"VariableDeclaration","scope":3968,"src":"1666:16:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3929,"name":"uint256","nodeType":"ElementaryTypeName","src":"1666:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1647:36:22"},"scope":4153,"src":"1571:378:22","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":3981,"nodeType":"Block","src":"2028:102:22","statements":[{"expression":{"id":3975,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3973,"name":"uniswapV2Router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3822,"src":"2038:15:22","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapV2Router_$4247","typeString":"contract IUniswapV2Router"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3974,"name":"uniswapV2Router_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3970,"src":"2056:16:22","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapV2Router_$4247","typeString":"contract IUniswapV2Router"}},"src":"2038:34:22","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapV2Router_$4247","typeString":"contract IUniswapV2Router"}},"id":3976,"nodeType":"ExpressionStatement","src":"2038:34:22"},{"eventCall":{"arguments":[{"id":3978,"name":"uniswapV2Router_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3970,"src":"2106:16:22","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapV2Router_$4247","typeString":"contract IUniswapV2Router"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IUniswapV2Router_$4247","typeString":"contract IUniswapV2Router"}],"id":3977,"name":"UniswapV2RouterSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3820,"src":"2087:18:22","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_contract$_IUniswapV2Router_$4247_$returns$__$","typeString":"function (contract IUniswapV2Router)"}},"id":3979,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2087:36:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3980,"nodeType":"EmitStatement","src":"2082:41:22"}]},"id":3982,"implemented":true,"kind":"function","modifiers":[],"name":"_setUniswapV2Router","nodeType":"FunctionDefinition","parameters":{"id":3971,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3970,"mutability":"mutable","name":"uniswapV2Router_","nodeType":"VariableDeclaration","scope":3982,"src":"1984:33:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapV2Router_$4247","typeString":"contract IUniswapV2Router"},"typeName":{"id":3969,"name":"IUniswapV2Router","nodeType":"UserDefinedTypeName","referencedDeclaration":4247,"src":"1984:16:22","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapV2Router_$4247","typeString":"contract IUniswapV2Router"}},"visibility":"internal"}],"src":"1983:35:22"},"returnParameters":{"id":3972,"nodeType":"ParameterList","parameters":[],"src":"2028:0:22"},"scope":4153,"src":"1955:175:22","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":4033,"nodeType":"Block","src":"2277:218:22","statements":[{"assignments":[3997],"declarations":[{"constant":false,"id":3997,"mutability":"mutable","name":"path","nodeType":"VariableDeclaration","scope":4033,"src":"2287:21:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":3995,"name":"address","nodeType":"ElementaryTypeName","src":"2287:7:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3996,"nodeType":"ArrayTypeName","src":"2287:9:22","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":4003,"initialValue":{"arguments":[{"hexValue":"32","id":4001,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2325:1:22","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"}],"id":4000,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"2311:13:22","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (address[] memory)"},"typeName":{"baseType":{"id":3998,"name":"address","nodeType":"ElementaryTypeName","src":"2315:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3999,"nodeType":"ArrayTypeName","src":"2315:9:22","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}}},"id":4002,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2311:16:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"2287:40:22"},{"expression":{"id":4008,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":4004,"name":"path","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3997,"src":"2337:4:22","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":4006,"indexExpression":{"hexValue":"30","id":4005,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2342:1:22","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2337:7:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":4007,"name":"tokenA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3984,"src":"2347:6:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2337:16:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":4009,"nodeType":"ExpressionStatement","src":"2337:16:22"},{"expression":{"id":4014,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":4010,"name":"path","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3997,"src":"2363:4:22","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":4012,"indexExpression":{"hexValue":"31","id":4011,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2368:1:22","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2363:7:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":4013,"name":"tokenB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3986,"src":"2373:6:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2363:16:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":4015,"nodeType":"ExpressionStatement","src":"2363:16:22"},{"assignments":[4020],"declarations":[{"constant":false,"id":4020,"mutability":"mutable","name":"amounts","nodeType":"VariableDeclaration","scope":4033,"src":"2389:24:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4018,"name":"uint256","nodeType":"ElementaryTypeName","src":"2389:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4019,"nodeType":"ArrayTypeName","src":"2389:9:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":4026,"initialValue":{"arguments":[{"id":4023,"name":"amountB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3988,"src":"2445:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4024,"name":"path","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3997,"src":"2454:4:22","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}],"expression":{"id":4021,"name":"uniswapV2Router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3822,"src":"2416:15:22","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapV2Router_$4247","typeString":"contract IUniswapV2Router"}},"id":4022,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getAmountsIn","nodeType":"MemberAccess","referencedDeclaration":4194,"src":"2416:28:22","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_uint256_$_t_array$_t_address_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256,address[] memory) view external returns (uint256[] memory)"}},"id":4025,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2416:43:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"2389:70:22"},{"expression":{"id":4031,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4027,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3991,"src":"2469:6:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":4028,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4020,"src":"2478:7:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4030,"indexExpression":{"hexValue":"30","id":4029,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2486:1:22","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2478:10:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2469:19:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4032,"nodeType":"ExpressionStatement","src":"2469:19:22"}]},"id":4034,"implemented":true,"kind":"function","modifiers":[],"name":"_getAmountsIn","nodeType":"FunctionDefinition","parameters":{"id":3989,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3984,"mutability":"mutable","name":"tokenA","nodeType":"VariableDeclaration","scope":4034,"src":"2168:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3983,"name":"address","nodeType":"ElementaryTypeName","src":"2168:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3986,"mutability":"mutable","name":"tokenB","nodeType":"VariableDeclaration","scope":4034,"src":"2192:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3985,"name":"address","nodeType":"ElementaryTypeName","src":"2192:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3988,"mutability":"mutable","name":"amountB","nodeType":"VariableDeclaration","scope":4034,"src":"2216:15:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3987,"name":"uint256","nodeType":"ElementaryTypeName","src":"2216:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2158:79:22"},"returnParameters":{"id":3992,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3991,"mutability":"mutable","name":"amount","nodeType":"VariableDeclaration","scope":4034,"src":"2261:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3990,"name":"uint256","nodeType":"ElementaryTypeName","src":"2261:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2260:16:22"},"scope":4153,"src":"2136:359:22","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":4151,"nodeType":"Block","src":"2723:765:22","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":4054,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4052,"name":"tokenA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4036,"src":"2741:6:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":4053,"name":"tokenB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4038,"src":"2751:6:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2741:16:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"556e697377617056323a2073616d6520616464726573736573","id":4055,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2759:27:22","typeDescriptions":{"typeIdentifier":"t_stringliteral_96991c5734035c9a45ed30e77ab655bfc545e8f365f6e21d1939dfa809d174a9","typeString":"literal_string \"UniswapV2: same addresses\""},"value":"UniswapV2: same addresses"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_96991c5734035c9a45ed30e77ab655bfc545e8f365f6e21d1939dfa809d174a9","typeString":"literal_string \"UniswapV2: same addresses\""}],"id":4051,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2733:7:22","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":4056,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2733:54:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4057,"nodeType":"ExpressionStatement","src":"2733:54:22"},{"assignments":[4062],"declarations":[{"constant":false,"id":4062,"mutability":"mutable","name":"path","nodeType":"VariableDeclaration","scope":4151,"src":"2798:21:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":4060,"name":"address","nodeType":"ElementaryTypeName","src":"2798:7:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":4061,"nodeType":"ArrayTypeName","src":"2798:9:22","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":4068,"initialValue":{"arguments":[{"hexValue":"32","id":4066,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2836:1:22","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"}],"id":4065,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"2822:13:22","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (address[] memory)"},"typeName":{"baseType":{"id":4063,"name":"address","nodeType":"ElementaryTypeName","src":"2826:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":4064,"nodeType":"ArrayTypeName","src":"2826:9:22","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}}},"id":4067,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2822:16:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"2798:40:22"},{"expression":{"id":4073,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":4069,"name":"path","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4062,"src":"2848:4:22","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":4071,"indexExpression":{"hexValue":"30","id":4070,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2853:1:22","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2848:7:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":4072,"name":"tokenA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4036,"src":"2858:6:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2848:16:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":4074,"nodeType":"ExpressionStatement","src":"2848:16:22"},{"expression":{"id":4079,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":4075,"name":"path","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4062,"src":"2874:4:22","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":4077,"indexExpression":{"hexValue":"31","id":4076,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2879:1:22","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2874:7:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":4078,"name":"tokenB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4038,"src":"2884:6:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2874:16:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":4080,"nodeType":"ExpressionStatement","src":"2874:16:22"},{"assignments":[4085],"declarations":[{"constant":false,"id":4085,"mutability":"mutable","name":"amounts","nodeType":"VariableDeclaration","scope":4151,"src":"2901:24:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4083,"name":"uint256","nodeType":"ElementaryTypeName","src":"2901:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4084,"nodeType":"ArrayTypeName","src":"2901:9:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":4086,"nodeType":"VariableDeclarationStatement","src":"2901:24:22"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":4091,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4087,"name":"tokenA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4036,"src":"2940:6:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":4088,"name":"uniswapV2Router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3822,"src":"2950:15:22","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapV2Router_$4247","typeString":"contract IUniswapV2Router"}},"id":4089,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"WETH","nodeType":"MemberAccess","referencedDeclaration":4182,"src":"2950:20:22","typeDescriptions":{"typeIdentifier":"t_function_external_pure$__$returns$_t_address_$","typeString":"function () pure external returns (address)"}},"id":4090,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2950:22:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2940:32:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":4118,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4114,"name":"tokenB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4038,"src":"3183:6:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":4115,"name":"uniswapV2Router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3822,"src":"3193:15:22","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapV2Router_$4247","typeString":"contract IUniswapV2Router"}},"id":4116,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"WETH","nodeType":"MemberAccess","referencedDeclaration":4182,"src":"3193:20:22","typeDescriptions":{"typeIdentifier":"t_function_external_pure$__$returns$_t_address_$","typeString":"function () pure external returns (address)"}},"id":4117,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3193:22:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3183:32:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":4142,"nodeType":"Block","src":"3336:116:22","statements":[{"expression":{"id":4140,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4131,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4085,"src":"3350:7:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":4134,"name":"amountB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4040,"src":"3401:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4135,"name":"maxAmountA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4042,"src":"3410:10:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4136,"name":"path","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4062,"src":"3422:4:22","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},{"id":4137,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4044,"src":"3428:2:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4138,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4046,"src":"3432:8:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":4132,"name":"uniswapV2Router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3822,"src":"3360:15:22","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapV2Router_$4247","typeString":"contract IUniswapV2Router"}},"id":4133,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"swapTokensForExactTokens","nodeType":"MemberAccess","referencedDeclaration":4246,"src":"3360:40:22","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$_t_uint256_$_t_array$_t_address_$dyn_memory_ptr_$_t_address_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256,uint256,address[] memory,address,uint256) external returns (uint256[] memory)"}},"id":4139,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3360:81:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"3350:91:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4141,"nodeType":"ExpressionStatement","src":"3350:91:22"}]},"id":4143,"nodeType":"IfStatement","src":"3179:273:22","trueBody":{"id":4130,"nodeType":"Block","src":"3217:113:22","statements":[{"expression":{"id":4128,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4119,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4085,"src":"3231:7:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":4122,"name":"amountB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4040,"src":"3279:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4123,"name":"maxAmountA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4042,"src":"3288:10:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4124,"name":"path","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4062,"src":"3300:4:22","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},{"id":4125,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4044,"src":"3306:2:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4126,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4046,"src":"3310:8:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":4120,"name":"uniswapV2Router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3822,"src":"3241:15:22","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapV2Router_$4247","typeString":"contract IUniswapV2Router"}},"id":4121,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"swapTokensForExactETH","nodeType":"MemberAccess","referencedDeclaration":4228,"src":"3241:37:22","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$_t_uint256_$_t_array$_t_address_$dyn_memory_ptr_$_t_address_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256,uint256,address[] memory,address,uint256) external returns (uint256[] memory)"}},"id":4127,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3241:78:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"3231:88:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4129,"nodeType":"ExpressionStatement","src":"3231:88:22"}]}},"id":4144,"nodeType":"IfStatement","src":"2936:516:22","trueBody":{"id":4113,"nodeType":"Block","src":"2974:199:22","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4096,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4093,"name":"maxAmountA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4042,"src":"2996:10:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":4094,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3010:3:22","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":4095,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"value","nodeType":"MemberAccess","src":"3010:9:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2996:23:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"556e697377617056323a20696e76616c6964206d6178416d6f756e74496e","id":4097,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3021:32:22","typeDescriptions":{"typeIdentifier":"t_stringliteral_c252f47bc5057b8787e6917fdbd2530044ded624ad1c70bf46de3312cd988b1c","typeString":"literal_string \"UniswapV2: invalid maxAmountIn\""},"value":"UniswapV2: invalid maxAmountIn"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_c252f47bc5057b8787e6917fdbd2530044ded624ad1c70bf46de3312cd988b1c","typeString":"literal_string \"UniswapV2: invalid maxAmountIn\""}],"id":4092,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2988:7:22","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":4098,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2988:66:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4099,"nodeType":"ExpressionStatement","src":"2988:66:22"},{"expression":{"id":4111,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4100,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4085,"src":"3068:7:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":4106,"name":"amountB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4040,"src":"3134:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4107,"name":"path","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4062,"src":"3143:4:22","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},{"id":4108,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4044,"src":"3149:2:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4109,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4046,"src":"3153:8:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":4101,"name":"uniswapV2Router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3822,"src":"3078:15:22","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapV2Router_$4247","typeString":"contract IUniswapV2Router"}},"id":4102,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"swapETHForExactTokens","nodeType":"MemberAccess","referencedDeclaration":4210,"src":"3078:37:22","typeDescriptions":{"typeIdentifier":"t_function_external_payable$_t_uint256_$_t_array$_t_address_$dyn_memory_ptr_$_t_address_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256,address[] memory,address,uint256) payable external returns (uint256[] memory)"}},"id":4105,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"expression":{"id":4103,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3123:3:22","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":4104,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"value","nodeType":"MemberAccess","src":"3123:9:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"3078:55:22","typeDescriptions":{"typeIdentifier":"t_function_external_payable$_t_uint256_$_t_array$_t_address_$dyn_memory_ptr_$_t_address_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$value","typeString":"function (uint256,address[] memory,address,uint256) payable external returns (uint256[] memory)"}},"id":4110,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3078:84:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"3068:94:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4112,"nodeType":"ExpressionStatement","src":"3068:94:22"}]}},{"expression":{"id":4149,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4145,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4049,"src":"3462:6:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":4146,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4085,"src":"3471:7:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4148,"indexExpression":{"hexValue":"30","id":4147,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3479:1:22","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3471:10:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3462:19:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4150,"nodeType":"ExpressionStatement","src":"3462:19:22"}]},"id":4152,"implemented":true,"kind":"function","modifiers":[],"name":"_swapTokensForExactAmount","nodeType":"FunctionDefinition","parameters":{"id":4047,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4036,"mutability":"mutable","name":"tokenA","nodeType":"VariableDeclaration","scope":4152,"src":"2545:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4035,"name":"address","nodeType":"ElementaryTypeName","src":"2545:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4038,"mutability":"mutable","name":"tokenB","nodeType":"VariableDeclaration","scope":4152,"src":"2569:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4037,"name":"address","nodeType":"ElementaryTypeName","src":"2569:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4040,"mutability":"mutable","name":"amountB","nodeType":"VariableDeclaration","scope":4152,"src":"2593:15:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4039,"name":"uint256","nodeType":"ElementaryTypeName","src":"2593:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4042,"mutability":"mutable","name":"maxAmountA","nodeType":"VariableDeclaration","scope":4152,"src":"2618:18:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4041,"name":"uint256","nodeType":"ElementaryTypeName","src":"2618:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4044,"mutability":"mutable","name":"to","nodeType":"VariableDeclaration","scope":4152,"src":"2646:10:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4043,"name":"address","nodeType":"ElementaryTypeName","src":"2646:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4046,"mutability":"mutable","name":"deadline","nodeType":"VariableDeclaration","scope":4152,"src":"2666:16:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4045,"name":"uint256","nodeType":"ElementaryTypeName","src":"2666:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2535:153:22"},"returnParameters":{"id":4050,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4049,"mutability":"mutable","name":"amount","nodeType":"VariableDeclaration","scope":4152,"src":"2707:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4048,"name":"uint256","nodeType":"ElementaryTypeName","src":"2707:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2706:16:22"},"scope":4153,"src":"2501:987:22","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":4154,"src":"361:3129:22"}],"src":"33:3458:22"},"id":22},"contracts/oracle/interfaces/IUniswapV2Pair.sol":{"ast":{"absolutePath":"contracts/oracle/interfaces/IUniswapV2Pair.sol","exportedSymbols":{"IUniswapV2Pair":[4167]},"id":4168,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":4155,"literals":["solidity",">=","0.7",".6","<","0.8",".0"],"nodeType":"PragmaDirective","src":"33:31:23"},{"abstract":false,"baseContracts":[],"contractDependencies":[],"contractKind":"interface","documentation":{"id":4156,"nodeType":"StructuredDocumentation","src":"66:181:23","text":" @title IUniswapV2Pair\n Interface for the UniswapV2 pair contract.\n @dev https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/interfaces/IUniswapV2Pair.sol"},"fullyImplemented":false,"id":4167,"linearizedBaseContracts":[4167],"name":"IUniswapV2Pair","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":4157,"nodeType":"StructuredDocumentation","src":"279:228:23","text":" Returns the reserves of token0 and token1 used to price trades and distribute liquidity. Also returns the\n  block.timestamp (mod 2**32) of the last block during which an interaction occured for the pair."},"functionSelector":"0902f1ac","id":4166,"implemented":false,"kind":"function","modifiers":[],"name":"getReserves","nodeType":"FunctionDefinition","parameters":{"id":4158,"nodeType":"ParameterList","parameters":[],"src":"532:2:23"},"returnParameters":{"id":4165,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4160,"mutability":"mutable","name":"reserve0","nodeType":"VariableDeclaration","scope":4166,"src":"595:16:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint112","typeString":"uint112"},"typeName":{"id":4159,"name":"uint112","nodeType":"ElementaryTypeName","src":"595:7:23","typeDescriptions":{"typeIdentifier":"t_uint112","typeString":"uint112"}},"visibility":"internal"},{"constant":false,"id":4162,"mutability":"mutable","name":"reserve1","nodeType":"VariableDeclaration","scope":4166,"src":"625:16:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint112","typeString":"uint112"},"typeName":{"id":4161,"name":"uint112","nodeType":"ElementaryTypeName","src":"625:7:23","typeDescriptions":{"typeIdentifier":"t_uint112","typeString":"uint112"}},"visibility":"internal"},{"constant":false,"id":4164,"mutability":"mutable","name":"blockTimestampLast","nodeType":"VariableDeclaration","scope":4166,"src":"655:25:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":4163,"name":"uint32","nodeType":"ElementaryTypeName","src":"655:6:23","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"581:109:23"},"scope":4167,"src":"512:179:23","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":4168,"src":"248:445:23"}],"src":"33:661:23"},"id":23},"contracts/oracle/interfaces/IUniswapV2Router.sol":{"ast":{"absolutePath":"contracts/oracle/interfaces/IUniswapV2Router.sol","exportedSymbols":{"IUniswapV2Router":[4247]},"id":4248,"license":"GPL-3.0","nodeType":"SourceUnit","nodes":[{"id":4169,"literals":["solidity",">=","0.7",".6","<","0.8",".0"],"nodeType":"PragmaDirective","src":"37:31:24"},{"abstract":false,"baseContracts":[],"contractDependencies":[],"contractKind":"interface","documentation":{"id":4170,"nodeType":"StructuredDocumentation","src":"70:194:24","text":" @title IUniswapV2Router\n Interface for the UniswapV2 router contract.\n @dev https://github.com/Uniswap/uniswap-v2-periphery/blob/master/contracts/interfaces/IUniswapV2Router02.sol"},"fullyImplemented":false,"id":4247,"linearizedBaseContracts":[4247],"name":"IUniswapV2Router","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":4171,"nodeType":"StructuredDocumentation","src":"298:125:24","text":" Returns the UniswapV2 factory used by the router.\n @return The UniswapV2 factory used by the router."},"functionSelector":"c45a0155","id":4176,"implemented":false,"kind":"function","modifiers":[],"name":"factory","nodeType":"FunctionDefinition","parameters":{"id":4172,"nodeType":"ParameterList","parameters":[],"src":"444:2:24"},"returnParameters":{"id":4175,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4174,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4176,"src":"470:7:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4173,"name":"address","nodeType":"ElementaryTypeName","src":"470:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"469:9:24"},"scope":4247,"src":"428:51:24","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":4177,"nodeType":"StructuredDocumentation","src":"485:97:24","text":" Returns the canonical WETH address.\n @return The canonical WETH address."},"functionSelector":"ad5c4648","id":4182,"implemented":false,"kind":"function","modifiers":[],"name":"WETH","nodeType":"FunctionDefinition","parameters":{"id":4178,"nodeType":"ParameterList","parameters":[],"src":"653:2:24"},"returnParameters":{"id":4181,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4180,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4182,"src":"679:7:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4179,"name":"address","nodeType":"ElementaryTypeName","src":"679:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"678:9:24"},"scope":4247,"src":"640:48:24","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":4183,"nodeType":"StructuredDocumentation","src":"694:547:24","text":" Given an output asset amount and an array of token addresses, calculates all preceding minimum input token amounts\n  by calling `getReserves` for each pair of token addresses in the path in turn, and using these to call `getAmountIn`.\n @dev Useful for calculating optimal token amounts before calling `swap`.\n @param amountOut the fixed amount of output asset.\n @param path An array of token addresses. path.length must be >= 2. Pools for each consecutive pair of addresses must exist and have liquidity."},"functionSelector":"1f00ca74","id":4194,"implemented":false,"kind":"function","modifiers":[],"name":"getAmountsIn","nodeType":"FunctionDefinition","parameters":{"id":4189,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4185,"mutability":"mutable","name":"amountOut","nodeType":"VariableDeclaration","scope":4194,"src":"1268:17:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4184,"name":"uint256","nodeType":"ElementaryTypeName","src":"1268:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4188,"mutability":"mutable","name":"path","nodeType":"VariableDeclaration","scope":4194,"src":"1287:23:24","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":4186,"name":"address","nodeType":"ElementaryTypeName","src":"1287:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":4187,"nodeType":"ArrayTypeName","src":"1287:9:24","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"1267:44:24"},"returnParameters":{"id":4193,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4192,"mutability":"mutable","name":"amounts","nodeType":"VariableDeclaration","scope":4194,"src":"1335:24:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4190,"name":"uint256","nodeType":"ElementaryTypeName","src":"1335:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4191,"nodeType":"ArrayTypeName","src":"1335:9:24","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"1334:26:24"},"scope":4247,"src":"1246:115:24","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4195,"nodeType":"StructuredDocumentation","src":"1367:941:24","text":" Receive an exact amount of tokens for as little ETH as possible, along the route determined by the path. The first element of path must be\n  WETH, the last is the output token and any intermediate elements represent intermediate pairs to trade through (if, for example, a direct pair\n  does not exist).\n @dev Leftover ETH, if any, is returned to msg.sender.\n @dev msg.value (amountInMax) is the maximum amount of ETH that can be required before the transaction reverts.\n @param amountOut The amount of output tokens to receive.\n @param path An array of token addresses. path.length must be >= 2. Pools for each consecutive pair of addresses must exist and have liquidity.\n @param to Recipient of the output tokens.\n @param deadline Unix timestamp after which the transaction will revert.\n @return amounts The input token amount and all subsequent output token amounts."},"functionSelector":"fb3bdb41","id":4210,"implemented":false,"kind":"function","modifiers":[],"name":"swapETHForExactTokens","nodeType":"FunctionDefinition","parameters":{"id":4205,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4197,"mutability":"mutable","name":"amountOut","nodeType":"VariableDeclaration","scope":4210,"src":"2353:17:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4196,"name":"uint256","nodeType":"ElementaryTypeName","src":"2353:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4200,"mutability":"mutable","name":"path","nodeType":"VariableDeclaration","scope":4210,"src":"2380:23:24","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":4198,"name":"address","nodeType":"ElementaryTypeName","src":"2380:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":4199,"nodeType":"ArrayTypeName","src":"2380:9:24","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":4202,"mutability":"mutable","name":"to","nodeType":"VariableDeclaration","scope":4210,"src":"2413:10:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4201,"name":"address","nodeType":"ElementaryTypeName","src":"2413:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4204,"mutability":"mutable","name":"deadline","nodeType":"VariableDeclaration","scope":4210,"src":"2433:16:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4203,"name":"uint256","nodeType":"ElementaryTypeName","src":"2433:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2343:112:24"},"returnParameters":{"id":4209,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4208,"mutability":"mutable","name":"amounts","nodeType":"VariableDeclaration","scope":4210,"src":"2482:24:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4206,"name":"uint256","nodeType":"ElementaryTypeName","src":"2482:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4207,"nodeType":"ArrayTypeName","src":"2482:9:24","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"2481:26:24"},"scope":4247,"src":"2313:195:24","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":4211,"nodeType":"StructuredDocumentation","src":"2514:1064:24","text":" Receive an exact amount of ETH for as few input tokens as possible, along the route determined by the path. The first element of path is the\n  input token, the last must be WETH, and any intermediate elements represent intermediate pairs to trade through (if, for example, a direct\n  pair does not exist).\n @dev msg.sender should have already given the router an allowance of at least amountInMax on the input token.\n @dev If the to address is a smart contract, it must have the ability to receive ETH.\n @param amountOut The amount of ETH to receive.\n @param amountInMax The maximum amount of input tokens that can be required before the transaction reverts.\n @param path An array of token addresses. path.length must be >= 2. Pools for each consecutive pair of addresses must exist and have liquidity.\n @param to Recipient of ETH.\n @param deadline Unix timestamp after which the transaction will revert.\n @return amounts The input token amount and all subsequent output token amounts."},"functionSelector":"4a25d94a","id":4228,"implemented":false,"kind":"function","modifiers":[],"name":"swapTokensForExactETH","nodeType":"FunctionDefinition","parameters":{"id":4223,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4213,"mutability":"mutable","name":"amountOut","nodeType":"VariableDeclaration","scope":4228,"src":"3623:17:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4212,"name":"uint256","nodeType":"ElementaryTypeName","src":"3623:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4215,"mutability":"mutable","name":"amountInMax","nodeType":"VariableDeclaration","scope":4228,"src":"3650:19:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4214,"name":"uint256","nodeType":"ElementaryTypeName","src":"3650:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4218,"mutability":"mutable","name":"path","nodeType":"VariableDeclaration","scope":4228,"src":"3679:23:24","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":4216,"name":"address","nodeType":"ElementaryTypeName","src":"3679:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":4217,"nodeType":"ArrayTypeName","src":"3679:9:24","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":4220,"mutability":"mutable","name":"to","nodeType":"VariableDeclaration","scope":4228,"src":"3712:10:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4219,"name":"address","nodeType":"ElementaryTypeName","src":"3712:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4222,"mutability":"mutable","name":"deadline","nodeType":"VariableDeclaration","scope":4228,"src":"3732:16:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4221,"name":"uint256","nodeType":"ElementaryTypeName","src":"3732:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3613:141:24"},"returnParameters":{"id":4227,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4226,"mutability":"mutable","name":"amounts","nodeType":"VariableDeclaration","scope":4228,"src":"3773:24:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4224,"name":"uint256","nodeType":"ElementaryTypeName","src":"3773:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4225,"nodeType":"ArrayTypeName","src":"3773:9:24","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"3772:26:24"},"scope":4247,"src":"3583:216:24","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4229,"nodeType":"StructuredDocumentation","src":"3805:1013:24","text":" Receive an exact amount of output tokens for as few input tokens as possible, along the route determined by the path.\n  The first element of path is the input token, the last is the output token, and any intermediate elements represent\n  intermediate pairs to trade through (if, for example, a direct pair does not exist).\n @dev msg.sender should have already given the router an allowance of at least amountInMax on the input token.\n @param amountOut The amount of output tokens to receive.\n @param amountInMax The maximum amount of input tokens that can be required before the transaction reverts.\n @param path An array of token addresses. path.length must be >= 2. Pools for each consecutive pair of addresses must exist and have liquidity.\n @param to Recipient of the output tokens.\n @param deadline Unix timestamp after which the transaction will revert.\n @return amounts The input token amount and all subsequent output token amounts."},"functionSelector":"8803dbee","id":4246,"implemented":false,"kind":"function","modifiers":[],"name":"swapTokensForExactTokens","nodeType":"FunctionDefinition","parameters":{"id":4241,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4231,"mutability":"mutable","name":"amountOut","nodeType":"VariableDeclaration","scope":4246,"src":"4866:17:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4230,"name":"uint256","nodeType":"ElementaryTypeName","src":"4866:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4233,"mutability":"mutable","name":"amountInMax","nodeType":"VariableDeclaration","scope":4246,"src":"4893:19:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4232,"name":"uint256","nodeType":"ElementaryTypeName","src":"4893:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4236,"mutability":"mutable","name":"path","nodeType":"VariableDeclaration","scope":4246,"src":"4922:23:24","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":4234,"name":"address","nodeType":"ElementaryTypeName","src":"4922:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":4235,"nodeType":"ArrayTypeName","src":"4922:9:24","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":4238,"mutability":"mutable","name":"to","nodeType":"VariableDeclaration","scope":4246,"src":"4955:10:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4237,"name":"address","nodeType":"ElementaryTypeName","src":"4955:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4240,"mutability":"mutable","name":"deadline","nodeType":"VariableDeclaration","scope":4246,"src":"4975:16:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4239,"name":"uint256","nodeType":"ElementaryTypeName","src":"4975:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4856:141:24"},"returnParameters":{"id":4245,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4244,"mutability":"mutable","name":"amounts","nodeType":"VariableDeclaration","scope":4246,"src":"5016:24:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4242,"name":"uint256","nodeType":"ElementaryTypeName","src":"5016:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4243,"nodeType":"ArrayTypeName","src":"5016:9:24","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"5015:26:24"},"scope":4247,"src":"4823:219:24","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":4248,"src":"265:4779:24"}],"src":"37:5008:24"},"id":24},"contracts/sale/FixedOrderInventorySale.sol":{"ast":{"absolutePath":"contracts/sale/FixedOrderInventorySale.sol","exportedSymbols":{"EnumSet":[551],"FixedOrderInventorySale":[4567],"FixedPricesSale":[4753]},"id":4568,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":4249,"literals":["solidity",">=","0.7",".6","<","0.8",".0"],"nodeType":"PragmaDirective","src":"33:31:25"},{"absolutePath":"contracts/sale/abstract/Sale.sol","file":"./abstract/Sale.sol","id":4251,"nodeType":"ImportDirective","scope":4568,"sourceUnit":6695,"src":"66:44:25","symbolAliases":[{"foreign":{"id":4250,"name":"EnumSet","nodeType":"Identifier","overloadedDeclarations":[],"src":"74:7:25","typeDescriptions":{}}}],"unitAlias":""},{"absolutePath":"contracts/sale/FixedPricesSale.sol","file":"./FixedPricesSale.sol","id":4253,"nodeType":"ImportDirective","scope":4568,"sourceUnit":4754,"src":"111:54:25","symbolAliases":[{"foreign":{"id":4252,"name":"FixedPricesSale","nodeType":"Identifier","overloadedDeclarations":[],"src":"119:15:25","typeDescriptions":{}}}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":4255,"name":"FixedPricesSale","nodeType":"UserDefinedTypeName","referencedDeclaration":4753,"src":"472:15:25","typeDescriptions":{"typeIdentifier":"t_contract$_FixedPricesSale_$4753","typeString":"contract FixedPricesSale"}},"id":4256,"nodeType":"InheritanceSpecifier","src":"472:15:25"}],"contractDependencies":[22,103,646,715,736,812,4753,5671,6694,7346],"contractKind":"contract","documentation":{"id":4254,"nodeType":"StructuredDocumentation","src":"167:268:25","text":" @title FixedOrderInventorySale\n A FixedPricesSale contract that handles the purchase of NFTs of an inventory contract to a\n receipient. The provisioning of the NFTs occurs in a sequential order defined by a token list.\n Only a single SKU is supported."},"fullyImplemented":true,"id":4567,"linearizedBaseContracts":[4567,4753,6694,646,715,812,103,22,736,7346,5671],"name":"FixedOrderInventorySale","nodeType":"ContractDefinition","nodes":[{"id":4259,"libraryName":{"id":4257,"name":"EnumSet","nodeType":"UserDefinedTypeName","referencedDeclaration":551,"src":"500:7:25","typeDescriptions":{"typeIdentifier":"t_contract$_EnumSet_$551","typeString":"library EnumSet"}},"nodeType":"UsingForDirective","src":"494:30:25","typeName":{"id":4258,"name":"EnumSet.Set","nodeType":"UserDefinedTypeName","referencedDeclaration":373,"src":"512:11:25","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$373_storage_ptr","typeString":"struct EnumSet.Set"}}},{"constant":false,"functionSelector":"15d52a5c","id":4261,"mutability":"immutable","name":"inventory","nodeType":"VariableDeclaration","scope":4567,"src":"530:34:25","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4260,"name":"address","nodeType":"ElementaryTypeName","src":"530:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"constant":false,"functionSelector":"d55f9273","id":4263,"mutability":"mutable","name":"tokenIndex","nodeType":"VariableDeclaration","scope":4567,"src":"571:25:25","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4262,"name":"uint256","nodeType":"ElementaryTypeName","src":"571:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":false,"functionSelector":"9ead7222","id":4266,"mutability":"mutable","name":"tokenList","nodeType":"VariableDeclaration","scope":4567,"src":"603:26:25","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[]"},"typeName":{"baseType":{"id":4264,"name":"uint256","nodeType":"ElementaryTypeName","src":"603:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4265,"nodeType":"ArrayTypeName","src":"603:9:25","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"public"},{"body":{"id":4295,"nodeType":"Block","src":"1289:114:25","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":4287,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4282,"name":"inventory_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4269,"src":"1307:10:25","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":4285,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1329:1:25","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":4284,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1321:7:25","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":4283,"name":"address","nodeType":"ElementaryTypeName","src":"1321:7:25","typeDescriptions":{}}},"id":4286,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1321:10:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"1307:24:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616c653a207a65726f206164647265737320696e76656e746f7279","id":4288,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1333:30:25","typeDescriptions":{"typeIdentifier":"t_stringliteral_421a891d4756b812f91a296ea82b2e69ada6616916f9af7505abbcefbe746ab7","typeString":"literal_string \"Sale: zero address inventory\""},"value":"Sale: zero address inventory"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_421a891d4756b812f91a296ea82b2e69ada6616916f9af7505abbcefbe746ab7","typeString":"literal_string \"Sale: zero address inventory\""}],"id":4281,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1299:7:25","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":4289,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1299:65:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4290,"nodeType":"ExpressionStatement","src":"1299:65:25"},{"expression":{"id":4293,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4291,"name":"inventory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4261,"src":"1374:9:25","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":4292,"name":"inventory_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4269,"src":"1386:10:25","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1374:22:25","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":4294,"nodeType":"ExpressionStatement","src":"1374:22:25"}]},"documentation":{"id":4267,"nodeType":"StructuredDocumentation","src":"636:399:25","text":" Constructor.\n @dev Reverts if `inventory_` is the zero address.\n @dev Emits the `MagicValues` event.\n @dev Emits the `Paused` event.\n @param inventory_ The inventory contract from which the NFT sale supply is attributed from.\n @param payoutWallet The payout wallet.\n @param tokensPerSkuCapacity the cap for the number of tokens managed per SKU."},"id":4296,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":4276,"name":"payoutWallet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4271,"src":"1199:12:25","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"hexValue":"31","id":4277,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1225:1:25","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},{"id":4278,"name":"tokensPerSkuCapacity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4273,"src":"1254:20:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":4279,"modifierName":{"id":4275,"name":"FixedPricesSale","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4753,"src":"1170:15:25","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPricesSale_$4753_$","typeString":"type(contract FixedPricesSale)"}},"nodeType":"ModifierInvocation","src":"1170:114:25"}],"name":"","nodeType":"FunctionDefinition","parameters":{"id":4274,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4269,"mutability":"mutable","name":"inventory_","nodeType":"VariableDeclaration","scope":4296,"src":"1061:18:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4268,"name":"address","nodeType":"ElementaryTypeName","src":"1061:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4271,"mutability":"mutable","name":"payoutWallet","nodeType":"VariableDeclaration","scope":4296,"src":"1089:28:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":4270,"name":"address","nodeType":"ElementaryTypeName","src":"1089:15:25","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":4273,"mutability":"mutable","name":"tokensPerSkuCapacity","nodeType":"VariableDeclaration","scope":4296,"src":"1127:28:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4272,"name":"uint256","nodeType":"ElementaryTypeName","src":"1127:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1051:110:25"},"returnParameters":{"id":4280,"nodeType":"ParameterList","parameters":[],"src":"1289:0:25"},"scope":4567,"src":"1040:363:25","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":4383,"nodeType":"Block","src":"1865:574:25","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":4304,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":726,"src":"1893:10:25","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":4305,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1893:12:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":4303,"name":"_requireOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":102,"src":"1875:17:25","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":4306,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1875:31:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4307,"nodeType":"ExpressionStatement","src":"1875:31:25"},{"assignments":[4309],"declarations":[{"constant":false,"id":4309,"mutability":"mutable","name":"numTokens","nodeType":"VariableDeclaration","scope":4383,"src":"1916:17:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4308,"name":"uint256","nodeType":"ElementaryTypeName","src":"1916:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4312,"initialValue":{"expression":{"id":4310,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4300,"src":"1936:6:25","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4311,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"1936:13:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1916:33:25"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4316,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4314,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4309,"src":"1968:9:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":4315,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1981:1:25","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1968:14:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616c653a20656d70747920746f6b656e73","id":4317,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1984:20:25","typeDescriptions":{"typeIdentifier":"t_stringliteral_3b3021a6eb18595f2278cdd434690a85d01e7d4c734a1ec3a1159b5805e19cf8","typeString":"literal_string \"Sale: empty tokens\""},"value":"Sale: empty tokens"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_3b3021a6eb18595f2278cdd434690a85d01e7d4c734a1ec3a1159b5805e19cf8","typeString":"literal_string \"Sale: empty tokens\""}],"id":4313,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1960:7:25","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":4318,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1960:45:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4319,"nodeType":"ExpressionStatement","src":"1960:45:25"},{"body":{"id":4349,"nodeType":"Block","src":"2057:141:25","statements":[{"assignments":[4331],"declarations":[{"constant":false,"id":4331,"mutability":"mutable","name":"token","nodeType":"VariableDeclaration","scope":4349,"src":"2071:13:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4330,"name":"uint256","nodeType":"ElementaryTypeName","src":"2071:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4335,"initialValue":{"baseExpression":{"id":4332,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4300,"src":"2087:6:25","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4334,"indexExpression":{"id":4333,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4321,"src":"2094:1:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2087:9:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2071:25:25"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4339,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4337,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4331,"src":"2119:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":4338,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2128:1:25","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2119:10:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616c653a207a65726f20737570706c79","id":4340,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2131:19:25","typeDescriptions":{"typeIdentifier":"t_stringliteral_ffb4e235fe1f5dd90b843ff40312a9eac354db1dd5ca7a8ed33810eb3d09690a","typeString":"literal_string \"Sale: zero supply\""},"value":"Sale: zero supply"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_ffb4e235fe1f5dd90b843ff40312a9eac354db1dd5ca7a8ed33810eb3d09690a","typeString":"literal_string \"Sale: zero supply\""}],"id":4336,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2111:7:25","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":4341,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2111:40:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4342,"nodeType":"ExpressionStatement","src":"2111:40:25"},{"expression":{"arguments":[{"id":4346,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4331,"src":"2181:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":4343,"name":"tokenList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4266,"src":"2166:9:25","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":4345,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"push","nodeType":"MemberAccess","src":"2166:14:25","typeDescriptions":{"typeIdentifier":"t_function_arraypush_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":4347,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2166:21:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4348,"nodeType":"ExpressionStatement","src":"2166:21:25"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4326,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4324,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4321,"src":"2036:1:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":4325,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4309,"src":"2041:9:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2036:14:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4350,"initializationExpression":{"assignments":[4321],"declarations":[{"constant":false,"id":4321,"mutability":"mutable","name":"i","nodeType":"VariableDeclaration","scope":4350,"src":"2021:9:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4320,"name":"uint256","nodeType":"ElementaryTypeName","src":"2021:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4323,"initialValue":{"hexValue":"30","id":4322,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2033:1:25","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2021:13:25"},"loopExpression":{"expression":{"id":4328,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"2052:3:25","subExpression":{"id":4327,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4321,"src":"2054:1:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4329,"nodeType":"ExpressionStatement","src":"2052:3:25"},"nodeType":"ForStatement","src":"2016:182:25"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4355,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":4351,"name":"_skus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5779,"src":"2212:5:25","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$373_storage","typeString":"struct EnumSet.Set storage ref"}},"id":4352,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","referencedDeclaration":525,"src":"2212:12:25","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$373_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Set_$373_storage_ptr_$","typeString":"function (struct EnumSet.Set storage pointer) view returns (uint256)"}},"id":4353,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2212:14:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":4354,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2230:1:25","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2212:19:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4382,"nodeType":"IfStatement","src":"2208:225:25","trueBody":{"id":4381,"nodeType":"Block","src":"2233:200:25","statements":[{"assignments":[4357],"declarations":[{"constant":false,"id":4357,"mutability":"mutable","name":"sku","nodeType":"VariableDeclaration","scope":4381,"src":"2247:11:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4356,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2247:7:25","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":4362,"initialValue":{"arguments":[{"hexValue":"30","id":4360,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2270:1:25","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"id":4358,"name":"_skus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5779,"src":"2261:5:25","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$373_storage","typeString":"struct EnumSet.Set storage ref"}},"id":4359,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"at","nodeType":"MemberAccess","referencedDeclaration":550,"src":"2261:8:25","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$373_storage_ptr_$_t_uint256_$returns$_t_bytes32_$bound_to$_t_struct$_Set_$373_storage_ptr_$","typeString":"function (struct EnumSet.Set storage pointer,uint256) view returns (bytes32)"}},"id":4361,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2261:11:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"2247:25:25"},{"assignments":[4364],"declarations":[{"constant":false,"id":4364,"mutability":"mutable","name":"skuInfo","nodeType":"VariableDeclaration","scope":4381,"src":"2286:23:25","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage_ptr","typeString":"struct Sale.SkuInfo"},"typeName":{"id":4363,"name":"SkuInfo","nodeType":"UserDefinedTypeName","referencedDeclaration":5762,"src":"2286:7:25","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage_ptr","typeString":"struct Sale.SkuInfo"}},"visibility":"internal"}],"id":4368,"initialValue":{"baseExpression":{"id":4365,"name":"_skuInfos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5783,"src":"2312:9:25","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_SkuInfo_$5762_storage_$","typeString":"mapping(bytes32 => struct Sale.SkuInfo storage ref)"}},"id":4367,"indexExpression":{"id":4366,"name":"sku","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4357,"src":"2322:3:25","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2312:14:25","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage","typeString":"struct Sale.SkuInfo storage ref"}},"nodeType":"VariableDeclarationStatement","src":"2286:40:25"},{"expression":{"id":4373,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":4369,"name":"skuInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4364,"src":"2340:7:25","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage_ptr","typeString":"struct Sale.SkuInfo storage pointer"}},"id":4371,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":5753,"src":"2340:19:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":4372,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4309,"src":"2363:9:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2340:32:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4374,"nodeType":"ExpressionStatement","src":"2340:32:25"},{"expression":{"id":4379,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":4375,"name":"skuInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4364,"src":"2386:7:25","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage_ptr","typeString":"struct Sale.SkuInfo storage pointer"}},"id":4377,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"remainingSupply","nodeType":"MemberAccess","referencedDeclaration":5755,"src":"2386:23:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":4378,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4309,"src":"2413:9:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2386:36:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4380,"nodeType":"ExpressionStatement","src":"2386:36:25"}]}}]},"documentation":{"id":4297,"nodeType":"StructuredDocumentation","src":"1409:392:25","text":" Adds additional tokens to the sale supply.\n @dev Reverts if called by any other than the contract owner.\n @dev Reverts if `tokens` is empty.\n @dev Reverts if any of `tokens` are zero.\n @dev The list of tokens specified (in sequence) will be appended to the end of the ordered\n  sale supply list.\n @param tokens The list of tokens to add."},"functionSelector":"cf3ae77b","id":4384,"implemented":true,"kind":"function","modifiers":[],"name":"addSupply","nodeType":"FunctionDefinition","parameters":{"id":4301,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4300,"mutability":"mutable","name":"tokens","nodeType":"VariableDeclaration","scope":4384,"src":"1825:23:25","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4298,"name":"uint256","nodeType":"ElementaryTypeName","src":"1825:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4299,"nodeType":"ArrayTypeName","src":"1825:9:25","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"1824:25:25"},"returnParameters":{"id":4302,"nodeType":"ParameterList","parameters":[],"src":"1865:0:25"},"scope":4567,"src":"1806:633:25","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":4493,"nodeType":"Block","src":"3762:863:25","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":4394,"name":"_requirePaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":611,"src":"3772:14:25","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":4395,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3772:16:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4396,"nodeType":"ExpressionStatement","src":"3772:16:25"},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":4398,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":726,"src":"3816:10:25","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":4399,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3816:12:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":4397,"name":"_requireOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":102,"src":"3798:17:25","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":4400,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3798:31:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4401,"nodeType":"ExpressionStatement","src":"3798:31:25"},{"assignments":[4403],"declarations":[{"constant":false,"id":4403,"mutability":"mutable","name":"tokenListLength","nodeType":"VariableDeclaration","scope":4493,"src":"3839:23:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4402,"name":"uint256","nodeType":"ElementaryTypeName","src":"3839:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4406,"initialValue":{"expression":{"id":4404,"name":"tokenList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4266,"src":"3865:9:25","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":4405,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"3865:16:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3839:42:25"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4410,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4408,"name":"tokenListLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4403,"src":"3933:15:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":4409,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3952:1:25","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3933:20:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616c653a20656d70747920746f6b656e73","id":4411,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3955:20:25","typeDescriptions":{"typeIdentifier":"t_stringliteral_3b3021a6eb18595f2278cdd434690a85d01e7d4c734a1ec3a1159b5805e19cf8","typeString":"literal_string \"Sale: empty tokens\""},"value":"Sale: empty tokens"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_3b3021a6eb18595f2278cdd434690a85d01e7d4c734a1ec3a1159b5805e19cf8","typeString":"literal_string \"Sale: empty tokens\""}],"id":4407,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3925:7:25","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":4412,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3925:51:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4413,"nodeType":"ExpressionStatement","src":"3925:51:25"},{"assignments":[4415],"declarations":[{"constant":false,"id":4415,"mutability":"mutable","name":"numIndexes","nodeType":"VariableDeclaration","scope":4493,"src":"3987:18:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4414,"name":"uint256","nodeType":"ElementaryTypeName","src":"3987:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4418,"initialValue":{"expression":{"id":4416,"name":"indexes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4388,"src":"4008:7:25","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4417,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"4008:14:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3987:35:25"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4422,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4420,"name":"numIndexes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4415,"src":"4041:10:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":4421,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4055:1:25","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4041:15:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616c653a20656d70747920696e6465786573","id":4423,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4058:21:25","typeDescriptions":{"typeIdentifier":"t_stringliteral_d943844a72c3b3964e285307e45ca4aec42234906f59bf80fde157e51d0fa2b1","typeString":"literal_string \"Sale: empty indexes\""},"value":"Sale: empty indexes"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_d943844a72c3b3964e285307e45ca4aec42234906f59bf80fde157e51d0fa2b1","typeString":"literal_string \"Sale: empty indexes\""}],"id":4419,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4033:7:25","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":4424,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4033:47:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4425,"nodeType":"ExpressionStatement","src":"4033:47:25"},{"assignments":[4427],"declarations":[{"constant":false,"id":4427,"mutability":"mutable","name":"numTokens","nodeType":"VariableDeclaration","scope":4493,"src":"4091:17:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4426,"name":"uint256","nodeType":"ElementaryTypeName","src":"4091:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4430,"initialValue":{"expression":{"id":4428,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4391,"src":"4111:6:25","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4429,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"4111:13:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4091:33:25"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4434,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4432,"name":"numIndexes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4415,"src":"4143:10:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":4433,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4427,"src":"4157:9:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4143:23:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616c653a20696e636f6e73697374656e7420617272617973","id":4435,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4168:27:25","typeDescriptions":{"typeIdentifier":"t_stringliteral_2849a8b2209630c82ce5e4df87473aaff96a8703f79d100e8d799bf6b6ef7d73","typeString":"literal_string \"Sale: inconsistent arrays\""},"value":"Sale: inconsistent arrays"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_2849a8b2209630c82ce5e4df87473aaff96a8703f79d100e8d799bf6b6ef7d73","typeString":"literal_string \"Sale: inconsistent arrays\""}],"id":4431,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4135:7:25","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":4436,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4135:61:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4437,"nodeType":"ExpressionStatement","src":"4135:61:25"},{"assignments":[4439],"declarations":[{"constant":false,"id":4439,"mutability":"mutable","name":"tokenIndex_","nodeType":"VariableDeclaration","scope":4493,"src":"4207:19:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4438,"name":"uint256","nodeType":"ElementaryTypeName","src":"4207:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4441,"initialValue":{"id":4440,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4263,"src":"4229:10:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4207:32:25"},{"body":{"id":4491,"nodeType":"Block","src":"4292:327:25","statements":[{"assignments":[4453],"declarations":[{"constant":false,"id":4453,"mutability":"mutable","name":"index","nodeType":"VariableDeclaration","scope":4491,"src":"4306:13:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4452,"name":"uint256","nodeType":"ElementaryTypeName","src":"4306:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4457,"initialValue":{"baseExpression":{"id":4454,"name":"indexes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4388,"src":"4322:7:25","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4456,"indexExpression":{"id":4455,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4443,"src":"4330:1:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4322:10:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4306:26:25"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4461,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4459,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4453,"src":"4355:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":4460,"name":"tokenIndex_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4439,"src":"4364:11:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4355:20:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616c653a20696e76616c696420696e646578","id":4462,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4377:21:25","typeDescriptions":{"typeIdentifier":"t_stringliteral_16d62ff86429edda4b0f92f38d57a2fcb5df328486fe3cb4b1b0219ba0984903","typeString":"literal_string \"Sale: invalid index\""},"value":"Sale: invalid index"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_16d62ff86429edda4b0f92f38d57a2fcb5df328486fe3cb4b1b0219ba0984903","typeString":"literal_string \"Sale: invalid index\""}],"id":4458,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4347:7:25","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":4463,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4347:52:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4464,"nodeType":"ExpressionStatement","src":"4347:52:25"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4468,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4466,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4453,"src":"4421:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":4467,"name":"tokenListLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4403,"src":"4429:15:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4421:23:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616c653a20696e646578206f75742d6f662d626f756e6473","id":4469,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4446:27:25","typeDescriptions":{"typeIdentifier":"t_stringliteral_8c9d1bc860d0f29b05fbe708ad82b92447806826a189c600ed2030d683e0b9db","typeString":"literal_string \"Sale: index out-of-bounds\""},"value":"Sale: index out-of-bounds"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_8c9d1bc860d0f29b05fbe708ad82b92447806826a189c600ed2030d683e0b9db","typeString":"literal_string \"Sale: index out-of-bounds\""}],"id":4465,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4413:7:25","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":4470,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4413:61:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4471,"nodeType":"ExpressionStatement","src":"4413:61:25"},{"assignments":[4473],"declarations":[{"constant":false,"id":4473,"mutability":"mutable","name":"token","nodeType":"VariableDeclaration","scope":4491,"src":"4489:13:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4472,"name":"uint256","nodeType":"ElementaryTypeName","src":"4489:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4477,"initialValue":{"baseExpression":{"id":4474,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4391,"src":"4505:6:25","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4476,"indexExpression":{"id":4475,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4443,"src":"4512:1:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4505:9:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4489:25:25"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4481,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4479,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4473,"src":"4537:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":4480,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4546:1:25","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4537:10:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616c653a207a65726f20737570706c79","id":4482,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4549:19:25","typeDescriptions":{"typeIdentifier":"t_stringliteral_ffb4e235fe1f5dd90b843ff40312a9eac354db1dd5ca7a8ed33810eb3d09690a","typeString":"literal_string \"Sale: zero supply\""},"value":"Sale: zero supply"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_ffb4e235fe1f5dd90b843ff40312a9eac354db1dd5ca7a8ed33810eb3d09690a","typeString":"literal_string \"Sale: zero supply\""}],"id":4478,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4529:7:25","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":4483,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4529:40:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4484,"nodeType":"ExpressionStatement","src":"4529:40:25"},{"expression":{"id":4489,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":4485,"name":"tokenList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4266,"src":"4584:9:25","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":4487,"indexExpression":{"id":4486,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4453,"src":"4594:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4584:16:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":4488,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4473,"src":"4603:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4584:24:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4490,"nodeType":"ExpressionStatement","src":"4584:24:25"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4448,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4446,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4443,"src":"4270:1:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":4447,"name":"numIndexes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4415,"src":"4275:10:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4270:15:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4492,"initializationExpression":{"assignments":[4443],"declarations":[{"constant":false,"id":4443,"mutability":"mutable","name":"i","nodeType":"VariableDeclaration","scope":4492,"src":"4255:9:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4442,"name":"uint256","nodeType":"ElementaryTypeName","src":"4255:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4445,"initialValue":{"hexValue":"30","id":4444,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4267:1:25","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"4255:13:25"},"loopExpression":{"expression":{"id":4450,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"4287:3:25","subExpression":{"id":4449,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4443,"src":"4289:1:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4451,"nodeType":"ExpressionStatement","src":"4287:3:25"},"nodeType":"ForStatement","src":"4250:369:25"}]},"documentation":{"id":4385,"nodeType":"StructuredDocumentation","src":"2445:1227:25","text":" Sets the tokens of the ordered sale supply list.\n @dev Reverts if called by any other than the contract owner.\n @dev Reverts if called when the contract is not paused.\n @dev Reverts if the sale supply is empty.\n @dev Reverts if the lengths of `indexes` and `tokens` do not match.\n @dev Reverts if `indexes` is zero length.\n @dev Reverts if any of `indexes` are less than `tokenIndex`.\n @dev Reverts if any of `indexes` are out-of-bounds.\n @dev Reverts it `tokens` is zero length.\n @dev Reverts if any of `tokens` are zero.\n @dev Does not allow resizing of the sale supply, only the re-ordering or replacment of\n  existing tokens.\n @dev Because the elements of `indexes` and `tokens` are processed in sequence, duplicate\n  entries in either array are permitted, which allows for ordered operations to be performed\n  on the ordered sale supply list in the same transaction.\n @param indexes The list of indexes in the ordered sale supply list whose element values\n  will be set.\n @param tokens The new tokens to set in the ordered sale supply list at the corresponding\n  positions provided by `indexes`."},"functionSelector":"23f927c9","id":4494,"implemented":true,"kind":"function","modifiers":[],"name":"setSupply","nodeType":"FunctionDefinition","parameters":{"id":4392,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4388,"mutability":"mutable","name":"indexes","nodeType":"VariableDeclaration","scope":4494,"src":"3696:24:25","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4386,"name":"uint256","nodeType":"ElementaryTypeName","src":"3696:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4387,"nodeType":"ArrayTypeName","src":"3696:9:25","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":4391,"mutability":"mutable","name":"tokens","nodeType":"VariableDeclaration","scope":4494,"src":"3722:23:25","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4389,"name":"uint256","nodeType":"ElementaryTypeName","src":"3722:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4390,"nodeType":"ArrayTypeName","src":"3722:9:25","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"3695:51:25"},"returnParameters":{"id":4393,"nodeType":"ParameterList","parameters":[],"src":"3762:0:25"},"scope":4567,"src":"3677:948:25","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":4503,"nodeType":"Block","src":"4809:40:25","statements":[{"expression":{"expression":{"id":4500,"name":"tokenList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4266,"src":"4826:9:25","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":4501,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"4826:16:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":4499,"id":4502,"nodeType":"Return","src":"4819:23:25"}]},"documentation":{"id":4495,"nodeType":"StructuredDocumentation","src":"4631:109:25","text":" Retrieves the amount of total sale supply.\n @return The amount of total sale supply."},"functionSelector":"c4e41b22","id":4504,"implemented":true,"kind":"function","modifiers":[],"name":"getTotalSupply","nodeType":"FunctionDefinition","parameters":{"id":4496,"nodeType":"ParameterList","parameters":[],"src":"4768:2:25"},"returnParameters":{"id":4499,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4498,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4504,"src":"4800:7:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4497,"name":"uint256","nodeType":"ElementaryTypeName","src":"4800:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4799:9:25"},"scope":4567,"src":"4745:104:25","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[6605],"body":{"id":4565,"nodeType":"Block","src":"5602:414:25","statements":[{"expression":{"arguments":[{"id":4514,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4507,"src":"5628:8:25","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}],"expression":{"id":4511,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"5612:5:25","typeDescriptions":{"typeIdentifier":"t_super$_FixedOrderInventorySale_$4567","typeString":"contract super FixedOrderInventorySale"}},"id":4513,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"_delivery","nodeType":"MemberAccess","referencedDeclaration":6605,"src":"5612:15:25","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_PurchaseData_$5583_memory_ptr_$returns$__$","typeString":"function (struct PurchaseLifeCycles.PurchaseData memory)"}},"id":4515,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5612:25:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4516,"nodeType":"ExpressionStatement","src":"5612:25:25"},{"expression":{"id":4526,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":4517,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4507,"src":"5648:8:25","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":4519,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"deliveryData","nodeType":"MemberAccess","referencedDeclaration":5582,"src":"5648:21:25","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":4523,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4507,"src":"5686:8:25","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":4524,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"quantity","nodeType":"MemberAccess","referencedDeclaration":5569,"src":"5686:17:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4522,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"5672:13:25","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (bytes32[] memory)"},"typeName":{"baseType":{"id":4520,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5676:7:25","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":4521,"nodeType":"ArrayTypeName","src":"5676:9:25","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}}},"id":4525,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5672:32:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"src":"5648:56:25","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"id":4527,"nodeType":"ExpressionStatement","src":"5648:56:25"},{"assignments":[4529],"declarations":[{"constant":false,"id":4529,"mutability":"mutable","name":"tokenCount","nodeType":"VariableDeclaration","scope":4565,"src":"5715:18:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4528,"name":"uint256","nodeType":"ElementaryTypeName","src":"5715:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4531,"initialValue":{"hexValue":"30","id":4530,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5736:1:25","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"5715:22:25"},{"assignments":[4533],"declarations":[{"constant":false,"id":4533,"mutability":"mutable","name":"tokenIndex_","nodeType":"VariableDeclaration","scope":4565,"src":"5747:19:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4532,"name":"uint256","nodeType":"ElementaryTypeName","src":"5747:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4535,"initialValue":{"id":4534,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4263,"src":"5769:10:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5747:32:25"},{"body":{"id":4559,"nodeType":"Block","src":"5830:145:25","statements":[{"expression":{"id":4551,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":4540,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4507,"src":"5844:8:25","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":4543,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"deliveryData","nodeType":"MemberAccess","referencedDeclaration":5582,"src":"5844:21:25","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"id":4544,"indexExpression":{"id":4542,"name":"tokenCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4529,"src":"5866:10:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5844:33:25","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"id":4547,"name":"tokenList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4266,"src":"5888:9:25","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":4549,"indexExpression":{"id":4548,"name":"tokenIndex_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4533,"src":"5898:11:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5888:22:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4546,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5880:7:25","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":4545,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5880:7:25","typeDescriptions":{}}},"id":4550,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5880:31:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"5844:67:25","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":4552,"nodeType":"ExpressionStatement","src":"5844:67:25"},{"expression":{"id":4554,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"5925:12:25","subExpression":{"id":4553,"name":"tokenCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4529,"src":"5927:10:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4555,"nodeType":"ExpressionStatement","src":"5925:12:25"},{"expression":{"id":4557,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"5951:13:25","subExpression":{"id":4556,"name":"tokenIndex_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4533,"src":"5953:11:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4558,"nodeType":"ExpressionStatement","src":"5951:13:25"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4539,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4536,"name":"tokenCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4529,"src":"5797:10:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":4537,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4507,"src":"5811:8:25","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":4538,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"quantity","nodeType":"MemberAccess","referencedDeclaration":5569,"src":"5811:17:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5797:31:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4560,"nodeType":"WhileStatement","src":"5790:185:25"},{"expression":{"id":4563,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4561,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4263,"src":"5985:10:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":4562,"name":"tokenIndex_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4533,"src":"5998:11:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5985:24:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4564,"nodeType":"ExpressionStatement","src":"5985:24:25"}]},"documentation":{"id":4505,"nodeType":"StructuredDocumentation","src":"4855:667:25","text":" Lifecycle step which delivers the purchased SKUs to the recipient.\n @dev Responsibilities:\n  - Ensure the product is delivered to the recipient, if that is the contract's responsibility.\n  - Handle any internal logic related to the delivery, including the remaining supply update.\n  - Add any relevant extra data related to delivery in `purchase.deliveryData` and document how to interpret it.\n @dev Reverts if there is not enough available supply.\n @dev Updates `purchase.deliveryData` with the list of tokens allocated from `tokenList` for\n  this purchase.\n @param purchase The purchase conditions."},"id":4566,"implemented":true,"kind":"function","modifiers":[],"name":"_delivery","nodeType":"FunctionDefinition","overrides":{"id":4509,"nodeType":"OverrideSpecifier","overrides":[],"src":"5593:8:25"},"parameters":{"id":4508,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4507,"mutability":"mutable","name":"purchase","nodeType":"VariableDeclaration","scope":4566,"src":"5546:28:25","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"},"typeName":{"id":4506,"name":"PurchaseData","nodeType":"UserDefinedTypeName","referencedDeclaration":5583,"src":"5546:12:25","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_storage_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"}},"visibility":"internal"}],"src":"5545:30:25"},"returnParameters":{"id":4510,"nodeType":"ParameterList","parameters":[],"src":"5602:0:25"},"scope":4567,"src":"5527:489:25","stateMutability":"nonpayable","virtual":true,"visibility":"internal"}],"scope":4568,"src":"436:5582:25"}],"src":"33:5986:25"},"id":25},"contracts/sale/FixedPricesSale.sol":{"ast":{"absolutePath":"contracts/sale/FixedPricesSale.sol","exportedSymbols":{"ERC20Wrapper":[953],"EnumMap":[362],"EnumSet":[551],"FixedPricesSale":[4753],"IWrappedERC20":[983],"SafeMath":[1359],"Sale":[6694]},"id":4754,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":4569,"literals":["solidity",">=","0.7",".6","<","0.8",".0"],"nodeType":"PragmaDirective","src":"33:31:26"},{"absolutePath":"@animoca/ethereum-contracts-core-1.1.2/contracts/utils/ERC20Wrapper.sol","file":"@animoca/ethereum-contracts-core-1.1.2/contracts/utils/ERC20Wrapper.sol","id":4572,"nodeType":"ImportDirective","scope":4754,"sourceUnit":984,"src":"66:116:26","symbolAliases":[{"foreign":{"id":4570,"name":"ERC20Wrapper","nodeType":"Identifier","overloadedDeclarations":[],"src":"74:12:26","typeDescriptions":{}}},{"foreign":{"id":4571,"name":"IWrappedERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"88:13:26","typeDescriptions":{}}}],"unitAlias":""},{"absolutePath":"contracts/sale/abstract/Sale.sol","file":"./abstract/Sale.sol","id":4577,"nodeType":"ImportDirective","scope":4754,"sourceUnit":6695,"src":"183:69:26","symbolAliases":[{"foreign":{"id":4573,"name":"EnumMap","nodeType":"Identifier","overloadedDeclarations":[],"src":"191:7:26","typeDescriptions":{}}},{"foreign":{"id":4574,"name":"EnumSet","nodeType":"Identifier","overloadedDeclarations":[],"src":"200:7:26","typeDescriptions":{}}},{"foreign":{"id":4575,"name":"SafeMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"209:8:26","typeDescriptions":{}}},{"foreign":{"id":4576,"name":"Sale","nodeType":"Identifier","overloadedDeclarations":[],"src":"219:4:26","typeDescriptions":{}}}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":4579,"name":"Sale","nodeType":"UserDefinedTypeName","referencedDeclaration":6694,"src":"482:4:26","typeDescriptions":{"typeIdentifier":"t_contract$_Sale_$6694","typeString":"contract Sale"}},"id":4580,"nodeType":"InheritanceSpecifier","src":"482:4:26"}],"contractDependencies":[22,103,646,715,736,812,5671,6694,7346],"contractKind":"contract","documentation":{"id":4578,"nodeType":"StructuredDocumentation","src":"254:190:26","text":" @title FixedPricesSale\n An Sale which implements a fixed prices strategy.\n  The final implementer is responsible for implementing any additional pricing and/or delivery logic."},"fullyImplemented":true,"id":4753,"linearizedBaseContracts":[4753,6694,646,715,812,103,22,736,7346,5671],"name":"FixedPricesSale","nodeType":"ContractDefinition","nodes":[{"id":4583,"libraryName":{"id":4581,"name":"ERC20Wrapper","nodeType":"UserDefinedTypeName","referencedDeclaration":953,"src":"499:12:26","typeDescriptions":{"typeIdentifier":"t_contract$_ERC20Wrapper_$953","typeString":"library ERC20Wrapper"}},"nodeType":"UsingForDirective","src":"493:37:26","typeName":{"id":4582,"name":"IWrappedERC20","nodeType":"UserDefinedTypeName","referencedDeclaration":983,"src":"516:13:26","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedERC20_$983","typeString":"contract IWrappedERC20"}}},{"id":4586,"libraryName":{"id":4584,"name":"SafeMath","nodeType":"UserDefinedTypeName","referencedDeclaration":1359,"src":"541:8:26","typeDescriptions":{"typeIdentifier":"t_contract$_SafeMath_$1359","typeString":"library SafeMath"}},"nodeType":"UsingForDirective","src":"535:27:26","typeName":{"id":4585,"name":"uint256","nodeType":"ElementaryTypeName","src":"554:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":4589,"libraryName":{"id":4587,"name":"EnumMap","nodeType":"UserDefinedTypeName","referencedDeclaration":362,"src":"573:7:26","typeDescriptions":{"typeIdentifier":"t_contract$_EnumMap_$362","typeString":"library EnumMap"}},"nodeType":"UsingForDirective","src":"567:30:26","typeName":{"id":4588,"name":"EnumMap.Map","nodeType":"UserDefinedTypeName","referencedDeclaration":119,"src":"585:11:26","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map"}}},{"body":{"id":4604,"nodeType":"Block","src":"1100:2:26","statements":[]},"documentation":{"id":4590,"nodeType":"StructuredDocumentation","src":"603:311:26","text":" Constructor.\n @dev Emits the `MagicValues` event.\n @dev Emits the `Paused` event.\n @param payoutWallet_ the payout wallet.\n @param skusCapacity the cap for the number of managed SKUs.\n @param tokensPerSkuCapacity the cap for the number of tokens managed per SKU."},"id":4605,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":4599,"name":"payoutWallet_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4592,"src":"1049:13:26","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":4600,"name":"skusCapacity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4594,"src":"1064:12:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4601,"name":"tokensPerSkuCapacity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4596,"src":"1078:20:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":4602,"modifierName":{"id":4598,"name":"Sale","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6694,"src":"1044:4:26","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Sale_$6694_$","typeString":"type(contract Sale)"}},"nodeType":"ModifierInvocation","src":"1044:55:26"}],"name":"","nodeType":"FunctionDefinition","parameters":{"id":4597,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4592,"mutability":"mutable","name":"payoutWallet_","nodeType":"VariableDeclaration","scope":4605,"src":"940:29:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":4591,"name":"address","nodeType":"ElementaryTypeName","src":"940:15:26","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":4594,"mutability":"mutable","name":"skusCapacity","nodeType":"VariableDeclaration","scope":4605,"src":"979:20:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4593,"name":"uint256","nodeType":"ElementaryTypeName","src":"979:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4596,"mutability":"mutable","name":"tokensPerSkuCapacity","nodeType":"VariableDeclaration","scope":4605,"src":"1009:28:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4595,"name":"uint256","nodeType":"ElementaryTypeName","src":"1009:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"930:113:26"},"returnParameters":{"id":4603,"nodeType":"ParameterList","parameters":[],"src":"1100:0:26"},"scope":4753,"src":"919:183:26","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[5652],"body":{"id":4651,"nodeType":"Block","src":"1867:309:26","statements":[{"assignments":[4613],"declarations":[{"constant":false,"id":4613,"mutability":"mutable","name":"skuInfo","nodeType":"VariableDeclaration","scope":4651,"src":"1877:23:26","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage_ptr","typeString":"struct Sale.SkuInfo"},"typeName":{"id":4612,"name":"SkuInfo","nodeType":"UserDefinedTypeName","referencedDeclaration":5762,"src":"1877:7:26","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage_ptr","typeString":"struct Sale.SkuInfo"}},"visibility":"internal"}],"id":4618,"initialValue":{"baseExpression":{"id":4614,"name":"_skuInfos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5783,"src":"1903:9:26","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_SkuInfo_$5762_storage_$","typeString":"mapping(bytes32 => struct Sale.SkuInfo storage ref)"}},"id":4617,"indexExpression":{"expression":{"id":4615,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4608,"src":"1913:8:26","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":4616,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"sku","nodeType":"MemberAccess","referencedDeclaration":5567,"src":"1913:12:26","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1903:23:26","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage","typeString":"struct Sale.SkuInfo storage ref"}},"nodeType":"VariableDeclarationStatement","src":"1877:49:26"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4623,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":4620,"name":"skuInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4613,"src":"1944:7:26","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage_ptr","typeString":"struct Sale.SkuInfo storage pointer"}},"id":4621,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":5753,"src":"1944:19:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":4622,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1967:1:26","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1944:24:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616c653a20756e737570706f7274656420534b55","id":4624,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1970:23:26","typeDescriptions":{"typeIdentifier":"t_stringliteral_e88d6065eb42cb1871a2f862307a333045af738081e90fa9a2028ffbaf27f312","typeString":"literal_string \"Sale: unsupported SKU\""},"value":"Sale: unsupported SKU"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_e88d6065eb42cb1871a2f862307a333045af738081e90fa9a2028ffbaf27f312","typeString":"literal_string \"Sale: unsupported SKU\""}],"id":4619,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1936:7:26","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":4625,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1936:58:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4626,"nodeType":"ExpressionStatement","src":"1936:58:26"},{"assignments":[4630],"declarations":[{"constant":false,"id":4630,"mutability":"mutable","name":"prices","nodeType":"VariableDeclaration","scope":4651,"src":"2004:26:26","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map"},"typeName":{"id":4629,"name":"EnumMap.Map","nodeType":"UserDefinedTypeName","referencedDeclaration":119,"src":"2004:11:26","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map"}},"visibility":"internal"}],"id":4633,"initialValue":{"expression":{"id":4631,"name":"skuInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4613,"src":"2033:7:26","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage_ptr","typeString":"struct Sale.SkuInfo storage pointer"}},"id":4632,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"prices","nodeType":"MemberAccess","referencedDeclaration":5761,"src":"2033:14:26","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage","typeString":"struct EnumMap.Map storage ref"}},"nodeType":"VariableDeclarationStatement","src":"2004:43:26"},{"assignments":[4635],"declarations":[{"constant":false,"id":4635,"mutability":"mutable","name":"unitPrice","nodeType":"VariableDeclaration","scope":4651,"src":"2057:17:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4634,"name":"uint256","nodeType":"ElementaryTypeName","src":"2057:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4640,"initialValue":{"arguments":[{"id":4637,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4608,"src":"2088:8:26","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},{"id":4638,"name":"prices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4630,"src":"2098:6:26","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"},{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map storage pointer"}],"id":4636,"name":"_unitPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4752,"src":"2077:10:26","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_PurchaseData_$5583_memory_ptr_$_t_struct$_Map_$119_storage_ptr_$returns$_t_uint256_$","typeString":"function (struct PurchaseLifeCycles.PurchaseData memory,struct EnumMap.Map storage pointer) view returns (uint256)"}},"id":4639,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2077:28:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2057:48:26"},{"expression":{"id":4649,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":4641,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4608,"src":"2115:8:26","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":4643,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"totalPrice","nodeType":"MemberAccess","referencedDeclaration":5573,"src":"2115:19:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":4646,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4608,"src":"2151:8:26","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":4647,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"quantity","nodeType":"MemberAccess","referencedDeclaration":5569,"src":"2151:17:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":4644,"name":"unitPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4635,"src":"2137:9:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4645,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"mul","nodeType":"MemberAccess","referencedDeclaration":1242,"src":"2137:13:26","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":4648,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2137:32:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2115:54:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4650,"nodeType":"ExpressionStatement","src":"2115:54:26"}]},"documentation":{"id":4606,"nodeType":"StructuredDocumentation","src":"1209:574:26","text":" Lifecycle step which computes the purchase price.\n @dev Responsibilities:\n  - Computes the pricing formula, including any discount logic and price conversion;\n  - Set the value of `purchase.totalPrice`;\n  - Add any relevant extra data related to pricing in `purchase.pricingData` and document how to interpret it.\n @dev Reverts if `purchase.sku` does not exist.\n @dev Reverts if `purchase.token` is not supported by the SKU.\n @dev Reverts in case of price overflow.\n @param purchase The purchase conditions."},"id":4652,"implemented":true,"kind":"function","modifiers":[],"name":"_pricing","nodeType":"FunctionDefinition","overrides":{"id":4610,"nodeType":"OverrideSpecifier","overrides":[],"src":"1858:8:26"},"parameters":{"id":4609,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4608,"mutability":"mutable","name":"purchase","nodeType":"VariableDeclaration","scope":4652,"src":"1806:28:26","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"},"typeName":{"id":4607,"name":"PurchaseData","nodeType":"UserDefinedTypeName","referencedDeclaration":5583,"src":"1806:12:26","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_storage_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"}},"visibility":"internal"}],"src":"1805:30:26"},"returnParameters":{"id":4611,"nodeType":"ParameterList","parameters":[],"src":"1867:0:26"},"scope":4753,"src":"1788:388:26","stateMutability":"view","virtual":true,"visibility":"internal"},{"baseFunctions":[5658],"body":{"id":4716,"nodeType":"Block","src":"2711:492:26","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":4662,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":4659,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4655,"src":"2725:8:26","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":4660,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"token","nodeType":"MemberAccess","referencedDeclaration":5565,"src":"2725:14:26","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":4661,"name":"TOKEN_ETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5769,"src":"2743:9:26","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2725:27:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":4714,"nodeType":"Block","src":"3074:123:26","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":4707,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":726,"src":"3138:10:26","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":4708,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3138:12:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":4709,"name":"payoutWallet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":753,"src":"3152:12:26","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"expression":{"id":4710,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4655,"src":"3166:8:26","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":4711,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalPrice","nodeType":"MemberAccess","referencedDeclaration":5573,"src":"3166:19:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"id":4703,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4655,"src":"3102:8:26","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":4704,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"token","nodeType":"MemberAccess","referencedDeclaration":5565,"src":"3102:14:26","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":4702,"name":"IWrappedERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":983,"src":"3088:13:26","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IWrappedERC20_$983_$","typeString":"type(contract IWrappedERC20)"}},"id":4705,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3088:29:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedERC20_$983","typeString":"contract IWrappedERC20"}},"id":4706,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"wrappedTransferFrom","nodeType":"MemberAccess","referencedDeclaration":867,"src":"3088:49:26","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IWrappedERC20_$983_$_t_address_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IWrappedERC20_$983_$","typeString":"function (contract IWrappedERC20,address,address,uint256)"}},"id":4712,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3088:98:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4713,"nodeType":"ExpressionStatement","src":"3088:98:26"}]},"id":4715,"nodeType":"IfStatement","src":"2721:476:26","trueBody":{"id":4701,"nodeType":"Block","src":"2754:314:26","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4668,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":4664,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2776:3:26","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":4665,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"value","nodeType":"MemberAccess","src":"2776:9:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"expression":{"id":4666,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4655,"src":"2789:8:26","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":4667,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalPrice","nodeType":"MemberAccess","referencedDeclaration":5573,"src":"2789:19:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2776:32:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616c653a20696e73756666696369656e7420455448","id":4669,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2810:24:26","typeDescriptions":{"typeIdentifier":"t_stringliteral_823c671c6f4d7572b64cce702c735afff7fb25de3f40217295a3e7d9fdd1c612","typeString":"literal_string \"Sale: insufficient ETH\""},"value":"Sale: insufficient ETH"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_823c671c6f4d7572b64cce702c735afff7fb25de3f40217295a3e7d9fdd1c612","typeString":"literal_string \"Sale: insufficient ETH\""}],"id":4663,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2768:7:26","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":4670,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2768:67:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4671,"nodeType":"ExpressionStatement","src":"2768:67:26"},{"expression":{"arguments":[{"expression":{"id":4675,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4655,"src":"2872:8:26","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":4676,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalPrice","nodeType":"MemberAccess","referencedDeclaration":5573,"src":"2872:19:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":4672,"name":"payoutWallet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":753,"src":"2850:12:26","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":4674,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"transfer","nodeType":"MemberAccess","src":"2850:21:26","typeDescriptions":{"typeIdentifier":"t_function_transfer_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":4677,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2850:42:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4678,"nodeType":"ExpressionStatement","src":"2850:42:26"},{"assignments":[4680],"declarations":[{"constant":false,"id":4680,"mutability":"mutable","name":"change","nodeType":"VariableDeclaration","scope":4701,"src":"2907:14:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4679,"name":"uint256","nodeType":"ElementaryTypeName","src":"2907:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4687,"initialValue":{"arguments":[{"expression":{"id":4684,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4655,"src":"2938:8:26","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":4685,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalPrice","nodeType":"MemberAccess","referencedDeclaration":5573,"src":"2938:19:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":4681,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2924:3:26","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":4682,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"value","nodeType":"MemberAccess","src":"2924:9:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4683,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sub","nodeType":"MemberAccess","referencedDeclaration":1208,"src":"2924:13:26","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":4686,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2924:34:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2907:51:26"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4690,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4688,"name":"change","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4680,"src":"2977:6:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":4689,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2987:1:26","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2977:11:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4700,"nodeType":"IfStatement","src":"2973:85:26","trueBody":{"id":4699,"nodeType":"Block","src":"2990:68:26","statements":[{"expression":{"arguments":[{"id":4696,"name":"change","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4680,"src":"3036:6:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":4691,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4655,"src":"3008:8:26","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":4694,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"purchaser","nodeType":"MemberAccess","referencedDeclaration":5561,"src":"3008:18:26","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":4695,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"transfer","nodeType":"MemberAccess","src":"3008:27:26","typeDescriptions":{"typeIdentifier":"t_function_transfer_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":4697,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3008:35:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4698,"nodeType":"ExpressionStatement","src":"3008:35:26"}]}}]}}]},"documentation":{"id":4653,"nodeType":"StructuredDocumentation","src":"2182:450:26","text":" Lifecycle step which manages the transfer of funds from the purchaser.\n @dev Responsibilities:\n  - Ensure the payment reaches destination in the expected output token;\n  - Handle any token swap logic;\n  - Add any relevant extra data related to payment in `purchase.paymentData` and document how to interpret it.\n @dev Reverts in case of payment failure.\n @param purchase The purchase conditions."},"id":4717,"implemented":true,"kind":"function","modifiers":[],"name":"_payment","nodeType":"FunctionDefinition","overrides":{"id":4657,"nodeType":"OverrideSpecifier","overrides":[],"src":"2702:8:26"},"parameters":{"id":4656,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4655,"mutability":"mutable","name":"purchase","nodeType":"VariableDeclaration","scope":4717,"src":"2655:28:26","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"},"typeName":{"id":4654,"name":"PurchaseData","nodeType":"UserDefinedTypeName","referencedDeclaration":5583,"src":"2655:12:26","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_storage_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"}},"visibility":"internal"}],"src":"2654:30:26"},"returnParameters":{"id":4658,"nodeType":"ParameterList","parameters":[],"src":"2711:0:26"},"scope":4753,"src":"2637:566:26","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":4751,"nodeType":"Block","src":"3901:150:26","statements":[{"expression":{"id":4742,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4727,"name":"unitPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4725,"src":"3911:9:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"expression":{"id":4736,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4720,"src":"3958:8:26","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":4737,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"token","nodeType":"MemberAccess","referencedDeclaration":5565,"src":"3958:14:26","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":4735,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3950:7:26","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":4734,"name":"uint256","nodeType":"ElementaryTypeName","src":"3950:7:26","typeDescriptions":{}}},"id":4738,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3950:23:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4733,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3942:7:26","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":4732,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3942:7:26","typeDescriptions":{}}},"id":4739,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3942:32:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":4730,"name":"prices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4722,"src":"3931:6:26","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map storage pointer"}},"id":4731,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"get","nodeType":"MemberAccess","referencedDeclaration":361,"src":"3931:10:26","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Map_$119_storage_ptr_$_t_bytes32_$returns$_t_bytes32_$bound_to$_t_struct$_Map_$119_storage_ptr_$","typeString":"function (struct EnumMap.Map storage pointer,bytes32) view returns (bytes32)"}},"id":4740,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3931:44:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":4729,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3923:7:26","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":4728,"name":"uint256","nodeType":"ElementaryTypeName","src":"3923:7:26","typeDescriptions":{}}},"id":4741,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3923:53:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3911:65:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4743,"nodeType":"ExpressionStatement","src":"3911:65:26"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4747,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4745,"name":"unitPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4725,"src":"3994:9:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":4746,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4007:1:26","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3994:14:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616c653a20756e737570706f72746564207061796d656e7420746f6b656e","id":4748,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4010:33:26","typeDescriptions":{"typeIdentifier":"t_stringliteral_0d5f8a201b45d27f808f363cb1527931d15add1c8dc4bd4e18849ff0ee25b6c7","typeString":"literal_string \"Sale: unsupported payment token\""},"value":"Sale: unsupported payment token"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_0d5f8a201b45d27f808f363cb1527931d15add1c8dc4bd4e18849ff0ee25b6c7","typeString":"literal_string \"Sale: unsupported payment token\""}],"id":4744,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3986:7:26","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":4749,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3986:58:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4750,"nodeType":"ExpressionStatement","src":"3986:58:26"}]},"documentation":{"id":4718,"nodeType":"StructuredDocumentation","src":"3310:458:26","text":" Retrieves the unit price of a SKU for the specified payment token.\n @dev Reverts if the specified payment token is unsupported.\n @param purchase The purchase conditions specifying the payment token with which the unit price will be retrieved.\n @param prices Storage pointer to a mapping of SKU token prices to retrieve the unit price from.\n @return unitPrice The unit price of a SKU for the specified payment token."},"id":4752,"implemented":true,"kind":"function","modifiers":[],"name":"_unitPrice","nodeType":"FunctionDefinition","parameters":{"id":4723,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4720,"mutability":"mutable","name":"purchase","nodeType":"VariableDeclaration","scope":4752,"src":"3793:28:26","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"},"typeName":{"id":4719,"name":"PurchaseData","nodeType":"UserDefinedTypeName","referencedDeclaration":5583,"src":"3793:12:26","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_storage_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"}},"visibility":"internal"},{"constant":false,"id":4722,"mutability":"mutable","name":"prices","nodeType":"VariableDeclaration","scope":4752,"src":"3823:26:26","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map"},"typeName":{"id":4721,"name":"EnumMap.Map","nodeType":"UserDefinedTypeName","referencedDeclaration":119,"src":"3823:11:26","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map"}},"visibility":"internal"}],"src":"3792:58:26"},"returnParameters":{"id":4726,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4725,"mutability":"mutable","name":"unitPrice","nodeType":"VariableDeclaration","scope":4752,"src":"3882:17:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4724,"name":"uint256","nodeType":"ElementaryTypeName","src":"3882:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3881:19:26"},"scope":4753,"src":"3773:278:26","stateMutability":"view","virtual":true,"visibility":"internal"}],"scope":4754,"src":"445:3608:26"}],"src":"33:4021:26"},"id":26},"contracts/sale/UniswapOracleSale.sol":{"ast":{"absolutePath":"contracts/sale/UniswapOracleSale.sol","exportedSymbols":{"IUniswapV2Router":[4247],"OracleSale":[5556],"SafeMath":[1359],"UniswapOracleSale":[4852],"UniswapV2Adapter":[4153]},"id":4853,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":4755,"literals":["solidity",">=","0.7",".6","<","0.8",".0"],"nodeType":"PragmaDirective","src":"33:31:27"},{"absolutePath":"contracts/oracle/interfaces/IUniswapV2Router.sol","file":"../oracle/interfaces/IUniswapV2Router.sol","id":4757,"nodeType":"ImportDirective","scope":4853,"sourceUnit":4248,"src":"66:75:27","symbolAliases":[{"foreign":{"id":4756,"name":"IUniswapV2Router","nodeType":"Identifier","overloadedDeclarations":[],"src":"74:16:27","typeDescriptions":{}}}],"unitAlias":""},{"absolutePath":"contracts/oracle/UniswapV2Adapter.sol","file":"../oracle/UniswapV2Adapter.sol","id":4759,"nodeType":"ImportDirective","scope":4853,"sourceUnit":4154,"src":"142:64:27","symbolAliases":[{"foreign":{"id":4758,"name":"UniswapV2Adapter","nodeType":"Identifier","overloadedDeclarations":[],"src":"150:16:27","typeDescriptions":{}}}],"unitAlias":""},{"absolutePath":"contracts/sale/abstract/OracleSale.sol","file":"./abstract/OracleSale.sol","id":4762,"nodeType":"ImportDirective","scope":4853,"sourceUnit":5557,"src":"207:63:27","symbolAliases":[{"foreign":{"id":4760,"name":"SafeMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"215:8:27","typeDescriptions":{}}},{"foreign":{"id":4761,"name":"OracleSale","nodeType":"Identifier","overloadedDeclarations":[],"src":"225:10:27","typeDescriptions":{}}}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":4764,"name":"OracleSale","nodeType":"UserDefinedTypeName","referencedDeclaration":5556,"src":"734:10:27","typeDescriptions":{"typeIdentifier":"t_contract$_OracleSale_$5556","typeString":"contract OracleSale"}},"id":4765,"nodeType":"InheritanceSpecifier","src":"734:10:27"},{"baseName":{"id":4766,"name":"UniswapV2Adapter","nodeType":"UserDefinedTypeName","referencedDeclaration":4153,"src":"746:16:27","typeDescriptions":{"typeIdentifier":"t_contract$_UniswapV2Adapter_$4153","typeString":"contract UniswapV2Adapter"}},"id":4767,"nodeType":"InheritanceSpecifier","src":"746:16:27"}],"contractDependencies":[22,103,646,715,736,812,4153,4753,5556,5671,6694,7187,7346],"contractKind":"contract","documentation":{"id":4763,"nodeType":"StructuredDocumentation","src":"272:431:27","text":" @title UniswapOracleSale\n An OracleSale which implements a Uniswap-based token conversion pricing strategy. The final\n  implementer is responsible for implementing any additional pricing and/or delivery logic.\n PurchaseData.pricingData:\n  - a non-zero length array indicates Uniswap-based pricing, otherwise indicates fixed pricing.\n  - [0] uint256: the token conversion rate used for Uniswap-based pricing."},"fullyImplemented":true,"id":4852,"linearizedBaseContracts":[4852,4153,5556,4753,6694,646,715,812,103,22,736,7346,5671,7187],"name":"UniswapOracleSale","nodeType":"ContractDefinition","nodes":[{"id":4770,"libraryName":{"id":4768,"name":"SafeMath","nodeType":"UserDefinedTypeName","referencedDeclaration":1359,"src":"775:8:27","typeDescriptions":{"typeIdentifier":"t_contract$_SafeMath_$1359","typeString":"library SafeMath"}},"nodeType":"UsingForDirective","src":"769:27:27","typeName":{"id":4769,"name":"uint256","nodeType":"ElementaryTypeName","src":"788:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"body":{"id":4793,"nodeType":"Block","src":"1624:2:27","statements":[]},"documentation":{"id":4771,"nodeType":"StructuredDocumentation","src":"802:506:27","text":" Constructor.\n @dev Emits the `MagicValues` event.\n @dev Emits the `Paused` event.\n @param payoutWallet_ The payout wallet.\n @param skusCapacity The cap for the number of managed SKUs.\n @param tokensPerSkuCapacity The cap for the number of tokens managed per SKU.\n @param referenceToken The token to use for oracle-based conversions.\n @param uniswapV2Router The UniswapV2 router contract used to facilitate operations against the Uniswap network."},"id":4794,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":4784,"name":"payoutWallet_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4773,"src":"1523:13:27","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":4785,"name":"skusCapacity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4775,"src":"1538:12:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4786,"name":"tokensPerSkuCapacity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4777,"src":"1552:20:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4787,"name":"referenceToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4779,"src":"1574:14:27","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":4788,"modifierName":{"id":4783,"name":"OracleSale","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5556,"src":"1512:10:27","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_OracleSale_$5556_$","typeString":"type(contract OracleSale)"}},"nodeType":"ModifierInvocation","src":"1512:77:27"},{"arguments":[{"id":4790,"name":"uniswapV2Router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4781,"src":"1607:15:27","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapV2Router_$4247","typeString":"contract IUniswapV2Router"}}],"id":4791,"modifierName":{"id":4789,"name":"UniswapV2Adapter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4153,"src":"1590:16:27","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_UniswapV2Adapter_$4153_$","typeString":"type(contract UniswapV2Adapter)"}},"nodeType":"ModifierInvocation","src":"1590:33:27"}],"name":"","nodeType":"FunctionDefinition","parameters":{"id":4782,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4773,"mutability":"mutable","name":"payoutWallet_","nodeType":"VariableDeclaration","scope":4794,"src":"1334:29:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":4772,"name":"address","nodeType":"ElementaryTypeName","src":"1334:15:27","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":4775,"mutability":"mutable","name":"skusCapacity","nodeType":"VariableDeclaration","scope":4794,"src":"1373:20:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4774,"name":"uint256","nodeType":"ElementaryTypeName","src":"1373:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4777,"mutability":"mutable","name":"tokensPerSkuCapacity","nodeType":"VariableDeclaration","scope":4794,"src":"1403:28:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4776,"name":"uint256","nodeType":"ElementaryTypeName","src":"1403:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4779,"mutability":"mutable","name":"referenceToken","nodeType":"VariableDeclaration","scope":4794,"src":"1441:22:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4778,"name":"address","nodeType":"ElementaryTypeName","src":"1441:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4781,"mutability":"mutable","name":"uniswapV2Router","nodeType":"VariableDeclaration","scope":4794,"src":"1473:32:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapV2Router_$4247","typeString":"contract IUniswapV2Router"},"typeName":{"id":4780,"name":"IUniswapV2Router","nodeType":"UserDefinedTypeName","referencedDeclaration":4247,"src":"1473:16:27","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapV2Router_$4247","typeString":"contract IUniswapV2Router"}},"visibility":"internal"}],"src":"1324:187:27"},"returnParameters":{"id":4792,"nodeType":"ParameterList","parameters":[],"src":"1624:0:27"},"scope":4852,"src":"1313:313:27","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[5555],"body":{"id":4850,"nodeType":"Block","src":"2467:337:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":4809,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4807,"name":"fromToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4797,"src":"2481:9:27","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":4808,"name":"TOKEN_ETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5769,"src":"2494:9:27","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2481:22:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4817,"nodeType":"IfStatement","src":"2477:87:27","trueBody":{"id":4816,"nodeType":"Block","src":"2505:59:27","statements":[{"expression":{"id":4814,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4810,"name":"fromToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4797,"src":"2519:9:27","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":4811,"name":"uniswapV2Router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3822,"src":"2531:15:27","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapV2Router_$4247","typeString":"contract IUniswapV2Router"}},"id":4812,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"WETH","nodeType":"MemberAccess","referencedDeclaration":4182,"src":"2531:20:27","typeDescriptions":{"typeIdentifier":"t_function_external_pure$__$returns$_t_address_$","typeString":"function () pure external returns (address)"}},"id":4813,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2531:22:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2519:34:27","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":4815,"nodeType":"ExpressionStatement","src":"2519:34:27"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":4820,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4818,"name":"toToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4799,"src":"2578:7:27","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":4819,"name":"TOKEN_ETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5769,"src":"2589:9:27","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2578:20:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4828,"nodeType":"IfStatement","src":"2574:83:27","trueBody":{"id":4827,"nodeType":"Block","src":"2600:57:27","statements":[{"expression":{"id":4825,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4821,"name":"toToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4799,"src":"2614:7:27","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":4822,"name":"uniswapV2Router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3822,"src":"2624:15:27","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapV2Router_$4247","typeString":"contract IUniswapV2Router"}},"id":4823,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"WETH","nodeType":"MemberAccess","referencedDeclaration":4182,"src":"2624:20:27","typeDescriptions":{"typeIdentifier":"t_function_external_pure$__$returns$_t_address_$","typeString":"function () pure external returns (address)"}},"id":4824,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2624:22:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2614:32:27","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":4826,"nodeType":"ExpressionStatement","src":"2614:32:27"}]}},{"assignments":[4830,4832],"declarations":[{"constant":false,"id":4830,"mutability":"mutable","name":"fromReserve","nodeType":"VariableDeclaration","scope":4850,"src":"2668:19:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4829,"name":"uint256","nodeType":"ElementaryTypeName","src":"2668:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4832,"mutability":"mutable","name":"toReserve","nodeType":"VariableDeclaration","scope":4850,"src":"2689:17:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4831,"name":"uint256","nodeType":"ElementaryTypeName","src":"2689:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4837,"initialValue":{"arguments":[{"id":4834,"name":"fromToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4797,"src":"2723:9:27","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4835,"name":"toToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4799,"src":"2734:7:27","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":4833,"name":"_getReserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3968,"src":"2710:12:27","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$returns$_t_uint256_$_t_uint256_$","typeString":"function (address,address) view returns (uint256,uint256)"}},"id":4836,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2710:32:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"2667:75:27"},{"expression":{"id":4848,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4838,"name":"rate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4805,"src":"2752:4:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":4846,"name":"fromReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4830,"src":"2785:11:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"},"id":4843,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":4841,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2773:2:27","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3138","id":4842,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2777:2:27","typeDescriptions":{"typeIdentifier":"t_rational_18_by_1","typeString":"int_const 18"},"value":"18"},"src":"2773:6:27","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"}],"expression":{"id":4839,"name":"toReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4832,"src":"2759:9:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4840,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"mul","nodeType":"MemberAccess","referencedDeclaration":1242,"src":"2759:13:27","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":4844,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2759:21:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4845,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"div","nodeType":"MemberAccess","referencedDeclaration":1264,"src":"2759:25:27","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":4847,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2759:38:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2752:45:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4849,"nodeType":"ExpressionStatement","src":"2752:45:27"}]},"documentation":{"id":4795,"nodeType":"StructuredDocumentation","src":"1733:561:27","text":" Retrieves the conversion rate for the `fromToken`/`toToken` pair via the oracle.\n @dev Reverts if the oracle does not provide a conversion rate for the pair.\n @param fromToken The source token from which the conversion rate is derived from.\n @param toToken the destination token from which the conversion rate is derived from.\n @param *data* Additional data with no specified format for deriving the conversion rate.\n @return rate The conversion rate for the `fromToken`/`toToken` pair, retrieved via the oracle."},"id":4851,"implemented":true,"kind":"function","modifiers":[],"name":"_conversionRate","nodeType":"FunctionDefinition","overrides":{"id":4803,"nodeType":"OverrideSpecifier","overrides":[],"src":"2435:8:27"},"parameters":{"id":4802,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4797,"mutability":"mutable","name":"fromToken","nodeType":"VariableDeclaration","scope":4851,"src":"2333:17:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4796,"name":"address","nodeType":"ElementaryTypeName","src":"2333:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4799,"mutability":"mutable","name":"toToken","nodeType":"VariableDeclaration","scope":4851,"src":"2360:15:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4798,"name":"address","nodeType":"ElementaryTypeName","src":"2360:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4801,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":4851,"src":"2385:12:27","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4800,"name":"bytes","nodeType":"ElementaryTypeName","src":"2385:5:27","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2323:89:27"},"returnParameters":{"id":4806,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4805,"mutability":"mutable","name":"rate","nodeType":"VariableDeclaration","scope":4851,"src":"2453:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4804,"name":"uint256","nodeType":"ElementaryTypeName","src":"2453:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2452:14:27"},"scope":4852,"src":"2299:505:27","stateMutability":"view","virtual":true,"visibility":"internal"}],"scope":4853,"src":"704:2102:27"}],"src":"33:2774:27"},"id":27},"contracts/sale/UniswapSwapSale.sol":{"ast":{"absolutePath":"contracts/sale/UniswapSwapSale.sol","exportedSymbols":{"ERC20Wrapper":[953],"IUniswapV2Router":[4247],"IWrappedERC20":[983],"SafeMath":[1359],"SwapSale":[7165],"UniswapSwapSale":[5200],"UniswapV2Adapter":[4153]},"id":5201,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":4854,"literals":["solidity",">=","0.7",".6","<","0.8",".0"],"nodeType":"PragmaDirective","src":"33:31:28"},{"absolutePath":"contracts/oracle/interfaces/IUniswapV2Router.sol","file":"../oracle/interfaces/IUniswapV2Router.sol","id":4856,"nodeType":"ImportDirective","scope":5201,"sourceUnit":4248,"src":"66:75:28","symbolAliases":[{"foreign":{"id":4855,"name":"IUniswapV2Router","nodeType":"Identifier","overloadedDeclarations":[],"src":"74:16:28","typeDescriptions":{}}}],"unitAlias":""},{"absolutePath":"contracts/oracle/UniswapV2Adapter.sol","file":"../oracle/UniswapV2Adapter.sol","id":4858,"nodeType":"ImportDirective","scope":5201,"sourceUnit":4154,"src":"142:64:28","symbolAliases":[{"foreign":{"id":4857,"name":"UniswapV2Adapter","nodeType":"Identifier","overloadedDeclarations":[],"src":"150:16:28","typeDescriptions":{}}}],"unitAlias":""},{"absolutePath":"contracts/sale/FixedPricesSale.sol","file":"./FixedPricesSale.sol","id":4861,"nodeType":"ImportDirective","scope":5201,"sourceUnit":4754,"src":"207:66:28","symbolAliases":[{"foreign":{"id":4859,"name":"ERC20Wrapper","nodeType":"Identifier","overloadedDeclarations":[],"src":"215:12:28","typeDescriptions":{}}},{"foreign":{"id":4860,"name":"IWrappedERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"229:13:28","typeDescriptions":{}}}],"unitAlias":""},{"absolutePath":"contracts/sale/abstract/SwapSale.sol","file":"./abstract/SwapSale.sol","id":4864,"nodeType":"ImportDirective","scope":5201,"sourceUnit":7166,"src":"274:59:28","symbolAliases":[{"foreign":{"id":4862,"name":"SafeMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"282:8:28","typeDescriptions":{}}},{"foreign":{"id":4863,"name":"SwapSale","nodeType":"Identifier","overloadedDeclarations":[],"src":"292:8:28","typeDescriptions":{}}}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":4866,"name":"SwapSale","nodeType":"UserDefinedTypeName","referencedDeclaration":7165,"src":"1288:8:28","typeDescriptions":{"typeIdentifier":"t_contract$_SwapSale_$7165","typeString":"contract SwapSale"}},"id":4867,"nodeType":"InheritanceSpecifier","src":"1288:8:28"},{"baseName":{"id":4868,"name":"UniswapV2Adapter","nodeType":"UserDefinedTypeName","referencedDeclaration":4153,"src":"1298:16:28","typeDescriptions":{"typeIdentifier":"t_contract$_UniswapV2Adapter_$4153","typeString":"contract UniswapV2Adapter"}},"id":4869,"nodeType":"InheritanceSpecifier","src":"1298:16:28"}],"contractDependencies":[22,103,646,715,736,812,4153,4753,5556,5671,6694,7165,7187,7346,7370],"contractKind":"contract","documentation":{"id":4865,"nodeType":"StructuredDocumentation","src":"335:924:28","text":" @title UniswapSwapSale\n An SwapSale which implements a UniswapV2-based token conversion pricing strategy. The final\n  implementer is responsible for implementing any additional pricing and/or delivery logic.\n PurchaseData.pricingData:\n  - a non-zero length array indicates Uniswap-based pricing, otherwise indicates fixed pricing.\n  - [0] uint256: the token conversion rate used for Uniswap-based pricing.\n PurchaseData.userData MUST be encoded in-place as follows:\n  - uint256: the maximum amount of purchase tokens to swap for reference tokens, in payment for\n    a purchase. A value of 0 will use the maximum supported amount (default: type(uint256).max).\n  - uint256: the token swap deadline as a UNIX timestamp. A value of 0 will not apply any\n    deadline.\n  - any additional fields may be defined in-place by deriving contracts (to be documented by the\n    deriving contract)."},"fullyImplemented":true,"id":5200,"linearizedBaseContracts":[5200,4153,7165,7370,5556,4753,6694,646,715,812,103,22,736,7346,5671,7187],"name":"UniswapSwapSale","nodeType":"ContractDefinition","nodes":[{"id":4872,"libraryName":{"id":4870,"name":"ERC20Wrapper","nodeType":"UserDefinedTypeName","referencedDeclaration":953,"src":"1327:12:28","typeDescriptions":{"typeIdentifier":"t_contract$_ERC20Wrapper_$953","typeString":"library ERC20Wrapper"}},"nodeType":"UsingForDirective","src":"1321:37:28","typeName":{"id":4871,"name":"IWrappedERC20","nodeType":"UserDefinedTypeName","referencedDeclaration":983,"src":"1344:13:28","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedERC20_$983","typeString":"contract IWrappedERC20"}}},{"id":4875,"libraryName":{"id":4873,"name":"SafeMath","nodeType":"UserDefinedTypeName","referencedDeclaration":1359,"src":"1369:8:28","typeDescriptions":{"typeIdentifier":"t_contract$_SafeMath_$1359","typeString":"library SafeMath"}},"nodeType":"UsingForDirective","src":"1363:27:28","typeName":{"id":4874,"name":"uint256","nodeType":"ElementaryTypeName","src":"1382:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"body":{"id":4898,"nodeType":"Block","src":"2216:2:28","statements":[]},"documentation":{"id":4876,"nodeType":"StructuredDocumentation","src":"1396:506:28","text":" Constructor.\n @dev Emits the `MagicValues` event.\n @dev Emits the `Paused` event.\n @param payoutWallet_ The payout wallet.\n @param skusCapacity The cap for the number of managed SKUs.\n @param tokensPerSkuCapacity The cap for the number of tokens managed per SKU.\n @param referenceToken The token to use for oracle-based conversions.\n @param uniswapV2Router The UniswapV2 router contract used to facilitate operations against the Uniswap network."},"id":4899,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":4889,"name":"payoutWallet_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4878,"src":"2115:13:28","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":4890,"name":"skusCapacity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4880,"src":"2130:12:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4891,"name":"tokensPerSkuCapacity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4882,"src":"2144:20:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4892,"name":"referenceToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4884,"src":"2166:14:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":4893,"modifierName":{"id":4888,"name":"SwapSale","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7165,"src":"2106:8:28","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SwapSale_$7165_$","typeString":"type(contract SwapSale)"}},"nodeType":"ModifierInvocation","src":"2106:75:28"},{"arguments":[{"id":4895,"name":"uniswapV2Router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4886,"src":"2199:15:28","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapV2Router_$4247","typeString":"contract IUniswapV2Router"}}],"id":4896,"modifierName":{"id":4894,"name":"UniswapV2Adapter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4153,"src":"2182:16:28","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_UniswapV2Adapter_$4153_$","typeString":"type(contract UniswapV2Adapter)"}},"nodeType":"ModifierInvocation","src":"2182:33:28"}],"name":"","nodeType":"FunctionDefinition","parameters":{"id":4887,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4878,"mutability":"mutable","name":"payoutWallet_","nodeType":"VariableDeclaration","scope":4899,"src":"1928:29:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":4877,"name":"address","nodeType":"ElementaryTypeName","src":"1928:15:28","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":4880,"mutability":"mutable","name":"skusCapacity","nodeType":"VariableDeclaration","scope":4899,"src":"1967:20:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4879,"name":"uint256","nodeType":"ElementaryTypeName","src":"1967:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4882,"mutability":"mutable","name":"tokensPerSkuCapacity","nodeType":"VariableDeclaration","scope":4899,"src":"1997:28:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4881,"name":"uint256","nodeType":"ElementaryTypeName","src":"1997:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4884,"mutability":"mutable","name":"referenceToken","nodeType":"VariableDeclaration","scope":4899,"src":"2035:22:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4883,"name":"address","nodeType":"ElementaryTypeName","src":"2035:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4886,"mutability":"mutable","name":"uniswapV2Router","nodeType":"VariableDeclaration","scope":4899,"src":"2067:32:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapV2Router_$4247","typeString":"contract IUniswapV2Router"},"typeName":{"id":4885,"name":"IUniswapV2Router","nodeType":"UserDefinedTypeName","referencedDeclaration":4247,"src":"2067:16:28","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapV2Router_$4247","typeString":"contract IUniswapV2Router"}},"visibility":"internal"}],"src":"1918:187:28"},"returnParameters":{"id":4897,"nodeType":"ParameterList","parameters":[],"src":"2216:0:28"},"scope":5200,"src":"1907:311:28","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":4914,"nodeType":"Block","src":"2409:94:28","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":4910,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":4904,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":726,"src":"2427:10:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":4905,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2427:12:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":4908,"name":"uniswapV2Router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3822,"src":"2451:15:28","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapV2Router_$4247","typeString":"contract IUniswapV2Router"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IUniswapV2Router_$4247","typeString":"contract IUniswapV2Router"}],"id":4907,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2443:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":4906,"name":"address","nodeType":"ElementaryTypeName","src":"2443:7:28","typeDescriptions":{}}},"id":4909,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2443:24:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2427:40:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616c653a20496e76616c6964204554482073656e646572","id":4911,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2469:26:28","typeDescriptions":{"typeIdentifier":"t_stringliteral_8c45f4072b084e2c105a835ab3d67cd9af75bc48930029895f017847a9a78f36","typeString":"literal_string \"Sale: Invalid ETH sender\""},"value":"Sale: Invalid ETH sender"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_8c45f4072b084e2c105a835ab3d67cd9af75bc48930029895f017847a9a78f36","typeString":"literal_string \"Sale: Invalid ETH sender\""}],"id":4903,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2419:7:28","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":4912,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2419:77:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4913,"nodeType":"ExpressionStatement","src":"2419:77:28"}]},"documentation":{"id":4900,"nodeType":"StructuredDocumentation","src":"2224:153:28","text":" Receives refunded ETH from the Uniswap token swapping operation.\n @dev Reverts if the sender of ETH isn't the Uniswap V2 router."},"id":4915,"implemented":true,"kind":"receive","modifiers":[],"name":"","nodeType":"FunctionDefinition","parameters":{"id":4901,"nodeType":"ParameterList","parameters":[],"src":"2389:2:28"},"returnParameters":{"id":4902,"nodeType":"ParameterList","parameters":[],"src":"2409:0:28"},"scope":5200,"src":"2382:121:28","stateMutability":"payable","virtual":false,"visibility":"external"},{"baseFunctions":[6571],"body":{"id":4937,"nodeType":"Block","src":"2930:120:28","statements":[{"expression":{"arguments":[{"id":4925,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4918,"src":"2958:8:28","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}],"expression":{"id":4922,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"2940:5:28","typeDescriptions":{"typeIdentifier":"t_super$_UniswapSwapSale_$5200","typeString":"contract super UniswapSwapSale"}},"id":4924,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"_validation","nodeType":"MemberAccess","referencedDeclaration":6571,"src":"2940:17:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_PurchaseData_$5583_memory_ptr_$returns$__$","typeString":"function (struct PurchaseLifeCycles.PurchaseData memory) view"}},"id":4926,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2940:27:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4927,"nodeType":"ExpressionStatement","src":"2940:27:28"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4933,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":4929,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4918,"src":"2985:8:28","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":4930,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userData","nodeType":"MemberAccess","referencedDeclaration":5571,"src":"2985:17:28","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":4931,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"2985:24:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"hexValue":"3634","id":4932,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3013:2:28","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"2985:30:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616c653a206d697373696e6720757365722064617461","id":4934,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3017:25:28","typeDescriptions":{"typeIdentifier":"t_stringliteral_fb008efa46dc34ee3e2cd348b08a871eec75587b4adbef4b3f36ffd00df0b463","typeString":"literal_string \"Sale: missing user data\""},"value":"Sale: missing user data"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_fb008efa46dc34ee3e2cd348b08a871eec75587b4adbef4b3f36ffd00df0b463","typeString":"literal_string \"Sale: missing user data\""}],"id":4928,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2977:7:28","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":4935,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2977:66:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4936,"nodeType":"ExpressionStatement","src":"2977:66:28"}]},"documentation":{"id":4916,"nodeType":"StructuredDocumentation","src":"2610:233:28","text":" Lifecycle step which validates the purchase pre-conditions.\n @dev Responsibilities:\n  - Ensure that the purchase pre-conditions are met and revert if not.\n @param purchase The purchase conditions."},"id":4938,"implemented":true,"kind":"function","modifiers":[],"name":"_validation","nodeType":"FunctionDefinition","overrides":{"id":4920,"nodeType":"OverrideSpecifier","overrides":[],"src":"2921:8:28"},"parameters":{"id":4919,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4918,"mutability":"mutable","name":"purchase","nodeType":"VariableDeclaration","scope":4938,"src":"2869:28:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"},"typeName":{"id":4917,"name":"PurchaseData","nodeType":"UserDefinedTypeName","referencedDeclaration":5583,"src":"2869:12:28","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_storage_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"}},"visibility":"internal"}],"src":"2868:30:28"},"returnParameters":{"id":4921,"nodeType":"ParameterList","parameters":[],"src":"2930:0:28"},"scope":5200,"src":"2848:202:28","stateMutability":"view","virtual":true,"visibility":"internal"},{"baseFunctions":[7023],"body":{"id":4999,"nodeType":"Block","src":"3585:516:28","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":4956,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4949,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":4945,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4941,"src":"3600:8:28","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":4946,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"pricingData","nodeType":"MemberAccess","referencedDeclaration":5576,"src":"3600:20:28","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"id":4947,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"3600:27:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":4948,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3631:1:28","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3600:32:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":4950,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3599:34:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":4954,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":4951,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4941,"src":"3638:8:28","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":4952,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"token","nodeType":"MemberAccess","referencedDeclaration":5565,"src":"3638:14:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":4953,"name":"TOKEN_ETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5769,"src":"3656:9:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3638:27:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":4955,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3637:29:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"3599:67:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4992,"nodeType":"IfStatement","src":"3595:466:28","trueBody":{"id":4991,"nodeType":"Block","src":"3668:393:28","statements":[{"assignments":[4958],"declarations":[{"constant":false,"id":4958,"mutability":"mutable","name":"data","nodeType":"VariableDeclaration","scope":4991,"src":"3682:17:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4957,"name":"bytes","nodeType":"ElementaryTypeName","src":"3682:5:28","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":4961,"initialValue":{"expression":{"id":4959,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4941,"src":"3702:8:28","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":4960,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userData","nodeType":"MemberAccess","referencedDeclaration":5571,"src":"3702:17:28","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"3682:37:28"},{"assignments":[4963],"declarations":[{"constant":false,"id":4963,"mutability":"mutable","name":"maxFromAmount","nodeType":"VariableDeclaration","scope":4991,"src":"3733:21:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4962,"name":"uint256","nodeType":"ElementaryTypeName","src":"3733:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4964,"nodeType":"VariableDeclarationStatement","src":"3733:21:28"},{"AST":{"nodeType":"YulBlock","src":"3778:69:28","statements":[{"nodeType":"YulAssignment","src":"3796:37:28","value":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"3823:4:28"},{"kind":"number","nodeType":"YulLiteral","src":"3829:2:28","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3819:3:28"},"nodeType":"YulFunctionCall","src":"3819:13:28"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3813:5:28"},"nodeType":"YulFunctionCall","src":"3813:20:28"},"variableNames":[{"name":"maxFromAmount","nodeType":"YulIdentifier","src":"3796:13:28"}]}]},"evmVersion":"istanbul","externalReferences":[{"declaration":4958,"isOffset":false,"isSlot":false,"src":"3823:4:28","valueSize":1},{"declaration":4963,"isOffset":false,"isSlot":false,"src":"3796:13:28","valueSize":1}],"id":4965,"nodeType":"InlineAssembly","src":"3769:78:28"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4968,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4966,"name":"maxFromAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4963,"src":"3865:13:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":4967,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3882:1:28","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3865:18:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4978,"nodeType":"IfStatement","src":"3861:90:28","trueBody":{"id":4977,"nodeType":"Block","src":"3885:66:28","statements":[{"expression":{"id":4975,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4969,"name":"maxFromAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4963,"src":"3903:13:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"arguments":[{"id":4972,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3924:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":4971,"name":"uint256","nodeType":"ElementaryTypeName","src":"3924:7:28","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":4970,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"3919:4:28","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":4973,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3919:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":4974,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"3919:17:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3903:33:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4976,"nodeType":"ExpressionStatement","src":"3903:33:28"}]}},{"expression":{"arguments":[{"arguments":[{"id":4986,"name":"uniswapV2Router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3822,"src":"4018:15:28","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapV2Router_$4247","typeString":"contract IUniswapV2Router"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IUniswapV2Router_$4247","typeString":"contract IUniswapV2Router"}],"id":4985,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4010:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":4984,"name":"address","nodeType":"ElementaryTypeName","src":"4010:7:28","typeDescriptions":{}}},"id":4987,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4010:24:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4988,"name":"maxFromAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4963,"src":"4036:13:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"id":4980,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4941,"src":"3979:8:28","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":4981,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"token","nodeType":"MemberAccess","referencedDeclaration":5565,"src":"3979:14:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":4979,"name":"IWrappedERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":983,"src":"3965:13:28","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IWrappedERC20_$983_$","typeString":"type(contract IWrappedERC20)"}},"id":4982,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3965:29:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedERC20_$983","typeString":"contract IWrappedERC20"}},"id":4983,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"wrappedApprove","nodeType":"MemberAccess","referencedDeclaration":889,"src":"3965:44:28","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IWrappedERC20_$983_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IWrappedERC20_$983_$","typeString":"function (contract IWrappedERC20,address,uint256)"}},"id":4989,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3965:85:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4990,"nodeType":"ExpressionStatement","src":"3965:85:28"}]}},{"expression":{"arguments":[{"id":4996,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4941,"src":"4085:8:28","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}],"expression":{"id":4993,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"4070:5:28","typeDescriptions":{"typeIdentifier":"t_super$_UniswapSwapSale_$5200","typeString":"contract super UniswapSwapSale"}},"id":4995,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"_payment","nodeType":"MemberAccess","referencedDeclaration":7023,"src":"4070:14:28","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_PurchaseData_$5583_memory_ptr_$returns$__$","typeString":"function (struct PurchaseLifeCycles.PurchaseData memory)"}},"id":4997,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4070:24:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4998,"nodeType":"ExpressionStatement","src":"4070:24:28"}]},"documentation":{"id":4939,"nodeType":"StructuredDocumentation","src":"3056:450:28","text":" Lifecycle step which manages the transfer of funds from the purchaser.\n @dev Responsibilities:\n  - Ensure the payment reaches destination in the expected output token;\n  - Handle any token swap logic;\n  - Add any relevant extra data related to payment in `purchase.paymentData` and document how to interpret it.\n @dev Reverts in case of payment failure.\n @param purchase The purchase conditions."},"id":5000,"implemented":true,"kind":"function","modifiers":[],"name":"_payment","nodeType":"FunctionDefinition","overrides":{"id":4943,"nodeType":"OverrideSpecifier","overrides":[],"src":"3576:8:28"},"parameters":{"id":4942,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4941,"mutability":"mutable","name":"purchase","nodeType":"VariableDeclaration","scope":5000,"src":"3529:28:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"},"typeName":{"id":4940,"name":"PurchaseData","nodeType":"UserDefinedTypeName","referencedDeclaration":5583,"src":"3529:12:28","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_storage_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"}},"visibility":"internal"}],"src":"3528:30:28"},"returnParameters":{"id":4944,"nodeType":"ParameterList","parameters":[],"src":"3585:0:28"},"scope":5200,"src":"3511:590:28","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"baseFunctions":[5555],"body":{"id":5056,"nodeType":"Block","src":"4942:337:28","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":5015,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5013,"name":"fromToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5003,"src":"4956:9:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":5014,"name":"TOKEN_ETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5769,"src":"4969:9:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4956:22:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5023,"nodeType":"IfStatement","src":"4952:87:28","trueBody":{"id":5022,"nodeType":"Block","src":"4980:59:28","statements":[{"expression":{"id":5020,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5016,"name":"fromToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5003,"src":"4994:9:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":5017,"name":"uniswapV2Router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3822,"src":"5006:15:28","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapV2Router_$4247","typeString":"contract IUniswapV2Router"}},"id":5018,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"WETH","nodeType":"MemberAccess","referencedDeclaration":4182,"src":"5006:20:28","typeDescriptions":{"typeIdentifier":"t_function_external_pure$__$returns$_t_address_$","typeString":"function () pure external returns (address)"}},"id":5019,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5006:22:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4994:34:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":5021,"nodeType":"ExpressionStatement","src":"4994:34:28"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":5026,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5024,"name":"toToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5005,"src":"5053:7:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":5025,"name":"TOKEN_ETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5769,"src":"5064:9:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5053:20:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5034,"nodeType":"IfStatement","src":"5049:83:28","trueBody":{"id":5033,"nodeType":"Block","src":"5075:57:28","statements":[{"expression":{"id":5031,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5027,"name":"toToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5005,"src":"5089:7:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":5028,"name":"uniswapV2Router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3822,"src":"5099:15:28","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapV2Router_$4247","typeString":"contract IUniswapV2Router"}},"id":5029,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"WETH","nodeType":"MemberAccess","referencedDeclaration":4182,"src":"5099:20:28","typeDescriptions":{"typeIdentifier":"t_function_external_pure$__$returns$_t_address_$","typeString":"function () pure external returns (address)"}},"id":5030,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5099:22:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5089:32:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":5032,"nodeType":"ExpressionStatement","src":"5089:32:28"}]}},{"assignments":[5036,5038],"declarations":[{"constant":false,"id":5036,"mutability":"mutable","name":"fromReserve","nodeType":"VariableDeclaration","scope":5056,"src":"5143:19:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5035,"name":"uint256","nodeType":"ElementaryTypeName","src":"5143:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5038,"mutability":"mutable","name":"toReserve","nodeType":"VariableDeclaration","scope":5056,"src":"5164:17:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5037,"name":"uint256","nodeType":"ElementaryTypeName","src":"5164:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5043,"initialValue":{"arguments":[{"id":5040,"name":"fromToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5003,"src":"5198:9:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5041,"name":"toToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5005,"src":"5209:7:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":5039,"name":"_getReserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3968,"src":"5185:12:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$returns$_t_uint256_$_t_uint256_$","typeString":"function (address,address) view returns (uint256,uint256)"}},"id":5042,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5185:32:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"5142:75:28"},{"expression":{"id":5054,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5044,"name":"rate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5011,"src":"5227:4:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":5052,"name":"fromReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5036,"src":"5260:11:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"},"id":5049,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":5047,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5248:2:28","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3138","id":5048,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5252:2:28","typeDescriptions":{"typeIdentifier":"t_rational_18_by_1","typeString":"int_const 18"},"value":"18"},"src":"5248:6:28","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"}],"expression":{"id":5045,"name":"toReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5038,"src":"5234:9:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5046,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"mul","nodeType":"MemberAccess","referencedDeclaration":1242,"src":"5234:13:28","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":5050,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5234:21:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5051,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"div","nodeType":"MemberAccess","referencedDeclaration":1264,"src":"5234:25:28","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":5053,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5234:38:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5227:45:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5055,"nodeType":"ExpressionStatement","src":"5227:45:28"}]},"documentation":{"id":5001,"nodeType":"StructuredDocumentation","src":"4208:561:28","text":" Retrieves the conversion rate for the `fromToken`/`toToken` pair via the oracle.\n @dev Reverts if the oracle does not provide a conversion rate for the pair.\n @param fromToken The source token from which the conversion rate is derived from.\n @param toToken the destination token from which the conversion rate is derived from.\n @param *data* Additional data with no specified format for deriving the conversion rate.\n @return rate The conversion rate for the `fromToken`/`toToken` pair, retrieved via the oracle."},"id":5057,"implemented":true,"kind":"function","modifiers":[],"name":"_conversionRate","nodeType":"FunctionDefinition","overrides":{"id":5009,"nodeType":"OverrideSpecifier","overrides":[],"src":"4910:8:28"},"parameters":{"id":5008,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5003,"mutability":"mutable","name":"fromToken","nodeType":"VariableDeclaration","scope":5057,"src":"4808:17:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5002,"name":"address","nodeType":"ElementaryTypeName","src":"4808:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5005,"mutability":"mutable","name":"toToken","nodeType":"VariableDeclaration","scope":5057,"src":"4835:15:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5004,"name":"address","nodeType":"ElementaryTypeName","src":"4835:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5007,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":5057,"src":"4860:12:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":5006,"name":"bytes","nodeType":"ElementaryTypeName","src":"4860:5:28","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4798:89:28"},"returnParameters":{"id":5012,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5011,"mutability":"mutable","name":"rate","nodeType":"VariableDeclaration","scope":5057,"src":"4928:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5010,"name":"uint256","nodeType":"ElementaryTypeName","src":"4928:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4927:14:28"},"scope":5200,"src":"4774:505:28","stateMutability":"view","virtual":true,"visibility":"internal"},{"baseFunctions":[7037],"body":{"id":5102,"nodeType":"Block","src":"6144:263:28","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":5074,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5072,"name":"fromToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5060,"src":"6158:9:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":5073,"name":"TOKEN_ETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5769,"src":"6171:9:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6158:22:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5082,"nodeType":"IfStatement","src":"6154:87:28","trueBody":{"id":5081,"nodeType":"Block","src":"6182:59:28","statements":[{"expression":{"id":5079,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5075,"name":"fromToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5060,"src":"6196:9:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":5076,"name":"uniswapV2Router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3822,"src":"6208:15:28","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapV2Router_$4247","typeString":"contract IUniswapV2Router"}},"id":5077,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"WETH","nodeType":"MemberAccess","referencedDeclaration":4182,"src":"6208:20:28","typeDescriptions":{"typeIdentifier":"t_function_external_pure$__$returns$_t_address_$","typeString":"function () pure external returns (address)"}},"id":5078,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6208:22:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6196:34:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":5080,"nodeType":"ExpressionStatement","src":"6196:34:28"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":5085,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5083,"name":"toToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5062,"src":"6255:7:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":5084,"name":"TOKEN_ETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5769,"src":"6266:9:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6255:20:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5093,"nodeType":"IfStatement","src":"6251:83:28","trueBody":{"id":5092,"nodeType":"Block","src":"6277:57:28","statements":[{"expression":{"id":5090,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5086,"name":"toToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5062,"src":"6291:7:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":5087,"name":"uniswapV2Router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3822,"src":"6301:15:28","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapV2Router_$4247","typeString":"contract IUniswapV2Router"}},"id":5088,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"WETH","nodeType":"MemberAccess","referencedDeclaration":4182,"src":"6301:20:28","typeDescriptions":{"typeIdentifier":"t_function_external_pure$__$returns$_t_address_$","typeString":"function () pure external returns (address)"}},"id":5089,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6301:22:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6291:32:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":5091,"nodeType":"ExpressionStatement","src":"6291:32:28"}]}},{"expression":{"id":5100,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5094,"name":"fromAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5070,"src":"6344:10:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":5096,"name":"fromToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5060,"src":"6371:9:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5097,"name":"toToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5062,"src":"6382:7:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5098,"name":"toAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5064,"src":"6391:8:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5095,"name":"_getAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4034,"src":"6357:13:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$_t_uint256_$returns$_t_uint256_$","typeString":"function (address,address,uint256) view returns (uint256)"}},"id":5099,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6357:43:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6344:56:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5101,"nodeType":"ExpressionStatement","src":"6344:56:28"}]},"documentation":{"id":5058,"nodeType":"StructuredDocumentation","src":"5285:656:28","text":" Estimates the optimal amount of `fromToken` to provide in order to swap for the specified amount of\n  `toToken`, via the oracle.\n @dev Reverts if the oracle cannot estimate the optimal amount of `fromToken` to provide.\n @param fromToken The source token to swap from.\n @param toToken The destination token to swap to.\n @param toAmount The amount of destination tokens to swap for.\n @param *data* Additional data with no specified format for deriving the swap estimate.\n @return fromAmount The estimated optimal amount of `fromToken` to provide in order to perform a swap,\n  via the oracle."},"id":5103,"implemented":true,"kind":"function","modifiers":[],"name":"_estimateSwap","nodeType":"FunctionDefinition","overrides":{"id":5068,"nodeType":"OverrideSpecifier","overrides":[],"src":"6106:8:28"},"parameters":{"id":5067,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5060,"mutability":"mutable","name":"fromToken","nodeType":"VariableDeclaration","scope":5103,"src":"5978:17:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5059,"name":"address","nodeType":"ElementaryTypeName","src":"5978:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5062,"mutability":"mutable","name":"toToken","nodeType":"VariableDeclaration","scope":5103,"src":"6005:15:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5061,"name":"address","nodeType":"ElementaryTypeName","src":"6005:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5064,"mutability":"mutable","name":"toAmount","nodeType":"VariableDeclaration","scope":5103,"src":"6030:16:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5063,"name":"uint256","nodeType":"ElementaryTypeName","src":"6030:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5066,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":5103,"src":"6056:12:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":5065,"name":"bytes","nodeType":"ElementaryTypeName","src":"6056:5:28","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5968:115:28"},"returnParameters":{"id":5071,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5070,"mutability":"mutable","name":"fromAmount","nodeType":"VariableDeclaration","scope":5103,"src":"6124:18:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5069,"name":"uint256","nodeType":"ElementaryTypeName","src":"6124:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6123:20:28"},"scope":5200,"src":"5946:461:28","stateMutability":"view","virtual":true,"visibility":"internal"},{"baseFunctions":[7051],"body":{"id":5198,"nodeType":"Block","src":"7160:796:28","statements":[{"assignments":[5119],"declarations":[{"constant":false,"id":5119,"mutability":"mutable","name":"maxFromAmount","nodeType":"VariableDeclaration","scope":5198,"src":"7170:21:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5118,"name":"uint256","nodeType":"ElementaryTypeName","src":"7170:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5120,"nodeType":"VariableDeclarationStatement","src":"7170:21:28"},{"assignments":[5122],"declarations":[{"constant":false,"id":5122,"mutability":"mutable","name":"deadline","nodeType":"VariableDeclaration","scope":5198,"src":"7201:16:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5121,"name":"uint256","nodeType":"ElementaryTypeName","src":"7201:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5123,"nodeType":"VariableDeclarationStatement","src":"7201:16:28"},{"AST":{"nodeType":"YulBlock","src":"7237:106:28","statements":[{"nodeType":"YulAssignment","src":"7251:37:28","value":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"7278:4:28"},{"kind":"number","nodeType":"YulLiteral","src":"7284:2:28","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7274:3:28"},"nodeType":"YulFunctionCall","src":"7274:13:28"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7268:5:28"},"nodeType":"YulFunctionCall","src":"7268:20:28"},"variableNames":[{"name":"maxFromAmount","nodeType":"YulIdentifier","src":"7251:13:28"}]},{"nodeType":"YulAssignment","src":"7301:32:28","value":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"7323:4:28"},{"kind":"number","nodeType":"YulLiteral","src":"7329:2:28","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7319:3:28"},"nodeType":"YulFunctionCall","src":"7319:13:28"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7313:5:28"},"nodeType":"YulFunctionCall","src":"7313:20:28"},"variableNames":[{"name":"deadline","nodeType":"YulIdentifier","src":"7301:8:28"}]}]},"evmVersion":"istanbul","externalReferences":[{"declaration":5112,"isOffset":false,"isSlot":false,"src":"7278:4:28","valueSize":1},{"declaration":5112,"isOffset":false,"isSlot":false,"src":"7323:4:28","valueSize":1},{"declaration":5122,"isOffset":false,"isSlot":false,"src":"7301:8:28","valueSize":1},{"declaration":5119,"isOffset":false,"isSlot":false,"src":"7251:13:28","valueSize":1}],"id":5124,"nodeType":"InlineAssembly","src":"7228:115:28"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5127,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5125,"name":"maxFromAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5119,"src":"7357:13:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":5126,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7374:1:28","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7357:18:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5148,"nodeType":"IfStatement","src":"7353:206:28","trueBody":{"id":5147,"nodeType":"Block","src":"7377:182:28","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":5130,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5128,"name":"fromToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5106,"src":"7395:9:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":5129,"name":"TOKEN_ETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5769,"src":"7408:9:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7395:22:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":5145,"nodeType":"Block","src":"7483:66:28","statements":[{"expression":{"id":5143,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5137,"name":"maxFromAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5119,"src":"7501:13:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"arguments":[{"id":5140,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7522:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":5139,"name":"uint256","nodeType":"ElementaryTypeName","src":"7522:7:28","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":5138,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"7517:4:28","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":5141,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7517:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":5142,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"7517:17:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7501:33:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5144,"nodeType":"ExpressionStatement","src":"7501:33:28"}]},"id":5146,"nodeType":"IfStatement","src":"7391:158:28","trueBody":{"id":5136,"nodeType":"Block","src":"7419:58:28","statements":[{"expression":{"id":5134,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5131,"name":"maxFromAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5119,"src":"7437:13:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":5132,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"7453:3:28","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":5133,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"value","nodeType":"MemberAccess","src":"7453:9:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7437:25:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5135,"nodeType":"ExpressionStatement","src":"7437:25:28"}]}}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5151,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5149,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5122,"src":"7573:8:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":5150,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7585:1:28","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7573:13:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5161,"nodeType":"IfStatement","src":"7569:72:28","trueBody":{"id":5160,"nodeType":"Block","src":"7588:53:28","statements":[{"expression":{"id":5158,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5152,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5122,"src":"7602:8:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"arguments":[{"id":5155,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7618:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":5154,"name":"uint256","nodeType":"ElementaryTypeName","src":"7618:7:28","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":5153,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"7613:4:28","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":5156,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7613:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":5157,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"7613:17:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7602:28:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5159,"nodeType":"ExpressionStatement","src":"7602:28:28"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":5164,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5162,"name":"fromToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5106,"src":"7655:9:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":5163,"name":"TOKEN_ETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5769,"src":"7668:9:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7655:22:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5172,"nodeType":"IfStatement","src":"7651:87:28","trueBody":{"id":5171,"nodeType":"Block","src":"7679:59:28","statements":[{"expression":{"id":5169,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5165,"name":"fromToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5106,"src":"7693:9:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":5166,"name":"uniswapV2Router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3822,"src":"7705:15:28","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapV2Router_$4247","typeString":"contract IUniswapV2Router"}},"id":5167,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"WETH","nodeType":"MemberAccess","referencedDeclaration":4182,"src":"7705:20:28","typeDescriptions":{"typeIdentifier":"t_function_external_pure$__$returns$_t_address_$","typeString":"function () pure external returns (address)"}},"id":5168,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7705:22:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7693:34:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":5170,"nodeType":"ExpressionStatement","src":"7693:34:28"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":5175,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5173,"name":"toToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5108,"src":"7752:7:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":5174,"name":"TOKEN_ETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5769,"src":"7763:9:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7752:20:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5183,"nodeType":"IfStatement","src":"7748:83:28","trueBody":{"id":5182,"nodeType":"Block","src":"7774:57:28","statements":[{"expression":{"id":5180,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5176,"name":"toToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5108,"src":"7788:7:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":5177,"name":"uniswapV2Router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3822,"src":"7798:15:28","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapV2Router_$4247","typeString":"contract IUniswapV2Router"}},"id":5178,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"WETH","nodeType":"MemberAccess","referencedDeclaration":4182,"src":"7798:20:28","typeDescriptions":{"typeIdentifier":"t_function_external_pure$__$returns$_t_address_$","typeString":"function () pure external returns (address)"}},"id":5179,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7798:22:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7788:32:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":5181,"nodeType":"ExpressionStatement","src":"7788:32:28"}]}},{"expression":{"id":5196,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5184,"name":"fromAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5116,"src":"7841:10:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":5186,"name":"fromToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5106,"src":"7880:9:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5187,"name":"toToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5108,"src":"7891:7:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5188,"name":"toAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5110,"src":"7900:8:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":5189,"name":"maxFromAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5119,"src":"7910:13:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":5192,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"7933:4:28","typeDescriptions":{"typeIdentifier":"t_contract$_UniswapSwapSale_$5200","typeString":"contract UniswapSwapSale"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_UniswapSwapSale_$5200","typeString":"contract UniswapSwapSale"}],"id":5191,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7925:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":5190,"name":"address","nodeType":"ElementaryTypeName","src":"7925:7:28","typeDescriptions":{}}},"id":5193,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7925:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":5194,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5122,"src":"7940:8:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5185,"name":"_swapTokensForExactAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4152,"src":"7854:25:28","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_address_$_t_uint256_$returns$_t_uint256_$","typeString":"function (address,address,uint256,uint256,address,uint256) returns (uint256)"}},"id":5195,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7854:95:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7841:108:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5197,"nodeType":"ExpressionStatement","src":"7841:108:28"}]},"documentation":{"id":5104,"nodeType":"StructuredDocumentation","src":"6413:561:28","text":" Swaps `fromToken` for the specified amount of `toToken`, via the oracle.\n @dev Reverts if the oracle is unable to perform the token swap.\n @param fromToken The source token to swap from.\n @param toToken The destination token to swap to.\n @param toAmount The amount of destination tokens to swap for.\n @param data Additional data for UniswapV2 (uint256 `maxFromAmount`, uint256 `deadline`).\n @return fromAmount The amount of `fromToken` swapped for the specified amount of `toToken`, via the\n  oracle."},"id":5199,"implemented":true,"kind":"function","modifiers":[],"name":"_swap","nodeType":"FunctionDefinition","overrides":{"id":5114,"nodeType":"OverrideSpecifier","overrides":[],"src":"7122:8:28"},"parameters":{"id":5113,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5106,"mutability":"mutable","name":"fromToken","nodeType":"VariableDeclaration","scope":5199,"src":"7003:17:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5105,"name":"address","nodeType":"ElementaryTypeName","src":"7003:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5108,"mutability":"mutable","name":"toToken","nodeType":"VariableDeclaration","scope":5199,"src":"7030:15:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5107,"name":"address","nodeType":"ElementaryTypeName","src":"7030:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5110,"mutability":"mutable","name":"toAmount","nodeType":"VariableDeclaration","scope":5199,"src":"7055:16:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5109,"name":"uint256","nodeType":"ElementaryTypeName","src":"7055:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5112,"mutability":"mutable","name":"data","nodeType":"VariableDeclaration","scope":5199,"src":"7081:17:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":5111,"name":"bytes","nodeType":"ElementaryTypeName","src":"7081:5:28","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6993:111:28"},"returnParameters":{"id":5117,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5116,"mutability":"mutable","name":"fromAmount","nodeType":"VariableDeclaration","scope":5199,"src":"7140:18:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5115,"name":"uint256","nodeType":"ElementaryTypeName","src":"7140:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7139:20:28"},"scope":5200,"src":"6979:977:28","stateMutability":"nonpayable","virtual":true,"visibility":"internal"}],"scope":5201,"src":"1260:6698:28"}],"src":"33:7926:28"},"id":28},"contracts/sale/abstract/OracleSale.sol":{"ast":{"absolutePath":"contracts/sale/abstract/OracleSale.sol","exportedSymbols":{"EnumMap":[362],"FixedPricesSale":[4753],"IOracleSale":[7187],"OracleSale":[5556],"SafeMath":[1359]},"id":5557,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":5202,"literals":["solidity",">=","0.7",".6","<","0.8",".0"],"nodeType":"PragmaDirective","src":"33:31:29"},{"absolutePath":"contracts/sale/interfaces/IOracleSale.sol","file":"../interfaces/IOracleSale.sol","id":5204,"nodeType":"ImportDirective","scope":5557,"sourceUnit":7188,"src":"66:58:29","symbolAliases":[{"foreign":{"id":5203,"name":"IOracleSale","nodeType":"Identifier","overloadedDeclarations":[],"src":"74:11:29","typeDescriptions":{}}}],"unitAlias":""},{"absolutePath":"contracts/sale/FixedPricesSale.sol","file":"../FixedPricesSale.sol","id":5208,"nodeType":"ImportDirective","scope":5557,"sourceUnit":4754,"src":"125:74:29","symbolAliases":[{"foreign":{"id":5205,"name":"EnumMap","nodeType":"Identifier","overloadedDeclarations":[],"src":"133:7:29","typeDescriptions":{}}},{"foreign":{"id":5206,"name":"SafeMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"142:8:29","typeDescriptions":{}}},{"foreign":{"id":5207,"name":"FixedPricesSale","nodeType":"Identifier","overloadedDeclarations":[],"src":"152:15:29","typeDescriptions":{}}}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":5210,"name":"IOracleSale","nodeType":"UserDefinedTypeName","referencedDeclaration":7187,"src":"754:11:29","typeDescriptions":{"typeIdentifier":"t_contract$_IOracleSale_$7187","typeString":"contract IOracleSale"}},"id":5211,"nodeType":"InheritanceSpecifier","src":"754:11:29"},{"baseName":{"id":5212,"name":"FixedPricesSale","nodeType":"UserDefinedTypeName","referencedDeclaration":4753,"src":"767:15:29","typeDescriptions":{"typeIdentifier":"t_contract$_FixedPricesSale_$4753","typeString":"contract FixedPricesSale"}},"id":5213,"nodeType":"InheritanceSpecifier","src":"767:15:29"}],"contractDependencies":[22,103,646,715,736,812,4753,5671,6694,7187,7346],"contractKind":"contract","documentation":{"id":5209,"nodeType":"StructuredDocumentation","src":"201:520:29","text":" @title OracleSale\n A FixedPricesSale which implements support for an oracle-based token conversion pricing strategy.\n  The final implementer is responsible for implementing any additional pricing and/or delivery logic.\n PurchaseData.pricingData:\n  - a zero length array for fixed pricing data.\n  - a non-zero length array for oracle-based pricing data\n  - [0] uint256: the uninterpolated unit price (i.e. magic value).\n  - [1] uint256: the token conversion rate used for oracle-based pricing."},"fullyImplemented":false,"id":5556,"linearizedBaseContracts":[5556,4753,6694,646,715,812,103,22,736,7346,5671,7187],"name":"OracleSale","nodeType":"ContractDefinition","nodes":[{"id":5216,"libraryName":{"id":5214,"name":"SafeMath","nodeType":"UserDefinedTypeName","referencedDeclaration":1359,"src":"795:8:29","typeDescriptions":{"typeIdentifier":"t_contract$_SafeMath_$1359","typeString":"library SafeMath"}},"nodeType":"UsingForDirective","src":"789:27:29","typeName":{"id":5215,"name":"uint256","nodeType":"ElementaryTypeName","src":"808:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":5219,"libraryName":{"id":5217,"name":"EnumMap","nodeType":"UserDefinedTypeName","referencedDeclaration":362,"src":"827:7:29","typeDescriptions":{"typeIdentifier":"t_contract$_EnumMap_$362","typeString":"library EnumMap"}},"nodeType":"UsingForDirective","src":"821:30:29","typeName":{"id":5218,"name":"EnumMap.Map","nodeType":"UserDefinedTypeName","referencedDeclaration":119,"src":"839:11:29","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map"}}},{"baseFunctions":[7174],"constant":true,"functionSelector":"9865bcc8","id":5227,"mutability":"constant","name":"PRICE_CONVERT_VIA_ORACLE","nodeType":"VariableDeclaration","overrides":{"id":5221,"nodeType":"OverrideSpecifier","overrides":[],"src":"881:8:29"},"scope":5556,"src":"857:77:29","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5220,"name":"uint256","nodeType":"ElementaryTypeName","src":"857:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"expression":{"arguments":[{"id":5224,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"922:7:29","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":5223,"name":"uint256","nodeType":"ElementaryTypeName","src":"922:7:29","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":5222,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"917:4:29","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":5225,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"917:13:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":5226,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"917:17:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":false,"functionSelector":"1265b651","id":5229,"mutability":"mutable","name":"referenceToken","nodeType":"VariableDeclaration","scope":5556,"src":"941:29:29","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5228,"name":"address","nodeType":"ElementaryTypeName","src":"941:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"body":{"id":5292,"nodeType":"Block","src":"1595:290:29","statements":[{"expression":{"id":5248,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5246,"name":"referenceToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5229,"src":"1605:14:29","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":5247,"name":"referenceToken_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5238,"src":"1622:15:29","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1605:32:29","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":5249,"nodeType":"ExpressionStatement","src":"1605:32:29"},{"assignments":[5254],"declarations":[{"constant":false,"id":5254,"mutability":"mutable","name":"names","nodeType":"VariableDeclaration","scope":5292,"src":"1647:22:29","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":5252,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1647:7:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":5253,"nodeType":"ArrayTypeName","src":"1647:9:29","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"id":5260,"initialValue":{"arguments":[{"hexValue":"31","id":5258,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1686:1:29","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"}],"id":5257,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"1672:13:29","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (bytes32[] memory)"},"typeName":{"baseType":{"id":5255,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1676:7:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":5256,"nodeType":"ArrayTypeName","src":"1676:9:29","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}}},"id":5259,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1672:16:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"nodeType":"VariableDeclarationStatement","src":"1647:41:29"},{"assignments":[5265],"declarations":[{"constant":false,"id":5265,"mutability":"mutable","name":"values","nodeType":"VariableDeclaration","scope":5292,"src":"1698:23:29","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":5263,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1698:7:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":5264,"nodeType":"ArrayTypeName","src":"1698:9:29","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"id":5271,"initialValue":{"arguments":[{"hexValue":"31","id":5269,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1738:1:29","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"}],"id":5268,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"1724:13:29","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (bytes32[] memory)"},"typeName":{"baseType":{"id":5266,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1728:7:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":5267,"nodeType":"ArrayTypeName","src":"1728:9:29","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}}},"id":5270,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1724:16:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"nodeType":"VariableDeclarationStatement","src":"1698:42:29"},{"expression":{"id":5285,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"baseExpression":{"id":5272,"name":"names","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5254,"src":"1751:5:29","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"id":5274,"indexExpression":{"hexValue":"30","id":5273,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1757:1:29","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1751:8:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"baseExpression":{"id":5275,"name":"values","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5265,"src":"1761:6:29","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"id":5277,"indexExpression":{"hexValue":"30","id":5276,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1768:1:29","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1761:9:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":5278,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"1750:21:29","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bytes32_$_t_bytes32_$","typeString":"tuple(bytes32,bytes32)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"components":[{"hexValue":"50524943455f434f4e564552545f5649415f4f5241434c45","id":5279,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1775:26:29","typeDescriptions":{"typeIdentifier":"t_stringliteral_7cb675e3e835d08b4727c8f54a1d07b7dd8ca808f0cae238a94e30a42eb5e617","typeString":"literal_string \"PRICE_CONVERT_VIA_ORACLE\""},"value":"PRICE_CONVERT_VIA_ORACLE"},{"arguments":[{"id":5282,"name":"PRICE_CONVERT_VIA_ORACLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5227,"src":"1811:24:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5281,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1803:7:29","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":5280,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1803:7:29","typeDescriptions":{}}},"id":5283,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1803:33:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":5284,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"1774:63:29","typeDescriptions":{"typeIdentifier":"t_tuple$_t_stringliteral_7cb675e3e835d08b4727c8f54a1d07b7dd8ca808f0cae238a94e30a42eb5e617_$_t_bytes32_$","typeString":"tuple(literal_string \"PRICE_CONVERT_VIA_ORACLE\",bytes32)"}},"src":"1750:87:29","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5286,"nodeType":"ExpressionStatement","src":"1750:87:29"},{"eventCall":{"arguments":[{"id":5288,"name":"names","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5254,"src":"1864:5:29","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},{"id":5289,"name":"values","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5265,"src":"1871:6:29","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"},{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}],"id":5287,"name":"MagicValues","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7232,"src":"1852:11:29","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_array$_t_bytes32_$dyn_memory_ptr_$_t_array$_t_bytes32_$dyn_memory_ptr_$returns$__$","typeString":"function (bytes32[] memory,bytes32[] memory)"}},"id":5290,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1852:26:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5291,"nodeType":"EmitStatement","src":"1847:31:29"}]},"documentation":{"id":5230,"nodeType":"StructuredDocumentation","src":"977:388:29","text":" Constructor.\n @dev Emits the `MagicValues` event.\n @dev Emits the `Paused` event.\n @param payoutWallet_ the payout wallet.\n @param skusCapacity the cap for the number of managed SKUs.\n @param tokensPerSkuCapacity the cap for the number of tokens managed per SKU.\n @param referenceToken_ the token to use for oracle-based conversions."},"id":5293,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":5241,"name":"payoutWallet_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5232,"src":"1544:13:29","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":5242,"name":"skusCapacity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5234,"src":"1559:12:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":5243,"name":"tokensPerSkuCapacity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5236,"src":"1573:20:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":5244,"modifierName":{"id":5240,"name":"FixedPricesSale","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4753,"src":"1528:15:29","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPricesSale_$4753_$","typeString":"type(contract FixedPricesSale)"}},"nodeType":"ModifierInvocation","src":"1528:66:29"}],"name":"","nodeType":"FunctionDefinition","parameters":{"id":5239,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5232,"mutability":"mutable","name":"payoutWallet_","nodeType":"VariableDeclaration","scope":5293,"src":"1391:29:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":5231,"name":"address","nodeType":"ElementaryTypeName","src":"1391:15:29","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":5234,"mutability":"mutable","name":"skusCapacity","nodeType":"VariableDeclaration","scope":5293,"src":"1430:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5233,"name":"uint256","nodeType":"ElementaryTypeName","src":"1430:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5236,"mutability":"mutable","name":"tokensPerSkuCapacity","nodeType":"VariableDeclaration","scope":5293,"src":"1460:28:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5235,"name":"uint256","nodeType":"ElementaryTypeName","src":"1460:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5238,"mutability":"mutable","name":"referenceToken_","nodeType":"VariableDeclaration","scope":5293,"src":"1498:23:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5237,"name":"address","nodeType":"ElementaryTypeName","src":"1498:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1381:146:29"},"returnParameters":{"id":5245,"nodeType":"ParameterList","parameters":[],"src":"1595:0:29"},"scope":5556,"src":"1370:515:29","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[4652],"body":{"id":5347,"nodeType":"Block","src":"2650:384:29","statements":[{"assignments":[5301],"declarations":[{"constant":false,"id":5301,"mutability":"mutable","name":"skuInfo","nodeType":"VariableDeclaration","scope":5347,"src":"2660:23:29","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage_ptr","typeString":"struct Sale.SkuInfo"},"typeName":{"id":5300,"name":"SkuInfo","nodeType":"UserDefinedTypeName","referencedDeclaration":5762,"src":"2660:7:29","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage_ptr","typeString":"struct Sale.SkuInfo"}},"visibility":"internal"}],"id":5306,"initialValue":{"baseExpression":{"id":5302,"name":"_skuInfos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5783,"src":"2686:9:29","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_SkuInfo_$5762_storage_$","typeString":"mapping(bytes32 => struct Sale.SkuInfo storage ref)"}},"id":5305,"indexExpression":{"expression":{"id":5303,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5296,"src":"2696:8:29","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":5304,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"sku","nodeType":"MemberAccess","referencedDeclaration":5567,"src":"2696:12:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2686:23:29","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage","typeString":"struct Sale.SkuInfo storage ref"}},"nodeType":"VariableDeclarationStatement","src":"2660:49:29"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5311,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":5308,"name":"skuInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5301,"src":"2727:7:29","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage_ptr","typeString":"struct Sale.SkuInfo storage pointer"}},"id":5309,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":5753,"src":"2727:19:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":5310,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2750:1:29","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2727:24:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616c653a20756e737570706f7274656420534b55","id":5312,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2753:23:29","typeDescriptions":{"typeIdentifier":"t_stringliteral_e88d6065eb42cb1871a2f862307a333045af738081e90fa9a2028ffbaf27f312","typeString":"literal_string \"Sale: unsupported SKU\""},"value":"Sale: unsupported SKU"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_e88d6065eb42cb1871a2f862307a333045af738081e90fa9a2028ffbaf27f312","typeString":"literal_string \"Sale: unsupported SKU\""}],"id":5307,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2719:7:29","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":5313,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2719:58:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5314,"nodeType":"ExpressionStatement","src":"2719:58:29"},{"assignments":[5318],"declarations":[{"constant":false,"id":5318,"mutability":"mutable","name":"prices","nodeType":"VariableDeclaration","scope":5347,"src":"2787:26:29","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map"},"typeName":{"id":5317,"name":"EnumMap.Map","nodeType":"UserDefinedTypeName","referencedDeclaration":119,"src":"2787:11:29","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map"}},"visibility":"internal"}],"id":5321,"initialValue":{"expression":{"id":5319,"name":"skuInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5301,"src":"2816:7:29","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage_ptr","typeString":"struct Sale.SkuInfo storage pointer"}},"id":5320,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"prices","nodeType":"MemberAccess","referencedDeclaration":5761,"src":"2816:14:29","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage","typeString":"struct EnumMap.Map storage ref"}},"nodeType":"VariableDeclarationStatement","src":"2787:43:29"},{"assignments":[5323],"declarations":[{"constant":false,"id":5323,"mutability":"mutable","name":"unitPrice","nodeType":"VariableDeclaration","scope":5347,"src":"2840:17:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5322,"name":"uint256","nodeType":"ElementaryTypeName","src":"2840:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5328,"initialValue":{"arguments":[{"id":5325,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5296,"src":"2871:8:29","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},{"id":5326,"name":"prices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5318,"src":"2881:6:29","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"},{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map storage pointer"}],"id":5324,"name":"_unitPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4752,"src":"2860:10:29","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_PurchaseData_$5583_memory_ptr_$_t_struct$_Map_$119_storage_ptr_$returns$_t_uint256_$","typeString":"function (struct PurchaseLifeCycles.PurchaseData memory,struct EnumMap.Map storage pointer) view returns (uint256)"}},"id":5327,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2860:28:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2840:48:29"},{"condition":{"id":5334,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"2903:44:29","subExpression":{"arguments":[{"id":5330,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5296,"src":"2919:8:29","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},{"id":5331,"name":"prices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5318,"src":"2929:6:29","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map storage pointer"}},{"id":5332,"name":"unitPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5323,"src":"2937:9:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"},{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map storage pointer"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5329,"name":"_oraclePricing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5543,"src":"2904:14:29","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_PurchaseData_$5583_memory_ptr_$_t_struct$_Map_$119_storage_ptr_$_t_uint256_$returns$_t_bool_$","typeString":"function (struct PurchaseLifeCycles.PurchaseData memory,struct EnumMap.Map storage pointer,uint256) view returns (bool)"}},"id":5333,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2904:43:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5346,"nodeType":"IfStatement","src":"2899:129:29","trueBody":{"id":5345,"nodeType":"Block","src":"2949:79:29","statements":[{"expression":{"id":5343,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":5335,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5296,"src":"2963:8:29","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":5337,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"totalPrice","nodeType":"MemberAccess","referencedDeclaration":5573,"src":"2963:19:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":5340,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5296,"src":"2999:8:29","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":5341,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"quantity","nodeType":"MemberAccess","referencedDeclaration":5569,"src":"2999:17:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":5338,"name":"unitPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5323,"src":"2985:9:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5339,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"mul","nodeType":"MemberAccess","referencedDeclaration":1242,"src":"2985:13:29","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":5342,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2985:32:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2963:54:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5344,"nodeType":"ExpressionStatement","src":"2963:54:29"}]}}]},"documentation":{"id":5294,"nodeType":"StructuredDocumentation","src":"1992:574:29","text":" Lifecycle step which computes the purchase price.\n @dev Responsibilities:\n  - Computes the pricing formula, including any discount logic and price conversion;\n  - Set the value of `purchase.totalPrice`;\n  - Add any relevant extra data related to pricing in `purchase.pricingData` and document how to interpret it.\n @dev Reverts if `purchase.sku` does not exist.\n @dev Reverts if `purchase.token` is not supported by the SKU.\n @dev Reverts in case of price overflow.\n @param purchase The purchase conditions."},"id":5348,"implemented":true,"kind":"function","modifiers":[],"name":"_pricing","nodeType":"FunctionDefinition","overrides":{"id":5298,"nodeType":"OverrideSpecifier","overrides":[],"src":"2641:8:29"},"parameters":{"id":5297,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5296,"mutability":"mutable","name":"purchase","nodeType":"VariableDeclaration","scope":5348,"src":"2589:28:29","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"},"typeName":{"id":5295,"name":"PurchaseData","nodeType":"UserDefinedTypeName","referencedDeclaration":5583,"src":"2589:12:29","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_storage_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"}},"visibility":"internal"}],"src":"2588:30:29"},"returnParameters":{"id":5299,"nodeType":"ParameterList","parameters":[],"src":"2650:0:29"},"scope":5556,"src":"2571:463:29","stateMutability":"view","virtual":true,"visibility":"internal"},{"baseFunctions":[7186],"body":{"id":5398,"nodeType":"Block","src":"3769:216:29","statements":[{"assignments":[5362],"declarations":[{"constant":false,"id":5362,"mutability":"mutable","name":"length","nodeType":"VariableDeclaration","scope":5398,"src":"3779:14:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5361,"name":"uint256","nodeType":"ElementaryTypeName","src":"3779:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5365,"initialValue":{"expression":{"id":5363,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5352,"src":"3796:6:29","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":5364,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"3796:13:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3779:30:29"},{"expression":{"id":5372,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5366,"name":"rates","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5359,"src":"3819:5:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":5370,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5362,"src":"3841:6:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5369,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"3827:13:29","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":5367,"name":"uint256","nodeType":"ElementaryTypeName","src":"3831:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5368,"nodeType":"ArrayTypeName","src":"3831:9:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":5371,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3827:21:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"3819:29:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":5373,"nodeType":"ExpressionStatement","src":"3819:29:29"},{"body":{"id":5396,"nodeType":"Block","src":"3895:84:29","statements":[{"expression":{"id":5394,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":5384,"name":"rates","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5359,"src":"3909:5:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":5386,"indexExpression":{"id":5385,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5375,"src":"3915:1:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3909:8:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"id":5388,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5352,"src":"3936:6:29","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":5390,"indexExpression":{"id":5389,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5375,"src":"3943:1:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3936:9:29","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5391,"name":"referenceToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5229,"src":"3947:14:29","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5392,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5354,"src":"3963:4:29","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":5387,"name":"_conversionRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5555,"src":"3920:15:29","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$_t_bytes_memory_ptr_$returns$_t_uint256_$","typeString":"function (address,address,bytes memory) view returns (uint256)"}},"id":5393,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3920:48:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3909:59:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5395,"nodeType":"ExpressionStatement","src":"3909:59:29"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5380,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5378,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5375,"src":"3878:1:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":5379,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5362,"src":"3882:6:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3878:10:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5397,"initializationExpression":{"assignments":[5375],"declarations":[{"constant":false,"id":5375,"mutability":"mutable","name":"i","nodeType":"VariableDeclaration","scope":5397,"src":"3863:9:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5374,"name":"uint256","nodeType":"ElementaryTypeName","src":"3863:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5377,"initialValue":{"hexValue":"30","id":5376,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3875:1:29","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"3863:13:29"},"loopExpression":{"expression":{"id":5382,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"3890:3:29","subExpression":{"id":5381,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5375,"src":"3892:1:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5383,"nodeType":"ExpressionStatement","src":"3890:3:29"},"nodeType":"ForStatement","src":"3858:121:29"}]},"documentation":{"id":5349,"nodeType":"StructuredDocumentation","src":"3137:490:29","text":" Retrieves the token conversion rates for the `tokens`/`referenceToken` pairs via the oracle.\n @dev Reverts if the oracle does not provide a conversion rate for one of the token pairs.\n @param tokens The list of tokens to retrieve the conversion rates for.\n @param data Additional data with no specified format for deriving the conversion rates.\n @return rates The conversion rates for the `tokens`/`referenceToken` pairs, retrieved via the oracle."},"functionSelector":"c7b778db","id":5399,"implemented":true,"kind":"function","modifiers":[],"name":"conversionRates","nodeType":"FunctionDefinition","overrides":{"id":5356,"nodeType":"OverrideSpecifier","overrides":[],"src":"3727:8:29"},"parameters":{"id":5355,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5352,"mutability":"mutable","name":"tokens","nodeType":"VariableDeclaration","scope":5399,"src":"3657:25:29","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":5350,"name":"address","nodeType":"ElementaryTypeName","src":"3657:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":5351,"nodeType":"ArrayTypeName","src":"3657:9:29","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":5354,"mutability":"mutable","name":"data","nodeType":"VariableDeclaration","scope":5399,"src":"3684:19:29","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":5353,"name":"bytes","nodeType":"ElementaryTypeName","src":"3684:5:29","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3656:48:29"},"returnParameters":{"id":5360,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5359,"mutability":"mutable","name":"rates","nodeType":"VariableDeclaration","scope":5399,"src":"3745:22:29","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":5357,"name":"uint256","nodeType":"ElementaryTypeName","src":"3745:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5358,"nodeType":"ArrayTypeName","src":"3745:9:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"3744:24:29"},"scope":5556,"src":"3632:353:29","stateMutability":"view","virtual":true,"visibility":"external"},{"baseFunctions":[6474],"body":{"id":5440,"nodeType":"Block","src":"4840:197:29","statements":[{"expression":{"arguments":[{"id":5415,"name":"tokenPrices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5402,"src":"4872:11:29","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map storage pointer"}},{"id":5416,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5405,"src":"4885:6:29","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},{"id":5417,"name":"prices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5408,"src":"4893:6:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map storage pointer"},{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"expression":{"id":5412,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"4850:5:29","typeDescriptions":{"typeIdentifier":"t_super$_OracleSale_$5556","typeString":"contract super OracleSale"}},"id":5414,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"_setTokenPrices","nodeType":"MemberAccess","referencedDeclaration":6474,"src":"4850:21:29","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Map_$119_storage_ptr_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$","typeString":"function (struct EnumMap.Map storage pointer,address[] memory,uint256[] memory)"}},"id":5418,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4850:50:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5419,"nodeType":"ExpressionStatement","src":"4850:50:29"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":5436,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5425,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":5421,"name":"tokenPrices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5402,"src":"4918:11:29","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map storage pointer"}},"id":5422,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","referencedDeclaration":293,"src":"4918:18:29","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Map_$119_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Map_$119_storage_ptr_$","typeString":"function (struct EnumMap.Map storage pointer) view returns (uint256)"}},"id":5423,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4918:20:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":5424,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4942:1:29","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4918:25:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"arguments":[{"arguments":[{"arguments":[{"id":5432,"name":"referenceToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5229,"src":"4984:14:29","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":5431,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4976:7:29","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":5430,"name":"uint256","nodeType":"ElementaryTypeName","src":"4976:7:29","typeDescriptions":{}}},"id":5433,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4976:23:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5429,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4968:7:29","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":5428,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4968:7:29","typeDescriptions":{}}},"id":5434,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4968:32:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":5426,"name":"tokenPrices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5402,"src":"4947:11:29","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map storage pointer"}},"id":5427,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"contains","nodeType":"MemberAccess","referencedDeclaration":280,"src":"4947:20:29","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Map_$119_storage_ptr_$_t_bytes32_$returns$_t_bool_$bound_to$_t_struct$_Map_$119_storage_ptr_$","typeString":"function (struct EnumMap.Map storage pointer,bytes32) view returns (bool)"}},"id":5435,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4947:54:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"4918:83:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616c653a206e6f207265666572656e636520746f6b656e","id":5437,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5003:26:29","typeDescriptions":{"typeIdentifier":"t_stringliteral_b66cbe0e59e314236300de387d9cdd9ecedce9ac859c5285045de304afad30fc","typeString":"literal_string \"Sale: no reference token\""},"value":"Sale: no reference token"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b66cbe0e59e314236300de387d9cdd9ecedce9ac859c5285045de304afad30fc","typeString":"literal_string \"Sale: no reference token\""}],"id":5420,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4910:7:29","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":5438,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4910:120:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5439,"nodeType":"ExpressionStatement","src":"4910:120:29"}]},"documentation":{"id":5400,"nodeType":"StructuredDocumentation","src":"4092:579:29","text":" Updates SKU token prices.\n @dev Reverts if one of the `tokens` is the zero address.\n @dev Reverts if the update results in too many tokens for the SKU.\n @dev Reverts if the SKU has any supported payment tokens and one of them is not the\n  reference token.\n @param tokenPrices Storage pointer to a mapping of SKU token prices to update.\n @param tokens The list of payment tokens to update.\n @param prices The list of prices to apply for each payment token.\n  Zero price values are used to disable a payment token."},"id":5441,"implemented":true,"kind":"function","modifiers":[],"name":"_setTokenPrices","nodeType":"FunctionDefinition","overrides":{"id":5410,"nodeType":"OverrideSpecifier","overrides":[],"src":"4831:8:29"},"parameters":{"id":5409,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5402,"mutability":"mutable","name":"tokenPrices","nodeType":"VariableDeclaration","scope":5441,"src":"4710:31:29","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map"},"typeName":{"id":5401,"name":"EnumMap.Map","nodeType":"UserDefinedTypeName","referencedDeclaration":119,"src":"4710:11:29","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map"}},"visibility":"internal"},{"constant":false,"id":5405,"mutability":"mutable","name":"tokens","nodeType":"VariableDeclaration","scope":5441,"src":"4751:23:29","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":5403,"name":"address","nodeType":"ElementaryTypeName","src":"4751:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":5404,"nodeType":"ArrayTypeName","src":"4751:9:29","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":5408,"mutability":"mutable","name":"prices","nodeType":"VariableDeclaration","scope":5441,"src":"4784:23:29","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":5406,"name":"uint256","nodeType":"ElementaryTypeName","src":"4784:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5407,"nodeType":"ArrayTypeName","src":"4784:9:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"4700:113:29"},"returnParameters":{"id":5411,"nodeType":"ParameterList","parameters":[],"src":"4840:0:29"},"scope":5556,"src":"4676:361:29","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":5542,"nodeType":"Block","src":"5902:629:29","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5455,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5453,"name":"unitPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5448,"src":"5916:9:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":5454,"name":"PRICE_CONVERT_VIA_ORACLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5227,"src":"5929:24:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5916:37:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5459,"nodeType":"IfStatement","src":"5912:80:29","trueBody":{"id":5458,"nodeType":"Block","src":"5955:37:29","statements":[{"expression":{"hexValue":"66616c7365","id":5456,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5976:5:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":5452,"id":5457,"nodeType":"Return","src":"5969:12:29"}]}},{"assignments":[5461],"declarations":[{"constant":false,"id":5461,"mutability":"mutable","name":"referenceUnitPrice","nodeType":"VariableDeclaration","scope":5542,"src":"6002:26:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5460,"name":"uint256","nodeType":"ElementaryTypeName","src":"6002:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5475,"initialValue":{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"id":5470,"name":"referenceToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5229,"src":"6071:14:29","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":5469,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6063:7:29","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":5468,"name":"uint256","nodeType":"ElementaryTypeName","src":"6063:7:29","typeDescriptions":{}}},"id":5471,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6063:23:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5467,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6055:7:29","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":5466,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6055:7:29","typeDescriptions":{}}},"id":5472,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6055:32:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":5464,"name":"tokenPrices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5446,"src":"6039:11:29","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map storage pointer"}},"id":5465,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"get","nodeType":"MemberAccess","referencedDeclaration":361,"src":"6039:15:29","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Map_$119_storage_ptr_$_t_bytes32_$returns$_t_bytes32_$bound_to$_t_struct$_Map_$119_storage_ptr_$","typeString":"function (struct EnumMap.Map storage pointer,bytes32) view returns (bytes32)"}},"id":5473,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6039:49:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":5463,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6031:7:29","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":5462,"name":"uint256","nodeType":"ElementaryTypeName","src":"6031:7:29","typeDescriptions":{}}},"id":5474,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6031:58:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6002:87:29"},{"assignments":[5477],"declarations":[{"constant":false,"id":5477,"mutability":"mutable","name":"conversionRate","nodeType":"VariableDeclaration","scope":5542,"src":"6100:22:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5476,"name":"uint256","nodeType":"ElementaryTypeName","src":"6100:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5485,"initialValue":{"arguments":[{"expression":{"id":5479,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5444,"src":"6141:8:29","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":5480,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"token","nodeType":"MemberAccess","referencedDeclaration":5565,"src":"6141:14:29","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5481,"name":"referenceToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5229,"src":"6157:14:29","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":5482,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5444,"src":"6173:8:29","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":5483,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userData","nodeType":"MemberAccess","referencedDeclaration":5571,"src":"6173:17:29","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":5478,"name":"_conversionRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5555,"src":"6125:15:29","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$_t_bytes_memory_ptr_$returns$_t_uint256_$","typeString":"function (address,address,bytes memory) view returns (uint256)"}},"id":5484,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6125:66:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6100:91:29"},{"assignments":[5487],"declarations":[{"constant":false,"id":5487,"mutability":"mutable","name":"totalPrice","nodeType":"VariableDeclaration","scope":5542,"src":"6202:18:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5486,"name":"uint256","nodeType":"ElementaryTypeName","src":"6202:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5501,"initialValue":{"arguments":[{"expression":{"id":5498,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5444,"src":"6278:8:29","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":5499,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"quantity","nodeType":"MemberAccess","referencedDeclaration":5569,"src":"6278:17:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":5495,"name":"conversionRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5477,"src":"6258:14:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"},"id":5492,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":5490,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6246:2:29","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3138","id":5491,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6250:2:29","typeDescriptions":{"typeIdentifier":"t_rational_18_by_1","typeString":"int_const 18"},"value":"18"},"src":"6246:6:29","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"}],"expression":{"id":5488,"name":"referenceUnitPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5461,"src":"6223:18:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5489,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"mul","nodeType":"MemberAccess","referencedDeclaration":1242,"src":"6223:22:29","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":5493,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6223:30:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5494,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"div","nodeType":"MemberAccess","referencedDeclaration":1264,"src":"6223:34:29","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":5496,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6223:50:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5497,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"mul","nodeType":"MemberAccess","referencedDeclaration":1242,"src":"6223:54:29","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":5500,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6223:73:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6202:94:29"},{"expression":{"id":5510,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":5502,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5444,"src":"6307:8:29","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":5504,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"pricingData","nodeType":"MemberAccess","referencedDeclaration":5576,"src":"6307:20:29","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"32","id":5508,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6344:1:29","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"}],"id":5507,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"6330:13:29","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (bytes32[] memory)"},"typeName":{"baseType":{"id":5505,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6334:7:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":5506,"nodeType":"ArrayTypeName","src":"6334:9:29","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}}},"id":5509,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6330:16:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"src":"6307:39:29","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"id":5511,"nodeType":"ExpressionStatement","src":"6307:39:29"},{"expression":{"id":5521,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":5512,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5444,"src":"6356:8:29","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":5515,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"pricingData","nodeType":"MemberAccess","referencedDeclaration":5576,"src":"6356:20:29","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"id":5516,"indexExpression":{"hexValue":"30","id":5514,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6377:1:29","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6356:23:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":5519,"name":"unitPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5448,"src":"6390:9:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5518,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6382:7:29","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":5517,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6382:7:29","typeDescriptions":{}}},"id":5520,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6382:18:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"6356:44:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":5522,"nodeType":"ExpressionStatement","src":"6356:44:29"},{"expression":{"id":5532,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":5523,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5444,"src":"6410:8:29","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":5526,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"pricingData","nodeType":"MemberAccess","referencedDeclaration":5576,"src":"6410:20:29","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"id":5527,"indexExpression":{"hexValue":"31","id":5525,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6431:1:29","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6410:23:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":5530,"name":"conversionRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5477,"src":"6444:14:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5529,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6436:7:29","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":5528,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6436:7:29","typeDescriptions":{}}},"id":5531,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6436:23:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"6410:49:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":5533,"nodeType":"ExpressionStatement","src":"6410:49:29"},{"expression":{"id":5538,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":5534,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5444,"src":"6470:8:29","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":5536,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"totalPrice","nodeType":"MemberAccess","referencedDeclaration":5573,"src":"6470:19:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":5537,"name":"totalPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5487,"src":"6492:10:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6470:32:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5539,"nodeType":"ExpressionStatement","src":"6470:32:29"},{"expression":{"hexValue":"74727565","id":5540,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6520:4:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":5452,"id":5541,"nodeType":"Return","src":"6513:11:29"}]},"documentation":{"id":5442,"nodeType":"StructuredDocumentation","src":"5043:681:29","text":" Computes the oracle-based purchase price.\n @dev Responsibilities:\n  - Computes the oracle-based pricing formula, including any discount logic and price conversion;\n  - Set the value of `purchase.totalPrice`;\n  - Add any relevant extra data related to pricing in `purchase.pricingData` and document how to interpret it.\n @dev Reverts in case of price overflow.\n @param purchase The purchase conditions.\n @param tokenPrices Storage pointer to a mapping of SKU token prices.\n @param unitPrice The unit price of a SKU for the specified payment token.\n @return True if oracle pricing was handled, false otherwise."},"id":5543,"implemented":true,"kind":"function","modifiers":[],"name":"_oraclePricing","nodeType":"FunctionDefinition","parameters":{"id":5449,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5444,"mutability":"mutable","name":"purchase","nodeType":"VariableDeclaration","scope":5543,"src":"5762:28:29","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"},"typeName":{"id":5443,"name":"PurchaseData","nodeType":"UserDefinedTypeName","referencedDeclaration":5583,"src":"5762:12:29","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_storage_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"}},"visibility":"internal"},{"constant":false,"id":5446,"mutability":"mutable","name":"tokenPrices","nodeType":"VariableDeclaration","scope":5543,"src":"5800:31:29","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map"},"typeName":{"id":5445,"name":"EnumMap.Map","nodeType":"UserDefinedTypeName","referencedDeclaration":119,"src":"5800:11:29","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map"}},"visibility":"internal"},{"constant":false,"id":5448,"mutability":"mutable","name":"unitPrice","nodeType":"VariableDeclaration","scope":5543,"src":"5841:17:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5447,"name":"uint256","nodeType":"ElementaryTypeName","src":"5841:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5752:112:29"},"returnParameters":{"id":5452,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5451,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":5543,"src":"5896:4:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5450,"name":"bool","nodeType":"ElementaryTypeName","src":"5896:4:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5895:6:29"},"scope":5556,"src":"5729:802:29","stateMutability":"view","virtual":true,"visibility":"internal"},{"documentation":{"id":5544,"nodeType":"StructuredDocumentation","src":"6537:565:29","text":" Retrieves the token conversion rate for the `fromToken`/`toToken` pair via the oracle.\n @dev Reverts if the oracle does not provide a conversion rate for the pair.\n @param fromToken The source token from which the conversion rate is derived from.\n @param toToken the destination token from which the conversion rate is derived from.\n @param data Additional data with no specified format for deriving the conversion rate.\n @return rate The conversion rate for the `fromToken`/`toToken` pair, retrieved via the oracle."},"id":5555,"implemented":false,"kind":"function","modifiers":[],"name":"_conversionRate","nodeType":"FunctionDefinition","parameters":{"id":5551,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5546,"mutability":"mutable","name":"fromToken","nodeType":"VariableDeclaration","scope":5555,"src":"7141:17:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5545,"name":"address","nodeType":"ElementaryTypeName","src":"7141:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5548,"mutability":"mutable","name":"toToken","nodeType":"VariableDeclaration","scope":5555,"src":"7168:15:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5547,"name":"address","nodeType":"ElementaryTypeName","src":"7168:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5550,"mutability":"mutable","name":"data","nodeType":"VariableDeclaration","scope":5555,"src":"7193:17:29","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":5549,"name":"bytes","nodeType":"ElementaryTypeName","src":"7193:5:29","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7131:85:29"},"returnParameters":{"id":5554,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5553,"mutability":"mutable","name":"rate","nodeType":"VariableDeclaration","scope":5555,"src":"7248:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5552,"name":"uint256","nodeType":"ElementaryTypeName","src":"7248:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7247:14:29"},"scope":5556,"src":"7107:155:29","stateMutability":"view","virtual":true,"visibility":"internal"}],"scope":5557,"src":"722:6542:29"}],"src":"33:7232:29"},"id":29},"contracts/sale/abstract/PurchaseLifeCycles.sol":{"ast":{"absolutePath":"contracts/sale/abstract/PurchaseLifeCycles.sol","exportedSymbols":{"PurchaseLifeCycles":[5671]},"id":5672,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":5558,"literals":["solidity",">=","0.7",".6","<","0.8",".0"],"nodeType":"PragmaDirective","src":"33:31:30"},{"abstract":true,"baseContracts":[],"contractDependencies":[],"contractKind":"contract","documentation":{"id":5559,"nodeType":"StructuredDocumentation","src":"66:117:30","text":" @title PurchaseLifeCycles\n An abstract contract which define the life cycles for a purchase implementer."},"fullyImplemented":false,"id":5671,"linearizedBaseContracts":[5671],"name":"PurchaseLifeCycles","nodeType":"ContractDefinition","nodes":[{"canonicalName":"PurchaseLifeCycles.PurchaseData","id":5583,"members":[{"constant":false,"id":5561,"mutability":"mutable","name":"purchaser","nodeType":"VariableDeclaration","scope":5583,"src":"391:25:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":5560,"name":"address","nodeType":"ElementaryTypeName","src":"391:15:30","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":5563,"mutability":"mutable","name":"recipient","nodeType":"VariableDeclaration","scope":5583,"src":"426:25:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":5562,"name":"address","nodeType":"ElementaryTypeName","src":"426:15:30","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":5565,"mutability":"mutable","name":"token","nodeType":"VariableDeclaration","scope":5583,"src":"461:13:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5564,"name":"address","nodeType":"ElementaryTypeName","src":"461:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5567,"mutability":"mutable","name":"sku","nodeType":"VariableDeclaration","scope":5583,"src":"484:11:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5566,"name":"bytes32","nodeType":"ElementaryTypeName","src":"484:7:30","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":5569,"mutability":"mutable","name":"quantity","nodeType":"VariableDeclaration","scope":5583,"src":"505:16:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5568,"name":"uint256","nodeType":"ElementaryTypeName","src":"505:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5571,"mutability":"mutable","name":"userData","nodeType":"VariableDeclaration","scope":5583,"src":"531:14:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":5570,"name":"bytes","nodeType":"ElementaryTypeName","src":"531:5:30","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":5573,"mutability":"mutable","name":"totalPrice","nodeType":"VariableDeclaration","scope":5583,"src":"555:18:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5572,"name":"uint256","nodeType":"ElementaryTypeName","src":"555:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5576,"mutability":"mutable","name":"pricingData","nodeType":"VariableDeclaration","scope":5583,"src":"583:21:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":5574,"name":"bytes32","nodeType":"ElementaryTypeName","src":"583:7:30","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":5575,"nodeType":"ArrayTypeName","src":"583:9:30","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"},{"constant":false,"id":5579,"mutability":"mutable","name":"paymentData","nodeType":"VariableDeclaration","scope":5583,"src":"614:21:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":5577,"name":"bytes32","nodeType":"ElementaryTypeName","src":"614:7:30","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":5578,"nodeType":"ArrayTypeName","src":"614:9:30","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"},{"constant":false,"id":5582,"mutability":"mutable","name":"deliveryData","nodeType":"VariableDeclaration","scope":5583,"src":"645:22:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":5580,"name":"bytes32","nodeType":"ElementaryTypeName","src":"645:7:30","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":5581,"nodeType":"ArrayTypeName","src":"645:9:30","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"name":"PurchaseData","nodeType":"StructDefinition","scope":5671,"src":"361:313:30","visibility":"public"},{"body":{"id":5612,"nodeType":"Block","src":"1020:153:30","statements":[{"expression":{"arguments":[{"id":5595,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5586,"src":"1042:8:30","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}],"id":5594,"name":"_validation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5646,"src":"1030:11:30","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_PurchaseData_$5583_memory_ptr_$returns$__$","typeString":"function (struct PurchaseLifeCycles.PurchaseData memory) view"}},"id":5596,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1030:21:30","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5597,"nodeType":"ExpressionStatement","src":"1030:21:30"},{"expression":{"arguments":[{"id":5599,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5586,"src":"1070:8:30","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}],"id":5598,"name":"_pricing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5652,"src":"1061:8:30","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_PurchaseData_$5583_memory_ptr_$returns$__$","typeString":"function (struct PurchaseLifeCycles.PurchaseData memory) view"}},"id":5600,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1061:18:30","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5601,"nodeType":"ExpressionStatement","src":"1061:18:30"},{"expression":{"id":5605,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5602,"name":"totalPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5589,"src":"1090:10:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":5603,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5586,"src":"1103:8:30","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":5604,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalPrice","nodeType":"MemberAccess","referencedDeclaration":5573,"src":"1103:19:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1090:32:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5606,"nodeType":"ExpressionStatement","src":"1090:32:30"},{"expression":{"id":5610,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5607,"name":"pricingData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5592,"src":"1132:11:30","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":5608,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5586,"src":"1146:8:30","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":5609,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"pricingData","nodeType":"MemberAccess","referencedDeclaration":5576,"src":"1146:20:30","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"src":"1132:34:30","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"id":5611,"nodeType":"ExpressionStatement","src":"1132:34:30"}]},"documentation":{"id":5584,"nodeType":"StructuredDocumentation","src":"781:96:30","text":" `estimatePurchase` lifecycle.\n @param purchase The purchase conditions."},"id":5613,"implemented":true,"kind":"function","modifiers":[],"name":"_estimatePurchase","nodeType":"FunctionDefinition","parameters":{"id":5587,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5586,"mutability":"mutable","name":"purchase","nodeType":"VariableDeclaration","scope":5613,"src":"909:28:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"},"typeName":{"id":5585,"name":"PurchaseData","nodeType":"UserDefinedTypeName","referencedDeclaration":5583,"src":"909:12:30","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_storage_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"}},"visibility":"internal"}],"src":"908:30:30"},"returnParameters":{"id":5593,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5589,"mutability":"mutable","name":"totalPrice","nodeType":"VariableDeclaration","scope":5613,"src":"970:18:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5588,"name":"uint256","nodeType":"ElementaryTypeName","src":"970:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5592,"mutability":"mutable","name":"pricingData","nodeType":"VariableDeclaration","scope":5613,"src":"990:28:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":5590,"name":"bytes32","nodeType":"ElementaryTypeName","src":"990:7:30","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":5591,"nodeType":"ArrayTypeName","src":"990:9:30","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"src":"969:50:30"},"scope":5671,"src":"882:291:30","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":5639,"nodeType":"Block","src":"1344:156:30","statements":[{"expression":{"arguments":[{"id":5620,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5616,"src":"1366:8:30","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}],"id":5619,"name":"_validation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5646,"src":"1354:11:30","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_PurchaseData_$5583_memory_ptr_$returns$__$","typeString":"function (struct PurchaseLifeCycles.PurchaseData memory) view"}},"id":5621,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1354:21:30","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5622,"nodeType":"ExpressionStatement","src":"1354:21:30"},{"expression":{"arguments":[{"id":5624,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5616,"src":"1394:8:30","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}],"id":5623,"name":"_pricing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5652,"src":"1385:8:30","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_PurchaseData_$5583_memory_ptr_$returns$__$","typeString":"function (struct PurchaseLifeCycles.PurchaseData memory) view"}},"id":5625,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1385:18:30","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5626,"nodeType":"ExpressionStatement","src":"1385:18:30"},{"expression":{"arguments":[{"id":5628,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5616,"src":"1422:8:30","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}],"id":5627,"name":"_payment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5658,"src":"1413:8:30","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_PurchaseData_$5583_memory_ptr_$returns$__$","typeString":"function (struct PurchaseLifeCycles.PurchaseData memory)"}},"id":5629,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1413:18:30","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5630,"nodeType":"ExpressionStatement","src":"1413:18:30"},{"expression":{"arguments":[{"id":5632,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5616,"src":"1451:8:30","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}],"id":5631,"name":"_delivery","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5664,"src":"1441:9:30","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_PurchaseData_$5583_memory_ptr_$returns$__$","typeString":"function (struct PurchaseLifeCycles.PurchaseData memory)"}},"id":5633,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1441:19:30","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5634,"nodeType":"ExpressionStatement","src":"1441:19:30"},{"expression":{"arguments":[{"id":5636,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5616,"src":"1484:8:30","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}],"id":5635,"name":"_notification","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5670,"src":"1470:13:30","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_PurchaseData_$5583_memory_ptr_$returns$__$","typeString":"function (struct PurchaseLifeCycles.PurchaseData memory)"}},"id":5637,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1470:23:30","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5638,"nodeType":"ExpressionStatement","src":"1470:23:30"}]},"documentation":{"id":5614,"nodeType":"StructuredDocumentation","src":"1179:91:30","text":" `purchaseFor` lifecycle.\n @param purchase The purchase conditions."},"id":5640,"implemented":true,"kind":"function","modifiers":[],"name":"_purchaseFor","nodeType":"FunctionDefinition","parameters":{"id":5617,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5616,"mutability":"mutable","name":"purchase","nodeType":"VariableDeclaration","scope":5640,"src":"1297:28:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"},"typeName":{"id":5615,"name":"PurchaseData","nodeType":"UserDefinedTypeName","referencedDeclaration":5583,"src":"1297:12:30","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_storage_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"}},"visibility":"internal"}],"src":"1296:30:30"},"returnParameters":{"id":5618,"nodeType":"ParameterList","parameters":[],"src":"1344:0:30"},"scope":5671,"src":"1275:225:30","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"documentation":{"id":5641,"nodeType":"StructuredDocumentation","src":"1607:233:30","text":" Lifecycle step which validates the purchase pre-conditions.\n @dev Responsibilities:\n  - Ensure that the purchase pre-conditions are met and revert if not.\n @param purchase The purchase conditions."},"id":5646,"implemented":false,"kind":"function","modifiers":[],"name":"_validation","nodeType":"FunctionDefinition","parameters":{"id":5644,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5643,"mutability":"mutable","name":"purchase","nodeType":"VariableDeclaration","scope":5646,"src":"1866:28:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"},"typeName":{"id":5642,"name":"PurchaseData","nodeType":"UserDefinedTypeName","referencedDeclaration":5583,"src":"1866:12:30","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_storage_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"}},"visibility":"internal"}],"src":"1865:30:30"},"returnParameters":{"id":5645,"nodeType":"ParameterList","parameters":[],"src":"1917:0:30"},"scope":5671,"src":"1845:73:30","stateMutability":"view","virtual":true,"visibility":"internal"},{"documentation":{"id":5647,"nodeType":"StructuredDocumentation","src":"1924:404:30","text":" Lifecycle step which computes the purchase price.\n @dev Responsibilities:\n  - Computes the pricing formula, including any discount logic and price conversion;\n  - Set the value of `purchase.totalPrice`;\n  - Add any relevant extra data related to pricing in `purchase.pricingData` and document how to interpret it.\n @param purchase The purchase conditions."},"id":5652,"implemented":false,"kind":"function","modifiers":[],"name":"_pricing","nodeType":"FunctionDefinition","parameters":{"id":5650,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5649,"mutability":"mutable","name":"purchase","nodeType":"VariableDeclaration","scope":5652,"src":"2351:28:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"},"typeName":{"id":5648,"name":"PurchaseData","nodeType":"UserDefinedTypeName","referencedDeclaration":5583,"src":"2351:12:30","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_storage_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"}},"visibility":"internal"}],"src":"2350:30:30"},"returnParameters":{"id":5651,"nodeType":"ParameterList","parameters":[],"src":"2402:0:30"},"scope":5671,"src":"2333:70:30","stateMutability":"view","virtual":true,"visibility":"internal"},{"documentation":{"id":5653,"nodeType":"StructuredDocumentation","src":"2409:402:30","text":" Lifecycle step which manages the transfer of funds from the purchaser.\n @dev Responsibilities:\n  - Ensure the payment reaches destination in the expected output token;\n  - Handle any token swap logic;\n  - Add any relevant extra data related to payment in `purchase.paymentData` and document how to interpret it.\n @param purchase The purchase conditions."},"id":5658,"implemented":false,"kind":"function","modifiers":[],"name":"_payment","nodeType":"FunctionDefinition","parameters":{"id":5656,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5655,"mutability":"mutable","name":"purchase","nodeType":"VariableDeclaration","scope":5658,"src":"2834:28:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"},"typeName":{"id":5654,"name":"PurchaseData","nodeType":"UserDefinedTypeName","referencedDeclaration":5583,"src":"2834:12:30","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_storage_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"}},"visibility":"internal"}],"src":"2833:30:30"},"returnParameters":{"id":5657,"nodeType":"ParameterList","parameters":[],"src":"2880:0:30"},"scope":5671,"src":"2816:65:30","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"documentation":{"id":5659,"nodeType":"StructuredDocumentation","src":"2887:484:30","text":" Lifecycle step which delivers the purchased SKUs to the recipient.\n @dev Responsibilities:\n  - Ensure the product is delivered to the recipient, if that is the contract's responsibility.\n  - Handle any internal logic related to the delivery, including the remaining supply update;\n  - Add any relevant extra data related to delivery in `purchase.deliveryData` and document how to interpret it.\n @param purchase The purchase conditions."},"id":5664,"implemented":false,"kind":"function","modifiers":[],"name":"_delivery","nodeType":"FunctionDefinition","parameters":{"id":5662,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5661,"mutability":"mutable","name":"purchase","nodeType":"VariableDeclaration","scope":5664,"src":"3395:28:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"},"typeName":{"id":5660,"name":"PurchaseData","nodeType":"UserDefinedTypeName","referencedDeclaration":5583,"src":"3395:12:30","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_storage_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"}},"visibility":"internal"}],"src":"3394:30:30"},"returnParameters":{"id":5663,"nodeType":"ParameterList","parameters":[],"src":"3441:0:30"},"scope":5671,"src":"3376:66:30","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"documentation":{"id":5665,"nodeType":"StructuredDocumentation","src":"3448:316:30","text":" Lifecycle step which notifies of the purchase.\n @dev Responsibilities:\n  - Manage after-purchase event(s) emission.\n  - Handle calls to the notifications receiver contract's `onPurchaseNotificationReceived` function, if applicable.\n @param purchase The purchase conditions."},"id":5670,"implemented":false,"kind":"function","modifiers":[],"name":"_notification","nodeType":"FunctionDefinition","parameters":{"id":5668,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5667,"mutability":"mutable","name":"purchase","nodeType":"VariableDeclaration","scope":5670,"src":"3792:28:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"},"typeName":{"id":5666,"name":"PurchaseData","nodeType":"UserDefinedTypeName","referencedDeclaration":5583,"src":"3792:12:30","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_storage_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"}},"visibility":"internal"}],"src":"3791:30:30"},"returnParameters":{"id":5669,"nodeType":"ParameterList","parameters":[],"src":"3838:0:30"},"scope":5671,"src":"3769:70:30","stateMutability":"nonpayable","virtual":true,"visibility":"internal"}],"scope":5672,"src":"184:3657:30"}],"src":"33:3809:30"},"id":30},"contracts/sale/abstract/PurchaseNotificationsReceiver.sol":{"ast":{"absolutePath":"contracts/sale/abstract/PurchaseNotificationsReceiver.sol","exportedSymbols":{"IERC165":[563],"IPurchaseNotificationsReceiver":[7220],"PurchaseNotificationsReceiver":[5706]},"id":5707,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":5673,"literals":["solidity",">=","0.7",".6","<","0.8",".0"],"nodeType":"PragmaDirective","src":"33:31:31"},{"absolutePath":"@animoca/ethereum-contracts-core-1.1.2/contracts/introspection/IERC165.sol","file":"@animoca/ethereum-contracts-core-1.1.2/contracts/introspection/IERC165.sol","id":5675,"nodeType":"ImportDirective","scope":5707,"sourceUnit":564,"src":"66:99:31","symbolAliases":[{"foreign":{"id":5674,"name":"IERC165","nodeType":"Identifier","overloadedDeclarations":[],"src":"74:7:31","typeDescriptions":{}}}],"unitAlias":""},{"absolutePath":"contracts/sale/interfaces/IPurchaseNotificationsReceiver.sol","file":"../interfaces/IPurchaseNotificationsReceiver.sol","id":5677,"nodeType":"ImportDirective","scope":5707,"sourceUnit":7221,"src":"166:96:31","symbolAliases":[{"foreign":{"id":5676,"name":"IPurchaseNotificationsReceiver","nodeType":"Identifier","overloadedDeclarations":[],"src":"174:30:31","typeDescriptions":{}}}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":5679,"name":"IPurchaseNotificationsReceiver","nodeType":"UserDefinedTypeName","referencedDeclaration":7220,"src":"427:30:31","typeDescriptions":{"typeIdentifier":"t_contract$_IPurchaseNotificationsReceiver_$7220","typeString":"contract IPurchaseNotificationsReceiver"}},"id":5680,"nodeType":"InheritanceSpecifier","src":"427:30:31"},{"baseName":{"id":5681,"name":"IERC165","nodeType":"UserDefinedTypeName","referencedDeclaration":563,"src":"459:7:31","typeDescriptions":{"typeIdentifier":"t_contract$_IERC165_$563","typeString":"contract IERC165"}},"id":5682,"nodeType":"InheritanceSpecifier","src":"459:7:31"}],"contractDependencies":[563,7220],"contractKind":"contract","documentation":{"id":5678,"nodeType":"StructuredDocumentation","src":"264:111:31","text":" @title PurchaseNotificationsReceiver\n Abstract base IPurchaseNotificationsReceiver implementation."},"fullyImplemented":false,"id":5706,"linearizedBaseContracts":[5706,563,7220],"name":"PurchaseNotificationsReceiver","nodeType":"ContractDefinition","nodes":[{"constant":true,"id":5685,"mutability":"constant","name":"_PURCHASE_NOTIFICATION_REJECTED","nodeType":"VariableDeclaration","scope":5706,"src":"473:69:31","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":5683,"name":"bytes4","nodeType":"ElementaryTypeName","src":"473:6:31","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"value":{"hexValue":"30786666666666666666","id":5684,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"532:10:31","typeDescriptions":{"typeIdentifier":"t_rational_4294967295_by_1","typeString":"int_const 4294967295"},"value":"0xffffffff"},"visibility":"internal"},{"body":{"id":5688,"nodeType":"Block","src":"563:2:31","statements":[]},"id":5689,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nodeType":"FunctionDefinition","parameters":{"id":5686,"nodeType":"ParameterList","parameters":[],"src":"560:2:31"},"returnParameters":{"id":5687,"nodeType":"ParameterList","parameters":[],"src":"563:0:31"},"scope":5706,"src":"549:16:31","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[562],"body":{"id":5704,"nodeType":"Block","src":"664:87:31","statements":[{"expression":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":5702,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5697,"name":"interfaceId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5691,"src":"681:11:31","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"arguments":[{"id":5699,"name":"IPurchaseNotificationsReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7220,"src":"701:30:31","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPurchaseNotificationsReceiver_$7220_$","typeString":"type(contract IPurchaseNotificationsReceiver)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_contract$_IPurchaseNotificationsReceiver_$7220_$","typeString":"type(contract IPurchaseNotificationsReceiver)"}],"id":5698,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"696:4:31","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":5700,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"696:36:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_contract$_IPurchaseNotificationsReceiver_$7220","typeString":"type(contract IPurchaseNotificationsReceiver)"}},"id":5701,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"interfaceId","nodeType":"MemberAccess","src":"696:48:31","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"681:63:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":5696,"id":5703,"nodeType":"Return","src":"674:70:31"}]},"functionSelector":"01ffc9a7","id":5705,"implemented":true,"kind":"function","modifiers":[],"name":"supportsInterface","nodeType":"FunctionDefinition","overrides":{"id":5693,"nodeType":"OverrideSpecifier","overrides":[],"src":"640:8:31"},"parameters":{"id":5692,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5691,"mutability":"mutable","name":"interfaceId","nodeType":"VariableDeclaration","scope":5705,"src":"598:18:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":5690,"name":"bytes4","nodeType":"ElementaryTypeName","src":"598:6:31","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"597:20:31"},"returnParameters":{"id":5696,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5695,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":5705,"src":"658:4:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5694,"name":"bool","nodeType":"ElementaryTypeName","src":"658:4:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"657:6:31"},"scope":5706,"src":"571:180:31","stateMutability":"view","virtual":true,"visibility":"external"}],"scope":5707,"src":"376:377:31"}],"src":"33:721:31"},"id":31},"contracts/sale/abstract/Sale.sol":{"ast":{"absolutePath":"contracts/sale/abstract/Sale.sol","exportedSymbols":{"AddressIsContract":[1004],"EnumMap":[362],"EnumSet":[551],"IPurchaseNotificationsReceiver":[7220],"ISale":[7346],"Pausable":[646],"PayoutWallet":[812],"PurchaseLifeCycles":[5671],"SafeMath":[1359],"Sale":[6694],"Startable":[715]},"id":6695,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":5708,"literals":["solidity",">=","0.7",".6","<","0.8",".0"],"nodeType":"PragmaDirective","src":"33:31:32"},{"absolutePath":"@animoca/ethereum-contracts-core-1.1.2/contracts/algo/EnumMap.sol","file":"@animoca/ethereum-contracts-core-1.1.2/contracts/algo/EnumMap.sol","id":5710,"nodeType":"ImportDirective","scope":6695,"sourceUnit":363,"src":"66:90:32","symbolAliases":[{"foreign":{"id":5709,"name":"EnumMap","nodeType":"Identifier","overloadedDeclarations":[],"src":"74:7:32","typeDescriptions":{}}}],"unitAlias":""},{"absolutePath":"@animoca/ethereum-contracts-core-1.1.2/contracts/algo/EnumSet.sol","file":"@animoca/ethereum-contracts-core-1.1.2/contracts/algo/EnumSet.sol","id":5712,"nodeType":"ImportDirective","scope":6695,"sourceUnit":552,"src":"157:90:32","symbolAliases":[{"foreign":{"id":5711,"name":"EnumSet","nodeType":"Identifier","overloadedDeclarations":[],"src":"165:7:32","typeDescriptions":{}}}],"unitAlias":""},{"absolutePath":"@animoca/ethereum-contracts-core-1.1.2/contracts/payment/PayoutWallet.sol","file":"@animoca/ethereum-contracts-core-1.1.2/contracts/payment/PayoutWallet.sol","id":5714,"nodeType":"ImportDirective","scope":6695,"sourceUnit":813,"src":"248:103:32","symbolAliases":[{"foreign":{"id":5713,"name":"PayoutWallet","nodeType":"Identifier","overloadedDeclarations":[],"src":"256:12:32","typeDescriptions":{}}}],"unitAlias":""},{"absolutePath":"@animoca/ethereum-contracts-core-1.1.2/contracts/lifecycle/Startable.sol","file":"@animoca/ethereum-contracts-core-1.1.2/contracts/lifecycle/Startable.sol","id":5716,"nodeType":"ImportDirective","scope":6695,"sourceUnit":716,"src":"352:99:32","symbolAliases":[{"foreign":{"id":5715,"name":"Startable","nodeType":"Identifier","overloadedDeclarations":[],"src":"360:9:32","typeDescriptions":{}}}],"unitAlias":""},{"absolutePath":"@animoca/ethereum-contracts-core-1.1.2/contracts/lifecycle/Pausable.sol","file":"@animoca/ethereum-contracts-core-1.1.2/contracts/lifecycle/Pausable.sol","id":5718,"nodeType":"ImportDirective","scope":6695,"sourceUnit":647,"src":"452:97:32","symbolAliases":[{"foreign":{"id":5717,"name":"Pausable","nodeType":"Identifier","overloadedDeclarations":[],"src":"460:8:32","typeDescriptions":{}}}],"unitAlias":""},{"absolutePath":"@animoca/ethereum-contracts-core-1.1.2/contracts/utils/types/AddressIsContract.sol","file":"@animoca/ethereum-contracts-core-1.1.2/contracts/utils/types/AddressIsContract.sol","id":5720,"nodeType":"ImportDirective","scope":6695,"sourceUnit":1005,"src":"550:117:32","symbolAliases":[{"foreign":{"id":5719,"name":"AddressIsContract","nodeType":"Identifier","overloadedDeclarations":[],"src":"558:17:32","typeDescriptions":{}}}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/math/SafeMath.sol","file":"@openzeppelin/contracts/math/SafeMath.sol","id":5722,"nodeType":"ImportDirective","scope":6695,"sourceUnit":1360,"src":"668:67:32","symbolAliases":[{"foreign":{"id":5721,"name":"SafeMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"676:8:32","typeDescriptions":{}}}],"unitAlias":""},{"absolutePath":"contracts/sale/interfaces/ISale.sol","file":"../interfaces/ISale.sol","id":5724,"nodeType":"ImportDirective","scope":6695,"sourceUnit":7347,"src":"736:46:32","symbolAliases":[{"foreign":{"id":5723,"name":"ISale","nodeType":"Identifier","overloadedDeclarations":[],"src":"744:5:32","typeDescriptions":{}}}],"unitAlias":""},{"absolutePath":"contracts/sale/interfaces/IPurchaseNotificationsReceiver.sol","file":"../interfaces/IPurchaseNotificationsReceiver.sol","id":5726,"nodeType":"ImportDirective","scope":6695,"sourceUnit":7221,"src":"783:96:32","symbolAliases":[{"foreign":{"id":5725,"name":"IPurchaseNotificationsReceiver","nodeType":"Identifier","overloadedDeclarations":[],"src":"791:30:32","typeDescriptions":{}}}],"unitAlias":""},{"absolutePath":"contracts/sale/abstract/PurchaseLifeCycles.sol","file":"./PurchaseLifeCycles.sol","id":5728,"nodeType":"ImportDirective","scope":6695,"sourceUnit":5672,"src":"880:60:32","symbolAliases":[{"foreign":{"id":5727,"name":"PurchaseLifeCycles","nodeType":"Identifier","overloadedDeclarations":[],"src":"888:18:32","typeDescriptions":{}}}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":5730,"name":"PurchaseLifeCycles","nodeType":"UserDefinedTypeName","referencedDeclaration":5671,"src":"1290:18:32","typeDescriptions":{"typeIdentifier":"t_contract$_PurchaseLifeCycles_$5671","typeString":"contract PurchaseLifeCycles"}},"id":5731,"nodeType":"InheritanceSpecifier","src":"1290:18:32"},{"baseName":{"id":5732,"name":"ISale","nodeType":"UserDefinedTypeName","referencedDeclaration":7346,"src":"1310:5:32","typeDescriptions":{"typeIdentifier":"t_contract$_ISale_$7346","typeString":"contract ISale"}},"id":5733,"nodeType":"InheritanceSpecifier","src":"1310:5:32"},{"baseName":{"id":5734,"name":"PayoutWallet","nodeType":"UserDefinedTypeName","referencedDeclaration":812,"src":"1317:12:32","typeDescriptions":{"typeIdentifier":"t_contract$_PayoutWallet_$812","typeString":"contract PayoutWallet"}},"id":5735,"nodeType":"InheritanceSpecifier","src":"1317:12:32"},{"baseName":{"id":5736,"name":"Startable","nodeType":"UserDefinedTypeName","referencedDeclaration":715,"src":"1331:9:32","typeDescriptions":{"typeIdentifier":"t_contract$_Startable_$715","typeString":"contract Startable"}},"id":5737,"nodeType":"InheritanceSpecifier","src":"1331:9:32"},{"baseName":{"id":5738,"name":"Pausable","nodeType":"UserDefinedTypeName","referencedDeclaration":646,"src":"1342:8:32","typeDescriptions":{"typeIdentifier":"t_contract$_Pausable_$646","typeString":"contract Pausable"}},"id":5739,"nodeType":"InheritanceSpecifier","src":"1342:8:32"}],"contractDependencies":[22,103,646,715,736,812,5671,7346],"contractKind":"contract","documentation":{"id":5729,"nodeType":"StructuredDocumentation","src":"942:321:32","text":" @title Sale\n An abstract base sale contract with a minimal implementation of ISale and administration functions.\n  A minimal implementation of the `_validation`, `_delivery` and `notification` life cycle step functions\n  are provided, but the inheriting contract must implement `_pricing` and `_payment`."},"fullyImplemented":false,"id":6694,"linearizedBaseContracts":[6694,646,715,812,103,22,736,7346,5671],"name":"Sale","nodeType":"ContractDefinition","nodes":[{"id":5742,"libraryName":{"id":5740,"name":"AddressIsContract","nodeType":"UserDefinedTypeName","referencedDeclaration":1004,"src":"1363:17:32","typeDescriptions":{"typeIdentifier":"t_contract$_AddressIsContract_$1004","typeString":"library AddressIsContract"}},"nodeType":"UsingForDirective","src":"1357:36:32","typeName":{"id":5741,"name":"address","nodeType":"ElementaryTypeName","src":"1385:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},{"id":5745,"libraryName":{"id":5743,"name":"SafeMath","nodeType":"UserDefinedTypeName","referencedDeclaration":1359,"src":"1404:8:32","typeDescriptions":{"typeIdentifier":"t_contract$_SafeMath_$1359","typeString":"library SafeMath"}},"nodeType":"UsingForDirective","src":"1398:27:32","typeName":{"id":5744,"name":"uint256","nodeType":"ElementaryTypeName","src":"1417:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":5748,"libraryName":{"id":5746,"name":"EnumSet","nodeType":"UserDefinedTypeName","referencedDeclaration":551,"src":"1436:7:32","typeDescriptions":{"typeIdentifier":"t_contract$_EnumSet_$551","typeString":"library EnumSet"}},"nodeType":"UsingForDirective","src":"1430:30:32","typeName":{"id":5747,"name":"EnumSet.Set","nodeType":"UserDefinedTypeName","referencedDeclaration":373,"src":"1448:11:32","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$373_storage_ptr","typeString":"struct EnumSet.Set"}}},{"id":5751,"libraryName":{"id":5749,"name":"EnumMap","nodeType":"UserDefinedTypeName","referencedDeclaration":362,"src":"1471:7:32","typeDescriptions":{"typeIdentifier":"t_contract$_EnumMap_$362","typeString":"library EnumMap"}},"nodeType":"UsingForDirective","src":"1465:30:32","typeName":{"id":5750,"name":"EnumMap.Map","nodeType":"UserDefinedTypeName","referencedDeclaration":119,"src":"1483:11:32","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map"}}},{"canonicalName":"Sale.SkuInfo","id":5762,"members":[{"constant":false,"id":5753,"mutability":"mutable","name":"totalSupply","nodeType":"VariableDeclaration","scope":5762,"src":"1526:19:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5752,"name":"uint256","nodeType":"ElementaryTypeName","src":"1526:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5755,"mutability":"mutable","name":"remainingSupply","nodeType":"VariableDeclaration","scope":5762,"src":"1555:23:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5754,"name":"uint256","nodeType":"ElementaryTypeName","src":"1555:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5757,"mutability":"mutable","name":"maxQuantityPerPurchase","nodeType":"VariableDeclaration","scope":5762,"src":"1588:30:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5756,"name":"uint256","nodeType":"ElementaryTypeName","src":"1588:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5759,"mutability":"mutable","name":"notificationsReceiver","nodeType":"VariableDeclaration","scope":5762,"src":"1628:29:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5758,"name":"address","nodeType":"ElementaryTypeName","src":"1628:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5761,"mutability":"mutable","name":"prices","nodeType":"VariableDeclaration","scope":5762,"src":"1667:18:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map"},"typeName":{"id":5760,"name":"EnumMap.Map","nodeType":"UserDefinedTypeName","referencedDeclaration":119,"src":"1667:11:32","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map"}},"visibility":"internal"}],"name":"SkuInfo","nodeType":"StructDefinition","scope":6694,"src":"1501:191:32","visibility":"public"},{"baseFunctions":[7279],"constant":true,"functionSelector":"5c4fafc7","id":5769,"mutability":"constant","name":"TOKEN_ETH","nodeType":"VariableDeclaration","overrides":{"id":5764,"nodeType":"OverrideSpecifier","overrides":[],"src":"1722:8:32"},"scope":6694,"src":"1698:98:32","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5763,"name":"address","nodeType":"ElementaryTypeName","src":"1698:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":{"arguments":[{"hexValue":"3078303065656565656565656565656565656565656565656565656565656565656565656565656565656565","id":5767,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1751:44:32","typeDescriptions":{"typeIdentifier":"t_rational_1364068194842176056990105843868530818345537040110_by_1","typeString":"int_const 1364...(41 digits omitted)...0110"},"value":"0x00eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_1364068194842176056990105843868530818345537040110_by_1","typeString":"int_const 1364...(41 digits omitted)...0110"}],"id":5766,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1743:7:32","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":5765,"name":"address","nodeType":"ElementaryTypeName","src":"1743:7:32","typeDescriptions":{}}},"id":5768,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1743:53:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"public"},{"baseFunctions":[7285],"constant":true,"functionSelector":"9e049545","id":5777,"mutability":"constant","name":"SUPPLY_UNLIMITED","nodeType":"VariableDeclaration","overrides":{"id":5771,"nodeType":"OverrideSpecifier","overrides":[],"src":"1826:8:32"},"scope":6694,"src":"1802:69:32","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5770,"name":"uint256","nodeType":"ElementaryTypeName","src":"1802:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"expression":{"arguments":[{"id":5774,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1859:7:32","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":5773,"name":"uint256","nodeType":"ElementaryTypeName","src":"1859:7:32","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":5772,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"1854:4:32","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":5775,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1854:13:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":5776,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"1854:17:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":false,"id":5779,"mutability":"mutable","name":"_skus","nodeType":"VariableDeclaration","scope":6694,"src":"1878:26:32","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$373_storage","typeString":"struct EnumSet.Set"},"typeName":{"id":5778,"name":"EnumSet.Set","nodeType":"UserDefinedTypeName","referencedDeclaration":373,"src":"1878:11:32","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$373_storage_ptr","typeString":"struct EnumSet.Set"}},"visibility":"internal"},{"constant":false,"id":5783,"mutability":"mutable","name":"_skuInfos","nodeType":"VariableDeclaration","scope":6694,"src":"1910:46:32","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_SkuInfo_$5762_storage_$","typeString":"mapping(bytes32 => struct Sale.SkuInfo)"},"typeName":{"id":5782,"keyType":{"id":5780,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1918:7:32","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Mapping","src":"1910:27:32","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_SkuInfo_$5762_storage_$","typeString":"mapping(bytes32 => struct Sale.SkuInfo)"},"valueType":{"id":5781,"name":"SkuInfo","nodeType":"UserDefinedTypeName","referencedDeclaration":5762,"src":"1929:7:32","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage_ptr","typeString":"struct Sale.SkuInfo"}}},"visibility":"internal"},{"constant":false,"id":5785,"mutability":"immutable","name":"_skusCapacity","nodeType":"VariableDeclaration","scope":6694,"src":"1963:40:32","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5784,"name":"uint256","nodeType":"ElementaryTypeName","src":"1963:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5787,"mutability":"immutable","name":"_tokensPerSkuCapacity","nodeType":"VariableDeclaration","scope":6694,"src":"2009:48:32","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5786,"name":"uint256","nodeType":"ElementaryTypeName","src":"2009:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"body":{"id":5876,"nodeType":"Block","src":"2560:409:32","statements":[{"expression":{"id":5807,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5805,"name":"_skusCapacity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5785,"src":"2570:13:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":5806,"name":"skusCapacity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5792,"src":"2586:12:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2570:28:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5808,"nodeType":"ExpressionStatement","src":"2570:28:32"},{"expression":{"id":5811,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5809,"name":"_tokensPerSkuCapacity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5787,"src":"2608:21:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":5810,"name":"tokensPerSkuCapacity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5794,"src":"2632:20:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2608:44:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5812,"nodeType":"ExpressionStatement","src":"2608:44:32"},{"assignments":[5817],"declarations":[{"constant":false,"id":5817,"mutability":"mutable","name":"names","nodeType":"VariableDeclaration","scope":5876,"src":"2662:22:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":5815,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2662:7:32","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":5816,"nodeType":"ArrayTypeName","src":"2662:9:32","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"id":5823,"initialValue":{"arguments":[{"hexValue":"32","id":5821,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2701:1:32","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"}],"id":5820,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"2687:13:32","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (bytes32[] memory)"},"typeName":{"baseType":{"id":5818,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2691:7:32","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":5819,"nodeType":"ArrayTypeName","src":"2691:9:32","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}}},"id":5822,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2687:16:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"nodeType":"VariableDeclarationStatement","src":"2662:41:32"},{"assignments":[5828],"declarations":[{"constant":false,"id":5828,"mutability":"mutable","name":"values","nodeType":"VariableDeclaration","scope":5876,"src":"2713:23:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":5826,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2713:7:32","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":5827,"nodeType":"ArrayTypeName","src":"2713:9:32","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"id":5834,"initialValue":{"arguments":[{"hexValue":"32","id":5832,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2753:1:32","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"}],"id":5831,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"2739:13:32","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (bytes32[] memory)"},"typeName":{"baseType":{"id":5829,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2743:7:32","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":5830,"nodeType":"ArrayTypeName","src":"2743:9:32","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}}},"id":5833,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2739:16:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"nodeType":"VariableDeclarationStatement","src":"2713:42:32"},{"expression":{"id":5851,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"baseExpression":{"id":5835,"name":"names","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5817,"src":"2766:5:32","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"id":5837,"indexExpression":{"hexValue":"30","id":5836,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2772:1:32","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2766:8:32","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"baseExpression":{"id":5838,"name":"values","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5828,"src":"2776:6:32","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"id":5840,"indexExpression":{"hexValue":"30","id":5839,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2783:1:32","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2776:9:32","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":5841,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"2765:21:32","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bytes32_$_t_bytes32_$","typeString":"tuple(bytes32,bytes32)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"components":[{"hexValue":"544f4b454e5f455448","id":5842,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2790:11:32","typeDescriptions":{"typeIdentifier":"t_stringliteral_984ee5e2cf3a3fa40f5b4e6560fb381788059808c1b596563760ac5d087568a5","typeString":"literal_string \"TOKEN_ETH\""},"value":"TOKEN_ETH"},{"arguments":[{"arguments":[{"id":5847,"name":"TOKEN_ETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5769,"src":"2819:9:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":5846,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2811:7:32","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":5845,"name":"uint256","nodeType":"ElementaryTypeName","src":"2811:7:32","typeDescriptions":{}}},"id":5848,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2811:18:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5844,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2803:7:32","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":5843,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2803:7:32","typeDescriptions":{}}},"id":5849,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2803:27:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":5850,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"2789:42:32","typeDescriptions":{"typeIdentifier":"t_tuple$_t_stringliteral_984ee5e2cf3a3fa40f5b4e6560fb381788059808c1b596563760ac5d087568a5_$_t_bytes32_$","typeString":"tuple(literal_string \"TOKEN_ETH\",bytes32)"}},"src":"2765:66:32","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5852,"nodeType":"ExpressionStatement","src":"2765:66:32"},{"expression":{"id":5869,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"baseExpression":{"id":5853,"name":"names","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5817,"src":"2842:5:32","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"id":5855,"indexExpression":{"hexValue":"31","id":5854,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2848:1:32","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2842:8:32","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"baseExpression":{"id":5856,"name":"values","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5828,"src":"2852:6:32","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"id":5858,"indexExpression":{"hexValue":"31","id":5857,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2859:1:32","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2852:9:32","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":5859,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"2841:21:32","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bytes32_$_t_bytes32_$","typeString":"tuple(bytes32,bytes32)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"components":[{"hexValue":"535550504c595f554e4c494d49544544","id":5860,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2866:18:32","typeDescriptions":{"typeIdentifier":"t_stringliteral_d37453df4d3b56ac4ba9e6709d100c59d0be6965a3a0cde868b64d4ff8b190f0","typeString":"literal_string \"SUPPLY_UNLIMITED\""},"value":"SUPPLY_UNLIMITED"},{"arguments":[{"arguments":[{"id":5865,"name":"SUPPLY_UNLIMITED","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5777,"src":"2902:16:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5864,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2894:7:32","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":5863,"name":"uint256","nodeType":"ElementaryTypeName","src":"2894:7:32","typeDescriptions":{}}},"id":5866,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2894:25:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5862,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2886:7:32","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":5861,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2886:7:32","typeDescriptions":{}}},"id":5867,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2886:34:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":5868,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"2865:56:32","typeDescriptions":{"typeIdentifier":"t_tuple$_t_stringliteral_d37453df4d3b56ac4ba9e6709d100c59d0be6965a3a0cde868b64d4ff8b190f0_$_t_bytes32_$","typeString":"tuple(literal_string \"SUPPLY_UNLIMITED\",bytes32)"}},"src":"2841:80:32","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5870,"nodeType":"ExpressionStatement","src":"2841:80:32"},{"eventCall":{"arguments":[{"id":5872,"name":"names","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5817,"src":"2948:5:32","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},{"id":5873,"name":"values","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5828,"src":"2955:6:32","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"},{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}],"id":5871,"name":"MagicValues","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7232,"src":"2936:11:32","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_array$_t_bytes32_$dyn_memory_ptr_$_t_array$_t_bytes32_$dyn_memory_ptr_$returns$__$","typeString":"function (bytes32[] memory,bytes32[] memory)"}},"id":5874,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2936:26:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5875,"nodeType":"EmitStatement","src":"2931:31:32"}]},"documentation":{"id":5788,"nodeType":"StructuredDocumentation","src":"2064:311:32","text":" Constructor.\n @dev Emits the `MagicValues` event.\n @dev Emits the `Paused` event.\n @param payoutWallet_ the payout wallet.\n @param skusCapacity the cap for the number of managed SKUs.\n @param tokensPerSkuCapacity the cap for the number of tokens managed per SKU."},"id":5877,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"expression":{"id":5797,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2518:3:32","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":5798,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"2518:10:32","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":5799,"name":"payoutWallet_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5790,"src":"2530:13:32","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"id":5800,"modifierName":{"id":5796,"name":"PayoutWallet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":812,"src":"2505:12:32","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PayoutWallet_$812_$","typeString":"type(contract PayoutWallet)"}},"nodeType":"ModifierInvocation","src":"2505:39:32"},{"arguments":[{"hexValue":"74727565","id":5802,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2554:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"id":5803,"modifierName":{"id":5801,"name":"Pausable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":646,"src":"2545:8:32","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Pausable_$646_$","typeString":"type(contract Pausable)"}},"nodeType":"ModifierInvocation","src":"2545:14:32"}],"name":"","nodeType":"FunctionDefinition","parameters":{"id":5795,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5790,"mutability":"mutable","name":"payoutWallet_","nodeType":"VariableDeclaration","scope":5877,"src":"2401:29:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":5789,"name":"address","nodeType":"ElementaryTypeName","src":"2401:15:32","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":5792,"mutability":"mutable","name":"skusCapacity","nodeType":"VariableDeclaration","scope":5877,"src":"2440:20:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5791,"name":"uint256","nodeType":"ElementaryTypeName","src":"2440:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5794,"mutability":"mutable","name":"tokensPerSkuCapacity","nodeType":"VariableDeclaration","scope":5877,"src":"2470:28:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5793,"name":"uint256","nodeType":"ElementaryTypeName","src":"2470:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2391:113:32"},"returnParameters":{"id":5804,"nodeType":"ParameterList","parameters":[],"src":"2560:0:32"},"scope":6694,"src":"2380:589:32","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":5892,"nodeType":"Block","src":"3428:86:32","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":5882,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":726,"src":"3456:10:32","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":5883,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3456:12:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":5881,"name":"_requireOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":102,"src":"3438:17:32","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":5884,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3438:31:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5885,"nodeType":"ExpressionStatement","src":"3438:31:32"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":5886,"name":"_start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":714,"src":"3479:6:32","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":5887,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3479:8:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5888,"nodeType":"ExpressionStatement","src":"3479:8:32"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":5889,"name":"_unpause","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":645,"src":"3497:8:32","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":5890,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3497:10:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5891,"nodeType":"ExpressionStatement","src":"3497:10:32"}]},"documentation":{"id":5878,"nodeType":"StructuredDocumentation","src":"3076:315:32","text":" Actvates, or 'starts', the contract.\n @dev Emits the `Started` event.\n @dev Emits the `Unpaused` event.\n @dev Reverts if called by any other than the contract owner.\n @dev Reverts if the contract has already been started.\n @dev Reverts if the contract is not paused."},"functionSelector":"be9a6555","id":5893,"implemented":true,"kind":"function","modifiers":[],"name":"start","nodeType":"FunctionDefinition","parameters":{"id":5879,"nodeType":"ParameterList","parameters":[],"src":"3410:2:32"},"returnParameters":{"id":5880,"nodeType":"ParameterList","parameters":[],"src":"3428:0:32"},"scope":6694,"src":"3396:118:32","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":5907,"nodeType":"Block","src":"3831:66:32","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":5900,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":726,"src":"3859:10:32","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":5901,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3859:12:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":5899,"name":"_requireOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":102,"src":"3841:17:32","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":5902,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3841:31:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5903,"nodeType":"ExpressionStatement","src":"3841:31:32"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":5904,"name":"_pause","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":628,"src":"3882:6:32","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":5905,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3882:8:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5906,"nodeType":"ExpressionStatement","src":"3882:8:32"}]},"documentation":{"id":5894,"nodeType":"StructuredDocumentation","src":"3520:262:32","text":" Pauses the contract.\n @dev Emits the `Paused` event.\n @dev Reverts if called by any other than the contract owner.\n @dev Reverts if the contract has not been started yet.\n @dev Reverts if the contract is already paused."},"functionSelector":"8456cb59","id":5908,"implemented":true,"kind":"function","modifiers":[{"id":5897,"modifierName":{"id":5896,"name":"whenStarted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":683,"src":"3819:11:32","typeDescriptions":{"typeIdentifier":"t_modifier$__$","typeString":"modifier ()"}},"nodeType":"ModifierInvocation","src":"3819:11:32"}],"name":"pause","nodeType":"FunctionDefinition","parameters":{"id":5895,"nodeType":"ParameterList","parameters":[],"src":"3801:2:32"},"returnParameters":{"id":5898,"nodeType":"ParameterList","parameters":[],"src":"3831:0:32"},"scope":6694,"src":"3787:110:32","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":5922,"nodeType":"Block","src":"4215:68:32","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":5915,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":726,"src":"4243:10:32","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":5916,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4243:12:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":5914,"name":"_requireOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":102,"src":"4225:17:32","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":5917,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4225:31:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5918,"nodeType":"ExpressionStatement","src":"4225:31:32"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":5919,"name":"_unpause","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":645,"src":"4266:8:32","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":5920,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4266:10:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5921,"nodeType":"ExpressionStatement","src":"4266:10:32"}]},"documentation":{"id":5909,"nodeType":"StructuredDocumentation","src":"3903:261:32","text":" Resumes the contract.\n @dev Emits the `Unpaused` event.\n @dev Reverts if called by any other than the contract owner.\n @dev Reverts if the contract has not been started yet.\n @dev Reverts if the contract is not paused."},"functionSelector":"3f4ba83a","id":5923,"implemented":true,"kind":"function","modifiers":[{"id":5912,"modifierName":{"id":5911,"name":"whenStarted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":683,"src":"4203:11:32","typeDescriptions":{"typeIdentifier":"t_modifier$__$","typeString":"modifier ()"}},"nodeType":"ModifierInvocation","src":"4203:11:32"}],"name":"unpause","nodeType":"FunctionDefinition","parameters":{"id":5910,"nodeType":"ParameterList","parameters":[],"src":"4185:2:32"},"returnParameters":{"id":5913,"nodeType":"ParameterList","parameters":[],"src":"4215:0:32"},"scope":6694,"src":"4169:114:32","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":6023,"nodeType":"Block","src":"5166:809:32","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":5936,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":726,"src":"5194:10:32","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":5937,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5194:12:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":5935,"name":"_requireOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":102,"src":"5176:17:32","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":5938,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5176:31:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5939,"nodeType":"ExpressionStatement","src":"5176:31:32"},{"assignments":[5941],"declarations":[{"constant":false,"id":5941,"mutability":"mutable","name":"length","nodeType":"VariableDeclaration","scope":6023,"src":"5217:14:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5940,"name":"uint256","nodeType":"ElementaryTypeName","src":"5217:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5944,"initialValue":{"expression":{"id":5942,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5929,"src":"5234:6:32","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":5943,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"5234:13:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5217:30:32"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5949,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5946,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5941,"src":"5265:6:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":5947,"name":"prices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5932,"src":"5275:6:32","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":5948,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"5275:13:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5265:23:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616c653a20696e636f6e73697374656e7420617272617973","id":5950,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5290:27:32","typeDescriptions":{"typeIdentifier":"t_stringliteral_2849a8b2209630c82ce5e4df87473aaff96a8703f79d100e8d799bf6b6ef7d73","typeString":"literal_string \"Sale: inconsistent arrays\""},"value":"Sale: inconsistent arrays"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_2849a8b2209630c82ce5e4df87473aaff96a8703f79d100e8d799bf6b6ef7d73","typeString":"literal_string \"Sale: inconsistent arrays\""}],"id":5945,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5257:7:32","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":5951,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5257:61:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5952,"nodeType":"ExpressionStatement","src":"5257:61:32"},{"assignments":[5954],"declarations":[{"constant":false,"id":5954,"mutability":"mutable","name":"skuInfo","nodeType":"VariableDeclaration","scope":6023,"src":"5328:23:32","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage_ptr","typeString":"struct Sale.SkuInfo"},"typeName":{"id":5953,"name":"SkuInfo","nodeType":"UserDefinedTypeName","referencedDeclaration":5762,"src":"5328:7:32","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage_ptr","typeString":"struct Sale.SkuInfo"}},"visibility":"internal"}],"id":5958,"initialValue":{"baseExpression":{"id":5955,"name":"_skuInfos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5783,"src":"5354:9:32","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_SkuInfo_$5762_storage_$","typeString":"mapping(bytes32 => struct Sale.SkuInfo storage ref)"}},"id":5957,"indexExpression":{"id":5956,"name":"sku","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5926,"src":"5364:3:32","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5354:14:32","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage","typeString":"struct Sale.SkuInfo storage ref"}},"nodeType":"VariableDeclarationStatement","src":"5328:40:32"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5963,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":5960,"name":"skuInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5954,"src":"5386:7:32","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage_ptr","typeString":"struct Sale.SkuInfo storage pointer"}},"id":5961,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":5753,"src":"5386:19:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":5962,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5409:1:32","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5386:24:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616c653a206e6f6e2d6578697374656e7420736b75","id":5964,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5412:24:32","typeDescriptions":{"typeIdentifier":"t_stringliteral_787dbdf6531a633e1a32b425311f372da5995176e9c33100c309e4f139b70cfc","typeString":"literal_string \"Sale: non-existent sku\""},"value":"Sale: non-existent sku"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_787dbdf6531a633e1a32b425311f372da5995176e9c33100c309e4f139b70cfc","typeString":"literal_string \"Sale: non-existent sku\""}],"id":5959,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5378:7:32","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":5965,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5378:59:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5966,"nodeType":"ExpressionStatement","src":"5378:59:32"},{"assignments":[5970],"declarations":[{"constant":false,"id":5970,"mutability":"mutable","name":"tokenPrices","nodeType":"VariableDeclaration","scope":6023,"src":"5448:31:32","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map"},"typeName":{"id":5969,"name":"EnumMap.Map","nodeType":"UserDefinedTypeName","referencedDeclaration":119,"src":"5448:11:32","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map"}},"visibility":"internal"}],"id":5973,"initialValue":{"expression":{"id":5971,"name":"skuInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5954,"src":"5482:7:32","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage_ptr","typeString":"struct Sale.SkuInfo storage pointer"}},"id":5972,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"prices","nodeType":"MemberAccess","referencedDeclaration":5761,"src":"5482:14:32","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage","typeString":"struct EnumMap.Map storage ref"}},"nodeType":"VariableDeclarationStatement","src":"5448:48:32"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5976,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5974,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5941,"src":"5510:6:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":5975,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5520:1:32","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5510:11:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":6015,"nodeType":"Block","src":"5847:69:32","statements":[{"expression":{"arguments":[{"id":6010,"name":"tokenPrices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5970,"src":"5877:11:32","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map storage pointer"}},{"id":6011,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5929,"src":"5890:6:32","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},{"id":6012,"name":"prices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5932,"src":"5898:6:32","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map storage pointer"},{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":6009,"name":"_setTokenPrices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6474,"src":"5861:15:32","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Map_$119_storage_ptr_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$","typeString":"function (struct EnumMap.Map storage pointer,address[] memory,uint256[] memory)"}},"id":6013,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5861:44:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6014,"nodeType":"ExpressionStatement","src":"5861:44:32"}]},"id":6016,"nodeType":"IfStatement","src":"5506:410:32","trueBody":{"id":6008,"nodeType":"Block","src":"5523:318:32","statements":[{"assignments":[5978],"declarations":[{"constant":false,"id":5978,"mutability":"mutable","name":"currentLength","nodeType":"VariableDeclaration","scope":6008,"src":"5537:21:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5977,"name":"uint256","nodeType":"ElementaryTypeName","src":"5537:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5982,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":5979,"name":"tokenPrices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5970,"src":"5561:11:32","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map storage pointer"}},"id":5980,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","referencedDeclaration":293,"src":"5561:18:32","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Map_$119_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Map_$119_storage_ptr_$","typeString":"function (struct EnumMap.Map storage pointer) view returns (uint256)"}},"id":5981,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5561:20:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5537:44:32"},{"body":{"id":6006,"nodeType":"Block","src":"5639:192:32","statements":[{"assignments":[5994,null],"declarations":[{"constant":false,"id":5994,"mutability":"mutable","name":"token","nodeType":"VariableDeclaration","scope":6006,"src":"5737:13:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5993,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5737:7:32","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},null],"id":5999,"initialValue":{"arguments":[{"hexValue":"30","id":5997,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5771:1:32","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"id":5995,"name":"tokenPrices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5970,"src":"5756:11:32","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map storage pointer"}},"id":5996,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"at","nodeType":"MemberAccess","referencedDeclaration":328,"src":"5756:14:32","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Map_$119_storage_ptr_$_t_uint256_$returns$_t_bytes32_$_t_bytes32_$bound_to$_t_struct$_Map_$119_storage_ptr_$","typeString":"function (struct EnumMap.Map storage pointer,uint256) view returns (bytes32,bytes32)"}},"id":5998,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5756:17:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bytes32_$_t_bytes32_$","typeString":"tuple(bytes32,bytes32)"}},"nodeType":"VariableDeclarationStatement","src":"5736:37:32"},{"expression":{"arguments":[{"id":6003,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5994,"src":"5810:5:32","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":6000,"name":"tokenPrices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5970,"src":"5791:11:32","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map storage pointer"}},"id":6002,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"remove","nodeType":"MemberAccess","referencedDeclaration":262,"src":"5791:18:32","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Map_$119_storage_ptr_$_t_bytes32_$returns$_t_bool_$bound_to$_t_struct$_Map_$119_storage_ptr_$","typeString":"function (struct EnumMap.Map storage pointer,bytes32) returns (bool)"}},"id":6004,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5791:25:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6005,"nodeType":"ExpressionStatement","src":"5791:25:32"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5989,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5987,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5984,"src":"5615:1:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":5988,"name":"currentLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5978,"src":"5619:13:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5615:17:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6007,"initializationExpression":{"assignments":[5984],"declarations":[{"constant":false,"id":5984,"mutability":"mutable","name":"i","nodeType":"VariableDeclaration","scope":6007,"src":"5600:9:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5983,"name":"uint256","nodeType":"ElementaryTypeName","src":"5600:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5986,"initialValue":{"hexValue":"30","id":5985,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5612:1:32","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"5600:13:32"},"loopExpression":{"expression":{"id":5991,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"5634:3:32","subExpression":{"id":5990,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5984,"src":"5636:1:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5992,"nodeType":"ExpressionStatement","src":"5634:3:32"},"nodeType":"ForStatement","src":"5595:236:32"}]}},{"eventCall":{"arguments":[{"id":6018,"name":"sku","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5926,"src":"5948:3:32","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":6019,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5929,"src":"5953:6:32","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},{"id":6020,"name":"prices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5932,"src":"5961:6:32","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":6017,"name":"SkuPricingUpdate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7254,"src":"5931:16:32","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$","typeString":"function (bytes32,address[] memory,uint256[] memory)"}},"id":6021,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5931:37:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6022,"nodeType":"EmitStatement","src":"5926:42:32"}]},"documentation":{"id":5924,"nodeType":"StructuredDocumentation","src":"4289:738:32","text":" Sets the token prices for the specified product SKU.\n @dev Reverts if called by any other than the contract owner.\n @dev Reverts if `tokens` and `prices` have different lengths.\n @dev Reverts if `sku` does not exist.\n @dev Reverts if one of the `tokens` is the zero address.\n @dev Reverts if the update results in too many tokens for the SKU.\n @dev Emits the `SkuPricingUpdate` event.\n @param sku The identifier of the SKU.\n @param tokens The list of payment tokens to update.\n  If empty, disable all the existing payment tokens.\n @param prices The list of prices to apply for each payment token.\n  Zero price values are used to disable a payment token."},"functionSelector":"5e6e9f70","id":6024,"implemented":true,"kind":"function","modifiers":[],"name":"updateSkuPricing","nodeType":"FunctionDefinition","parameters":{"id":5933,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5926,"mutability":"mutable","name":"sku","nodeType":"VariableDeclaration","scope":6024,"src":"5067:11:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5925,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5067:7:32","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":5929,"mutability":"mutable","name":"tokens","nodeType":"VariableDeclaration","scope":6024,"src":"5088:23:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":5927,"name":"address","nodeType":"ElementaryTypeName","src":"5088:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":5928,"nodeType":"ArrayTypeName","src":"5088:9:32","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":5932,"mutability":"mutable","name":"prices","nodeType":"VariableDeclaration","scope":6024,"src":"5121:23:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":5930,"name":"uint256","nodeType":"ElementaryTypeName","src":"5121:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5931,"nodeType":"ArrayTypeName","src":"5121:9:32","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"5057:93:32"},"returnParameters":{"id":5934,"nodeType":"ParameterList","parameters":[],"src":"5166:0:32"},"scope":6694,"src":"5032:943:32","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[7299],"body":{"id":6088,"nodeType":"Block","src":"7173:326:32","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":6041,"name":"_requireNotPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":602,"src":"7183:17:32","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":6042,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7183:19:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6043,"nodeType":"ExpressionStatement","src":"7183:19:32"},{"assignments":[6045],"declarations":[{"constant":false,"id":6045,"mutability":"mutable","name":"purchase","nodeType":"VariableDeclaration","scope":6088,"src":"7212:28:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"},"typeName":{"id":6044,"name":"PurchaseData","nodeType":"UserDefinedTypeName","referencedDeclaration":5583,"src":"7212:12:32","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_storage_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"}},"visibility":"internal"}],"id":6046,"nodeType":"VariableDeclarationStatement","src":"7212:28:32"},{"expression":{"id":6052,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":6047,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6045,"src":"7250:8:32","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":6049,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"purchaser","nodeType":"MemberAccess","referencedDeclaration":5561,"src":"7250:18:32","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":6050,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":726,"src":"7271:10:32","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":6051,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7271:12:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"7250:33:32","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":6053,"nodeType":"ExpressionStatement","src":"7250:33:32"},{"expression":{"id":6058,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":6054,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6045,"src":"7293:8:32","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":6056,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"recipient","nodeType":"MemberAccess","referencedDeclaration":5563,"src":"7293:18:32","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":6057,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6027,"src":"7314:9:32","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"7293:30:32","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":6059,"nodeType":"ExpressionStatement","src":"7293:30:32"},{"expression":{"id":6064,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":6060,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6045,"src":"7333:8:32","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":6062,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"token","nodeType":"MemberAccess","referencedDeclaration":5565,"src":"7333:14:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":6063,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6029,"src":"7350:5:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7333:22:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":6065,"nodeType":"ExpressionStatement","src":"7333:22:32"},{"expression":{"id":6070,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":6066,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6045,"src":"7365:8:32","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":6068,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"sku","nodeType":"MemberAccess","referencedDeclaration":5567,"src":"7365:12:32","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":6069,"name":"sku","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6031,"src":"7380:3:32","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"7365:18:32","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":6071,"nodeType":"ExpressionStatement","src":"7365:18:32"},{"expression":{"id":6076,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":6072,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6045,"src":"7393:8:32","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":6074,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"quantity","nodeType":"MemberAccess","referencedDeclaration":5569,"src":"7393:17:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":6075,"name":"quantity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6033,"src":"7413:8:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7393:28:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6077,"nodeType":"ExpressionStatement","src":"7393:28:32"},{"expression":{"id":6082,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":6078,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6045,"src":"7431:8:32","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":6080,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"userData","nodeType":"MemberAccess","referencedDeclaration":5571,"src":"7431:17:32","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":6081,"name":"userData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6035,"src":"7451:8:32","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"src":"7431:28:32","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":6083,"nodeType":"ExpressionStatement","src":"7431:28:32"},{"expression":{"arguments":[{"id":6085,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6045,"src":"7483:8:32","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}],"id":6084,"name":"_purchaseFor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5640,"src":"7470:12:32","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_PurchaseData_$5583_memory_ptr_$returns$__$","typeString":"function (struct PurchaseLifeCycles.PurchaseData memory)"}},"id":6086,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7470:22:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6087,"nodeType":"ExpressionStatement","src":"7470:22:32"}]},"documentation":{"id":6025,"nodeType":"StructuredDocumentation","src":"6082:875:32","text":" Performs a purchase.\n @dev Reverts if the sale has not started.\n @dev Reverts if the sale is paused.\n @dev Reverts if `recipient` is the zero address.\n @dev Reverts if `token` is the zero address.\n @dev Reverts if `quantity` is zero.\n @dev Reverts if `quantity` is greater than the maximum purchase quantity.\n @dev Reverts if `quantity` is greater than the remaining supply.\n @dev Reverts if `sku` does not exist.\n @dev Reverts if `sku` exists but does not have a price set for `token`.\n @dev Emits the Purchase event.\n @param recipient The recipient of the purchase.\n @param token The token to use as the payment currency.\n @param sku The identifier of the SKU to purchase.\n @param quantity The quantity to purchase.\n @param userData Optional extra user input data."},"functionSelector":"a963b257","id":6089,"implemented":true,"kind":"function","modifiers":[{"id":6039,"modifierName":{"id":6038,"name":"whenStarted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":683,"src":"7161:11:32","typeDescriptions":{"typeIdentifier":"t_modifier$__$","typeString":"modifier ()"}},"nodeType":"ModifierInvocation","src":"7161:11:32"}],"name":"purchaseFor","nodeType":"FunctionDefinition","overrides":{"id":6037,"nodeType":"OverrideSpecifier","overrides":[],"src":"7152:8:32"},"parameters":{"id":6036,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6027,"mutability":"mutable","name":"recipient","nodeType":"VariableDeclaration","scope":6089,"src":"6992:25:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":6026,"name":"address","nodeType":"ElementaryTypeName","src":"6992:15:32","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":6029,"mutability":"mutable","name":"token","nodeType":"VariableDeclaration","scope":6089,"src":"7027:13:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6028,"name":"address","nodeType":"ElementaryTypeName","src":"7027:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6031,"mutability":"mutable","name":"sku","nodeType":"VariableDeclaration","scope":6089,"src":"7050:11:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6030,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7050:7:32","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":6033,"mutability":"mutable","name":"quantity","nodeType":"VariableDeclaration","scope":6089,"src":"7071:16:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6032,"name":"uint256","nodeType":"ElementaryTypeName","src":"7071:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6035,"mutability":"mutable","name":"userData","nodeType":"VariableDeclaration","scope":6089,"src":"7097:23:32","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":6034,"name":"bytes","nodeType":"ElementaryTypeName","src":"7097:5:32","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6982:144:32"},"returnParameters":{"id":6040,"nodeType":"ParameterList","parameters":[],"src":"7173:0:32"},"scope":6694,"src":"6962:537:32","stateMutability":"payable","virtual":true,"visibility":"external"},{"baseFunctions":[7318],"body":{"id":6158,"nodeType":"Block","src":"9316:338:32","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":6111,"name":"_requireNotPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":602,"src":"9326:17:32","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":6112,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9326:19:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6113,"nodeType":"ExpressionStatement","src":"9326:19:32"},{"assignments":[6115],"declarations":[{"constant":false,"id":6115,"mutability":"mutable","name":"purchase","nodeType":"VariableDeclaration","scope":6158,"src":"9355:28:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"},"typeName":{"id":6114,"name":"PurchaseData","nodeType":"UserDefinedTypeName","referencedDeclaration":5583,"src":"9355:12:32","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_storage_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"}},"visibility":"internal"}],"id":6116,"nodeType":"VariableDeclarationStatement","src":"9355:28:32"},{"expression":{"id":6122,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":6117,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6115,"src":"9393:8:32","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":6119,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"purchaser","nodeType":"MemberAccess","referencedDeclaration":5561,"src":"9393:18:32","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":6120,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":726,"src":"9414:10:32","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":6121,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9414:12:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"9393:33:32","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":6123,"nodeType":"ExpressionStatement","src":"9393:33:32"},{"expression":{"id":6128,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":6124,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6115,"src":"9436:8:32","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":6126,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"recipient","nodeType":"MemberAccess","referencedDeclaration":5563,"src":"9436:18:32","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":6127,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6092,"src":"9457:9:32","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"9436:30:32","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":6129,"nodeType":"ExpressionStatement","src":"9436:30:32"},{"expression":{"id":6134,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":6130,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6115,"src":"9476:8:32","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":6132,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"token","nodeType":"MemberAccess","referencedDeclaration":5565,"src":"9476:14:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":6133,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6094,"src":"9493:5:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9476:22:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":6135,"nodeType":"ExpressionStatement","src":"9476:22:32"},{"expression":{"id":6140,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":6136,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6115,"src":"9508:8:32","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":6138,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"sku","nodeType":"MemberAccess","referencedDeclaration":5567,"src":"9508:12:32","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":6139,"name":"sku","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6096,"src":"9523:3:32","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"9508:18:32","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":6141,"nodeType":"ExpressionStatement","src":"9508:18:32"},{"expression":{"id":6146,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":6142,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6115,"src":"9536:8:32","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":6144,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"quantity","nodeType":"MemberAccess","referencedDeclaration":5569,"src":"9536:17:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":6145,"name":"quantity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6098,"src":"9556:8:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9536:28:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6147,"nodeType":"ExpressionStatement","src":"9536:28:32"},{"expression":{"id":6152,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":6148,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6115,"src":"9574:8:32","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":6150,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"userData","nodeType":"MemberAccess","referencedDeclaration":5571,"src":"9574:17:32","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":6151,"name":"userData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6100,"src":"9594:8:32","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"src":"9574:28:32","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":6153,"nodeType":"ExpressionStatement","src":"9574:28:32"},{"expression":{"arguments":[{"id":6155,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6115,"src":"9638:8:32","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}],"id":6154,"name":"_estimatePurchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5613,"src":"9620:17:32","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_PurchaseData_$5583_memory_ptr_$returns$_t_uint256_$_t_array$_t_bytes32_$dyn_memory_ptr_$","typeString":"function (struct PurchaseLifeCycles.PurchaseData memory) view returns (uint256,bytes32[] memory)"}},"id":6156,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9620:27:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_array$_t_bytes32_$dyn_memory_ptr_$","typeString":"tuple(uint256,bytes32[] memory)"}},"functionReturnParameters":6110,"id":6157,"nodeType":"Return","src":"9613:34:32"}]},"documentation":{"id":6090,"nodeType":"StructuredDocumentation","src":"7505:1534:32","text":" Estimates the computed final total amount to pay for a purchase, including any potential discount.\n @dev This function MUST compute the same price as `purchaseFor` would in identical conditions (same arguments, same point in time).\n @dev If an implementer contract uses the `pricingData` field, it SHOULD document how to interpret the values.\n @dev Reverts if the sale has not started.\n @dev Reverts if the sale is paused.\n @dev Reverts if `recipient` is the zero address.\n @dev Reverts if `token` is the zero address.\n @dev Reverts if `quantity` is zero.\n @dev Reverts if `quantity` is greater than the maximum purchase quantity.\n @dev Reverts if `quantity` is greater than the remaining supply.\n @dev Reverts if `sku` does not exist.\n @dev Reverts if `sku` exists but does not have a price set for `token`.\n @param recipient The recipient of the purchase used to calculate the total price amount.\n @param token The payment token used to calculate the total price amount.\n @param sku The identifier of the SKU used to calculate the total price amount.\n @param quantity The quantity used to calculate the total price amount.\n @param userData Optional extra user input data.\n @return totalPrice The computed total price.\n @return pricingData Implementation-specific extra pricing data, such as details about discounts applied.\n  If not empty, the implementer MUST document how to interepret the values."},"functionSelector":"1323b066","id":6159,"implemented":true,"kind":"function","modifiers":[{"id":6104,"modifierName":{"id":6103,"name":"whenStarted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":683,"src":"9245:11:32","typeDescriptions":{"typeIdentifier":"t_modifier$__$","typeString":"modifier ()"}},"nodeType":"ModifierInvocation","src":"9245:11:32"}],"name":"estimatePurchase","nodeType":"FunctionDefinition","overrides":{"id":6102,"nodeType":"OverrideSpecifier","overrides":[],"src":"9236:8:32"},"parameters":{"id":6101,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6092,"mutability":"mutable","name":"recipient","nodeType":"VariableDeclaration","scope":6159,"src":"9079:25:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":6091,"name":"address","nodeType":"ElementaryTypeName","src":"9079:15:32","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":6094,"mutability":"mutable","name":"token","nodeType":"VariableDeclaration","scope":6159,"src":"9114:13:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6093,"name":"address","nodeType":"ElementaryTypeName","src":"9114:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6096,"mutability":"mutable","name":"sku","nodeType":"VariableDeclaration","scope":6159,"src":"9137:11:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6095,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9137:7:32","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":6098,"mutability":"mutable","name":"quantity","nodeType":"VariableDeclaration","scope":6159,"src":"9158:16:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6097,"name":"uint256","nodeType":"ElementaryTypeName","src":"9158:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6100,"mutability":"mutable","name":"userData","nodeType":"VariableDeclaration","scope":6159,"src":"9184:23:32","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":6099,"name":"bytes","nodeType":"ElementaryTypeName","src":"9184:5:32","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"9069:144:32"},"returnParameters":{"id":6110,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6106,"mutability":"mutable","name":"totalPrice","nodeType":"VariableDeclaration","scope":6159,"src":"9266:18:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6105,"name":"uint256","nodeType":"ElementaryTypeName","src":"9266:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6109,"mutability":"mutable","name":"pricingData","nodeType":"VariableDeclaration","scope":6159,"src":"9286:28:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":6107,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9286:7:32","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":6108,"nodeType":"ArrayTypeName","src":"9286:9:32","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"src":"9265:50:32"},"scope":6694,"src":"9044:610:32","stateMutability":"view","virtual":true,"visibility":"external"},{"baseFunctions":[7338],"body":{"id":6279,"nodeType":"Block","src":"10805:685:32","statements":[{"assignments":[6181],"declarations":[{"constant":false,"id":6181,"mutability":"mutable","name":"skuInfo","nodeType":"VariableDeclaration","scope":6279,"src":"10815:23:32","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage_ptr","typeString":"struct Sale.SkuInfo"},"typeName":{"id":6180,"name":"SkuInfo","nodeType":"UserDefinedTypeName","referencedDeclaration":5762,"src":"10815:7:32","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage_ptr","typeString":"struct Sale.SkuInfo"}},"visibility":"internal"}],"id":6185,"initialValue":{"baseExpression":{"id":6182,"name":"_skuInfos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5783,"src":"10841:9:32","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_SkuInfo_$5762_storage_$","typeString":"mapping(bytes32 => struct Sale.SkuInfo storage ref)"}},"id":6184,"indexExpression":{"id":6183,"name":"sku","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6162,"src":"10851:3:32","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10841:14:32","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage","typeString":"struct Sale.SkuInfo storage ref"}},"nodeType":"VariableDeclarationStatement","src":"10815:40:32"},{"assignments":[6187],"declarations":[{"constant":false,"id":6187,"mutability":"mutable","name":"length","nodeType":"VariableDeclaration","scope":6279,"src":"10865:14:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6186,"name":"uint256","nodeType":"ElementaryTypeName","src":"10865:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6192,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":6188,"name":"skuInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6181,"src":"10882:7:32","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage_ptr","typeString":"struct Sale.SkuInfo storage pointer"}},"id":6189,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"prices","nodeType":"MemberAccess","referencedDeclaration":5761,"src":"10882:14:32","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage","typeString":"struct EnumMap.Map storage ref"}},"id":6190,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","referencedDeclaration":293,"src":"10882:21:32","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Map_$119_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Map_$119_storage_ptr_$","typeString":"function (struct EnumMap.Map storage pointer) view returns (uint256)"}},"id":6191,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10882:23:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10865:40:32"},{"expression":{"id":6196,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6193,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6166,"src":"10916:11:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":6194,"name":"skuInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6181,"src":"10930:7:32","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage_ptr","typeString":"struct Sale.SkuInfo storage pointer"}},"id":6195,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":5753,"src":"10930:19:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10916:33:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6197,"nodeType":"ExpressionStatement","src":"10916:33:32"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6201,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6199,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6166,"src":"10967:11:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":6200,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10982:1:32","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10967:16:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616c653a206e6f6e2d6578697374656e7420736b75","id":6202,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10985:24:32","typeDescriptions":{"typeIdentifier":"t_stringliteral_787dbdf6531a633e1a32b425311f372da5995176e9c33100c309e4f139b70cfc","typeString":"literal_string \"Sale: non-existent sku\""},"value":"Sale: non-existent sku"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_787dbdf6531a633e1a32b425311f372da5995176e9c33100c309e4f139b70cfc","typeString":"literal_string \"Sale: non-existent sku\""}],"id":6198,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"10959:7:32","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":6203,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10959:51:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6204,"nodeType":"ExpressionStatement","src":"10959:51:32"},{"expression":{"id":6208,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6205,"name":"remainingSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6168,"src":"11020:15:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":6206,"name":"skuInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6181,"src":"11038:7:32","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage_ptr","typeString":"struct Sale.SkuInfo storage pointer"}},"id":6207,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"remainingSupply","nodeType":"MemberAccess","referencedDeclaration":5755,"src":"11038:23:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11020:41:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6209,"nodeType":"ExpressionStatement","src":"11020:41:32"},{"expression":{"id":6213,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6210,"name":"maxQuantityPerPurchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6170,"src":"11071:22:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":6211,"name":"skuInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6181,"src":"11096:7:32","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage_ptr","typeString":"struct Sale.SkuInfo storage pointer"}},"id":6212,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"maxQuantityPerPurchase","nodeType":"MemberAccess","referencedDeclaration":5757,"src":"11096:30:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11071:55:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6214,"nodeType":"ExpressionStatement","src":"11071:55:32"},{"expression":{"id":6218,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6215,"name":"notificationsReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6172,"src":"11136:21:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":6216,"name":"skuInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6181,"src":"11160:7:32","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage_ptr","typeString":"struct Sale.SkuInfo storage pointer"}},"id":6217,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"notificationsReceiver","nodeType":"MemberAccess","referencedDeclaration":5759,"src":"11160:29:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11136:53:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":6219,"nodeType":"ExpressionStatement","src":"11136:53:32"},{"expression":{"id":6226,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6220,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6175,"src":"11200:6:32","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":6224,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6187,"src":"11223:6:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6223,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"11209:13:32","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (address[] memory)"},"typeName":{"baseType":{"id":6221,"name":"address","nodeType":"ElementaryTypeName","src":"11213:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":6222,"nodeType":"ArrayTypeName","src":"11213:9:32","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}}},"id":6225,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11209:21:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"src":"11200:30:32","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":6227,"nodeType":"ExpressionStatement","src":"11200:30:32"},{"expression":{"id":6234,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6228,"name":"prices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6178,"src":"11240:6:32","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":6232,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6187,"src":"11263:6:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6231,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"11249:13:32","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":6229,"name":"uint256","nodeType":"ElementaryTypeName","src":"11253:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6230,"nodeType":"ArrayTypeName","src":"11253:9:32","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":6233,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11249:21:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"11240:30:32","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":6235,"nodeType":"ExpressionStatement","src":"11240:30:32"},{"body":{"id":6277,"nodeType":"Block","src":"11317:167:32","statements":[{"assignments":[6247,6249],"declarations":[{"constant":false,"id":6247,"mutability":"mutable","name":"token","nodeType":"VariableDeclaration","scope":6277,"src":"11332:13:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6246,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11332:7:32","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":6249,"mutability":"mutable","name":"price","nodeType":"VariableDeclaration","scope":6277,"src":"11347:13:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6248,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11347:7:32","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":6255,"initialValue":{"arguments":[{"id":6253,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6237,"src":"11382:1:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":6250,"name":"skuInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6181,"src":"11364:7:32","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage_ptr","typeString":"struct Sale.SkuInfo storage pointer"}},"id":6251,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"prices","nodeType":"MemberAccess","referencedDeclaration":5761,"src":"11364:14:32","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage","typeString":"struct EnumMap.Map storage ref"}},"id":6252,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"at","nodeType":"MemberAccess","referencedDeclaration":328,"src":"11364:17:32","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Map_$119_storage_ptr_$_t_uint256_$returns$_t_bytes32_$_t_bytes32_$bound_to$_t_struct$_Map_$119_storage_ptr_$","typeString":"function (struct EnumMap.Map storage pointer,uint256) view returns (bytes32,bytes32)"}},"id":6254,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11364:20:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bytes32_$_t_bytes32_$","typeString":"tuple(bytes32,bytes32)"}},"nodeType":"VariableDeclarationStatement","src":"11331:53:32"},{"expression":{"id":6266,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":6256,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6175,"src":"11398:6:32","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":6258,"indexExpression":{"id":6257,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6237,"src":"11405:1:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"11398:9:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":6263,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6247,"src":"11426:5:32","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":6262,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11418:7:32","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":6261,"name":"uint256","nodeType":"ElementaryTypeName","src":"11418:7:32","typeDescriptions":{}}},"id":6264,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11418:14:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6260,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11410:7:32","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6259,"name":"address","nodeType":"ElementaryTypeName","src":"11410:7:32","typeDescriptions":{}}},"id":6265,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11410:23:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"11398:35:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":6267,"nodeType":"ExpressionStatement","src":"11398:35:32"},{"expression":{"id":6275,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":6268,"name":"prices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6178,"src":"11447:6:32","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":6270,"indexExpression":{"id":6269,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6237,"src":"11454:1:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"11447:9:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":6273,"name":"price","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6249,"src":"11467:5:32","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":6272,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11459:7:32","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":6271,"name":"uint256","nodeType":"ElementaryTypeName","src":"11459:7:32","typeDescriptions":{}}},"id":6274,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11459:14:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11447:26:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6276,"nodeType":"ExpressionStatement","src":"11447:26:32"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6242,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6240,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6237,"src":"11300:1:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":6241,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6187,"src":"11304:6:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11300:10:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6278,"initializationExpression":{"assignments":[6237],"declarations":[{"constant":false,"id":6237,"mutability":"mutable","name":"i","nodeType":"VariableDeclaration","scope":6278,"src":"11285:9:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6236,"name":"uint256","nodeType":"ElementaryTypeName","src":"11285:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6239,"initialValue":{"hexValue":"30","id":6238,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11297:1:32","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"11285:13:32"},"loopExpression":{"expression":{"id":6244,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"11312:3:32","subExpression":{"id":6243,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6237,"src":"11314:1:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6245,"nodeType":"ExpressionStatement","src":"11312:3:32"},"nodeType":"ForStatement","src":"11280:204:32"}]},"documentation":{"id":6160,"nodeType":"StructuredDocumentation","src":"9660:798:32","text":" Returns the information relative to a SKU.\n @dev WARNING: it is the responsibility of the implementer to ensure that the\n number of payment tokens is bounded, so that this function does not run out of gas.\n @dev Reverts if `sku` does not exist.\n @param sku The SKU identifier.\n @return totalSupply The initial total supply for sale.\n @return remainingSupply The remaining supply for sale.\n @return maxQuantityPerPurchase The maximum allowed quantity for a single purchase.\n @return notificationsReceiver The address of a contract on which to call the `onPurchaseNotificationReceived` function.\n @return tokens The list of supported payment tokens.\n @return prices The list of associated prices for each of the `tokens`."},"functionSelector":"2a8a45bc","id":6280,"implemented":true,"kind":"function","modifiers":[],"name":"getSkuInfo","nodeType":"FunctionDefinition","overrides":{"id":6164,"nodeType":"OverrideSpecifier","overrides":[],"src":"10534:8:32"},"parameters":{"id":6163,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6162,"mutability":"mutable","name":"sku","nodeType":"VariableDeclaration","scope":6280,"src":"10483:11:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6161,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10483:7:32","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"10482:13:32"},"returnParameters":{"id":6179,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6166,"mutability":"mutable","name":"totalSupply","nodeType":"VariableDeclaration","scope":6280,"src":"10573:19:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6165,"name":"uint256","nodeType":"ElementaryTypeName","src":"10573:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6168,"mutability":"mutable","name":"remainingSupply","nodeType":"VariableDeclaration","scope":6280,"src":"10606:23:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6167,"name":"uint256","nodeType":"ElementaryTypeName","src":"10606:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6170,"mutability":"mutable","name":"maxQuantityPerPurchase","nodeType":"VariableDeclaration","scope":6280,"src":"10643:30:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6169,"name":"uint256","nodeType":"ElementaryTypeName","src":"10643:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6172,"mutability":"mutable","name":"notificationsReceiver","nodeType":"VariableDeclaration","scope":6280,"src":"10687:29:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6171,"name":"address","nodeType":"ElementaryTypeName","src":"10687:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6175,"mutability":"mutable","name":"tokens","nodeType":"VariableDeclaration","scope":6280,"src":"10730:23:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":6173,"name":"address","nodeType":"ElementaryTypeName","src":"10730:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":6174,"nodeType":"ArrayTypeName","src":"10730:9:32","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":6178,"mutability":"mutable","name":"prices","nodeType":"VariableDeclaration","scope":6280,"src":"10767:23:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":6176,"name":"uint256","nodeType":"ElementaryTypeName","src":"10767:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6177,"nodeType":"ArrayTypeName","src":"10767:9:32","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"10559:241:32"},"scope":6694,"src":"10463:1027:32","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[7345],"body":{"id":6293,"nodeType":"Block","src":"11695:36:32","statements":[{"expression":{"id":6291,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6288,"name":"skus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6286,"src":"11705:4:32","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":6289,"name":"_skus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5779,"src":"11712:5:32","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$373_storage","typeString":"struct EnumSet.Set storage ref"}},"id":6290,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"values","nodeType":"MemberAccess","referencedDeclaration":368,"src":"11712:12:32","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage","typeString":"bytes32[] storage ref"}},"src":"11705:19:32","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"id":6292,"nodeType":"ExpressionStatement","src":"11705:19:32"}]},"documentation":{"id":6281,"nodeType":"StructuredDocumentation","src":"11496:120:32","text":" Returns the list of created SKU identifiers.\n @return skus the list of created SKU identifiers."},"functionSelector":"61bd3851","id":6294,"implemented":true,"kind":"function","modifiers":[],"name":"getSkus","nodeType":"FunctionDefinition","overrides":{"id":6283,"nodeType":"OverrideSpecifier","overrides":[],"src":"11654:8:32"},"parameters":{"id":6282,"nodeType":"ParameterList","parameters":[],"src":"11637:2:32"},"returnParameters":{"id":6287,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6286,"mutability":"mutable","name":"skus","nodeType":"VariableDeclaration","scope":6294,"src":"11672:21:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":6284,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11672:7:32","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":6285,"nodeType":"ArrayTypeName","src":"11672:9:32","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"src":"11671:23:32"},"scope":6694,"src":"11621:110:32","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":6382,"nodeType":"Block","src":"12683:705:32","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6309,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6307,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6299,"src":"12701:11:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":6308,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12716:1:32","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12701:16:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616c653a207a65726f20737570706c79","id":6310,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"12719:19:32","typeDescriptions":{"typeIdentifier":"t_stringliteral_ffb4e235fe1f5dd90b843ff40312a9eac354db1dd5ca7a8ed33810eb3d09690a","typeString":"literal_string \"Sale: zero supply\""},"value":"Sale: zero supply"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_ffb4e235fe1f5dd90b843ff40312a9eac354db1dd5ca7a8ed33810eb3d09690a","typeString":"literal_string \"Sale: zero supply\""}],"id":6306,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"12693:7:32","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":6311,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12693:46:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6312,"nodeType":"ExpressionStatement","src":"12693:46:32"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6318,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":6314,"name":"_skus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5779,"src":"12757:5:32","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$373_storage","typeString":"struct EnumSet.Set storage ref"}},"id":6315,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","referencedDeclaration":525,"src":"12757:12:32","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$373_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Set_$373_storage_ptr_$","typeString":"function (struct EnumSet.Set storage pointer) view returns (uint256)"}},"id":6316,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12757:14:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":6317,"name":"_skusCapacity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5785,"src":"12774:13:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12757:30:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616c653a20746f6f206d616e7920736b7573","id":6319,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"12789:21:32","typeDescriptions":{"typeIdentifier":"t_stringliteral_3a34ac6ec113abb7ddcd5af88fbd861aa7cd61c0b1b86c4f19c5ad755c287f30","typeString":"literal_string \"Sale: too many skus\""},"value":"Sale: too many skus"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_3a34ac6ec113abb7ddcd5af88fbd861aa7cd61c0b1b86c4f19c5ad755c287f30","typeString":"literal_string \"Sale: too many skus\""}],"id":6313,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"12749:7:32","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":6320,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12749:62:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6321,"nodeType":"ExpressionStatement","src":"12749:62:32"},{"expression":{"arguments":[{"arguments":[{"id":6325,"name":"sku","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6297,"src":"12839:3:32","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":6323,"name":"_skus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5779,"src":"12829:5:32","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$373_storage","typeString":"struct EnumSet.Set storage ref"}},"id":6324,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"add","nodeType":"MemberAccess","referencedDeclaration":414,"src":"12829:9:32","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Set_$373_storage_ptr_$_t_bytes32_$returns$_t_bool_$bound_to$_t_struct$_Set_$373_storage_ptr_$","typeString":"function (struct EnumSet.Set storage pointer,bytes32) returns (bool)"}},"id":6326,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12829:14:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616c653a20736b7520616c72656164792063726561746564","id":6327,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"12845:27:32","typeDescriptions":{"typeIdentifier":"t_stringliteral_23d74bf9c280bdaba6e75035785d815f564448b18792d46ee0a5c8a33887473e","typeString":"literal_string \"Sale: sku already created\""},"value":"Sale: sku already created"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_23d74bf9c280bdaba6e75035785d815f564448b18792d46ee0a5c8a33887473e","typeString":"literal_string \"Sale: sku already created\""}],"id":6322,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"12821:7:32","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":6328,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12821:52:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6329,"nodeType":"ExpressionStatement","src":"12821:52:32"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":6335,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6330,"name":"notificationsReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6303,"src":"12887:21:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":6333,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12920:1:32","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":6332,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12912:7:32","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6331,"name":"address","nodeType":"ElementaryTypeName","src":"12912:7:32","typeDescriptions":{}}},"id":6334,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12912:10:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"12887:35:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6344,"nodeType":"IfStatement","src":"12883:140:32","trueBody":{"id":6343,"nodeType":"Block","src":"12924:99:32","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":6337,"name":"notificationsReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6303,"src":"12946:21:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":6338,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"isContract","nodeType":"MemberAccess","referencedDeclaration":1003,"src":"12946:32:32","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$bound_to$_t_address_$","typeString":"function (address) view returns (bool)"}},"id":6339,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12946:34:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616c653a206e6f6e2d636f6e7472616374207265636569766572","id":6340,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"12982:29:32","typeDescriptions":{"typeIdentifier":"t_stringliteral_ed81a51fe107a844f2a5d6a3eae475648f5ab2d84bdd6402e8a873a7886bc306","typeString":"literal_string \"Sale: non-contract receiver\""},"value":"Sale: non-contract receiver"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_ed81a51fe107a844f2a5d6a3eae475648f5ab2d84bdd6402e8a873a7886bc306","typeString":"literal_string \"Sale: non-contract receiver\""}],"id":6336,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"12938:7:32","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":6341,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12938:74:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6342,"nodeType":"ExpressionStatement","src":"12938:74:32"}]}},{"assignments":[6346],"declarations":[{"constant":false,"id":6346,"mutability":"mutable","name":"skuInfo","nodeType":"VariableDeclaration","scope":6382,"src":"13032:23:32","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage_ptr","typeString":"struct Sale.SkuInfo"},"typeName":{"id":6345,"name":"SkuInfo","nodeType":"UserDefinedTypeName","referencedDeclaration":5762,"src":"13032:7:32","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage_ptr","typeString":"struct Sale.SkuInfo"}},"visibility":"internal"}],"id":6350,"initialValue":{"baseExpression":{"id":6347,"name":"_skuInfos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5783,"src":"13058:9:32","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_SkuInfo_$5762_storage_$","typeString":"mapping(bytes32 => struct Sale.SkuInfo storage ref)"}},"id":6349,"indexExpression":{"id":6348,"name":"sku","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6297,"src":"13068:3:32","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13058:14:32","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage","typeString":"struct Sale.SkuInfo storage ref"}},"nodeType":"VariableDeclarationStatement","src":"13032:40:32"},{"expression":{"id":6355,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":6351,"name":"skuInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6346,"src":"13082:7:32","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage_ptr","typeString":"struct Sale.SkuInfo storage pointer"}},"id":6353,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":5753,"src":"13082:19:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":6354,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6299,"src":"13104:11:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13082:33:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6356,"nodeType":"ExpressionStatement","src":"13082:33:32"},{"expression":{"id":6361,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":6357,"name":"skuInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6346,"src":"13125:7:32","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage_ptr","typeString":"struct Sale.SkuInfo storage pointer"}},"id":6359,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"remainingSupply","nodeType":"MemberAccess","referencedDeclaration":5755,"src":"13125:23:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":6360,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6299,"src":"13151:11:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13125:37:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6362,"nodeType":"ExpressionStatement","src":"13125:37:32"},{"expression":{"id":6367,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":6363,"name":"skuInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6346,"src":"13172:7:32","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage_ptr","typeString":"struct Sale.SkuInfo storage pointer"}},"id":6365,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"maxQuantityPerPurchase","nodeType":"MemberAccess","referencedDeclaration":5757,"src":"13172:30:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":6366,"name":"maxQuantityPerPurchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6301,"src":"13205:22:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13172:55:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6368,"nodeType":"ExpressionStatement","src":"13172:55:32"},{"expression":{"id":6373,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":6369,"name":"skuInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6346,"src":"13237:7:32","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage_ptr","typeString":"struct Sale.SkuInfo storage pointer"}},"id":6371,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"notificationsReceiver","nodeType":"MemberAccess","referencedDeclaration":5759,"src":"13237:29:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":6372,"name":"notificationsReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6303,"src":"13269:21:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"13237:53:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":6374,"nodeType":"ExpressionStatement","src":"13237:53:32"},{"eventCall":{"arguments":[{"id":6376,"name":"sku","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6297,"src":"13317:3:32","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":6377,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6299,"src":"13322:11:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":6378,"name":"maxQuantityPerPurchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6301,"src":"13335:22:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":6379,"name":"notificationsReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6303,"src":"13359:21:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":6375,"name":"SkuCreation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7243,"src":"13305:11:32","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_uint256_$_t_uint256_$_t_address_$returns$__$","typeString":"function (bytes32,uint256,uint256,address)"}},"id":6380,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13305:76:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6381,"nodeType":"EmitStatement","src":"13300:81:32"}]},"documentation":{"id":6295,"nodeType":"StructuredDocumentation","src":"11838:668:32","text":" Creates an SKU.\n @dev Reverts if `totalSupply` is zero.\n @dev Reverts if `sku` already exists.\n @dev Reverts if `notificationsReceiver` is not the zero address and is not a contract address.\n @dev Reverts if the update results in too many SKUs.\n @dev Emits the `SkuCreation` event.\n @param sku the SKU identifier.\n @param totalSupply the initial total supply.\n @param maxQuantityPerPurchase The maximum allowed quantity for a single purchase.\n @param notificationsReceiver The purchase notifications receiver contract address.\n  If set to the zero address, the notification is not enabled."},"id":6383,"implemented":true,"kind":"function","modifiers":[],"name":"_createSku","nodeType":"FunctionDefinition","parameters":{"id":6304,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6297,"mutability":"mutable","name":"sku","nodeType":"VariableDeclaration","scope":6383,"src":"12540:11:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6296,"name":"bytes32","nodeType":"ElementaryTypeName","src":"12540:7:32","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":6299,"mutability":"mutable","name":"totalSupply","nodeType":"VariableDeclaration","scope":6383,"src":"12561:19:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6298,"name":"uint256","nodeType":"ElementaryTypeName","src":"12561:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6301,"mutability":"mutable","name":"maxQuantityPerPurchase","nodeType":"VariableDeclaration","scope":6383,"src":"12590:30:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6300,"name":"uint256","nodeType":"ElementaryTypeName","src":"12590:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6303,"mutability":"mutable","name":"notificationsReceiver","nodeType":"VariableDeclaration","scope":6383,"src":"12630:29:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6302,"name":"address","nodeType":"ElementaryTypeName","src":"12630:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12530:135:32"},"returnParameters":{"id":6305,"nodeType":"ParameterList","parameters":[],"src":"12683:0:32"},"scope":6694,"src":"12511:877:32","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":6473,"nodeType":"Block","src":"14017:508:32","statements":[{"body":{"id":6462,"nodeType":"Block","src":"14071:359:32","statements":[{"assignments":[6407],"declarations":[{"constant":false,"id":6407,"mutability":"mutable","name":"token","nodeType":"VariableDeclaration","scope":6462,"src":"14085:13:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6406,"name":"address","nodeType":"ElementaryTypeName","src":"14085:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":6411,"initialValue":{"baseExpression":{"id":6408,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6389,"src":"14101:6:32","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":6410,"indexExpression":{"id":6409,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6396,"src":"14108:1:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14101:9:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"14085:25:32"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":6418,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6413,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6407,"src":"14132:5:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":6416,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14149:1:32","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":6415,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14141:7:32","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6414,"name":"address","nodeType":"ElementaryTypeName","src":"14141:7:32","typeDescriptions":{}}},"id":6417,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14141:10:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"14132:19:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616c653a207a65726f206164647265737320746f6b656e","id":6419,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"14153:26:32","typeDescriptions":{"typeIdentifier":"t_stringliteral_390390ffeaaf9bf517f234667001b6f8177bceb217a3b68ca80f51928e62b56e","typeString":"literal_string \"Sale: zero address token\""},"value":"Sale: zero address token"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_390390ffeaaf9bf517f234667001b6f8177bceb217a3b68ca80f51928e62b56e","typeString":"literal_string \"Sale: zero address token\""}],"id":6412,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"14124:7:32","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":6420,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14124:56:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6421,"nodeType":"ExpressionStatement","src":"14124:56:32"},{"assignments":[6423],"declarations":[{"constant":false,"id":6423,"mutability":"mutable","name":"price","nodeType":"VariableDeclaration","scope":6462,"src":"14194:13:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6422,"name":"uint256","nodeType":"ElementaryTypeName","src":"14194:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6427,"initialValue":{"baseExpression":{"id":6424,"name":"prices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6392,"src":"14210:6:32","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":6426,"indexExpression":{"id":6425,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6396,"src":"14217:1:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14210:9:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"14194:25:32"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6430,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6428,"name":"price","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6423,"src":"14237:5:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":6429,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14246:1:32","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"14237:10:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":6460,"nodeType":"Block","src":"14331:89:32","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"id":6451,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6407,"src":"14381:5:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6450,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14373:7:32","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":6449,"name":"uint256","nodeType":"ElementaryTypeName","src":"14373:7:32","typeDescriptions":{}}},"id":6452,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14373:14:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6448,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14365:7:32","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":6447,"name":"bytes32","nodeType":"ElementaryTypeName","src":"14365:7:32","typeDescriptions":{}}},"id":6453,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14365:23:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":6456,"name":"price","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6423,"src":"14398:5:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6455,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14390:7:32","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":6454,"name":"bytes32","nodeType":"ElementaryTypeName","src":"14390:7:32","typeDescriptions":{}}},"id":6457,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14390:14:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":6444,"name":"tokenPrices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6386,"src":"14349:11:32","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map storage pointer"}},"id":6446,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"set","nodeType":"MemberAccess","referencedDeclaration":181,"src":"14349:15:32","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Map_$119_storage_ptr_$_t_bytes32_$_t_bytes32_$returns$_t_bool_$bound_to$_t_struct$_Map_$119_storage_ptr_$","typeString":"function (struct EnumMap.Map storage pointer,bytes32,bytes32) returns (bool)"}},"id":6458,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14349:56:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6459,"nodeType":"ExpressionStatement","src":"14349:56:32"}]},"id":6461,"nodeType":"IfStatement","src":"14233:187:32","trueBody":{"id":6443,"nodeType":"Block","src":"14249:76:32","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"id":6438,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6407,"src":"14302:5:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6437,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14294:7:32","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":6436,"name":"uint256","nodeType":"ElementaryTypeName","src":"14294:7:32","typeDescriptions":{}}},"id":6439,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14294:14:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6435,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14286:7:32","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":6434,"name":"bytes32","nodeType":"ElementaryTypeName","src":"14286:7:32","typeDescriptions":{}}},"id":6440,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14286:23:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":6431,"name":"tokenPrices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6386,"src":"14267:11:32","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map storage pointer"}},"id":6433,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"remove","nodeType":"MemberAccess","referencedDeclaration":262,"src":"14267:18:32","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Map_$119_storage_ptr_$_t_bytes32_$returns$_t_bool_$bound_to$_t_struct$_Map_$119_storage_ptr_$","typeString":"function (struct EnumMap.Map storage pointer,bytes32) returns (bool)"}},"id":6441,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14267:43:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6442,"nodeType":"ExpressionStatement","src":"14267:43:32"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6402,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6399,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6396,"src":"14047:1:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":6400,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6389,"src":"14051:6:32","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":6401,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"14051:13:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14047:17:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6463,"initializationExpression":{"assignments":[6396],"declarations":[{"constant":false,"id":6396,"mutability":"mutable","name":"i","nodeType":"VariableDeclaration","scope":6463,"src":"14032:9:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6395,"name":"uint256","nodeType":"ElementaryTypeName","src":"14032:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6398,"initialValue":{"hexValue":"30","id":6397,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14044:1:32","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"14032:13:32"},"loopExpression":{"expression":{"id":6404,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"14066:3:32","subExpression":{"id":6403,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6396,"src":"14068:1:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6405,"nodeType":"ExpressionStatement","src":"14066:3:32"},"nodeType":"ForStatement","src":"14027:403:32"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6469,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":6465,"name":"tokenPrices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6386,"src":"14447:11:32","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map storage pointer"}},"id":6466,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","referencedDeclaration":293,"src":"14447:18:32","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Map_$119_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Map_$119_storage_ptr_$","typeString":"function (struct EnumMap.Map storage pointer) view returns (uint256)"}},"id":6467,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14447:20:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":6468,"name":"_tokensPerSkuCapacity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5787,"src":"14471:21:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14447:45:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616c653a20746f6f206d616e7920746f6b656e73","id":6470,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"14494:23:32","typeDescriptions":{"typeIdentifier":"t_stringliteral_d10df86c111405b1296346c8d2377a305fd2423ed427a0fb4d6e423c65c58e42","typeString":"literal_string \"Sale: too many tokens\""},"value":"Sale: too many tokens"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_d10df86c111405b1296346c8d2377a305fd2423ed427a0fb4d6e423c65c58e42","typeString":"literal_string \"Sale: too many tokens\""}],"id":6464,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"14439:7:32","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":6471,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14439:79:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6472,"nodeType":"ExpressionStatement","src":"14439:79:32"}]},"documentation":{"id":6384,"nodeType":"StructuredDocumentation","src":"13394:463:32","text":" Updates SKU token prices.\n @dev Reverts if one of the `tokens` is the zero address.\n @dev Reverts if the update results in too many tokens for the SKU.\n @param tokenPrices Storage pointer to a mapping of SKU token prices to update.\n @param tokens The list of payment tokens to update.\n @param prices The list of prices to apply for each payment token.\n  Zero price values are used to disable a payment token."},"id":6474,"implemented":true,"kind":"function","modifiers":[],"name":"_setTokenPrices","nodeType":"FunctionDefinition","parameters":{"id":6393,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6386,"mutability":"mutable","name":"tokenPrices","nodeType":"VariableDeclaration","scope":6474,"src":"13896:31:32","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map"},"typeName":{"id":6385,"name":"EnumMap.Map","nodeType":"UserDefinedTypeName","referencedDeclaration":119,"src":"13896:11:32","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map"}},"visibility":"internal"},{"constant":false,"id":6389,"mutability":"mutable","name":"tokens","nodeType":"VariableDeclaration","scope":6474,"src":"13937:23:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":6387,"name":"address","nodeType":"ElementaryTypeName","src":"13937:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":6388,"nodeType":"ArrayTypeName","src":"13937:9:32","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":6392,"mutability":"mutable","name":"prices","nodeType":"VariableDeclaration","scope":6474,"src":"13970:23:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":6390,"name":"uint256","nodeType":"ElementaryTypeName","src":"13970:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6391,"nodeType":"ArrayTypeName","src":"13970:9:32","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"13886:113:32"},"returnParameters":{"id":6394,"nodeType":"ParameterList","parameters":[],"src":"14017:0:32"},"scope":6694,"src":"13862:663:32","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"baseFunctions":[5646],"body":{"id":6570,"nodeType":"Block","src":"15547:770:32","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"id":6488,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":6482,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6477,"src":"15565:8:32","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":6483,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"recipient","nodeType":"MemberAccess","referencedDeclaration":5563,"src":"15565:18:32","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":6486,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15595:1:32","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":6485,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15587:7:32","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6484,"name":"address","nodeType":"ElementaryTypeName","src":"15587:7:32","typeDescriptions":{}}},"id":6487,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"15587:10:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"15565:32:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616c653a207a65726f206164647265737320726563697069656e74","id":6489,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"15599:30:32","typeDescriptions":{"typeIdentifier":"t_stringliteral_cc24d13b2f21ad6100bcda32171aee5a00399730b3daf8fd6926c0273d69a71b","typeString":"literal_string \"Sale: zero address recipient\""},"value":"Sale: zero address recipient"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_cc24d13b2f21ad6100bcda32171aee5a00399730b3daf8fd6926c0273d69a71b","typeString":"literal_string \"Sale: zero address recipient\""}],"id":6481,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"15557:7:32","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":6490,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"15557:73:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6491,"nodeType":"ExpressionStatement","src":"15557:73:32"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":6499,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":6493,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6477,"src":"15648:8:32","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":6494,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"token","nodeType":"MemberAccess","referencedDeclaration":5565,"src":"15648:14:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":6497,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15674:1:32","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":6496,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15666:7:32","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6495,"name":"address","nodeType":"ElementaryTypeName","src":"15666:7:32","typeDescriptions":{}}},"id":6498,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"15666:10:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"15648:28:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616c653a207a65726f206164647265737320746f6b656e","id":6500,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"15678:26:32","typeDescriptions":{"typeIdentifier":"t_stringliteral_390390ffeaaf9bf517f234667001b6f8177bceb217a3b68ca80f51928e62b56e","typeString":"literal_string \"Sale: zero address token\""},"value":"Sale: zero address token"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_390390ffeaaf9bf517f234667001b6f8177bceb217a3b68ca80f51928e62b56e","typeString":"literal_string \"Sale: zero address token\""}],"id":6492,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"15640:7:32","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":6501,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"15640:65:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6502,"nodeType":"ExpressionStatement","src":"15640:65:32"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6507,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":6504,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6477,"src":"15723:8:32","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":6505,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"quantity","nodeType":"MemberAccess","referencedDeclaration":5569,"src":"15723:17:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":6506,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15744:1:32","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"15723:22:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616c653a207a65726f207175616e74697479207075726368617365","id":6508,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"15747:30:32","typeDescriptions":{"typeIdentifier":"t_stringliteral_4363e239e04c420fd6d881e12a5fa5ef213f86f297300b24e0e51e5d3695344f","typeString":"literal_string \"Sale: zero quantity purchase\""},"value":"Sale: zero quantity purchase"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_4363e239e04c420fd6d881e12a5fa5ef213f86f297300b24e0e51e5d3695344f","typeString":"literal_string \"Sale: zero quantity purchase\""}],"id":6503,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"15715:7:32","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":6509,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"15715:63:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6510,"nodeType":"ExpressionStatement","src":"15715:63:32"},{"assignments":[6512],"declarations":[{"constant":false,"id":6512,"mutability":"mutable","name":"skuInfo","nodeType":"VariableDeclaration","scope":6570,"src":"15788:23:32","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage_ptr","typeString":"struct Sale.SkuInfo"},"typeName":{"id":6511,"name":"SkuInfo","nodeType":"UserDefinedTypeName","referencedDeclaration":5762,"src":"15788:7:32","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage_ptr","typeString":"struct Sale.SkuInfo"}},"visibility":"internal"}],"id":6517,"initialValue":{"baseExpression":{"id":6513,"name":"_skuInfos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5783,"src":"15814:9:32","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_SkuInfo_$5762_storage_$","typeString":"mapping(bytes32 => struct Sale.SkuInfo storage ref)"}},"id":6516,"indexExpression":{"expression":{"id":6514,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6477,"src":"15824:8:32","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":6515,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"sku","nodeType":"MemberAccess","referencedDeclaration":5567,"src":"15824:12:32","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15814:23:32","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage","typeString":"struct Sale.SkuInfo storage ref"}},"nodeType":"VariableDeclarationStatement","src":"15788:49:32"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6522,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":6519,"name":"skuInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6512,"src":"15855:7:32","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage_ptr","typeString":"struct Sale.SkuInfo storage pointer"}},"id":6520,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":5753,"src":"15855:19:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":6521,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15878:1:32","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"15855:24:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616c653a206e6f6e2d6578697374656e7420736b75","id":6523,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"15881:24:32","typeDescriptions":{"typeIdentifier":"t_stringliteral_787dbdf6531a633e1a32b425311f372da5995176e9c33100c309e4f139b70cfc","typeString":"literal_string \"Sale: non-existent sku\""},"value":"Sale: non-existent sku"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_787dbdf6531a633e1a32b425311f372da5995176e9c33100c309e4f139b70cfc","typeString":"literal_string \"Sale: non-existent sku\""}],"id":6518,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"15847:7:32","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":6524,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"15847:59:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6525,"nodeType":"ExpressionStatement","src":"15847:59:32"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6531,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":6527,"name":"skuInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6512,"src":"15924:7:32","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage_ptr","typeString":"struct Sale.SkuInfo storage pointer"}},"id":6528,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"maxQuantityPerPurchase","nodeType":"MemberAccess","referencedDeclaration":5757,"src":"15924:30:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"expression":{"id":6529,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6477,"src":"15958:8:32","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":6530,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"quantity","nodeType":"MemberAccess","referencedDeclaration":5569,"src":"15958:17:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15924:51:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616c653a2061626f7665206d6178207175616e74697479","id":6532,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"15977:26:32","typeDescriptions":{"typeIdentifier":"t_stringliteral_1447f5d3559d3e85a703a3d23a2734d0a6be6deee13c6fcc8692090069b9c447","typeString":"literal_string \"Sale: above max quantity\""},"value":"Sale: above max quantity"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_1447f5d3559d3e85a703a3d23a2734d0a6be6deee13c6fcc8692090069b9c447","typeString":"literal_string \"Sale: above max quantity\""}],"id":6526,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"15916:7:32","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":6533,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"15916:88:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6534,"nodeType":"ExpressionStatement","src":"15916:88:32"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6538,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":6535,"name":"skuInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6512,"src":"16018:7:32","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage_ptr","typeString":"struct Sale.SkuInfo storage pointer"}},"id":6536,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":5753,"src":"16018:19:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":6537,"name":"SUPPLY_UNLIMITED","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5777,"src":"16041:16:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16018:39:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6549,"nodeType":"IfStatement","src":"16014:152:32","trueBody":{"id":6548,"nodeType":"Block","src":"16059:107:32","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6544,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":6540,"name":"skuInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6512,"src":"16081:7:32","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage_ptr","typeString":"struct Sale.SkuInfo storage pointer"}},"id":6541,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"remainingSupply","nodeType":"MemberAccess","referencedDeclaration":5755,"src":"16081:23:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"expression":{"id":6542,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6477,"src":"16108:8:32","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":6543,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"quantity","nodeType":"MemberAccess","referencedDeclaration":5569,"src":"16108:17:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16081:44:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616c653a20696e73756666696369656e7420737570706c79","id":6545,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"16127:27:32","typeDescriptions":{"typeIdentifier":"t_stringliteral_e081dba84702677682f73117c693704309940f08fb281e4dbf1d4b2875195c20","typeString":"literal_string \"Sale: insufficient supply\""},"value":"Sale: insufficient supply"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_e081dba84702677682f73117c693704309940f08fb281e4dbf1d4b2875195c20","typeString":"literal_string \"Sale: insufficient supply\""}],"id":6539,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"16073:7:32","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":6546,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16073:82:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6547,"nodeType":"ExpressionStatement","src":"16073:82:32"}]}},{"assignments":[6551],"declarations":[{"constant":false,"id":6551,"mutability":"mutable","name":"priceKey","nodeType":"VariableDeclaration","scope":6570,"src":"16175:16:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6550,"name":"bytes32","nodeType":"ElementaryTypeName","src":"16175:7:32","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":6560,"initialValue":{"arguments":[{"arguments":[{"expression":{"id":6556,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6477,"src":"16210:8:32","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":6557,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"token","nodeType":"MemberAccess","referencedDeclaration":5565,"src":"16210:14:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6555,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16202:7:32","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":6554,"name":"uint256","nodeType":"ElementaryTypeName","src":"16202:7:32","typeDescriptions":{}}},"id":6558,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16202:23:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6553,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16194:7:32","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":6552,"name":"bytes32","nodeType":"ElementaryTypeName","src":"16194:7:32","typeDescriptions":{}}},"id":6559,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16194:32:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"16175:51:32"},{"expression":{"arguments":[{"arguments":[{"id":6565,"name":"priceKey","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6551,"src":"16268:8:32","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"expression":{"id":6562,"name":"skuInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6512,"src":"16244:7:32","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage_ptr","typeString":"struct Sale.SkuInfo storage pointer"}},"id":6563,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"prices","nodeType":"MemberAccess","referencedDeclaration":5761,"src":"16244:14:32","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage","typeString":"struct EnumMap.Map storage ref"}},"id":6564,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"contains","nodeType":"MemberAccess","referencedDeclaration":280,"src":"16244:23:32","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Map_$119_storage_ptr_$_t_bytes32_$returns$_t_bool_$bound_to$_t_struct$_Map_$119_storage_ptr_$","typeString":"function (struct EnumMap.Map storage pointer,bytes32) view returns (bool)"}},"id":6566,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16244:33:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616c653a206e6f6e2d6578697374656e7420736b7520746f6b656e","id":6567,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"16279:30:32","typeDescriptions":{"typeIdentifier":"t_stringliteral_55f28e818688590f264c33dba56b72386a3014a1bbe26e7ceb7f7e89c92ec0fa","typeString":"literal_string \"Sale: non-existent sku token\""},"value":"Sale: non-existent sku token"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_55f28e818688590f264c33dba56b72386a3014a1bbe26e7ceb7f7e89c92ec0fa","typeString":"literal_string \"Sale: non-existent sku token\""}],"id":6561,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"16236:7:32","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":6568,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16236:74:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6569,"nodeType":"ExpressionStatement","src":"16236:74:32"}]},"documentation":{"id":6475,"nodeType":"StructuredDocumentation","src":"14632:828:32","text":" Lifecycle step which validates the purchase pre-conditions.\n @dev Responsibilities:\n  - Ensure that the purchase pre-conditions are met and revert if not.\n @dev Reverts if `purchase.recipient` is the zero address.\n @dev Reverts if `purchase.token` is the zero address.\n @dev Reverts if `purchase.quantity` is zero.\n @dev Reverts if `purchase.quantity` is greater than the SKU's `maxQuantityPerPurchase`.\n @dev Reverts if `purchase.quantity` is greater than the available supply.\n @dev Reverts if `purchase.sku` does not exist.\n @dev Reverts if `purchase.sku` exists but does not have a price set for `purchase.token`.\n @dev If this function is overriden, the implementer SHOULD super call this before.\n @param purchase The purchase conditions."},"id":6571,"implemented":true,"kind":"function","modifiers":[],"name":"_validation","nodeType":"FunctionDefinition","overrides":{"id":6479,"nodeType":"OverrideSpecifier","overrides":[],"src":"15538:8:32"},"parameters":{"id":6478,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6477,"mutability":"mutable","name":"purchase","nodeType":"VariableDeclaration","scope":6571,"src":"15486:28:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"},"typeName":{"id":6476,"name":"PurchaseData","nodeType":"UserDefinedTypeName","referencedDeclaration":5583,"src":"15486:12:32","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_storage_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"}},"visibility":"internal"}],"src":"15485:30:32"},"returnParameters":{"id":6480,"nodeType":"ParameterList","parameters":[],"src":"15547:0:32"},"scope":6694,"src":"15465:852:32","stateMutability":"view","virtual":true,"visibility":"internal"},{"baseFunctions":[5664],"body":{"id":6604,"nodeType":"Block","src":"17029:233:32","statements":[{"assignments":[6579],"declarations":[{"constant":false,"id":6579,"mutability":"mutable","name":"skuInfo","nodeType":"VariableDeclaration","scope":6604,"src":"17039:23:32","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage_ptr","typeString":"struct Sale.SkuInfo"},"typeName":{"id":6578,"name":"SkuInfo","nodeType":"UserDefinedTypeName","referencedDeclaration":5762,"src":"17039:7:32","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage_ptr","typeString":"struct Sale.SkuInfo"}},"visibility":"internal"}],"id":6584,"initialValue":{"baseExpression":{"id":6580,"name":"_skuInfos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5783,"src":"17065:9:32","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_SkuInfo_$5762_storage_$","typeString":"mapping(bytes32 => struct Sale.SkuInfo storage ref)"}},"id":6583,"indexExpression":{"expression":{"id":6581,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6574,"src":"17075:8:32","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":6582,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"sku","nodeType":"MemberAccess","referencedDeclaration":5567,"src":"17075:12:32","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17065:23:32","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage","typeString":"struct Sale.SkuInfo storage ref"}},"nodeType":"VariableDeclarationStatement","src":"17039:49:32"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6588,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":6585,"name":"skuInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6579,"src":"17102:7:32","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage_ptr","typeString":"struct Sale.SkuInfo storage pointer"}},"id":6586,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":5753,"src":"17102:19:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":6587,"name":"SUPPLY_UNLIMITED","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5777,"src":"17125:16:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17102:39:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6603,"nodeType":"IfStatement","src":"17098:158:32","trueBody":{"id":6602,"nodeType":"Block","src":"17143:113:32","statements":[{"expression":{"id":6600,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":6589,"name":"_skuInfos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5783,"src":"17157:9:32","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_SkuInfo_$5762_storage_$","typeString":"mapping(bytes32 => struct Sale.SkuInfo storage ref)"}},"id":6592,"indexExpression":{"expression":{"id":6590,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6574,"src":"17167:8:32","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":6591,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"sku","nodeType":"MemberAccess","referencedDeclaration":5567,"src":"17167:12:32","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17157:23:32","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage","typeString":"struct Sale.SkuInfo storage ref"}},"id":6593,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"remainingSupply","nodeType":"MemberAccess","referencedDeclaration":5755,"src":"17157:39:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":6597,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6574,"src":"17227:8:32","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":6598,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"quantity","nodeType":"MemberAccess","referencedDeclaration":5569,"src":"17227:17:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":6594,"name":"skuInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6579,"src":"17199:7:32","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage_ptr","typeString":"struct Sale.SkuInfo storage pointer"}},"id":6595,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"remainingSupply","nodeType":"MemberAccess","referencedDeclaration":5755,"src":"17199:23:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6596,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sub","nodeType":"MemberAccess","referencedDeclaration":1208,"src":"17199:27:32","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":6599,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17199:46:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17157:88:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6601,"nodeType":"ExpressionStatement","src":"17157:88:32"}]}}]},"documentation":{"id":6572,"nodeType":"StructuredDocumentation","src":"16323:626:32","text":" Lifecycle step which delivers the purchased SKUs to the recipient.\n @dev Responsibilities:\n  - Ensure the product is delivered to the recipient, if that is the contract's responsibility.\n  - Handle any internal logic related to the delivery, including the remaining supply update;\n  - Add any relevant extra data related to delivery in `purchase.deliveryData` and document how to interpret it.\n @dev Reverts if there is not enough available supply.\n @dev If this function is overriden, the implementer SHOULD super call it.\n @param purchase The purchase conditions."},"id":6605,"implemented":true,"kind":"function","modifiers":[],"name":"_delivery","nodeType":"FunctionDefinition","overrides":{"id":6576,"nodeType":"OverrideSpecifier","overrides":[],"src":"17020:8:32"},"parameters":{"id":6575,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6574,"mutability":"mutable","name":"purchase","nodeType":"VariableDeclaration","scope":6605,"src":"16973:28:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"},"typeName":{"id":6573,"name":"PurchaseData","nodeType":"UserDefinedTypeName","referencedDeclaration":5583,"src":"16973:12:32","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_storage_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"}},"visibility":"internal"}],"src":"16972:30:32"},"returnParameters":{"id":6577,"nodeType":"ParameterList","parameters":[],"src":"17029:0:32"},"scope":6694,"src":"16954:308:32","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"baseFunctions":[5670],"body":{"id":6692,"nodeType":"Block","src":"18072:1214:32","statements":[{"eventCall":{"arguments":[{"expression":{"id":6613,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6608,"src":"18109:8:32","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":6614,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"purchaser","nodeType":"MemberAccess","referencedDeclaration":5561,"src":"18109:18:32","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"expression":{"id":6615,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6608,"src":"18141:8:32","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":6616,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"recipient","nodeType":"MemberAccess","referencedDeclaration":5563,"src":"18141:18:32","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"expression":{"id":6617,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6608,"src":"18173:8:32","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":6618,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"token","nodeType":"MemberAccess","referencedDeclaration":5565,"src":"18173:14:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":6619,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6608,"src":"18201:8:32","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":6620,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"sku","nodeType":"MemberAccess","referencedDeclaration":5567,"src":"18201:12:32","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":6621,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6608,"src":"18227:8:32","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":6622,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"quantity","nodeType":"MemberAccess","referencedDeclaration":5569,"src":"18227:17:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":6623,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6608,"src":"18258:8:32","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":6624,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userData","nodeType":"MemberAccess","referencedDeclaration":5571,"src":"18258:17:32","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"expression":{"id":6625,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6608,"src":"18289:8:32","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":6626,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalPrice","nodeType":"MemberAccess","referencedDeclaration":5573,"src":"18289:19:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"expression":{"id":6629,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6608,"src":"18339:8:32","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":6630,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"pricingData","nodeType":"MemberAccess","referencedDeclaration":5576,"src":"18339:20:32","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},{"expression":{"id":6631,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6608,"src":"18361:8:32","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":6632,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"paymentData","nodeType":"MemberAccess","referencedDeclaration":5579,"src":"18361:20:32","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},{"expression":{"id":6633,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6608,"src":"18383:8:32","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":6634,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"deliveryData","nodeType":"MemberAccess","referencedDeclaration":5582,"src":"18383:21:32","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"},{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"},{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}],"expression":{"id":6627,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"18322:3:32","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":6628,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodePacked","nodeType":"MemberAccess","src":"18322:16:32","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":6635,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18322:83:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":6612,"name":"Purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7273,"src":"18087:8:32","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_bytes32_$_t_uint256_$_t_bytes_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,address,bytes32,uint256,bytes memory,uint256,bytes memory)"}},"id":6636,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18087:328:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6637,"nodeType":"EmitStatement","src":"18082:333:32"},{"assignments":[6639],"declarations":[{"constant":false,"id":6639,"mutability":"mutable","name":"notificationsReceiver","nodeType":"VariableDeclaration","scope":6692,"src":"18426:29:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6638,"name":"address","nodeType":"ElementaryTypeName","src":"18426:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":6645,"initialValue":{"expression":{"baseExpression":{"id":6640,"name":"_skuInfos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5783,"src":"18458:9:32","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_SkuInfo_$5762_storage_$","typeString":"mapping(bytes32 => struct Sale.SkuInfo storage ref)"}},"id":6643,"indexExpression":{"expression":{"id":6641,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6608,"src":"18468:8:32","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":6642,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"sku","nodeType":"MemberAccess","referencedDeclaration":5567,"src":"18468:12:32","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18458:23:32","typeDescriptions":{"typeIdentifier":"t_struct$_SkuInfo_$5762_storage","typeString":"struct Sale.SkuInfo storage ref"}},"id":6644,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"notificationsReceiver","nodeType":"MemberAccess","referencedDeclaration":5759,"src":"18458:45:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"18426:77:32"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":6651,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6646,"name":"notificationsReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6639,"src":"18517:21:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":6649,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18550:1:32","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":6648,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"18542:7:32","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6647,"name":"address","nodeType":"ElementaryTypeName","src":"18542:7:32","typeDescriptions":{}}},"id":6650,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18542:10:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"18517:35:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6691,"nodeType":"IfStatement","src":"18513:767:32","trueBody":{"id":6690,"nodeType":"Block","src":"18554:726:32","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":6686,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"expression":{"id":6657,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6608,"src":"18699:8:32","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":6658,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"purchaser","nodeType":"MemberAccess","referencedDeclaration":5561,"src":"18699:18:32","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"expression":{"id":6659,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6608,"src":"18739:8:32","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":6660,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"recipient","nodeType":"MemberAccess","referencedDeclaration":5563,"src":"18739:18:32","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"expression":{"id":6661,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6608,"src":"18779:8:32","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":6662,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"token","nodeType":"MemberAccess","referencedDeclaration":5565,"src":"18779:14:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":6663,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6608,"src":"18815:8:32","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":6664,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"sku","nodeType":"MemberAccess","referencedDeclaration":5567,"src":"18815:12:32","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":6665,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6608,"src":"18849:8:32","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":6666,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"quantity","nodeType":"MemberAccess","referencedDeclaration":5569,"src":"18849:17:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":6667,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6608,"src":"18888:8:32","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":6668,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userData","nodeType":"MemberAccess","referencedDeclaration":5571,"src":"18888:17:32","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"expression":{"id":6669,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6608,"src":"18927:8:32","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":6670,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalPrice","nodeType":"MemberAccess","referencedDeclaration":5573,"src":"18927:19:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":6671,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6608,"src":"18968:8:32","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":6672,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"pricingData","nodeType":"MemberAccess","referencedDeclaration":5576,"src":"18968:20:32","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},{"expression":{"id":6673,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6608,"src":"19010:8:32","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":6674,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"paymentData","nodeType":"MemberAccess","referencedDeclaration":5579,"src":"19010:20:32","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},{"expression":{"id":6675,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6608,"src":"19052:8:32","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":6676,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"deliveryData","nodeType":"MemberAccess","referencedDeclaration":5582,"src":"19052:21:32","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"},{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"},{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}],"expression":{"arguments":[{"id":6654,"name":"notificationsReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6639,"src":"18624:21:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6653,"name":"IPurchaseNotificationsReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7220,"src":"18593:30:32","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPurchaseNotificationsReceiver_$7220_$","typeString":"type(contract IPurchaseNotificationsReceiver)"}},"id":6655,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18593:53:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPurchaseNotificationsReceiver_$7220","typeString":"contract IPurchaseNotificationsReceiver"}},"id":6656,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"onPurchaseNotificationReceived","nodeType":"MemberAccess","referencedDeclaration":7219,"src":"18593:84:32","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_address_$_t_bytes32_$_t_uint256_$_t_bytes_memory_ptr_$_t_uint256_$_t_array$_t_bytes32_$dyn_memory_ptr_$_t_array$_t_bytes32_$dyn_memory_ptr_$_t_array$_t_bytes32_$dyn_memory_ptr_$returns$_t_bytes4_$","typeString":"function (address,address,address,bytes32,uint256,bytes memory,uint256,bytes32[] memory,bytes32[] memory,bytes32[] memory) external returns (bytes4)"}},"id":6677,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18593:498:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"expression":{"arguments":[{"arguments":[{"hexValue":"30","id":6681,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19134:1:32","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":6680,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"19126:7:32","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6679,"name":"address","nodeType":"ElementaryTypeName","src":"19126:7:32","typeDescriptions":{}}},"id":6682,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"19126:10:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":6678,"name":"IPurchaseNotificationsReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7220,"src":"19095:30:32","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPurchaseNotificationsReceiver_$7220_$","typeString":"type(contract IPurchaseNotificationsReceiver)"}},"id":6683,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"19095:42:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPurchaseNotificationsReceiver_$7220","typeString":"contract IPurchaseNotificationsReceiver"}},"id":6684,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"onPurchaseNotificationReceived","nodeType":"MemberAccess","referencedDeclaration":7219,"src":"19095:73:32","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_address_$_t_bytes32_$_t_uint256_$_t_bytes_memory_ptr_$_t_uint256_$_t_array$_t_bytes32_$dyn_memory_ptr_$_t_array$_t_bytes32_$dyn_memory_ptr_$_t_array$_t_bytes32_$dyn_memory_ptr_$returns$_t_bytes4_$","typeString":"function (address,address,address,bytes32,uint256,bytes memory,uint256,bytes32[] memory,bytes32[] memory,bytes32[] memory) external returns (bytes4)"}},"id":6685,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"selector","nodeType":"MemberAccess","src":"19095:82:32","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"18593:584:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616c653a206e6f74696669636174696f6e2072656675736564","id":6687,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"19227:28:32","typeDescriptions":{"typeIdentifier":"t_stringliteral_0cb48d30f88ea773db7569461f290e00aa652ddbed1db8e40361b49b3d8b7e30","typeString":"literal_string \"Sale: notification refused\""},"value":"Sale: notification refused"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_0cb48d30f88ea773db7569461f290e00aa652ddbed1db8e40361b49b3d8b7e30","typeString":"literal_string \"Sale: notification refused\""}],"id":6652,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"18568:7:32","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":6688,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18568:701:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6689,"nodeType":"ExpressionStatement","src":"18568:701:32"}]}}]},"documentation":{"id":6606,"nodeType":"StructuredDocumentation","src":"17268:720:32","text":" Lifecycle step which notifies of the purchase.\n @dev Responsibilities:\n  - Manage after-purchase event(s) emission.\n  - Handle calls to the notifications receiver contract's `onPurchaseNotificationReceived` function, if applicable.\n @dev Reverts if `onPurchaseNotificationReceived` throws or returns an incorrect value.\n @dev Emits the `Purchase` event. The values of `purchaseData` are the concatenated values of `priceData`, `paymentData`\n and `deliveryData`. If not empty, the implementer MUST document how to interpret these values.\n @dev If this function is overriden, the implementer SHOULD super call it.\n @param purchase The purchase conditions."},"id":6693,"implemented":true,"kind":"function","modifiers":[],"name":"_notification","nodeType":"FunctionDefinition","overrides":{"id":6610,"nodeType":"OverrideSpecifier","overrides":[],"src":"18063:8:32"},"parameters":{"id":6609,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6608,"mutability":"mutable","name":"purchase","nodeType":"VariableDeclaration","scope":6693,"src":"18016:28:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"},"typeName":{"id":6607,"name":"PurchaseData","nodeType":"UserDefinedTypeName","referencedDeclaration":5583,"src":"18016:12:32","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_storage_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"}},"visibility":"internal"}],"src":"18015:30:32"},"returnParameters":{"id":6611,"nodeType":"ParameterList","parameters":[],"src":"18072:0:32"},"scope":6694,"src":"17993:1293:32","stateMutability":"nonpayable","virtual":true,"visibility":"internal"}],"scope":6695,"src":"1264:18024:32"}],"src":"33:19256:32"},"id":32},"contracts/sale/abstract/SwapSale.sol":{"ast":{"absolutePath":"contracts/sale/abstract/SwapSale.sol","exportedSymbols":{"ERC20Wrapper":[953],"EnumMap":[362],"ISwapSale":[7370],"IWrappedERC20":[983],"OracleSale":[5556],"SafeMath":[1359],"SwapSale":[7165]},"id":7166,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":6696,"literals":["solidity",">=","0.7",".6","<","0.8",".0"],"nodeType":"PragmaDirective","src":"33:31:33"},{"absolutePath":"contracts/sale/interfaces/ISwapSale.sol","file":"../interfaces/ISwapSale.sol","id":6698,"nodeType":"ImportDirective","scope":7166,"sourceUnit":7371,"src":"66:54:33","symbolAliases":[{"foreign":{"id":6697,"name":"ISwapSale","nodeType":"Identifier","overloadedDeclarations":[],"src":"74:9:33","typeDescriptions":{}}}],"unitAlias":""},{"absolutePath":"contracts/sale/abstract/Sale.sol","file":"./Sale.sol","id":6701,"nodeType":"ImportDirective","scope":7166,"sourceUnit":6695,"src":"121:45:33","symbolAliases":[{"foreign":{"id":6699,"name":"EnumMap","nodeType":"Identifier","overloadedDeclarations":[],"src":"129:7:33","typeDescriptions":{}}},{"foreign":{"id":6700,"name":"SafeMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"138:8:33","typeDescriptions":{}}}],"unitAlias":""},{"absolutePath":"contracts/sale/FixedPricesSale.sol","file":"../FixedPricesSale.sol","id":6704,"nodeType":"ImportDirective","scope":7166,"sourceUnit":4754,"src":"167:67:33","symbolAliases":[{"foreign":{"id":6702,"name":"IWrappedERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"175:13:33","typeDescriptions":{}}},{"foreign":{"id":6703,"name":"ERC20Wrapper","nodeType":"Identifier","overloadedDeclarations":[],"src":"190:12:33","typeDescriptions":{}}}],"unitAlias":""},{"absolutePath":"contracts/sale/abstract/OracleSale.sol","file":"./OracleSale.sol","id":6706,"nodeType":"ImportDirective","scope":7166,"sourceUnit":5557,"src":"235:44:33","symbolAliases":[{"foreign":{"id":6705,"name":"OracleSale","nodeType":"Identifier","overloadedDeclarations":[],"src":"243:10:33","typeDescriptions":{}}}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":6708,"name":"OracleSale","nodeType":"UserDefinedTypeName","referencedDeclaration":5556,"src":"933:10:33","typeDescriptions":{"typeIdentifier":"t_contract$_OracleSale_$5556","typeString":"contract OracleSale"}},"id":6709,"nodeType":"InheritanceSpecifier","src":"933:10:33"},{"baseName":{"id":6710,"name":"ISwapSale","nodeType":"UserDefinedTypeName","referencedDeclaration":7370,"src":"945:9:33","typeDescriptions":{"typeIdentifier":"t_contract$_ISwapSale_$7370","typeString":"contract ISwapSale"}},"id":6711,"nodeType":"InheritanceSpecifier","src":"945:9:33"}],"contractDependencies":[22,103,646,715,736,812,4753,5556,5671,6694,7187,7346,7370],"contractKind":"contract","documentation":{"id":6707,"nodeType":"StructuredDocumentation","src":"281:621:33","text":" @title SwapSale\n An OracleSale which implements support for an oracle-based token swap pricing strategy. The\n  final implementer is responsible for implementing any additional pricing and/or delivery logic.\n PurchaseData.pricingData:\n  - a zero length array for fixed pricing data.\n  - a non-zero length array for oracle-based pricing data\n  - [0] uint256: the uninterpolated unit price (i.e. magic value).\n  - [1] uint256: the token conversion/swap rate used for oracle-based pricing.\n PurchaseData.paymentData:\n  - [0] uint256: the actual payment price in terms of the purchase token."},"fullyImplemented":false,"id":7165,"linearizedBaseContracts":[7165,7370,5556,4753,6694,646,715,812,103,22,736,7346,5671,7187],"name":"SwapSale","nodeType":"ContractDefinition","nodes":[{"id":6714,"libraryName":{"id":6712,"name":"ERC20Wrapper","nodeType":"UserDefinedTypeName","referencedDeclaration":953,"src":"967:12:33","typeDescriptions":{"typeIdentifier":"t_contract$_ERC20Wrapper_$953","typeString":"library ERC20Wrapper"}},"nodeType":"UsingForDirective","src":"961:37:33","typeName":{"id":6713,"name":"IWrappedERC20","nodeType":"UserDefinedTypeName","referencedDeclaration":983,"src":"984:13:33","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedERC20_$983","typeString":"contract IWrappedERC20"}}},{"id":6717,"libraryName":{"id":6715,"name":"SafeMath","nodeType":"UserDefinedTypeName","referencedDeclaration":1359,"src":"1009:8:33","typeDescriptions":{"typeIdentifier":"t_contract$_SafeMath_$1359","typeString":"library SafeMath"}},"nodeType":"UsingForDirective","src":"1003:27:33","typeName":{"id":6716,"name":"uint256","nodeType":"ElementaryTypeName","src":"1022:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":6720,"libraryName":{"id":6718,"name":"EnumMap","nodeType":"UserDefinedTypeName","referencedDeclaration":362,"src":"1041:7:33","typeDescriptions":{"typeIdentifier":"t_contract$_EnumMap_$362","typeString":"library EnumMap"}},"nodeType":"UsingForDirective","src":"1035:30:33","typeName":{"id":6719,"name":"EnumMap.Map","nodeType":"UserDefinedTypeName","referencedDeclaration":119,"src":"1053:11:33","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map"}}},{"baseFunctions":[7355],"constant":true,"functionSelector":"579f2c77","id":6726,"mutability":"constant","name":"PRICE_SWAP_VIA_ORACLE","nodeType":"VariableDeclaration","overrides":{"id":6722,"nodeType":"OverrideSpecifier","overrides":[],"src":"1095:8:33"},"scope":7165,"src":"1071:85:33","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6721,"name":"uint256","nodeType":"ElementaryTypeName","src":"1071:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6725,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":6723,"name":"PRICE_CONVERT_VIA_ORACLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5227,"src":"1128:24:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":6724,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1155:1:33","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1128:28:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"body":{"id":6786,"nodeType":"Block","src":"1790:242:33","statements":[{"assignments":[6748],"declarations":[{"constant":false,"id":6748,"mutability":"mutable","name":"names","nodeType":"VariableDeclaration","scope":6786,"src":"1800:22:33","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":6746,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1800:7:33","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":6747,"nodeType":"ArrayTypeName","src":"1800:9:33","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"id":6754,"initialValue":{"arguments":[{"hexValue":"31","id":6752,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1839:1:33","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"}],"id":6751,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"1825:13:33","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (bytes32[] memory)"},"typeName":{"baseType":{"id":6749,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1829:7:33","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":6750,"nodeType":"ArrayTypeName","src":"1829:9:33","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}}},"id":6753,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1825:16:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"nodeType":"VariableDeclarationStatement","src":"1800:41:33"},{"assignments":[6759],"declarations":[{"constant":false,"id":6759,"mutability":"mutable","name":"values","nodeType":"VariableDeclaration","scope":6786,"src":"1851:23:33","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":6757,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1851:7:33","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":6758,"nodeType":"ArrayTypeName","src":"1851:9:33","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"id":6765,"initialValue":{"arguments":[{"hexValue":"31","id":6763,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1891:1:33","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"}],"id":6762,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"1877:13:33","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (bytes32[] memory)"},"typeName":{"baseType":{"id":6760,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1881:7:33","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":6761,"nodeType":"ArrayTypeName","src":"1881:9:33","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}}},"id":6764,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1877:16:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"nodeType":"VariableDeclarationStatement","src":"1851:42:33"},{"expression":{"id":6779,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"baseExpression":{"id":6766,"name":"names","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6748,"src":"1904:5:33","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"id":6768,"indexExpression":{"hexValue":"30","id":6767,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1910:1:33","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1904:8:33","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"baseExpression":{"id":6769,"name":"values","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6759,"src":"1914:6:33","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"id":6771,"indexExpression":{"hexValue":"30","id":6770,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1921:1:33","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1914:9:33","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":6772,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"1903:21:33","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bytes32_$_t_bytes32_$","typeString":"tuple(bytes32,bytes32)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"components":[{"hexValue":"50524943455f535741505f5649415f4f5241434c45","id":6773,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1928:23:33","typeDescriptions":{"typeIdentifier":"t_stringliteral_0b9f9520a966b382dd72f1a9d2ddc88d8472e5c93cc70a48645e666ee9082208","typeString":"literal_string \"PRICE_SWAP_VIA_ORACLE\""},"value":"PRICE_SWAP_VIA_ORACLE"},{"arguments":[{"id":6776,"name":"PRICE_SWAP_VIA_ORACLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6726,"src":"1961:21:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6775,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1953:7:33","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":6774,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1953:7:33","typeDescriptions":{}}},"id":6777,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1953:30:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":6778,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"1927:57:33","typeDescriptions":{"typeIdentifier":"t_tuple$_t_stringliteral_0b9f9520a966b382dd72f1a9d2ddc88d8472e5c93cc70a48645e666ee9082208_$_t_bytes32_$","typeString":"tuple(literal_string \"PRICE_SWAP_VIA_ORACLE\",bytes32)"}},"src":"1903:81:33","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6780,"nodeType":"ExpressionStatement","src":"1903:81:33"},{"eventCall":{"arguments":[{"id":6782,"name":"names","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6748,"src":"2011:5:33","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},{"id":6783,"name":"values","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6759,"src":"2018:6:33","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"},{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}],"id":6781,"name":"MagicValues","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7232,"src":"1999:11:33","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_array$_t_bytes32_$dyn_memory_ptr_$_t_array$_t_bytes32_$dyn_memory_ptr_$returns$__$","typeString":"function (bytes32[] memory,bytes32[] memory)"}},"id":6784,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1999:26:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6785,"nodeType":"EmitStatement","src":"1994:31:33"}]},"documentation":{"id":6727,"nodeType":"StructuredDocumentation","src":"1163:387:33","text":" Constructor.\n @dev Emits the `MagicValues` event.\n @dev Emits the `Paused` event.\n @param payoutWallet_ The payout wallet.\n @param skusCapacity The cap for the number of managed SKUs.\n @param tokensPerSkuCapacity The cap for the number of tokens managed per SKU.\n @param referenceToken The token to use for oracle-based token swaps."},"id":6787,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":6738,"name":"payoutWallet_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6729,"src":"1723:13:33","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":6739,"name":"skusCapacity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6731,"src":"1738:12:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":6740,"name":"tokensPerSkuCapacity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6733,"src":"1752:20:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":6741,"name":"referenceToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6735,"src":"1774:14:33","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":6742,"modifierName":{"id":6737,"name":"OracleSale","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5556,"src":"1712:10:33","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_OracleSale_$5556_$","typeString":"type(contract OracleSale)"}},"nodeType":"ModifierInvocation","src":"1712:77:33"}],"name":"","nodeType":"FunctionDefinition","parameters":{"id":6736,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6729,"mutability":"mutable","name":"payoutWallet_","nodeType":"VariableDeclaration","scope":6787,"src":"1576:29:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":6728,"name":"address","nodeType":"ElementaryTypeName","src":"1576:15:33","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":6731,"mutability":"mutable","name":"skusCapacity","nodeType":"VariableDeclaration","scope":6787,"src":"1615:20:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6730,"name":"uint256","nodeType":"ElementaryTypeName","src":"1615:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6733,"mutability":"mutable","name":"tokensPerSkuCapacity","nodeType":"VariableDeclaration","scope":6787,"src":"1645:28:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6732,"name":"uint256","nodeType":"ElementaryTypeName","src":"1645:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6735,"mutability":"mutable","name":"referenceToken","nodeType":"VariableDeclaration","scope":6787,"src":"1683:22:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6734,"name":"address","nodeType":"ElementaryTypeName","src":"1683:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1566:145:33"},"returnParameters":{"id":6743,"nodeType":"ParameterList","parameters":[],"src":"1790:0:33"},"scope":7165,"src":"1555:477:33","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[7369],"body":{"id":6852,"nodeType":"Block","src":"2877:311:33","statements":[{"assignments":[6803],"declarations":[{"constant":false,"id":6803,"mutability":"mutable","name":"length","nodeType":"VariableDeclaration","scope":6852,"src":"2887:14:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6802,"name":"uint256","nodeType":"ElementaryTypeName","src":"2887:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6806,"initialValue":{"expression":{"id":6804,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6791,"src":"2904:6:33","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":6805,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"2904:13:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2887:30:33"},{"expression":{"id":6813,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6807,"name":"rates","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6800,"src":"2927:5:33","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":6811,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6803,"src":"2949:6:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6810,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"2935:13:33","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":6808,"name":"uint256","nodeType":"ElementaryTypeName","src":"2939:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6809,"nodeType":"ArrayTypeName","src":"2939:9:33","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":6812,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2935:21:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"2927:29:33","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":6814,"nodeType":"ExpressionStatement","src":"2927:29:33"},{"body":{"id":6850,"nodeType":"Block","src":"3003:179:33","statements":[{"assignments":[6826],"declarations":[{"constant":false,"id":6826,"mutability":"mutable","name":"tokenAmount","nodeType":"VariableDeclaration","scope":6850,"src":"3017:19:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6825,"name":"uint256","nodeType":"ElementaryTypeName","src":"3017:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6835,"initialValue":{"arguments":[{"baseExpression":{"id":6828,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6791,"src":"3053:6:33","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":6830,"indexExpression":{"id":6829,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6816,"src":"3060:1:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3053:9:33","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6831,"name":"referenceToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5229,"src":"3064:14:33","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6832,"name":"referenceAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6793,"src":"3080:15:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":6833,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6795,"src":"3097:4:33","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":6827,"name":"_estimateSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7037,"src":"3039:13:33","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_uint256_$","typeString":"function (address,address,uint256,bytes memory) view returns (uint256)"}},"id":6834,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3039:63:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3017:85:33"},{"expression":{"id":6848,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":6836,"name":"rates","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6800,"src":"3116:5:33","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":6838,"indexExpression":{"id":6837,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6816,"src":"3122:1:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3116:8:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":6846,"name":"tokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6826,"src":"3159:11:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"},"id":6843,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":6841,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3147:2:33","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3138","id":6842,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3151:2:33","typeDescriptions":{"typeIdentifier":"t_rational_18_by_1","typeString":"int_const 18"},"value":"18"},"src":"3147:6:33","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"}],"expression":{"id":6839,"name":"referenceAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6793,"src":"3127:15:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6840,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"mul","nodeType":"MemberAccess","referencedDeclaration":1242,"src":"3127:19:33","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":6844,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3127:27:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6845,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"div","nodeType":"MemberAccess","referencedDeclaration":1264,"src":"3127:31:33","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":6847,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3127:44:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3116:55:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6849,"nodeType":"ExpressionStatement","src":"3116:55:33"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6821,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6819,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6816,"src":"2986:1:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":6820,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6803,"src":"2990:6:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2986:10:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6851,"initializationExpression":{"assignments":[6816],"declarations":[{"constant":false,"id":6816,"mutability":"mutable","name":"i","nodeType":"VariableDeclaration","scope":6851,"src":"2971:9:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6815,"name":"uint256","nodeType":"ElementaryTypeName","src":"2971:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6818,"initialValue":{"hexValue":"30","id":6817,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2983:1:33","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2971:13:33"},"loopExpression":{"expression":{"id":6823,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"2998:3:33","subExpression":{"id":6822,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6816,"src":"3000:1:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6824,"nodeType":"ExpressionStatement","src":"2998:3:33"},"nodeType":"ForStatement","src":"2966:216:33"}]},"documentation":{"id":6788,"nodeType":"StructuredDocumentation","src":"2133:553:33","text":" Retrieves the token swap rates for the `tokens`/`referenceToken` pairs via the oracle.\n @dev Reverts if the oracle does not provide a swap rate for one of the token pairs.\n @param tokens The list of tokens to retrieve the swap rates for.\n @param referenceAmount The amount of `referenceToken` to retrieve the swap rates for.\n @param data Additional data with no specified format for deriving the swap rates.\n @return rates The swap rates for the `tokens`/`referenceToken` pairs, retrieved via the oracle."},"functionSelector":"bda4c5ab","id":6853,"implemented":true,"kind":"function","modifiers":[],"name":"swapRates","nodeType":"FunctionDefinition","overrides":{"id":6797,"nodeType":"OverrideSpecifier","overrides":[],"src":"2835:8:33"},"parameters":{"id":6796,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6791,"mutability":"mutable","name":"tokens","nodeType":"VariableDeclaration","scope":6853,"src":"2719:25:33","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":6789,"name":"address","nodeType":"ElementaryTypeName","src":"2719:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":6790,"nodeType":"ArrayTypeName","src":"2719:9:33","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":6793,"mutability":"mutable","name":"referenceAmount","nodeType":"VariableDeclaration","scope":6853,"src":"2754:23:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6792,"name":"uint256","nodeType":"ElementaryTypeName","src":"2754:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6795,"mutability":"mutable","name":"data","nodeType":"VariableDeclaration","scope":6853,"src":"2787:19:33","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":6794,"name":"bytes","nodeType":"ElementaryTypeName","src":"2787:5:33","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2709:103:33"},"returnParameters":{"id":6801,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6800,"mutability":"mutable","name":"rates","nodeType":"VariableDeclaration","scope":6853,"src":"2853:22:33","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":6798,"name":"uint256","nodeType":"ElementaryTypeName","src":"2853:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6799,"nodeType":"ArrayTypeName","src":"2853:9:33","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"2852:24:33"},"scope":7165,"src":"2691:497:33","stateMutability":"view","virtual":true,"visibility":"external"},{"baseFunctions":[4717],"body":{"id":7022,"nodeType":"Block","src":"3824:1382:33","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":6876,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6864,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":6860,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6856,"src":"3839:8:33","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":6861,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"pricingData","nodeType":"MemberAccess","referencedDeclaration":5576,"src":"3839:20:33","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"id":6862,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"3839:27:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":6863,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3870:1:33","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3839:32:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":6865,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3838:34:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6874,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"baseExpression":{"expression":{"id":6868,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6856,"src":"3885:8:33","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":6869,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"pricingData","nodeType":"MemberAccess","referencedDeclaration":5576,"src":"3885:20:33","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"id":6871,"indexExpression":{"hexValue":"30","id":6870,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3906:1:33","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3885:23:33","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":6867,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3877:7:33","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":6866,"name":"uint256","nodeType":"ElementaryTypeName","src":"3877:7:33","typeDescriptions":{}}},"id":6872,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3877:32:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":6873,"name":"PRICE_SWAP_VIA_ORACLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6726,"src":"3913:21:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3877:57:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":6875,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3876:59:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"3838:97:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6885,"nodeType":"IfStatement","src":"3834:172:33","trueBody":{"id":6884,"nodeType":"Block","src":"3937:69:33","statements":[{"expression":{"arguments":[{"id":6880,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6856,"src":"3966:8:33","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}],"expression":{"id":6877,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"3951:5:33","typeDescriptions":{"typeIdentifier":"t_super$_SwapSale_$7165","typeString":"contract super SwapSale"}},"id":6879,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"_payment","nodeType":"MemberAccess","referencedDeclaration":4717,"src":"3951:14:33","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_PurchaseData_$5583_memory_ptr_$returns$__$","typeString":"function (struct PurchaseLifeCycles.PurchaseData memory)"}},"id":6881,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3951:24:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6882,"nodeType":"ExpressionStatement","src":"3951:24:33"},{"functionReturnParameters":6859,"id":6883,"nodeType":"Return","src":"3989:7:33"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":6889,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":6886,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6856,"src":"4020:8:33","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":6887,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"token","nodeType":"MemberAccess","referencedDeclaration":5565,"src":"4020:14:33","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":6888,"name":"TOKEN_ETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5769,"src":"4038:9:33","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4020:27:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":6915,"nodeType":"Block","src":"4147:165:33","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":6905,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":726,"src":"4252:10:33","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":6906,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4252:12:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"arguments":[{"id":6909,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4274:4:33","typeDescriptions":{"typeIdentifier":"t_contract$_SwapSale_$7165","typeString":"contract SwapSale"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SwapSale_$7165","typeString":"contract SwapSale"}],"id":6908,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4266:7:33","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6907,"name":"address","nodeType":"ElementaryTypeName","src":"4266:7:33","typeDescriptions":{}}},"id":6910,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4266:13:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":6911,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6856,"src":"4281:8:33","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":6912,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalPrice","nodeType":"MemberAccess","referencedDeclaration":5573,"src":"4281:19:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"id":6901,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6856,"src":"4216:8:33","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":6902,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"token","nodeType":"MemberAccess","referencedDeclaration":5565,"src":"4216:14:33","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6900,"name":"IWrappedERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":983,"src":"4202:13:33","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IWrappedERC20_$983_$","typeString":"type(contract IWrappedERC20)"}},"id":6903,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4202:29:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedERC20_$983","typeString":"contract IWrappedERC20"}},"id":6904,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"wrappedTransferFrom","nodeType":"MemberAccess","referencedDeclaration":867,"src":"4202:49:33","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IWrappedERC20_$983_$_t_address_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IWrappedERC20_$983_$","typeString":"function (contract IWrappedERC20,address,address,uint256)"}},"id":6913,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4202:99:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6914,"nodeType":"ExpressionStatement","src":"4202:99:33"}]},"id":6916,"nodeType":"IfStatement","src":"4016:296:33","trueBody":{"id":6899,"nodeType":"Block","src":"4049:92:33","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6895,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":6891,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4071:3:33","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":6892,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"value","nodeType":"MemberAccess","src":"4071:9:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"expression":{"id":6893,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6856,"src":"4084:8:33","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":6894,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalPrice","nodeType":"MemberAccess","referencedDeclaration":5573,"src":"4084:19:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4071:32:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616c653a20696e73756666696369656e7420455448","id":6896,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4105:24:33","typeDescriptions":{"typeIdentifier":"t_stringliteral_823c671c6f4d7572b64cce702c735afff7fb25de3f40217295a3e7d9fdd1c612","typeString":"literal_string \"Sale: insufficient ETH\""},"value":"Sale: insufficient ETH"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_823c671c6f4d7572b64cce702c735afff7fb25de3f40217295a3e7d9fdd1c612","typeString":"literal_string \"Sale: insufficient ETH\""}],"id":6890,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4063:7:33","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":6897,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4063:67:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6898,"nodeType":"ExpressionStatement","src":"4063:67:33"}]}},{"assignments":[6918],"declarations":[{"constant":false,"id":6918,"mutability":"mutable","name":"swapRate","nodeType":"VariableDeclaration","scope":7022,"src":"4322:16:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6917,"name":"uint256","nodeType":"ElementaryTypeName","src":"4322:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6926,"initialValue":{"arguments":[{"baseExpression":{"expression":{"id":6921,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6856,"src":"4349:8:33","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":6922,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"pricingData","nodeType":"MemberAccess","referencedDeclaration":5576,"src":"4349:20:33","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"id":6924,"indexExpression":{"hexValue":"31","id":6923,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4370:1:33","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4349:23:33","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":6920,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4341:7:33","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":6919,"name":"uint256","nodeType":"ElementaryTypeName","src":"4341:7:33","typeDescriptions":{}}},"id":6925,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4341:32:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4322:51:33"},{"assignments":[6928],"declarations":[{"constant":false,"id":6928,"mutability":"mutable","name":"referenceTotalPrice","nodeType":"VariableDeclaration","scope":7022,"src":"4383:27:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6927,"name":"uint256","nodeType":"ElementaryTypeName","src":"4383:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6939,"initialValue":{"arguments":[{"commonType":{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"},"id":6937,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":6935,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4451:2:33","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3138","id":6936,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4455:2:33","typeDescriptions":{"typeIdentifier":"t_rational_18_by_1","typeString":"int_const 18"},"value":"18"},"src":"4451:6:33","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"}],"expression":{"arguments":[{"expression":{"id":6931,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6856,"src":"4426:8:33","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":6932,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalPrice","nodeType":"MemberAccess","referencedDeclaration":5573,"src":"4426:19:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":6929,"name":"swapRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6918,"src":"4413:8:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6930,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"mul","nodeType":"MemberAccess","referencedDeclaration":1242,"src":"4413:12:33","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":6933,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4413:33:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6934,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"div","nodeType":"MemberAccess","referencedDeclaration":1264,"src":"4413:37:33","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":6938,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4413:45:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4383:75:33"},{"assignments":[6941],"declarations":[{"constant":false,"id":6941,"mutability":"mutable","name":"fromAmount","nodeType":"VariableDeclaration","scope":7022,"src":"4469:18:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6940,"name":"uint256","nodeType":"ElementaryTypeName","src":"4469:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6950,"initialValue":{"arguments":[{"expression":{"id":6943,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6856,"src":"4496:8:33","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":6944,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"token","nodeType":"MemberAccess","referencedDeclaration":5565,"src":"4496:14:33","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6945,"name":"referenceToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5229,"src":"4512:14:33","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6946,"name":"referenceTotalPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6928,"src":"4528:19:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":6947,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6856,"src":"4549:8:33","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":6948,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userData","nodeType":"MemberAccess","referencedDeclaration":5571,"src":"4549:17:33","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":6942,"name":"_swap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7051,"src":"4490:5:33","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_uint256_$","typeString":"function (address,address,uint256,bytes memory) returns (uint256)"}},"id":6949,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4490:77:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4469:98:33"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":6954,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":6951,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6856,"src":"4582:8:33","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":6952,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"token","nodeType":"MemberAccess","referencedDeclaration":5565,"src":"4582:14:33","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":6953,"name":"TOKEN_ETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5769,"src":"4600:9:33","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4582:27:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":7000,"nodeType":"Block","src":"4783:214:33","statements":[{"assignments":[6978],"declarations":[{"constant":false,"id":6978,"mutability":"mutable","name":"change","nodeType":"VariableDeclaration","scope":7000,"src":"4797:14:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6977,"name":"uint256","nodeType":"ElementaryTypeName","src":"4797:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6984,"initialValue":{"arguments":[{"id":6982,"name":"fromAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6941,"src":"4838:10:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":6979,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6856,"src":"4814:8:33","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":6980,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalPrice","nodeType":"MemberAccess","referencedDeclaration":5573,"src":"4814:19:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6981,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sub","nodeType":"MemberAccess","referencedDeclaration":1208,"src":"4814:23:33","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":6983,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4814:35:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4797:52:33"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6987,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6985,"name":"change","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6978,"src":"4868:6:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":6986,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4878:1:33","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4868:11:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6999,"nodeType":"IfStatement","src":"4864:123:33","trueBody":{"id":6998,"nodeType":"Block","src":"4881:106:33","statements":[{"expression":{"arguments":[{"expression":{"id":6993,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6856,"src":"4945:8:33","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":6994,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"purchaser","nodeType":"MemberAccess","referencedDeclaration":5561,"src":"4945:18:33","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":6995,"name":"change","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6978,"src":"4965:6:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"id":6989,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6856,"src":"4913:8:33","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":6990,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"token","nodeType":"MemberAccess","referencedDeclaration":5565,"src":"4913:14:33","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6988,"name":"IWrappedERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":983,"src":"4899:13:33","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IWrappedERC20_$983_$","typeString":"type(contract IWrappedERC20)"}},"id":6991,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4899:29:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedERC20_$983","typeString":"contract IWrappedERC20"}},"id":6992,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"wrappedTransfer","nodeType":"MemberAccess","referencedDeclaration":842,"src":"4899:45:33","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IWrappedERC20_$983_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IWrappedERC20_$983_$","typeString":"function (contract IWrappedERC20,address,uint256)"}},"id":6996,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4899:73:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6997,"nodeType":"ExpressionStatement","src":"4899:73:33"}]}}]},"id":7001,"nodeType":"IfStatement","src":"4578:419:33","trueBody":{"id":6976,"nodeType":"Block","src":"4611:166:33","statements":[{"assignments":[6956],"declarations":[{"constant":false,"id":6956,"mutability":"mutable","name":"change","nodeType":"VariableDeclaration","scope":6976,"src":"4625:14:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6955,"name":"uint256","nodeType":"ElementaryTypeName","src":"4625:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6962,"initialValue":{"arguments":[{"id":6960,"name":"fromAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6941,"src":"4656:10:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":6957,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4642:3:33","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":6958,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"value","nodeType":"MemberAccess","src":"4642:9:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6959,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sub","nodeType":"MemberAccess","referencedDeclaration":1208,"src":"4642:13:33","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":6961,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4642:25:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4625:42:33"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6965,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6963,"name":"change","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6956,"src":"4686:6:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":6964,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4696:1:33","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4686:11:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6975,"nodeType":"IfStatement","src":"4682:85:33","trueBody":{"id":6974,"nodeType":"Block","src":"4699:68:33","statements":[{"expression":{"arguments":[{"id":6971,"name":"change","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6956,"src":"4745:6:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":6966,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6856,"src":"4717:8:33","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":6969,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"purchaser","nodeType":"MemberAccess","referencedDeclaration":5561,"src":"4717:18:33","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":6970,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"transfer","nodeType":"MemberAccess","src":"4717:27:33","typeDescriptions":{"typeIdentifier":"t_function_transfer_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":6972,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4717:35:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6973,"nodeType":"ExpressionStatement","src":"4717:35:33"}]}}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":7004,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7002,"name":"referenceToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5229,"src":"5011:14:33","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":7003,"name":"TOKEN_ETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5769,"src":"5029:9:33","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5011:27:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":7020,"nodeType":"Block","src":"5104:96:33","statements":[{"expression":{"arguments":[{"id":7016,"name":"payoutWallet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":753,"src":"5164:12:33","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":7017,"name":"fromAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6941,"src":"5178:10:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":7013,"name":"referenceToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5229,"src":"5132:14:33","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7012,"name":"IWrappedERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":983,"src":"5118:13:33","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IWrappedERC20_$983_$","typeString":"type(contract IWrappedERC20)"}},"id":7014,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5118:29:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedERC20_$983","typeString":"contract IWrappedERC20"}},"id":7015,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"wrappedTransfer","nodeType":"MemberAccess","referencedDeclaration":842,"src":"5118:45:33","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IWrappedERC20_$983_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IWrappedERC20_$983_$","typeString":"function (contract IWrappedERC20,address,uint256)"}},"id":7018,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5118:71:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7019,"nodeType":"ExpressionStatement","src":"5118:71:33"}]},"id":7021,"nodeType":"IfStatement","src":"5007:193:33","trueBody":{"id":7011,"nodeType":"Block","src":"5040:58:33","statements":[{"expression":{"arguments":[{"id":7008,"name":"fromAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6941,"src":"5076:10:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":7005,"name":"payoutWallet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":753,"src":"5054:12:33","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":7007,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"transfer","nodeType":"MemberAccess","src":"5054:21:33","typeDescriptions":{"typeIdentifier":"t_function_transfer_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":7009,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5054:33:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7010,"nodeType":"ExpressionStatement","src":"5054:33:33"}]}}]},"documentation":{"id":6854,"nodeType":"StructuredDocumentation","src":"3295:450:33","text":" Lifecycle step which manages the transfer of funds from the purchaser.\n @dev Responsibilities:\n  - Ensure the payment reaches destination in the expected output token;\n  - Handle any token swap logic;\n  - Add any relevant extra data related to payment in `purchase.paymentData` and document how to interpret it.\n @dev Reverts in case of payment failure.\n @param purchase The purchase conditions."},"id":7023,"implemented":true,"kind":"function","modifiers":[],"name":"_payment","nodeType":"FunctionDefinition","overrides":{"id":6858,"nodeType":"OverrideSpecifier","overrides":[],"src":"3815:8:33"},"parameters":{"id":6857,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6856,"mutability":"mutable","name":"purchase","nodeType":"VariableDeclaration","scope":7023,"src":"3768:28:33","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"},"typeName":{"id":6855,"name":"PurchaseData","nodeType":"UserDefinedTypeName","referencedDeclaration":5583,"src":"3768:12:33","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_storage_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"}},"visibility":"internal"}],"src":"3767:30:33"},"returnParameters":{"id":6859,"nodeType":"ParameterList","parameters":[],"src":"3824:0:33"},"scope":7165,"src":"3750:1456:33","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"documentation":{"id":7024,"nodeType":"StructuredDocumentation","src":"5313:654:33","text":" Estimates the optimal amount of `fromToken` to provide in order to swap for the specified amount of\n  `toToken`, via the oracle.\n @dev Reverts if the oracle cannot estimate the optimal amount of `fromToken` to provide.\n @param fromToken The source token to swap from.\n @param toToken The destination token to swap to.\n @param toAmount The amount of destination tokens to swap for.\n @param data Additional data with no specified format for deriving the swap estimate.\n @return fromAmount The estimated optimal amount of `fromToken` to provide in order to perform a swap,\n  via the oracle."},"id":7037,"implemented":false,"kind":"function","modifiers":[],"name":"_estimateSwap","nodeType":"FunctionDefinition","parameters":{"id":7033,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7026,"mutability":"mutable","name":"fromToken","nodeType":"VariableDeclaration","scope":7037,"src":"6004:17:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7025,"name":"address","nodeType":"ElementaryTypeName","src":"6004:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7028,"mutability":"mutable","name":"toToken","nodeType":"VariableDeclaration","scope":7037,"src":"6031:15:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7027,"name":"address","nodeType":"ElementaryTypeName","src":"6031:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7030,"mutability":"mutable","name":"toAmount","nodeType":"VariableDeclaration","scope":7037,"src":"6056:16:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7029,"name":"uint256","nodeType":"ElementaryTypeName","src":"6056:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7032,"mutability":"mutable","name":"data","nodeType":"VariableDeclaration","scope":7037,"src":"6082:17:33","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7031,"name":"bytes","nodeType":"ElementaryTypeName","src":"6082:5:33","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5994:111:33"},"returnParameters":{"id":7036,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7035,"mutability":"mutable","name":"fromAmount","nodeType":"VariableDeclaration","scope":7037,"src":"6137:18:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7034,"name":"uint256","nodeType":"ElementaryTypeName","src":"6137:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6136:20:33"},"scope":7165,"src":"5972:185:33","stateMutability":"view","virtual":true,"visibility":"internal"},{"documentation":{"id":7038,"nodeType":"StructuredDocumentation","src":"6163:549:33","text":" Swaps `fromToken` for the specified amount of `toToken`, via the oracle.\n @dev Reverts if the oracle is unable to perform the token swap.\n @param fromToken The source token to swap from.\n @param toToken The destination token to swap to.\n @param toAmount The amount of destination tokens to swap for.\n @param data Additional data with no specified format for performing the swap.\n return fromAmount The amount of `fromToken` swapped for the specified amount of `toToken`, via the\n  oracle."},"id":7051,"implemented":false,"kind":"function","modifiers":[],"name":"_swap","nodeType":"FunctionDefinition","parameters":{"id":7047,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7040,"mutability":"mutable","name":"fromToken","nodeType":"VariableDeclaration","scope":7051,"src":"6741:17:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7039,"name":"address","nodeType":"ElementaryTypeName","src":"6741:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7042,"mutability":"mutable","name":"toToken","nodeType":"VariableDeclaration","scope":7051,"src":"6768:15:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7041,"name":"address","nodeType":"ElementaryTypeName","src":"6768:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7044,"mutability":"mutable","name":"toAmount","nodeType":"VariableDeclaration","scope":7051,"src":"6793:16:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7043,"name":"uint256","nodeType":"ElementaryTypeName","src":"6793:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7046,"mutability":"mutable","name":"data","nodeType":"VariableDeclaration","scope":7051,"src":"6819:17:33","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7045,"name":"bytes","nodeType":"ElementaryTypeName","src":"6819:5:33","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6731:111:33"},"returnParameters":{"id":7050,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7049,"mutability":"mutable","name":"fromAmount","nodeType":"VariableDeclaration","scope":7051,"src":"6869:18:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7048,"name":"uint256","nodeType":"ElementaryTypeName","src":"6869:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6868:20:33"},"scope":7165,"src":"6717:172:33","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"baseFunctions":[5543],"body":{"id":7163,"nodeType":"Block","src":"7763:737:33","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7066,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7064,"name":"unitPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7058,"src":"7777:9:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":7065,"name":"PRICE_SWAP_VIA_ORACLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6726,"src":"7790:21:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7777:34:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7075,"nodeType":"IfStatement","src":"7773:126:33","trueBody":{"id":7074,"nodeType":"Block","src":"7813:86:33","statements":[{"expression":{"arguments":[{"id":7069,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7054,"src":"7855:8:33","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},{"id":7070,"name":"tokenPrices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7056,"src":"7865:11:33","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map storage pointer"}},{"id":7071,"name":"unitPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7058,"src":"7878:9:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"},{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map storage pointer"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":7067,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"7834:5:33","typeDescriptions":{"typeIdentifier":"t_super$_SwapSale_$7165","typeString":"contract super SwapSale"}},"id":7068,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"_oraclePricing","nodeType":"MemberAccess","referencedDeclaration":5543,"src":"7834:20:33","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_PurchaseData_$5583_memory_ptr_$_t_struct$_Map_$119_storage_ptr_$_t_uint256_$returns$_t_bool_$","typeString":"function (struct PurchaseLifeCycles.PurchaseData memory,struct EnumMap.Map storage pointer,uint256) view returns (bool)"}},"id":7072,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7834:54:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":7063,"id":7073,"nodeType":"Return","src":"7827:61:33"}]}},{"assignments":[7077],"declarations":[{"constant":false,"id":7077,"mutability":"mutable","name":"referenceUnitPrice","nodeType":"VariableDeclaration","scope":7163,"src":"7909:26:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7076,"name":"uint256","nodeType":"ElementaryTypeName","src":"7909:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7091,"initialValue":{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"id":7086,"name":"referenceToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5229,"src":"7978:14:33","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7085,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7970:7:33","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":7084,"name":"uint256","nodeType":"ElementaryTypeName","src":"7970:7:33","typeDescriptions":{}}},"id":7087,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7970:23:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7083,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7962:7:33","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":7082,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7962:7:33","typeDescriptions":{}}},"id":7088,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7962:32:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":7080,"name":"tokenPrices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7056,"src":"7946:11:33","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map storage pointer"}},"id":7081,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"get","nodeType":"MemberAccess","referencedDeclaration":361,"src":"7946:15:33","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Map_$119_storage_ptr_$_t_bytes32_$returns$_t_bytes32_$bound_to$_t_struct$_Map_$119_storage_ptr_$","typeString":"function (struct EnumMap.Map storage pointer,bytes32) view returns (bytes32)"}},"id":7089,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7946:49:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":7079,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7938:7:33","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":7078,"name":"uint256","nodeType":"ElementaryTypeName","src":"7938:7:33","typeDescriptions":{}}},"id":7090,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7938:58:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7909:87:33"},{"assignments":[7093],"declarations":[{"constant":false,"id":7093,"mutability":"mutable","name":"referenceTotalPrice","nodeType":"VariableDeclaration","scope":7163,"src":"8006:27:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7092,"name":"uint256","nodeType":"ElementaryTypeName","src":"8006:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7099,"initialValue":{"arguments":[{"expression":{"id":7096,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7054,"src":"8059:8:33","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":7097,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"quantity","nodeType":"MemberAccess","referencedDeclaration":5569,"src":"8059:17:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":7094,"name":"referenceUnitPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7077,"src":"8036:18:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7095,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"mul","nodeType":"MemberAccess","referencedDeclaration":1242,"src":"8036:22:33","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":7098,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8036:41:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8006:71:33"},{"assignments":[7101],"declarations":[{"constant":false,"id":7101,"mutability":"mutable","name":"totalPrice","nodeType":"VariableDeclaration","scope":7163,"src":"8088:18:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7100,"name":"uint256","nodeType":"ElementaryTypeName","src":"8088:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7110,"initialValue":{"arguments":[{"expression":{"id":7103,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7054,"src":"8123:8:33","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":7104,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"token","nodeType":"MemberAccess","referencedDeclaration":5565,"src":"8123:14:33","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7105,"name":"referenceToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5229,"src":"8139:14:33","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7106,"name":"referenceTotalPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7093,"src":"8155:19:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":7107,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7054,"src":"8176:8:33","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":7108,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userData","nodeType":"MemberAccess","referencedDeclaration":5571,"src":"8176:17:33","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":7102,"name":"_estimateSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7037,"src":"8109:13:33","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_uint256_$","typeString":"function (address,address,uint256,bytes memory) view returns (uint256)"}},"id":7109,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8109:85:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8088:106:33"},{"assignments":[7112],"declarations":[{"constant":false,"id":7112,"mutability":"mutable","name":"swapRate","nodeType":"VariableDeclaration","scope":7163,"src":"8205:16:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7111,"name":"uint256","nodeType":"ElementaryTypeName","src":"8205:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7122,"initialValue":{"arguments":[{"id":7120,"name":"totalPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7101,"src":"8260:10:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"},"id":7117,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":7115,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8248:2:33","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3138","id":7116,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8252:2:33","typeDescriptions":{"typeIdentifier":"t_rational_18_by_1","typeString":"int_const 18"},"value":"18"},"src":"8248:6:33","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"}],"expression":{"id":7113,"name":"referenceTotalPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7093,"src":"8224:19:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7114,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"mul","nodeType":"MemberAccess","referencedDeclaration":1242,"src":"8224:23:33","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":7118,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8224:31:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7119,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"div","nodeType":"MemberAccess","referencedDeclaration":1264,"src":"8224:35:33","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":7121,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8224:47:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8205:66:33"},{"expression":{"id":7131,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":7123,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7054,"src":"8282:8:33","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":7125,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"pricingData","nodeType":"MemberAccess","referencedDeclaration":5576,"src":"8282:20:33","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"32","id":7129,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8319:1:33","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"}],"id":7128,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"8305:13:33","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (bytes32[] memory)"},"typeName":{"baseType":{"id":7126,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8309:7:33","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":7127,"nodeType":"ArrayTypeName","src":"8309:9:33","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}}},"id":7130,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8305:16:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"src":"8282:39:33","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"id":7132,"nodeType":"ExpressionStatement","src":"8282:39:33"},{"expression":{"id":7142,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":7133,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7054,"src":"8331:8:33","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":7136,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"pricingData","nodeType":"MemberAccess","referencedDeclaration":5576,"src":"8331:20:33","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"id":7137,"indexExpression":{"hexValue":"30","id":7135,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8352:1:33","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8331:23:33","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":7140,"name":"unitPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7058,"src":"8365:9:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7139,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8357:7:33","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":7138,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8357:7:33","typeDescriptions":{}}},"id":7141,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8357:18:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"8331:44:33","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":7143,"nodeType":"ExpressionStatement","src":"8331:44:33"},{"expression":{"id":7153,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":7144,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7054,"src":"8385:8:33","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":7147,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"pricingData","nodeType":"MemberAccess","referencedDeclaration":5576,"src":"8385:20:33","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"id":7148,"indexExpression":{"hexValue":"31","id":7146,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8406:1:33","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8385:23:33","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":7151,"name":"swapRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7112,"src":"8419:8:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7150,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8411:7:33","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":7149,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8411:7:33","typeDescriptions":{}}},"id":7152,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8411:17:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"8385:43:33","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":7154,"nodeType":"ExpressionStatement","src":"8385:43:33"},{"expression":{"id":7159,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":7155,"name":"purchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7054,"src":"8439:8:33","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData memory"}},"id":7157,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"totalPrice","nodeType":"MemberAccess","referencedDeclaration":5573,"src":"8439:19:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":7158,"name":"totalPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7101,"src":"8461:10:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8439:32:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7160,"nodeType":"ExpressionStatement","src":"8439:32:33"},{"expression":{"hexValue":"74727565","id":7161,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"8489:4:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":7063,"id":7162,"nodeType":"Return","src":"8482:11:33"}]},"documentation":{"id":7052,"nodeType":"StructuredDocumentation","src":"6895:681:33","text":" Computes the oracle-based purchase price.\n @dev Responsibilities:\n  - Computes the oracle-based pricing formula, including any discount logic and price conversion;\n  - Set the value of `purchase.totalPrice`;\n  - Add any relevant extra data related to pricing in `purchase.pricingData` and document how to interpret it.\n @dev Reverts in case of price overflow.\n @param purchase The purchase conditions.\n @param tokenPrices Storage pointer to a mapping of SKU token prices.\n @param unitPrice The unit price of a SKU for the specified payment token.\n @return True if oracle pricing was handled, false otherwise."},"id":7164,"implemented":true,"kind":"function","modifiers":[],"name":"_oraclePricing","nodeType":"FunctionDefinition","overrides":{"id":7060,"nodeType":"OverrideSpecifier","overrides":[],"src":"7739:8:33"},"parameters":{"id":7059,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7054,"mutability":"mutable","name":"purchase","nodeType":"VariableDeclaration","scope":7164,"src":"7614:28:33","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_memory_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"},"typeName":{"id":7053,"name":"PurchaseData","nodeType":"UserDefinedTypeName","referencedDeclaration":5583,"src":"7614:12:33","typeDescriptions":{"typeIdentifier":"t_struct$_PurchaseData_$5583_storage_ptr","typeString":"struct PurchaseLifeCycles.PurchaseData"}},"visibility":"internal"},{"constant":false,"id":7056,"mutability":"mutable","name":"tokenPrices","nodeType":"VariableDeclaration","scope":7164,"src":"7652:31:33","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map"},"typeName":{"id":7055,"name":"EnumMap.Map","nodeType":"UserDefinedTypeName","referencedDeclaration":119,"src":"7652:11:33","typeDescriptions":{"typeIdentifier":"t_struct$_Map_$119_storage_ptr","typeString":"struct EnumMap.Map"}},"visibility":"internal"},{"constant":false,"id":7058,"mutability":"mutable","name":"unitPrice","nodeType":"VariableDeclaration","scope":7164,"src":"7693:17:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7057,"name":"uint256","nodeType":"ElementaryTypeName","src":"7693:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7604:112:33"},"returnParameters":{"id":7063,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7062,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":7164,"src":"7757:4:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7061,"name":"bool","nodeType":"ElementaryTypeName","src":"7757:4:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7756:6:33"},"scope":7165,"src":"7581:919:33","stateMutability":"view","virtual":true,"visibility":"internal"}],"scope":7166,"src":"903:7599:33"}],"src":"33:8470:33"},"id":33},"contracts/sale/interfaces/IOracleSale.sol":{"ast":{"absolutePath":"contracts/sale/interfaces/IOracleSale.sol","exportedSymbols":{"IOracleSale":[7187]},"id":7188,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":7167,"literals":["solidity",">=","0.7",".6","<","0.8",".0"],"nodeType":"PragmaDirective","src":"33:31:34"},{"abstract":false,"baseContracts":[],"contractDependencies":[],"contractKind":"interface","documentation":{"id":7168,"nodeType":"StructuredDocumentation","src":"66:100:34","text":" @title IOracleSale\n An ISale which can manage token conversion rates through an oracle."},"fullyImplemented":false,"id":7187,"linearizedBaseContracts":[7187],"name":"IOracleSale","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":7169,"nodeType":"StructuredDocumentation","src":"208:330:34","text":" Returns the price magic value used to represent an oracle-based token conversion pricing.\n @dev MUST NOT be zero. SHOULD BE a prohibitively big value, so that it doesn’t collide with a possible price value.\n @return The price magic value used to represent an oracle-based token conversion pricing."},"functionSelector":"9865bcc8","id":7174,"implemented":false,"kind":"function","modifiers":[],"name":"PRICE_CONVERT_VIA_ORACLE","nodeType":"FunctionDefinition","parameters":{"id":7170,"nodeType":"ParameterList","parameters":[],"src":"629:2:34"},"returnParameters":{"id":7173,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7172,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":7174,"src":"655:7:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7171,"name":"uint256","nodeType":"ElementaryTypeName","src":"655:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"654:9:34"},"scope":7187,"src":"596:68:34","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":7175,"nodeType":"StructuredDocumentation","src":"670:490:34","text":" Retrieves the token conversion rates for the `tokens`/`referenceToken` pairs via the oracle.\n @dev Reverts if the oracle does not provide a conversion rate for one of the token pairs.\n @param tokens The list of tokens to retrieve the conversion rates for.\n @param data Additional data with no specified format for deriving the conversion rates.\n @return rates The conversion rates for the `tokens`/`referenceToken` pairs, retrieved via the oracle."},"functionSelector":"c7b778db","id":7186,"implemented":false,"kind":"function","modifiers":[],"name":"conversionRates","nodeType":"FunctionDefinition","parameters":{"id":7181,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7178,"mutability":"mutable","name":"tokens","nodeType":"VariableDeclaration","scope":7186,"src":"1190:25:34","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":7176,"name":"address","nodeType":"ElementaryTypeName","src":"1190:7:34","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":7177,"nodeType":"ArrayTypeName","src":"1190:9:34","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":7180,"mutability":"mutable","name":"data","nodeType":"VariableDeclaration","scope":7186,"src":"1217:19:34","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":7179,"name":"bytes","nodeType":"ElementaryTypeName","src":"1217:5:34","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1189:48:34"},"returnParameters":{"id":7185,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7184,"mutability":"mutable","name":"rates","nodeType":"VariableDeclaration","scope":7186,"src":"1261:22:34","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":7182,"name":"uint256","nodeType":"ElementaryTypeName","src":"1261:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7183,"nodeType":"ArrayTypeName","src":"1261:9:34","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"1260:24:34"},"scope":7187,"src":"1165:120:34","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":7188,"src":"180:1107:34"}],"src":"33:1255:34"},"id":34},"contracts/sale/interfaces/IPurchaseNotificationsReceiver.sol":{"ast":{"absolutePath":"contracts/sale/interfaces/IPurchaseNotificationsReceiver.sol","exportedSymbols":{"IPurchaseNotificationsReceiver":[7220]},"id":7221,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":7189,"literals":["solidity",">=","0.7",".6","<","0.8",".0"],"nodeType":"PragmaDirective","src":"33:31:35"},{"abstract":false,"baseContracts":[],"contractDependencies":[],"contractKind":"interface","documentation":{"id":7190,"nodeType":"StructuredDocumentation","src":"66:145:35","text":" @title IPurchaseNotificationsReceiver\n Interface for any contract that wants to support purchase notifications from a Sale contract."},"fullyImplemented":false,"id":7220,"linearizedBaseContracts":[7220],"name":"IPurchaseNotificationsReceiver","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":7191,"nodeType":"StructuredDocumentation","src":"259:1165:35","text":" Handles the receipt of a purchase notification.\n @dev This function MUST return the function selector, otherwise the caller will revert the transaction.\n  The selector to be returned can be obtained as `this.onPurchaseNotificationReceived.selector`\n @dev This function MAY throw.\n @param purchaser The purchaser of the purchase.\n @param recipient The recipient of the purchase.\n @param token The token to use as the payment currency.\n @param sku The identifier of the SKU to purchase.\n @param quantity The quantity to purchase.\n @param userData Optional extra user input data.\n @param totalPrice The total price paid.\n @param pricingData Implementation-specific extra pricing data, such as details about discounts applied.\n @param paymentData Implementation-specific extra payment data, such as conversion rates.\n @param deliveryData Implementation-specific extra delivery data, such as purchase receipts.\n @return `bytes4(keccak256(\n  \"onPurchaseNotificationReceived(address,address,address,bytes32,uint256,bytes,uint256,bytes32[],bytes32[],bytes32[])\"))`"},"functionSelector":"61eceae8","id":7219,"implemented":false,"kind":"function","modifiers":[],"name":"onPurchaseNotificationReceived","nodeType":"FunctionDefinition","parameters":{"id":7215,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7193,"mutability":"mutable","name":"purchaser","nodeType":"VariableDeclaration","scope":7219,"src":"1478:17:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7192,"name":"address","nodeType":"ElementaryTypeName","src":"1478:7:35","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7195,"mutability":"mutable","name":"recipient","nodeType":"VariableDeclaration","scope":7219,"src":"1505:17:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7194,"name":"address","nodeType":"ElementaryTypeName","src":"1505:7:35","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7197,"mutability":"mutable","name":"token","nodeType":"VariableDeclaration","scope":7219,"src":"1532:13:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7196,"name":"address","nodeType":"ElementaryTypeName","src":"1532:7:35","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7199,"mutability":"mutable","name":"sku","nodeType":"VariableDeclaration","scope":7219,"src":"1555:11:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7198,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1555:7:35","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":7201,"mutability":"mutable","name":"quantity","nodeType":"VariableDeclaration","scope":7219,"src":"1576:16:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7200,"name":"uint256","nodeType":"ElementaryTypeName","src":"1576:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7203,"mutability":"mutable","name":"userData","nodeType":"VariableDeclaration","scope":7219,"src":"1602:23:35","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":7202,"name":"bytes","nodeType":"ElementaryTypeName","src":"1602:5:35","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":7205,"mutability":"mutable","name":"totalPrice","nodeType":"VariableDeclaration","scope":7219,"src":"1635:18:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7204,"name":"uint256","nodeType":"ElementaryTypeName","src":"1635:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7208,"mutability":"mutable","name":"pricingData","nodeType":"VariableDeclaration","scope":7219,"src":"1663:30:35","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":7206,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1663:7:35","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":7207,"nodeType":"ArrayTypeName","src":"1663:9:35","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"},{"constant":false,"id":7211,"mutability":"mutable","name":"paymentData","nodeType":"VariableDeclaration","scope":7219,"src":"1703:30:35","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":7209,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1703:7:35","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":7210,"nodeType":"ArrayTypeName","src":"1703:9:35","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"},{"constant":false,"id":7214,"mutability":"mutable","name":"deliveryData","nodeType":"VariableDeclaration","scope":7219,"src":"1743:31:35","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":7212,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1743:7:35","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":7213,"nodeType":"ArrayTypeName","src":"1743:9:35","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"src":"1468:312:35"},"returnParameters":{"id":7218,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7217,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":7219,"src":"1799:6:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":7216,"name":"bytes4","nodeType":"ElementaryTypeName","src":"1799:6:35","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"1798:8:35"},"scope":7220,"src":"1429:378:35","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":7221,"src":"212:1597:35"}],"src":"33:1777:35"},"id":35},"contracts/sale/interfaces/ISale.sol":{"ast":{"absolutePath":"contracts/sale/interfaces/ISale.sol","exportedSymbols":{"ISale":[7346]},"id":7347,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":7222,"literals":["solidity",">=","0.7",".6","<","0.8",".0"],"nodeType":"PragmaDirective","src":"33:31:36"},{"abstract":false,"baseContracts":[],"contractDependencies":[],"contractKind":"interface","documentation":{"id":7223,"nodeType":"StructuredDocumentation","src":"66:1337:36","text":" @title ISale\n An interface for a contract which allows merchants to display products and customers to purchase them.\n  Products, designated as SKUs, are represented by bytes32 identifiers so that an identifier can carry an\n  explicit name under the form of a fixed-length string. Each SKU can be priced via up to several payment\n  tokens which can be ETH and/or ERC20(s). ETH token is represented by the magic value TOKEN_ETH, which means\n  this value can be used as the 'token' argument of the purchase-related functions to indicate ETH payment.\n  The total available supply for a SKU is fixed at its creation. The magic value SUPPLY_UNLIMITED is used\n  to represent a SKU with an infinite, never-decreasing supply. An optional purchase notifications receiver\n  contract address can be set for a SKU at its creation: if the value is different from the zero address,\n  the function `onPurchaseNotificationReceived` will be called on this address upon every purchase of the SKU.\n  This interface is designed to be consistent while managing a variety of implementation scenarios. It is\n  also intended to be developer-friendly: all vital information is consistently deductible from the events\n  (backend-oriented), as well as retrievable through calls to public functions (frontend-oriented)."},"fullyImplemented":false,"id":7346,"linearizedBaseContracts":[7346],"name":"ISale","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":7224,"nodeType":"StructuredDocumentation","src":"1426:275:36","text":" Event emitted to notify about the magic values necessary for interfacing with this contract.\n @param names An array of names for the magic values used by the contract.\n @param values An array of values for the magic values used by the contract."},"id":7232,"name":"MagicValues","nodeType":"EventDefinition","parameters":{"id":7231,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7227,"indexed":false,"mutability":"mutable","name":"names","nodeType":"VariableDeclaration","scope":7232,"src":"1724:15:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":7225,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1724:7:36","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":7226,"nodeType":"ArrayTypeName","src":"1724:9:36","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"},{"constant":false,"id":7230,"indexed":false,"mutability":"mutable","name":"values","nodeType":"VariableDeclaration","scope":7232,"src":"1741:16:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":7228,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1741:7:36","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":7229,"nodeType":"ArrayTypeName","src":"1741:9:36","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"src":"1723:35:36"},"src":"1706:53:36"},{"anonymous":false,"documentation":{"id":7233,"nodeType":"StructuredDocumentation","src":"1765:501:36","text":" Event emitted to notify about the creation of a SKU.\n @param sku The identifier of the created SKU.\n @param totalSupply The initial total supply for sale.\n @param maxQuantityPerPurchase The maximum allowed quantity for a single purchase.\n @param notificationsReceiver If not the zero address, the address of a contract on which `onPurchaseNotificationReceived` will be called after\n  each purchase. If this is the zero address, the call is not enabled."},"id":7243,"name":"SkuCreation","nodeType":"EventDefinition","parameters":{"id":7242,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7235,"indexed":false,"mutability":"mutable","name":"sku","nodeType":"VariableDeclaration","scope":7243,"src":"2289:11:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7234,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2289:7:36","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":7237,"indexed":false,"mutability":"mutable","name":"totalSupply","nodeType":"VariableDeclaration","scope":7243,"src":"2302:19:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7236,"name":"uint256","nodeType":"ElementaryTypeName","src":"2302:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7239,"indexed":false,"mutability":"mutable","name":"maxQuantityPerPurchase","nodeType":"VariableDeclaration","scope":7243,"src":"2323:30:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7238,"name":"uint256","nodeType":"ElementaryTypeName","src":"2323:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7241,"indexed":false,"mutability":"mutable","name":"notificationsReceiver","nodeType":"VariableDeclaration","scope":7243,"src":"2355:29:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7240,"name":"address","nodeType":"ElementaryTypeName","src":"2355:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2288:97:36"},"src":"2271:115:36"},{"anonymous":false,"documentation":{"id":7244,"nodeType":"StructuredDocumentation","src":"2392:468:36","text":" Event emitted to notify about a change in the pricing of a SKU.\n @dev `tokens` and `prices` arrays MUST have the same length.\n @param sku The identifier of the updated SKU.\n @param tokens An array of updated payment tokens. If empty, interpret as all payment tokens being disabled.\n @param prices An array of updated prices for each of the payment tokens.\n  Zero price values are used for payment tokens being disabled."},"id":7254,"name":"SkuPricingUpdate","nodeType":"EventDefinition","parameters":{"id":7253,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7246,"indexed":true,"mutability":"mutable","name":"sku","nodeType":"VariableDeclaration","scope":7254,"src":"2888:19:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7245,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2888:7:36","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":7249,"indexed":false,"mutability":"mutable","name":"tokens","nodeType":"VariableDeclaration","scope":7254,"src":"2909:16:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":7247,"name":"address","nodeType":"ElementaryTypeName","src":"2909:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":7248,"nodeType":"ArrayTypeName","src":"2909:9:36","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":7252,"indexed":false,"mutability":"mutable","name":"prices","nodeType":"VariableDeclaration","scope":7254,"src":"2927:16:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":7250,"name":"uint256","nodeType":"ElementaryTypeName","src":"2927:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7251,"nodeType":"ArrayTypeName","src":"2927:9:36","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"2887:57:36"},"src":"2865:80:36"},{"anonymous":false,"documentation":{"id":7255,"nodeType":"StructuredDocumentation","src":"2951:616:36","text":" Event emitted to notify about a purchase.\n @param purchaser The initiater and buyer of the purchase.\n @param recipient The recipient of the purchase.\n @param token The token used as the currency for the payment.\n @param sku The identifier of the purchased SKU.\n @param quantity The purchased quantity.\n @param userData Optional extra user input data.\n @param totalPrice The amount of `token` paid.\n @param extData Implementation-specific extra purchase data, such as\n  details about discounts applied, conversion rates, purchase receipts, etc."},"id":7273,"name":"Purchase","nodeType":"EventDefinition","parameters":{"id":7272,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7257,"indexed":true,"mutability":"mutable","name":"purchaser","nodeType":"VariableDeclaration","scope":7273,"src":"3596:25:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7256,"name":"address","nodeType":"ElementaryTypeName","src":"3596:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7259,"indexed":false,"mutability":"mutable","name":"recipient","nodeType":"VariableDeclaration","scope":7273,"src":"3631:17:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7258,"name":"address","nodeType":"ElementaryTypeName","src":"3631:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7261,"indexed":true,"mutability":"mutable","name":"token","nodeType":"VariableDeclaration","scope":7273,"src":"3658:21:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7260,"name":"address","nodeType":"ElementaryTypeName","src":"3658:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7263,"indexed":true,"mutability":"mutable","name":"sku","nodeType":"VariableDeclaration","scope":7273,"src":"3689:19:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7262,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3689:7:36","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":7265,"indexed":false,"mutability":"mutable","name":"quantity","nodeType":"VariableDeclaration","scope":7273,"src":"3718:16:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7264,"name":"uint256","nodeType":"ElementaryTypeName","src":"3718:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7267,"indexed":false,"mutability":"mutable","name":"userData","nodeType":"VariableDeclaration","scope":7273,"src":"3744:14:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7266,"name":"bytes","nodeType":"ElementaryTypeName","src":"3744:5:36","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":7269,"indexed":false,"mutability":"mutable","name":"totalPrice","nodeType":"VariableDeclaration","scope":7273,"src":"3768:18:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7268,"name":"uint256","nodeType":"ElementaryTypeName","src":"3768:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7271,"indexed":false,"mutability":"mutable","name":"extData","nodeType":"VariableDeclaration","scope":7273,"src":"3796:13:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7270,"name":"bytes","nodeType":"ElementaryTypeName","src":"3796:5:36","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3586:229:36"},"src":"3572:244:36"},{"documentation":{"id":7274,"nodeType":"StructuredDocumentation","src":"3822:197:36","text":" Returns the magic value used to represent the ETH payment token.\n @dev MUST NOT be the zero address.\n @return the magic value used to represent the ETH payment token."},"functionSelector":"5c4fafc7","id":7279,"implemented":false,"kind":"function","modifiers":[],"name":"TOKEN_ETH","nodeType":"FunctionDefinition","parameters":{"id":7275,"nodeType":"ParameterList","parameters":[],"src":"4095:2:36"},"returnParameters":{"id":7278,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7277,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":7279,"src":"4121:7:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7276,"name":"address","nodeType":"ElementaryTypeName","src":"4121:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4120:9:36"},"scope":7346,"src":"4077:53:36","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":7280,"nodeType":"StructuredDocumentation","src":"4136:227:36","text":" Returns the magic value used to represent an infinite, never-decreasing SKU's supply.\n @dev MUST NOT be zero.\n @return the magic value used to represent an infinite, never-decreasing SKU's supply."},"functionSelector":"9e049545","id":7285,"implemented":false,"kind":"function","modifiers":[],"name":"SUPPLY_UNLIMITED","nodeType":"FunctionDefinition","parameters":{"id":7281,"nodeType":"ParameterList","parameters":[],"src":"4446:2:36"},"returnParameters":{"id":7284,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7283,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":7285,"src":"4472:7:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7282,"name":"uint256","nodeType":"ElementaryTypeName","src":"4472:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4471:9:36"},"scope":7346,"src":"4421:60:36","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":7286,"nodeType":"StructuredDocumentation","src":"4487:783:36","text":" Performs a purchase.\n @dev Reverts if `recipient` is the zero address.\n @dev Reverts if `token` is the address zero.\n @dev Reverts if `quantity` is zero.\n @dev Reverts if `quantity` is greater than the maximum purchase quantity.\n @dev Reverts if `quantity` is greater than the remaining supply.\n @dev Reverts if `sku` does not exist.\n @dev Reverts if `sku` exists but does not have a price set for `token`.\n @dev Emits the Purchase event.\n @param recipient The recipient of the purchase.\n @param token The token to use as the payment currency.\n @param sku The identifier of the SKU to purchase.\n @param quantity The quantity to purchase.\n @param userData Optional extra user input data."},"functionSelector":"a963b257","id":7299,"implemented":false,"kind":"function","modifiers":[],"name":"purchaseFor","nodeType":"FunctionDefinition","parameters":{"id":7297,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7288,"mutability":"mutable","name":"recipient","nodeType":"VariableDeclaration","scope":7299,"src":"5305:25:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":7287,"name":"address","nodeType":"ElementaryTypeName","src":"5305:15:36","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":7290,"mutability":"mutable","name":"token","nodeType":"VariableDeclaration","scope":7299,"src":"5340:13:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7289,"name":"address","nodeType":"ElementaryTypeName","src":"5340:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7292,"mutability":"mutable","name":"sku","nodeType":"VariableDeclaration","scope":7299,"src":"5363:11:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7291,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5363:7:36","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":7294,"mutability":"mutable","name":"quantity","nodeType":"VariableDeclaration","scope":7299,"src":"5384:16:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7293,"name":"uint256","nodeType":"ElementaryTypeName","src":"5384:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7296,"mutability":"mutable","name":"userData","nodeType":"VariableDeclaration","scope":7299,"src":"5410:23:36","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":7295,"name":"bytes","nodeType":"ElementaryTypeName","src":"5410:5:36","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5295:144:36"},"returnParameters":{"id":7298,"nodeType":"ParameterList","parameters":[],"src":"5456:0:36"},"scope":7346,"src":"5275:182:36","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":7300,"nodeType":"StructuredDocumentation","src":"5463:1449:36","text":" Estimates the computed final total amount to pay for a purchase, including any potential discount.\n @dev This function MUST compute the same price as `purchaseFor` would in identical conditions (same arguments, same point in time).\n @dev If an implementer contract uses the `pricingData` field, it SHOULD document how to interpret the values.\n @dev Reverts if `recipient` is the zero address.\n @dev Reverts if `token` is the zero address.\n @dev Reverts if `quantity` is zero.\n @dev Reverts if `quantity` is greater than the maximum purchase quantity.\n @dev Reverts if `quantity` is greater than the remaining supply.\n @dev Reverts if `sku` does not exist.\n @dev Reverts if `sku` exists but does not have a price set for `token`.\n @param recipient The recipient of the purchase used to calculate the total price amount.\n @param token The payment token used to calculate the total price amount.\n @param sku The identifier of the SKU used to calculate the total price amount.\n @param quantity The quantity used to calculate the total price amount.\n @param userData Optional extra user input data.\n @return totalPrice The computed total price to pay.\n @return pricingData Implementation-specific extra pricing data, such as details about discounts applied.\n  If not empty, the implementer MUST document how to interepret the values."},"functionSelector":"1323b066","id":7318,"implemented":false,"kind":"function","modifiers":[],"name":"estimatePurchase","nodeType":"FunctionDefinition","parameters":{"id":7311,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7302,"mutability":"mutable","name":"recipient","nodeType":"VariableDeclaration","scope":7318,"src":"6952:25:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":7301,"name":"address","nodeType":"ElementaryTypeName","src":"6952:15:36","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":7304,"mutability":"mutable","name":"token","nodeType":"VariableDeclaration","scope":7318,"src":"6987:13:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7303,"name":"address","nodeType":"ElementaryTypeName","src":"6987:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7306,"mutability":"mutable","name":"sku","nodeType":"VariableDeclaration","scope":7318,"src":"7010:11:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7305,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7010:7:36","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":7308,"mutability":"mutable","name":"quantity","nodeType":"VariableDeclaration","scope":7318,"src":"7031:16:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7307,"name":"uint256","nodeType":"ElementaryTypeName","src":"7031:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7310,"mutability":"mutable","name":"userData","nodeType":"VariableDeclaration","scope":7318,"src":"7057:23:36","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":7309,"name":"bytes","nodeType":"ElementaryTypeName","src":"7057:5:36","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6942:144:36"},"returnParameters":{"id":7317,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7313,"mutability":"mutable","name":"totalPrice","nodeType":"VariableDeclaration","scope":7318,"src":"7110:18:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7312,"name":"uint256","nodeType":"ElementaryTypeName","src":"7110:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7316,"mutability":"mutable","name":"pricingData","nodeType":"VariableDeclaration","scope":7318,"src":"7130:28:36","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":7314,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7130:7:36","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":7315,"nodeType":"ArrayTypeName","src":"7130:9:36","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"src":"7109:50:36"},"scope":7346,"src":"6917:243:36","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":7319,"nodeType":"StructuredDocumentation","src":"7166:799:36","text":" Returns the information relative to a SKU.\n @dev WARNING: it is the responsibility of the implementer to ensure that the\n  number of payment tokens is bounded, so that this function does not run out of gas.\n @dev Reverts if `sku` does not exist.\n @param sku The SKU identifier.\n @return totalSupply The initial total supply for sale.\n @return remainingSupply The remaining supply for sale.\n @return maxQuantityPerPurchase The maximum allowed quantity for a single purchase.\n @return notificationsReceiver The address of a contract on which to call the `onPurchaseNotificationReceived` function.\n @return tokens The list of supported payment tokens.\n @return prices The list of associated prices for each of the `tokens`."},"functionSelector":"2a8a45bc","id":7338,"implemented":false,"kind":"function","modifiers":[],"name":"getSkuInfo","nodeType":"FunctionDefinition","parameters":{"id":7322,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7321,"mutability":"mutable","name":"sku","nodeType":"VariableDeclaration","scope":7338,"src":"7990:11:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7320,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7990:7:36","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"7989:13:36"},"returnParameters":{"id":7337,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7324,"mutability":"mutable","name":"totalSupply","nodeType":"VariableDeclaration","scope":7338,"src":"8063:19:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7323,"name":"uint256","nodeType":"ElementaryTypeName","src":"8063:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7326,"mutability":"mutable","name":"remainingSupply","nodeType":"VariableDeclaration","scope":7338,"src":"8096:23:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7325,"name":"uint256","nodeType":"ElementaryTypeName","src":"8096:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7328,"mutability":"mutable","name":"maxQuantityPerPurchase","nodeType":"VariableDeclaration","scope":7338,"src":"8133:30:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7327,"name":"uint256","nodeType":"ElementaryTypeName","src":"8133:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7330,"mutability":"mutable","name":"notificationsReceiver","nodeType":"VariableDeclaration","scope":7338,"src":"8177:29:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7329,"name":"address","nodeType":"ElementaryTypeName","src":"8177:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7333,"mutability":"mutable","name":"tokens","nodeType":"VariableDeclaration","scope":7338,"src":"8220:23:36","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":7331,"name":"address","nodeType":"ElementaryTypeName","src":"8220:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":7332,"nodeType":"ArrayTypeName","src":"8220:9:36","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":7336,"mutability":"mutable","name":"prices","nodeType":"VariableDeclaration","scope":7338,"src":"8257:23:36","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":7334,"name":"uint256","nodeType":"ElementaryTypeName","src":"8257:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7335,"nodeType":"ArrayTypeName","src":"8257:9:36","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"8049:241:36"},"scope":7346,"src":"7970:321:36","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":7339,"nodeType":"StructuredDocumentation","src":"8297:286:36","text":" Returns the list of created SKU identifiers.\n @dev WARNING: it is the responsibility of the implementer to ensure that the\n  number of SKUs is bounded, so that this function does not run out of gas.\n @return skus the list of created SKU identifiers."},"functionSelector":"61bd3851","id":7345,"implemented":false,"kind":"function","modifiers":[],"name":"getSkus","nodeType":"FunctionDefinition","parameters":{"id":7340,"nodeType":"ParameterList","parameters":[],"src":"8604:2:36"},"returnParameters":{"id":7344,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7343,"mutability":"mutable","name":"skus","nodeType":"VariableDeclaration","scope":7345,"src":"8630:21:36","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":7341,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8630:7:36","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":7342,"nodeType":"ArrayTypeName","src":"8630:9:36","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"src":"8629:23:36"},"scope":7346,"src":"8588:65:36","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":7347,"src":"1404:7251:36"}],"src":"33:8623:36"},"id":36},"contracts/sale/interfaces/ISwapSale.sol":{"ast":{"absolutePath":"contracts/sale/interfaces/ISwapSale.sol","exportedSymbols":{"ISwapSale":[7370]},"id":7371,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":7348,"literals":["solidity",">=","0.7",".6","<","0.8",".0"],"nodeType":"PragmaDirective","src":"33:31:37"},{"abstract":false,"baseContracts":[],"contractDependencies":[],"contractKind":"interface","documentation":{"id":7349,"nodeType":"StructuredDocumentation","src":"66:93:37","text":" @title ISwapSale\n An IOracleSale which can manage token swaps through an oracle."},"fullyImplemented":false,"id":7370,"linearizedBaseContracts":[7370],"name":"ISwapSale","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":7350,"nodeType":"StructuredDocumentation","src":"205:318:37","text":" Returns the price magic value used to represent an oracle-based token swap pricing.\n @dev MUST NOT be zero. SHOULD BE a prohibitively big value, so that it doesn’t collide with a possible price value.\n @return The price magic value used to represent an oracle-based token swap pricing."},"functionSelector":"579f2c77","id":7355,"implemented":false,"kind":"function","modifiers":[],"name":"PRICE_SWAP_VIA_ORACLE","nodeType":"FunctionDefinition","parameters":{"id":7351,"nodeType":"ParameterList","parameters":[],"src":"611:2:37"},"returnParameters":{"id":7354,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7353,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","scope":7355,"src":"637:7:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7352,"name":"uint256","nodeType":"ElementaryTypeName","src":"637:7:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"636:9:37"},"scope":7370,"src":"581:65:37","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":7356,"nodeType":"StructuredDocumentation","src":"652:553:37","text":" Retrieves the token swap rates for the `tokens`/`referenceToken` pairs via the oracle.\n @dev Reverts if the oracle does not provide a swap rate for one of the token pairs.\n @param tokens The list of tokens to retrieve the swap rates for.\n @param referenceAmount The amount of `referenceToken` to retrieve the swap rates for.\n @param data Additional data with no specified format for deriving the swap rates.\n @return rates The swap rates for the `tokens`/`referenceToken` pairs, retrieved via the oracle."},"functionSelector":"bda4c5ab","id":7369,"implemented":false,"kind":"function","modifiers":[],"name":"swapRates","nodeType":"FunctionDefinition","parameters":{"id":7364,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7359,"mutability":"mutable","name":"tokens","nodeType":"VariableDeclaration","scope":7369,"src":"1238:25:37","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":7357,"name":"address","nodeType":"ElementaryTypeName","src":"1238:7:37","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":7358,"nodeType":"ArrayTypeName","src":"1238:9:37","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":7361,"mutability":"mutable","name":"referenceAmount","nodeType":"VariableDeclaration","scope":7369,"src":"1273:23:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7360,"name":"uint256","nodeType":"ElementaryTypeName","src":"1273:7:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7363,"mutability":"mutable","name":"data","nodeType":"VariableDeclaration","scope":7369,"src":"1306:19:37","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":7362,"name":"bytes","nodeType":"ElementaryTypeName","src":"1306:5:37","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1228:103:37"},"returnParameters":{"id":7368,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7367,"mutability":"mutable","name":"rates","nodeType":"VariableDeclaration","scope":7369,"src":"1355:22:37","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":7365,"name":"uint256","nodeType":"ElementaryTypeName","src":"1355:7:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7366,"nodeType":"ArrayTypeName","src":"1355:9:37","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"1354:24:37"},"scope":7370,"src":"1210:169:37","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":7371,"src":"179:1202:37"}],"src":"33:1349:37"},"id":37}},"contracts":{"@animoca/ethereum-contracts-core-1.1.2/contracts/access/IERC173.sol":{"IERC173":{"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":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"owner()":"8da5cb5b","transferOwnership(address)":"f2fde38b"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"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\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"OwnershipTransferred(address,address)\":{\"params\":{\"newOwner\":\"the new owner.\",\"previousOwner\":\"the previous owner.\"}}},\"kind\":\"dev\",\"methods\":{\"owner()\":{\"returns\":{\"_0\":\"The address of the owner.\"}},\"transferOwnership(address)\":{\"details\":\"Emits an {OwnershipTransferred} event.\",\"params\":{\"newOwner\":\"The address of the new owner of the contract. Using the zero address means renouncing ownership.\"}}},\"title\":\"ERC-173 Contract Ownership Standard Note: the ERC-165 identifier for this interface is 0x7f5828d0\",\"version\":1},\"userdoc\":{\"events\":{\"OwnershipTransferred(address,address)\":{\"notice\":\"Event emited when ownership of a contract changes.\"}},\"kind\":\"user\",\"methods\":{\"owner()\":{\"notice\":\"Get the address of the owner\"},\"transferOwnership(address)\":{\"notice\":\"Set the address of the new owner of the contract Set newOwner to address(0) to renounce any ownership.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@animoca/ethereum-contracts-core-1.1.2/contracts/access/IERC173.sol\":\"IERC173\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":2000},\"remappings\":[]},\"sources\":{\"@animoca/ethereum-contracts-core-1.1.2/contracts/access/IERC173.sol\":{\"keccak256\":\"0xeb8a2c766577e782ad66ce8591a8d206b0f37b657754cc7a43beeb2d9343873b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3b404032cb4e21bae47b5e9af1290e41117040b10f69e3b2f93522b97e329b59\",\"dweb:/ipfs/QmRJHYkkvWcXGuFJdbqV18yh9QUk5g4zETrrxD2HnU3iRw\"]}},\"version\":1}"}},"@animoca/ethereum-contracts-core-1.1.2/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":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"owner()":"8da5cb5b","transferOwnership(address)":"f2fde38b"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"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\":[{\"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\":\"Emits an {IERC173-OwnershipTransferred(address,address)} event.\"},\"transferOwnership(address)\":{\"details\":\"Reverts if the sender is not the current contract owner.\",\"params\":{\"newOwner\":\"the address of the new owner. Use the zero address to renounce the ownership.\"}}},\"version\":1},\"userdoc\":{\"events\":{\"OwnershipTransferred(address,address)\":{\"notice\":\"Event emited when ownership of a contract changes.\"}},\"kind\":\"user\",\"methods\":{\"constructor\":{\"notice\":\"Initializes the contract, setting the deployer as the initial owner.\"},\"owner()\":{\"notice\":\"Gets the address of the current contract owner.\"},\"transferOwnership(address)\":{\"notice\":\"See {IERC173-transferOwnership(address)}\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@animoca/ethereum-contracts-core-1.1.2/contracts/access/Ownable.sol\":\"Ownable\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":2000},\"remappings\":[]},\"sources\":{\"@animoca/ethereum-contracts-core-1.1.2/contracts/access/IERC173.sol\":{\"keccak256\":\"0xeb8a2c766577e782ad66ce8591a8d206b0f37b657754cc7a43beeb2d9343873b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3b404032cb4e21bae47b5e9af1290e41117040b10f69e3b2f93522b97e329b59\",\"dweb:/ipfs/QmRJHYkkvWcXGuFJdbqV18yh9QUk5g4zETrrxD2HnU3iRw\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/access/Ownable.sol\":{\"keccak256\":\"0xbfd1129669bb7c154ee84b3aa1484e421ca68cb725c1039a897629631fd8b096\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://edc634aeae7272726745b1cbbf116dfdde51833b71a143e94fe7de89e9b14566\",\"dweb:/ipfs/QmXtXckxdFM3VeLvsjMWhqt44WAf7XKVYKt9bUT7pyWbjH\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/metatx/ManagedIdentity.sol\":{\"keccak256\":\"0xe544b34375f19f9d1ad6e309f2fc56849263cc3c3c77009f6b38782f7dea9971\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3eb04bbf1c13ca82971c1cb2fdd96a23e2dfaa5df6a7d3b7e773dd3a760cf4e4\",\"dweb:/ipfs/QmXArzbKQgsMebfYVSQtaCLAs3rp3FYp6MKjSQnZoGDnjf\"]}},\"version\":1}"}},"@animoca/ethereum-contracts-core-1.1.2/contracts/algo/EnumMap.sol":{"EnumMap":{"abi":[],"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212202b56b9d19c27e9e696f4b5a72bc03bd91f96743c923088401864e1d40d83331f64736f6c63430007060033","opcodes":"PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2B JUMP 0xB9 0xD1 SWAP13 0x27 0xE9 0xE6 SWAP7 DELEGATECALL 0xB5 0xA7 0x2B 0xC0 EXTCODESIZE 0xD9 0x1F SWAP7 PUSH21 0x3C923088401864E1D40D83331F64736F6C63430007 MOD STOP CALLER ","sourceMap":"807:4736:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212202b56b9d19c27e9e696f4b5a72bc03bd91f96743c923088401864e1d40d83331f64736f6c63430007060033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2B JUMP 0xB9 0xD1 SWAP13 0x27 0xE9 0xE6 SWAP7 DELEGATECALL 0xB5 0xA7 0x2B 0xC0 EXTCODESIZE 0xD9 0x1F SWAP7 PUSH21 0x3C923088401864E1D40D83331F64736F6C63430007 MOD STOP CALLER ","sourceMap":"807:4736:2:-:0;;;;;;;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Library for managing an enumerable variant of Solidity's https://solidity.readthedocs.io/en/latest/types.html#mapping-types[`mapping`] type. Maps have the following properties: - Entries are added, removed, and checked for existence in constant time (O(1)). - Entries are enumerated in O(n). No guarantees are made on the ordering. ``` contract Example {     // Add the library methods     using EnumMap for EnumMap.Map;     // Declare a set state variable     EnumMap.Map private myMap; } ```\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@animoca/ethereum-contracts-core-1.1.2/contracts/algo/EnumMap.sol\":\"EnumMap\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":2000},\"remappings\":[]},\"sources\":{\"@animoca/ethereum-contracts-core-1.1.2/contracts/algo/EnumMap.sol\":{\"keccak256\":\"0x12716c299c0965f4f87c2792cda2bd6029ba629c1172cdfef08d95cb2d7c283f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8d17c9bcb9bb0b9f399f6366f85b4db981df6e319f90b1b84910d6c44a79d032\",\"dweb:/ipfs/QmcqU3Gj8BP88yRV571GyCcW2UAjxq2xiqRofXFKYzkRXT\"]}},\"version\":1}"}},"@animoca/ethereum-contracts-core-1.1.2/contracts/algo/EnumSet.sol":{"EnumSet":{"abi":[],"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220334c9327061460dc322dc188fc0e28c6bd7387049e592f1bc0c669786b73684b64736f6c63430007060033","opcodes":"PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CALLER 0x4C SWAP4 0x27 MOD EQ PUSH1 0xDC ORIGIN 0x2D 0xC1 DUP9 0xFC 0xE 0x28 0xC6 0xBD PUSH20 0x87049E592F1BC0C669786B73684B64736F6C6343 STOP SMOD MOD STOP CALLER ","sourceMap":"770:3726:3:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220334c9327061460dc322dc188fc0e28c6bd7387049e592f1bc0c669786b73684b64736f6c63430007060033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CALLER 0x4C SWAP4 0x27 MOD EQ PUSH1 0xDC ORIGIN 0x2D 0xC1 DUP9 0xFC 0xE 0x28 0xC6 0xBD PUSH20 0x87049E592F1BC0C669786B73684B64736F6C6343 STOP SMOD MOD STOP CALLER ","sourceMap":"770:3726:3:-:0;;;;;;;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Library for managing https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive types. Sets have the following properties: - Elements are added, removed, and checked for existence in constant time (O(1)). - Elements are enumerated in O(n). No guarantees are made on the ordering. ``` contract Example {     // Add the library methods     using EnumSet for EnumSet.Set;     // Declare a set state variable     EnumSet.Set private mySet; } ```\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@animoca/ethereum-contracts-core-1.1.2/contracts/algo/EnumSet.sol\":\"EnumSet\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":2000},\"remappings\":[]},\"sources\":{\"@animoca/ethereum-contracts-core-1.1.2/contracts/algo/EnumSet.sol\":{\"keccak256\":\"0x0aaea4634a7c64ef61b1ee8380912084427b45b6b4fc254b76d4b78e39f92d35\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://356a344f770d238dd864e8530d2ee05e350f269346cdf02432bc767e90520ce1\",\"dweb:/ipfs/QmfQfasYUY69X4wnzizPqT8P24YZTAPQGgFQErsSzV5sva\"]}},\"version\":1}"}},"@animoca/ethereum-contracts-core-1.1.2/contracts/introspection/IERC165.sol":{"IERC165":{"abi":[{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"supportsInterface(bytes4)":"01ffc9a7"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC165 standard, as defined in the https://eips.ethereum.org/EIPS/eip-165.\",\"kind\":\"dev\",\"methods\":{\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@animoca/ethereum-contracts-core-1.1.2/contracts/introspection/IERC165.sol\":\"IERC165\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":2000},\"remappings\":[]},\"sources\":{\"@animoca/ethereum-contracts-core-1.1.2/contracts/introspection/IERC165.sol\":{\"keccak256\":\"0x75d489886feb4c87ca958da5b414fe5ea3c089cc3b9fe629acd44ce0628d2abe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4891221c8bff2b6800fa6e8c8815f5e22983a472075aac05cf691ee8db0ac861\",\"dweb:/ipfs/QmYP8kP9hMqfF6xAimG7wd8xM47WzU7PS1yG5hQ5k1joFH\"]}},\"version\":1}"}},"@animoca/ethereum-contracts-core-1.1.2/contracts/lifecycle/Pausable.sol":{"Pausable":{"abi":[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"paused()":"5c975abb"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Contract which allows children to implement pausability.\",\"events\":{\"Paused(address)\":{\"details\":\"Emitted when the pause is triggered by `account`.\"},\"Unpaused(address)\":{\"details\":\"Emitted when the pause is lifted by `account`.\"}},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@animoca/ethereum-contracts-core-1.1.2/contracts/lifecycle/Pausable.sol\":\"Pausable\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":2000},\"remappings\":[]},\"sources\":{\"@animoca/ethereum-contracts-core-1.1.2/contracts/lifecycle/Pausable.sol\":{\"keccak256\":\"0xaa32d2e66a8edb68c64ffab1db69925248cf3f774c40b062e1e8ff2f4d5eebed\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://37451b151d862be6413ee1d18e3500a9100128f09926a2260d0ea058c3148d8a\",\"dweb:/ipfs/QmNLsaNioeA4LK8fVpqvSkQrCob1DkENcqQUurqDQbQK3G\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/metatx/ManagedIdentity.sol\":{\"keccak256\":\"0xe544b34375f19f9d1ad6e309f2fc56849263cc3c3c77009f6b38782f7dea9971\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3eb04bbf1c13ca82971c1cb2fdd96a23e2dfaa5df6a7d3b7e773dd3a760cf4e4\",\"dweb:/ipfs/QmXArzbKQgsMebfYVSQtaCLAs3rp3FYp6MKjSQnZoGDnjf\"]}},\"version\":1}"}},"@animoca/ethereum-contracts-core-1.1.2/contracts/lifecycle/Startable.sol":{"Startable":{"abi":[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Started","type":"event"},{"inputs":[],"name":"startedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"startedAt()":"f21f537d"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Started\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"startedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"startedAt()\":{\"returns\":{\"_0\":\"The timestamp when the contract entered the started state.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"constructor\":{\"notice\":\"Constructor.\"},\"startedAt()\":{\"notice\":\"Returns the timestamp when the contract entered the started state.\"}},\"notice\":\"Contract module which allows derived contracts to implement a mechanism for activating, or 'starting', a contract. This module is used through inheritance. It will make available the modifiers `whenNotStarted` and `whenStarted`, which can be applied to the functions of your contract. Those functions will only be 'startable' once the modifiers are put in place.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@animoca/ethereum-contracts-core-1.1.2/contracts/lifecycle/Startable.sol\":\"Startable\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":2000},\"remappings\":[]},\"sources\":{\"@animoca/ethereum-contracts-core-1.1.2/contracts/lifecycle/Startable.sol\":{\"keccak256\":\"0x87e273577d4716cbbb325f03ec91207e1022bb7f56cdcda56593c603d2b4592f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d305d7c885971e1b82a363b4c9237c4201390610621a67605b89694ca9680e35\",\"dweb:/ipfs/QmWZX1cEfsfQSoEjBgBaBn3rKJxfyaJMpJyofpM9LG4tEp\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/metatx/ManagedIdentity.sol\":{\"keccak256\":\"0xe544b34375f19f9d1ad6e309f2fc56849263cc3c3c77009f6b38782f7dea9971\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3eb04bbf1c13ca82971c1cb2fdd96a23e2dfaa5df6a7d3b7e773dd3a760cf4e4\",\"dweb:/ipfs/QmXArzbKQgsMebfYVSQtaCLAs3rp3FYp6MKjSQnZoGDnjf\"]}},\"version\":1}"}},"@animoca/ethereum-contracts-core-1.1.2/contracts/metatx/ManagedIdentity.sol":{"ManagedIdentity":{"abi":[],"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@animoca/ethereum-contracts-core-1.1.2/contracts/metatx/ManagedIdentity.sol\":\"ManagedIdentity\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":2000},\"remappings\":[]},\"sources\":{\"@animoca/ethereum-contracts-core-1.1.2/contracts/metatx/ManagedIdentity.sol\":{\"keccak256\":\"0xe544b34375f19f9d1ad6e309f2fc56849263cc3c3c77009f6b38782f7dea9971\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3eb04bbf1c13ca82971c1cb2fdd96a23e2dfaa5df6a7d3b7e773dd3a760cf4e4\",\"dweb:/ipfs/QmXArzbKQgsMebfYVSQtaCLAs3rp3FYp6MKjSQnZoGDnjf\"]}},\"version\":1}"}},"@animoca/ethereum-contracts-core-1.1.2/contracts/payment/PayoutWallet.sol":{"PayoutWallet":{"abi":[{"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":"address","name":"payoutWallet_","type":"address"}],"name":"PayoutWalletSet","type":"event"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payoutWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"payoutWallet_","type":"address"}],"name":"setPayoutWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"owner()":"8da5cb5b","payoutWallet()":"8488bb4e","setPayoutWallet(address)":"6b8f9c43","transferOwnership(address)":"f2fde38b"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"payoutWallet_\",\"type\":\"address\"}],\"name\":\"PayoutWalletSet\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"payoutWallet\",\"outputs\":[{\"internalType\":\"address payable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"payoutWallet_\",\"type\":\"address\"}],\"name\":\"setPayoutWallet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"adds support for a payout wallet Note: .\",\"kind\":\"dev\",\"methods\":{\"transferOwnership(address)\":{\"details\":\"Reverts if the sender is not the current contract owner.\",\"params\":{\"newOwner\":\"the address of the new owner. Use the zero address to renounce the ownership.\"}}},\"title\":\"PayoutWallet\",\"version\":1},\"userdoc\":{\"events\":{\"OwnershipTransferred(address,address)\":{\"notice\":\"Event emited when ownership of a contract changes.\"}},\"kind\":\"user\",\"methods\":{\"owner()\":{\"notice\":\"Gets the address of the current contract owner.\"},\"transferOwnership(address)\":{\"notice\":\"See {IERC173-transferOwnership(address)}\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@animoca/ethereum-contracts-core-1.1.2/contracts/payment/PayoutWallet.sol\":\"PayoutWallet\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":2000},\"remappings\":[]},\"sources\":{\"@animoca/ethereum-contracts-core-1.1.2/contracts/access/IERC173.sol\":{\"keccak256\":\"0xeb8a2c766577e782ad66ce8591a8d206b0f37b657754cc7a43beeb2d9343873b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3b404032cb4e21bae47b5e9af1290e41117040b10f69e3b2f93522b97e329b59\",\"dweb:/ipfs/QmRJHYkkvWcXGuFJdbqV18yh9QUk5g4zETrrxD2HnU3iRw\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/access/Ownable.sol\":{\"keccak256\":\"0xbfd1129669bb7c154ee84b3aa1484e421ca68cb725c1039a897629631fd8b096\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://edc634aeae7272726745b1cbbf116dfdde51833b71a143e94fe7de89e9b14566\",\"dweb:/ipfs/QmXtXckxdFM3VeLvsjMWhqt44WAf7XKVYKt9bUT7pyWbjH\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/metatx/ManagedIdentity.sol\":{\"keccak256\":\"0xe544b34375f19f9d1ad6e309f2fc56849263cc3c3c77009f6b38782f7dea9971\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3eb04bbf1c13ca82971c1cb2fdd96a23e2dfaa5df6a7d3b7e773dd3a760cf4e4\",\"dweb:/ipfs/QmXArzbKQgsMebfYVSQtaCLAs3rp3FYp6MKjSQnZoGDnjf\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/payment/PayoutWallet.sol\":{\"keccak256\":\"0x45ef7f68177cb61463f0ac759782f490821917fac3a71a18263c38193a9c6229\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://67839b4cc5897d723099ebfd8e0593e809b02cf422056efc1497f88dd7abb415\",\"dweb:/ipfs/QmYFRXvggoT8RzWB7SSJmfaBY3xkoVYNaGotTLBxjXqqxx\"]}},\"version\":1}"}},"@animoca/ethereum-contracts-core-1.1.2/contracts/utils/ERC20Wrapper.sol":{"ERC20Wrapper":{"abi":[],"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212209c385deb41dacb733039c6717e20c4ba6bc1f4f002f50a81199329de29dc9fd264736f6c63430007060033","opcodes":"PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP13 CODESIZE 0x5D 0xEB COINBASE 0xDA 0xCB PUSH20 0x3039C6717E20C4BA6BC1F4F002F50A81199329DE 0x29 0xDC SWAP16 0xD2 PUSH5 0x736F6C6343 STOP SMOD MOD STOP CALLER ","sourceMap":"347:1672:9:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212209c385deb41dacb733039c6717e20c4ba6bc1f4f002f50a81199329de29dc9fd264736f6c63430007060033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP13 CODESIZE 0x5D 0xEB COINBASE 0xDA 0xCB PUSH20 0x3039C6717E20C4BA6BC1F4F002F50A81199329DE 0x29 0xDC SWAP16 0xD2 PUSH5 0x736F6C6343 STOP SMOD MOD STOP CALLER ","sourceMap":"347:1672:9:-:0;;;;;;;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"title\":\"ERC20Wrapper Wraps ERC20 functions to support non-standard implementations which do not return a bool value. Calls to the wrapped functions revert only if they throw or if they return false.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@animoca/ethereum-contracts-core-1.1.2/contracts/utils/ERC20Wrapper.sol\":\"ERC20Wrapper\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":2000},\"remappings\":[]},\"sources\":{\"@animoca/ethereum-contracts-core-1.1.2/contracts/utils/ERC20Wrapper.sol\":{\"keccak256\":\"0x57922168ce32d2260022c0c7075137940e7d3cf0bb0d2213e62194050fbcf392\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b2dbba2defa32aa9edb54797f9b3f4ec1c1e5f71193deb99289136fa2f02ad79\",\"dweb:/ipfs/QmbUbzdwyWwjw3VW1o5oBKyuG9cFN7n8j55P8MDAg3sCuK\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/utils/types/AddressIsContract.sol\":{\"keccak256\":\"0x08373f750eedc1226b22b8ab1e156b0689c463590fa7dc40e99329b2da7b5d47\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fac8cdd7be4a83b47b18c8a48c1b1779a2590118049734665a6de91e77f27d35\",\"dweb:/ipfs/QmcAobvMpD5TisPTQSihPhywmVbPv1jDhffJCaZptM7YLv\"]}},\"version\":1}"},"IWrappedERC20":{"abi":[{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"approve(address,uint256)":"095ea7b3","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@animoca/ethereum-contracts-core-1.1.2/contracts/utils/ERC20Wrapper.sol\":\"IWrappedERC20\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":2000},\"remappings\":[]},\"sources\":{\"@animoca/ethereum-contracts-core-1.1.2/contracts/utils/ERC20Wrapper.sol\":{\"keccak256\":\"0x57922168ce32d2260022c0c7075137940e7d3cf0bb0d2213e62194050fbcf392\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b2dbba2defa32aa9edb54797f9b3f4ec1c1e5f71193deb99289136fa2f02ad79\",\"dweb:/ipfs/QmbUbzdwyWwjw3VW1o5oBKyuG9cFN7n8j55P8MDAg3sCuK\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/utils/types/AddressIsContract.sol\":{\"keccak256\":\"0x08373f750eedc1226b22b8ab1e156b0689c463590fa7dc40e99329b2da7b5d47\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fac8cdd7be4a83b47b18c8a48c1b1779a2590118049734665a6de91e77f27d35\",\"dweb:/ipfs/QmcAobvMpD5TisPTQSihPhywmVbPv1jDhffJCaZptM7YLv\"]}},\"version\":1}"}},"@animoca/ethereum-contracts-core-1.1.2/contracts/utils/types/AddressIsContract.sol":{"AddressIsContract":{"abi":[],"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220ff88c59dc56a03d03479b148629039ca2721e1b5168db86670fd2f953a3524f164736f6c63430007060033","opcodes":"PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SELFDESTRUCT DUP9 0xC5 SWAP14 0xC5 PUSH11 0x3D03479B148629039CA27 0x21 0xE1 0xB5 AND DUP14 0xB8 PUSH7 0x70FD2F953A3524 CALL PUSH5 0x736F6C6343 STOP SMOD MOD STOP CALLER ","sourceMap":"311:981:10:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220ff88c59dc56a03d03479b148629039ca2721e1b5168db86670fd2f953a3524f164736f6c63430007060033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SELFDESTRUCT DUP9 0xC5 SWAP14 0xC5 PUSH11 0x3D03479B148629039CA27 0x21 0xE1 0xB5 AND DUP14 0xB8 PUSH7 0x70FD2F953A3524 CALL PUSH5 0x736F6C6343 STOP SMOD MOD STOP CALLER ","sourceMap":"311:981:10:-:0;;;;;;;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Upgrades the address type to check if it is a contract.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@animoca/ethereum-contracts-core-1.1.2/contracts/utils/types/AddressIsContract.sol\":\"AddressIsContract\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":2000},\"remappings\":[]},\"sources\":{\"@animoca/ethereum-contracts-core-1.1.2/contracts/utils/types/AddressIsContract.sol\":{\"keccak256\":\"0x08373f750eedc1226b22b8ab1e156b0689c463590fa7dc40e99329b2da7b5d47\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fac8cdd7be4a83b47b18c8a48c1b1779a2590118049734665a6de91e77f27d35\",\"dweb:/ipfs/QmcAobvMpD5TisPTQSihPhywmVbPv1jDhffJCaZptM7YLv\"]}},\"version\":1}"}},"@openzeppelin/contracts/math/SafeMath.sol":{"SafeMath":{"abi":[],"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220c1e4fae7e01ea0d202947836be53297df9c43934be5793245fe68f5342d3a68e64736f6c63430007060033","opcodes":"PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC1 0xE4 STATICCALL 0xE7 0xE0 0x1E LOG0 0xD2 MUL SWAP5 PUSH25 0x36BE53297DF9C43934BE5793245FE68F5342D3A68E64736F6C PUSH4 0x43000706 STOP CALLER ","sourceMap":"630:6594:11:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220c1e4fae7e01ea0d202947836be53297df9c43934be5793245fe68f5342d3a68e64736f6c63430007060033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC1 0xE4 STATICCALL 0xE7 0xE0 0x1E LOG0 0xD2 MUL SWAP5 PUSH25 0x36BE53297DF9C43934BE5793245FE68F5342D3A68E64736F6C PUSH4 0x43000706 STOP CALLER ","sourceMap":"630:6594:11:-:0;;;;;;;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Wrappers over Solidity's arithmetic operations with added overflow checks. Arithmetic operations in Solidity wrap on overflow. This can easily result in bugs, because programmers usually assume that an overflow raises an error, which is the standard behavior in high level programming languages. `SafeMath` restores this intuition by reverting the transaction when an operation overflows. Using this library instead of the unchecked operations eliminates an entire class of bugs, so it's recommended to use it always.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/math/SafeMath.sol\":\"SafeMath\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":2000},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0xcc78a17dd88fa5a2edc60c8489e2f405c0913b377216a5b26b35656b2d0dab52\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://526dc85e1f9b9b45830e202568d267d93dde7a4fcccf4ad7798dadcd92304d3c\",\"dweb:/ipfs/QmaoXMB972J3cSDLtBq3xBo4jLwqD2uzXTwujtSPqkYVhR\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/SafeCast.sol":{"SafeCast":{"abi":[],"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220f880663265eac382d9ebc67154016095d80d6a1c191963489fa49712f872719a64736f6c63430007060033","opcodes":"PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xF8 DUP1 PUSH7 0x3265EAC382D9EB 0xC6 PUSH18 0x54016095D80D6A1C191963489FA49712F872 PUSH18 0x9A64736F6C63430007060033000000000000 ","sourceMap":"777:5765:12:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220f880663265eac382d9ebc67154016095d80d6a1c191963489fa49712f872719a64736f6c63430007060033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xF8 DUP1 PUSH7 0x3265EAC382D9EB 0xC6 PUSH18 0x54016095D80D6A1C191963489FA49712F872 PUSH18 0x9A64736F6C63430007060033000000000000 ","sourceMap":"777:5765:12:-:0;;;;;;;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Wrappers over Solidity's uintXX/intXX casting operators with added overflow checks. Downcasting from uint256/int256 in Solidity does not revert on overflow. This can easily result in undesired exploitation or bugs, since developers usually assume that overflows raise errors. `SafeCast` restores this intuition by reverting the transaction when such an operation overflows. Using this library instead of the unchecked operations eliminates an entire class of bugs, so it's recommended to use it always. Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing all math on `uint256` and `int256` and then downcasting.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/SafeCast.sol\":\"SafeCast\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":2000},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/SafeCast.sol\":{\"keccak256\":\"0x7b2b8baa20fd60ab4a328c8e34c64a353651b80ba4b5b157cbb61813f6f85d55\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://125b7f9efa390e663d630c62b97ae4e0707f31623bea989ef94c97ca9d777dd2\",\"dweb:/ipfs/QmaaLSuwvqK7wqcgyS3utHgfmB7RntcvP7eJSuvQod8Z9P\"]}},\"version\":1}"}},"contracts/mocks/sale/FixedOrderInventorySaleMock.sol":{"FixedOrderInventorySaleMock":{"abi":[{"inputs":[{"internalType":"address","name":"inventory_","type":"address"},{"internalType":"address payable","name":"payoutWallet","type":"address"},{"internalType":"uint256","name":"tokensPerSkuCapacity","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32[]","name":"tokens","type":"bytes32[]"}],"name":"DeliveryData","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32[]","name":"names","type":"bytes32[]"},{"indexed":false,"internalType":"bytes32[]","name":"values","type":"bytes32[]"}],"name":"MagicValues","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":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"payoutWallet_","type":"address"}],"name":"PayoutWalletSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"purchaser","type":"address"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"bytes32","name":"sku","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"quantity","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"userData","type":"bytes"},{"indexed":false,"internalType":"uint256","name":"totalPrice","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"extData","type":"bytes"}],"name":"Purchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"sku","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxQuantityPerPurchase","type":"uint256"},{"indexed":false,"internalType":"address","name":"notificationsReceiver","type":"address"}],"name":"SkuCreation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"sku","type":"bytes32"},{"indexed":false,"internalType":"address[]","name":"tokens","type":"address[]"},{"indexed":false,"internalType":"uint256[]","name":"prices","type":"uint256[]"}],"name":"SkuPricingUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Started","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"SUPPLY_UNLIMITED","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOKEN_ETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokens","type":"uint256[]"}],"name":"addSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"uint256","name":"maxQuantityPerPurchase","type":"uint256"},{"internalType":"address","name":"notificationsReceiver","type":"address"}],"name":"createSku","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"estimatePurchase","outputs":[{"internalType":"uint256","name":"totalPrice","type":"uint256"},{"internalType":"bytes32[]","name":"pricingData","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSkuCapacity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"sku","type":"bytes32"}],"name":"getSkuInfo","outputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"uint256","name":"remainingSupply","type":"uint256"},{"internalType":"uint256","name":"maxQuantityPerPurchase","type":"uint256"},{"internalType":"address","name":"notificationsReceiver","type":"address"},{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"prices","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSkus","outputs":[{"internalType":"bytes32[]","name":"skus","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenList","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokensPerSkuCapacity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inventory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payoutWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"purchaseFor","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address payable","name":"payoutWallet_","type":"address"}],"name":"setPayoutWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"indexes","type":"uint256[]"},{"internalType":"uint256[]","name":"tokens","type":"uint256[]"}],"name":"setSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"start","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenList","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"},{"internalType":"uint256","name":"totalPrice","type":"uint256"},{"internalType":"bytes32[]","name":"pricingData","type":"bytes32[]"},{"internalType":"bytes32[]","name":"paymentData","type":"bytes32[]"}],"name":"underscoreDelivery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"prices","type":"uint256[]"}],"name":"updateSkuPricing","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"60e06040523480156200001157600080fd5b506040516200367938038062003679833981810160405260608110156200003757600080fd5b5080516020820151604092830151600080546001600160a01b031916339081178255945193949293919285928592859284926001928592859285928592849290918691839182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001600160a01b03811662000100576040805162461bcd60e51b815260206004820152601460248201527f5061796f75743a207a65726f2061646472657373000000000000000000000000604482015290519081900360640190fd5b600180546001600160a01b0383166001600160a01b0319909116811790915560408051918252517fdd880d24a789958a6398c99c2e54ce31bc10a638cbc42f7dd34285479ae0f8559181900360200190a150506003805460ff1916911515919091179055608082905260a081905260408051600280825260608201835260009260208301908036833750506040805160028082526060820183529394506000939092509060208301908036833750508351919250680a89e968a9cbe8aa8960bb1b9173eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee91508490600090620001e557fe5b6020026020010183600081518110620001fa57fe5b602002602001018281525082815250505060001960001b6f14d55414131657d5539312535255115160821b90836001815181106200023457fe5b60200260200101836001815181106200024957fe5b60200260200101828152508281525050507fabb92614f53337043b55dc996a83ebb09adce78ec336ca188ea02180b61d1c148282604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015620002c3578181015183820152602001620002a9565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101562000304578181015183820152602001620002ea565b5050505090500194505050505060405180910390a150505050506001600160a01b0386161515925062000381915050576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a207a65726f206164647265737320696e76656e746f727900000000604482015290519081900360640190fd5b50506001600160601b031960609190911b1660c05250505060805160a05160c05160601c6132a6620003d360003980610db85250806112e65280611eb15250806112595280611fbe52506132a66000f3fe6080604052600436106101ac5760003560e01c80636b8f9c43116100ec578063a963b2571161008a578063cf3ae77b11610064578063cf3ae77b14610a3b578063d55f927314610aeb578063f21f537d14610b00578063f2fde38b14610b15576101ac565b8063a963b2571461097c578063be9a655514610a11578063c4e41b2214610a26576101ac565b806385b3cfac116100c657806385b3cfac146108e95780638da5cb5b146109285780639e0495451461093d5780639ead722214610952576101ac565b80636b8f9c431461088c5780638456cb59146108bf5780638488bb4e146108d4576101ac565b80633628bd93116101595780635c4fafc7116101335780635c4fafc7146106fe5780635c975abb146107135780635e6e9f701461073c57806361bd385114610877576101ac565b80633628bd93146106ad5780633f4ba83a146106d4578063451b31a2146106e9576101ac565b806323f927c91161018a57806323f927c91461042c578063273cbaa0146105605780632a8a45bc146105c5576101ac565b80631323b066146101b157806315469171146102ae57806315d52a5c146103fb575b600080fd5b3480156101bd57600080fd5b50610253600480360360a08110156101d457600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a08101608082013564010000000081111561021457600080fd5b82018360208201111561022657600080fd5b8035906020019184600183028401116401000000008311171561024857600080fd5b509092509050610b48565b6040518083815260200180602001828103825283818151815260200191508051906020019060200280838360005b83811015610299578181015183820152602001610281565b50505050905001935050505060405180910390f35b3480156102ba57600080fd5b506103f960048036036101008110156102d257600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a08101608082013564010000000081111561031257600080fd5b82018360208201111561032457600080fd5b8035906020019184600183028401116401000000008311171561034657600080fd5b9193909282359260408101906020013564010000000081111561036857600080fd5b82018360208201111561037a57600080fd5b8035906020019184602083028401116401000000008311171561039c57600080fd5b9193909290916020810190356401000000008111156103ba57600080fd5b8201836020820111156103cc57600080fd5b803590602001918460208302840111640100000000831117156103ee57600080fd5b509092509050610c3d565b005b34801561040757600080fd5b50610410610db6565b604080516001600160a01b039092168252519081900360200190f35b34801561043857600080fd5b506103f96004803603604081101561044f57600080fd5b81019060208101813564010000000081111561046a57600080fd5b82018360208201111561047c57600080fd5b8035906020019184602083028401116401000000008311171561049e57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092959493602081019350359150506401000000008111156104ee57600080fd5b82018360208201111561050057600080fd5b8035906020019184602083028401116401000000008311171561052257600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610dda945050505050565b34801561056c57600080fd5b5061057561105a565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156105b1578181015183820152602001610599565b505050509050019250505060405180910390f35b3480156105d157600080fd5b506105ef600480360360208110156105e857600080fd5b50356110b2565b60405180878152602001868152602001858152602001846001600160a01b031681526020018060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561065457818101518382015260200161063c565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561069357818101518382015260200161067b565b505050509050019850505050505050505060405180910390f35b3480156106b957600080fd5b506106c2611257565b60408051918252519081900360200190f35b3480156106e057600080fd5b506103f961127b565b3480156106f557600080fd5b506106c26112e4565b34801561070a57600080fd5b50610410611308565b34801561071f57600080fd5b50610728611320565b604080519115158252519081900360200190f35b34801561074857600080fd5b506103f96004803603606081101561075f57600080fd5b8135919081019060408101602082013564010000000081111561078157600080fd5b82018360208201111561079357600080fd5b803590602001918460208302840111640100000000831117156107b557600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561080557600080fd5b82018360208201111561081757600080fd5b8035906020019184602083028401116401000000008311171561083957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611329945050505050565b34801561088357600080fd5b50610575611506565b34801561089857600080fd5b506103f9600480360360208110156108af57600080fd5b50356001600160a01b031661155f565b3480156108cb57600080fd5b506103f961162c565b3480156108e057600080fd5b50610410611693565b3480156108f557600080fd5b506103f96004803603606081101561090c57600080fd5b50803590602081013590604001356001600160a01b03166116a2565b34801561093457600080fd5b506104106116b7565b34801561094957600080fd5b506106c26116c6565b34801561095e57600080fd5b506106c26004803603602081101561097557600080fd5b50356116cc565b6103f9600480360360a081101561099257600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a0810160808201356401000000008111156109d257600080fd5b8201836020820111156109e457600080fd5b80359060200191846001830284011164010000000083111715610a0657600080fd5b5090925090506116ed565b348015610a1d57600080fd5b506103f96117ca565b348015610a3257600080fd5b506106c26117dd565b348015610a4757600080fd5b506103f960048036036020811015610a5e57600080fd5b810190602081018135640100000000811115610a7957600080fd5b820183602082011115610a8b57600080fd5b80359060200191846020830284011164010000000083111715610aad57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506117e3945050505050565b348015610af757600080fd5b506106c2611937565b348015610b0c57600080fd5b506106c261193d565b348015610b2157600080fd5b506103f960048036036020811015610b3857600080fd5b50356001600160a01b0316611943565b6000606060025460001415610ba4576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b610bac6119a9565b610bb46131de565b610bbc611a01565b6001600160a01b03908116825289811660208084019190915290891660408084019190915260608301899052608083018890528051601f870183900483028101830190915285815290869086908190840183828082843760009201919091525050505060a0820152610c2d81611a05565b9250925050965096945050505050565b610c456131de565b610c4d611a01565b6001600160a01b0390811682528c8116602080840191909152908c16604080840191909152606083018c9052608083018b90528051601f8a0183900483028101830190915288815290899089908190840183828082843760009201919091525050505060a082015260c081018690526040805160208087028281018201909352868252909187918791829185019084908082843760009201919091525050505060e082015260408051602080850282810182019093528482529091859185918291850190849080828437600092019190915250505050610100820152610d3281611a2c565b61012081015160408051602080825283518183015283517ff94e453c69afa2e43777ec90f3a26bcfc9ac74969e1c25a72b056b9f81c93b339493839290830191818601910280838360005b83811015610d95578181015183820152602001610d7d565b505050509050019250505060405180910390a1505050505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b610de2611add565b610df2610ded611a01565b611b34565b60085480610e47576040805162461bcd60e51b815260206004820152601260248201527f53616c653a20656d70747920746f6b656e730000000000000000000000000000604482015290519081900360640190fd5b825180610e9b576040805162461bcd60e51b815260206004820152601360248201527f53616c653a20656d70747920696e646578657300000000000000000000000000604482015290519081900360640190fd5b8251818114610ef1576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20696e636f6e73697374656e742061727261797300000000000000604482015290519081900360640190fd5b60075460005b838114611051576000878281518110610f0c57fe5b6020026020010151905082811015610f6b576040805162461bcd60e51b815260206004820152601360248201527f53616c653a20696e76616c696420696e64657800000000000000000000000000604482015290519081900360640190fd5b858110610fbf576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20696e646578206f75742d6f662d626f756e647300000000000000604482015290519081900360640190fd5b6000878381518110610fcd57fe5b60200260200101519050806000141561102d576040805162461bcd60e51b815260206004820152601160248201527f53616c653a207a65726f20737570706c79000000000000000000000000000000604482015290519081900360640190fd5b806008838154811061103b57fe5b6000918252602090912001555050600101610ef7565b50505050505050565b606060088054806020026020016040519081016040528092919081815260200182805480156110a857602002820191906000526020600020905b815481526020019060010190808311611094575b5050505050905090565b60008181526006602052604081208190819081906060908190836110d860048301611bfb565b82549850905087611130576040805162461bcd60e51b815260206004820152601660248201527f53616c653a206e6f6e2d6578697374656e7420736b7500000000000000000000604482015290519081900360640190fd5b60018201546002830154600384015491985096506001600160a01b031694508067ffffffffffffffff8111801561116657600080fd5b50604051908082528060200260200182016040528015611190578160200160208202803683370190505b5093508067ffffffffffffffff811180156111aa57600080fd5b506040519080825280602002602001820160405280156111d4578160200160208202803683370190505b50925060005b8181101561124b576000806111f26004860184611bff565b915091508160001c87848151811061120657fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508060001c86848151811061123657fe5b602090810291909101015250506001016111da565b50505091939550919395565b7f000000000000000000000000000000000000000000000000000000000000000090565b6002546112cf576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b6112da610ded611a01565b6112e2611c90565b565b7f000000000000000000000000000000000000000000000000000000000000000090565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b60035460ff1681565b611334610ded611a01565b81518151811461138b576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20696e636f6e73697374656e742061727261797300000000000000604482015290519081900360640190fd5b600084815260066020526040902080546113ec576040805162461bcd60e51b815260206004820152601660248201527f53616c653a206e6f6e2d6578697374656e7420736b7500000000000000000000604482015290519081900360640190fd5b600481018261143757600061140082611bfb565b905060005b818110156114305760006114198482611bff565b5090506114268482611ce8565b5050600101611405565b5050611442565b611442818686611dc8565b857fcb3fe5489e0cd43d0f4a33d1e09a4a0463a03d0d38f56165530854e5540db1438686604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156114aa578181015183820152602001611492565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156114e95781810151838201526020016114d1565b5050505090500194505050505060405180910390a2505050505050565b606060046000018054806020026020016040519081016040528092919081815260200182805480156110a85760200282019190600052602060002090815481526020019060010190808311611094575050505050905090565b61156a610ded611a01565b6001600160a01b0381166115c5576040805162461bcd60e51b815260206004820152601460248201527f5061796f75743a207a65726f2061646472657373000000000000000000000000604482015290519081900360640190fd5b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03838116919091179182905560408051929091168252517fdd880d24a789958a6398c99c2e54ce31bc10a638cbc42f7dd34285479ae0f855916020908290030190a150565b600254611680576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b61168b610ded611a01565b6112e2611f2c565b6001546001600160a01b031681565b6008546116b29084908484611f6a565b505050565b6000546001600160a01b031690565b60001981565b600881815481106116dc57600080fd5b600091825260209091200154905081565b600254611741576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b6117496119a9565b6117516131de565b611759611a01565b6001600160a01b03908116825287811660208084019190915290871660408084019190915260608301879052608083018690528051601f850183900483028101830190915283815290849084908190840183828082843760009201919091525050505060a0820152611051816121a1565b6117d5610ded611a01565b6112da6121ce565b60085490565b6117ee610ded611a01565b805180611842576040805162461bcd60e51b815260206004820152601260248201527f53616c653a20656d70747920746f6b656e730000000000000000000000000000604482015290519081900360640190fd5b60005b8181146118f757600083828151811061185a57fe5b6020026020010151905080600014156118ba576040805162461bcd60e51b815260206004820152601160248201527f53616c653a207a65726f20737570706c79000000000000000000000000000000604482015290519081900360640190fd5b60088054600181810183556000929092527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3019190915501611845565b506119026004611bfb565b15611933576000611914600482612250565b6000908152600660205260409020805483018155600101805483019055505b5050565b60075481565b60025490565b61194e610ded611a01565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383811691821780845560405192939116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b60035460ff16156112e2576040805162461bcd60e51b815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b3390565b60006060611a12836122ca565b611a1b83612574565b505060c081015160e0909101519091565b611a3581612611565b806080015167ffffffffffffffff81118015611a5057600080fd5b50604051908082528060200260200182016040528015611a7a578160200160208202803683370190505b506101208201526007546000905b82608001518214611ad65760088181548110611aa057fe5b906000526020600020015460001b8361012001518381518110611abf57fe5b602090810291909101015260019182019101611a88565b6007555050565b60035460ff166112e2576040805162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604482015290519081900360640190fd5b306001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015611b6d57600080fd5b505afa158015611b81573d6000803e3d6000fd5b505050506040513d6020811015611b9757600080fd5b50516001600160a01b03828116911614611bf8576040805162461bcd60e51b815260206004820152601660248201527f4f776e61626c653a206e6f7420746865206f776e657200000000000000000000604482015290519081900360640190fd5b50565b5490565b815460009081908310611c59576040805162461bcd60e51b815260206004820152601c60248201527f456e756d4d61703a20696e646578206f7574206f6620626f756e647300000000604482015290519081900360640190fd5b6000846000018481548110611c6a57fe5b906000526020600020906002020190508060000154816001015492509250509250929050565b611c98611add565b6003805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611ccb611a01565b604080516001600160a01b039092168252519081900360200190a1565b60008181526001830160205260408120548015611dbc5783546000198083019190810190600090879083908110611d1b57fe5b9060005260206000209060020201905080876000018481548110611d3b57fe5b600091825260208083208454600290930201918255600193840154918401919091558354825289830190526040902090840190558654879080611d7a57fe5b6000828152602080822060026000199094019384020182815560019081018390559290935588815289820190925260408220919091559450611dc29350505050565b60009150505b92915050565b60005b8251811015611eae576000838281518110611de257fe5b6020026020010151905060006001600160a01b0316816001600160a01b03161415611e54576040805162461bcd60e51b815260206004820152601860248201527f53616c653a207a65726f206164647265737320746f6b656e0000000000000000604482015290519081900360640190fd5b6000838381518110611e6257fe5b602002602001015190508060001415611e8e57611e88866001600160a01b038416611ce8565b50611ea4565b611ea2866001600160a01b0384168361265c565b505b5050600101611dcb565b507f0000000000000000000000000000000000000000000000000000000000000000611ed984611bfb565b11156116b2576040805162461bcd60e51b815260206004820152601560248201527f53616c653a20746f6f206d616e7920746f6b656e730000000000000000000000604482015290519081900360640190fd5b611f346119a9565b6003805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611ccb611a01565b82611fbc576040805162461bcd60e51b815260206004820152601160248201527f53616c653a207a65726f20737570706c79000000000000000000000000000000604482015290519081900360640190fd5b7f0000000000000000000000000000000000000000000000000000000000000000611fe76004611bfb565b10612039576040805162461bcd60e51b815260206004820152601360248201527f53616c653a20746f6f206d616e7920736b757300000000000000000000000000604482015290519081900360640190fd5b6120446004856126f6565b612095576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20736b7520616c7265616479206372656174656400000000000000604482015290519081900360640190fd5b6001600160a01b03811615612107576120b6816001600160a01b0316612740565b612107576040805162461bcd60e51b815260206004820152601b60248201527f53616c653a206e6f6e2d636f6e74726163742072656365697665720000000000604482015290519081900360640190fd5b60008481526006602090815260409182902085815560018101869055600281018590556003810180546001600160a01b03861673ffffffffffffffffffffffffffffffffffffffff1990911681179091558351888152928301879052828401869052606083015291517f38bd4aabce684540cd61351b91f2f5facf9d6963934347e25aab93d87ae7ac149181900360800190a15050505050565b6121aa816122ca565b6121b381612574565b6121bc81612746565b6121c581611a2c565b611bf881612895565b60025415612223576040805162461bcd60e51b815260206004820152601260248201527f537461727461626c653a20737461727465640000000000000000000000000000604482015290519081900360640190fd5b426002557f27029695aa5f602a4ee81f4c32dfa86e562f200a17966496f3a7c3f2ec0f9417611ccb611a01565b815460009082106122a8576040805162461bcd60e51b815260206004820152601c60248201527f456e756d5365743a20696e646578206f7574206f6620626f756e647300000000604482015290519081900360640190fd5b8260000182815481106122b757fe5b9060005260206000200154905092915050565b60208101516001600160a01b0316612329576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a207a65726f206164647265737320726563697069656e7400000000604482015290519081900360640190fd5b60408101516001600160a01b0316612388576040805162461bcd60e51b815260206004820152601860248201527f53616c653a207a65726f206164647265737320746f6b656e0000000000000000604482015290519081900360640190fd5b60808101516123de576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a207a65726f207175616e7469747920707572636861736500000000604482015290519081900360640190fd5b606081015160009081526006602052604090208054612444576040805162461bcd60e51b815260206004820152601660248201527f53616c653a206e6f6e2d6578697374656e7420736b7500000000000000000000604482015290519081900360640190fd5b8160800151816002015410156124a1576040805162461bcd60e51b815260206004820152601860248201527f53616c653a2061626f7665206d6178207175616e746974790000000000000000604482015290519081900360640190fd5b80546000191461250857816080015181600101541015612508576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20696e73756666696369656e7420737570706c7900000000000000604482015290519081900360640190fd5b60408201516001600160a01b03166125236004830182612d7a565b6116b2576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a206e6f6e2d6578697374656e7420736b7520746f6b656e00000000604482015290519081900360640190fd5b6060810151600090815260066020526040902080546125da576040805162461bcd60e51b815260206004820152601560248201527f53616c653a20756e737570706f7274656420534b550000000000000000000000604482015290519081900360640190fd5b6004810160006125ea8483612d92565b9050612603846080015182612e0290919063ffffffff16565b60c090940193909352505050565b60608101516000908152600660205260409020805460001914611933576080820151600182015461264191612e5b565b60608301516000908152600660205260409020600101555050565b6000828152600184016020526040812054806126c15750506040805180820182528381526020808201848152865460018181018955600089815284812095516002909302909501918255915190820155865486845281880190925292909120556126ef565b828560000160018303815481106126d457fe5b90600052602060002090600202016001018190555060009150505b9392505050565b60006127028383612d7a565b61273857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611dc2565b506000611dc2565b3b151590565b60408101516001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415612869578060c001513410156127c8576040805162461bcd60e51b815260206004820152601660248201527f53616c653a20696e73756666696369656e742045544800000000000000000000604482015290519081900360640190fd5b60015460c08201516040516001600160a01b039092169181156108fc0291906000818181858888f19350505050158015612806573d6000803e3d6000fd5b5060006128208260c0015134612e5b90919063ffffffff16565b905080156128635781516040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612861573d6000803e3d6000fd5b505b50611bf8565b611bf8612874611a01565b60015460c084015160408501516001600160a01b0390811693921690612eb8565b806060015181604001516001600160a01b031682600001516001600160a01b03167f29f844483ca6b10b5c0611d039afc15ce8f6380e905307b381c3a8ee4e90e11e846020015185608001518660a001518760c001518860e001518961010001518a610120015160405160200180848051906020019060200280838360005b8381101561292c578181015183820152602001612914565b50505050905001838051906020019060200280838360005b8381101561295c578181015183820152602001612944565b50505050905001828051906020019060200280838360005b8381101561298c578181015183820152602001612974565b50505050905001935050505060405160208183030381529060405260405180866001600160a01b031681526020018581526020018060200184815260200180602001838103835286818151815260200191508051906020019080838360005b83811015612a035781810151838201526020016129eb565b50505050905090810190601f168015612a305780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015612a63578181015183820152602001612a4b565b50505050905090810190601f168015612a905780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390a460608101516000908152600660205260409020600301546001600160a01b03168015611933576361eceae860e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916816001600160a01b03166361eceae8846000015185602001518660400151876060015188608001518960a001518a60c001518b60e001518c61010001518d61012001516040518b63ffffffff1660e01b8152600401808b6001600160a01b031681526020018a6001600160a01b03168152602001896001600160a01b031681526020018881526020018781526020018060200186815260200180602001806020018060200185810385528a818151815260200191508051906020019080838360005b83811015612bc9578181015183820152602001612bb1565b50505050905090810190601f168015612bf65780820380516001836020036101000a031916815260200191505b508581038452885181528851602091820191808b01910280838360005b83811015612c2b578181015183820152602001612c13565b50505050905001858103835287818151815260200191508051906020019060200280838360005b83811015612c6a578181015183820152602001612c52565b50505050905001858103825286818151815260200191508051906020019060200280838360005b83811015612ca9578181015183820152602001612c91565b505050509050019e505050505050505050505050505050602060405180830381600087803b158015612cda57600080fd5b505af1158015612cee573d6000803e3d6000fd5b505050506040513d6020811015612d0457600080fd5b50517fffffffff000000000000000000000000000000000000000000000000000000001614611933576040805162461bcd60e51b815260206004820152601a60248201527f53616c653a206e6f74696669636174696f6e2072656675736564000000000000604482015290519081900360640190fd5b60009081526001919091016020526040902054151590565b6040820151600090612dae9083906001600160a01b0316612f46565b905080611dc2576040805162461bcd60e51b815260206004820152601f60248201527f53616c653a20756e737570706f72746564207061796d656e7420746f6b656e00604482015290519081900360640190fd5b600082612e1157506000611dc2565b82820282848281612e1e57fe5b04146126ef5760405162461bcd60e51b81526004018080602001828103825260218152602001806132506021913960400191505060405180910390fd5b600082821115612eb2576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052612f40908590612fd6565b50505050565b600081815260018301602052604081205480612fa9576040805162461bcd60e51b815260206004820152601860248201527f456e756d4d61703a206e6f6e6578697374656e74206b65790000000000000000604482015290519081900360640190fd5b836000016001820381548110612fbb57fe5b90600052602060002090600202016001015491505092915050565b81612fe96001600160a01b038216612740565b61303a576040805162461bcd60e51b815260206004820152601a60248201527f4552433230577261707065723a206e6f6e2d636f6e7472616374000000000000604482015290519081900360640190fd5b600080826001600160a01b0316846040518082805190602001908083835b6020831061309557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613058565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146130f7576040519150601f19603f3d011682016040523d82523d6000602084013e6130fc565b606091505b5091509150811561317b578051156131765780806020019051602081101561312357600080fd5b5051613176576040805162461bcd60e51b815260206004820152601e60248201527f4552433230577261707065723a206f7065726174696f6e206661696c65640000604482015290519081900360640190fd5b6131d7565b80516131ce576040805162461bcd60e51b815260206004820152601e60248201527f4552433230577261707065723a206f7065726174696f6e206661696c65640000604482015290519081900360640190fd5b80518082602001fd5b5050505050565b60405180610140016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160008019168152602001600081526020016060815260200160008152602001606081526020016060815260200160608152509056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a26469706673582212204f4f25d43967b0ccbc0b225a569c391d84e59a9da725cf666c69a981358f0a4464736f6c63430007060033","opcodes":"PUSH1 0xE0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x3679 CODESIZE SUB DUP1 PUSH3 0x3679 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x60 DUP2 LT ISZERO PUSH3 0x37 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 SWAP3 DUP4 ADD MLOAD PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND CALLER SWAP1 DUP2 OR DUP3 SSTORE SWAP5 MLOAD SWAP4 SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 DUP6 SWAP3 DUP6 SWAP3 DUP6 SWAP3 DUP5 SWAP3 PUSH1 0x1 SWAP3 DUP6 SWAP3 DUP6 SWAP3 DUP6 SWAP3 DUP6 SWAP3 DUP5 SWAP3 SWAP1 SWAP2 DUP7 SWAP2 DUP4 SWAP2 DUP3 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP3 SWAP1 LOG3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH3 0x100 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061796F75743A207A65726F2061646472657373000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 SWAP2 AND DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD PUSH32 0xDD880D24A789958A6398C99C2E54CE31BC10A638CBC42F7DD34285479AE0F855 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP POP PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x80 DUP3 SWAP1 MSTORE PUSH1 0xA0 DUP2 SWAP1 MSTORE 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 POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x2 DUP1 DUP3 MSTORE PUSH1 0x60 DUP3 ADD DUP4 MSTORE SWAP4 SWAP5 POP PUSH1 0x0 SWAP4 SWAP1 SWAP3 POP SWAP1 PUSH1 0x20 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP POP DUP4 MLOAD SWAP2 SWAP3 POP PUSH9 0xA89E968A9CBE8AA89 PUSH1 0xBB SHL SWAP2 PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE SWAP2 POP DUP5 SWAP1 PUSH1 0x0 SWAP1 PUSH3 0x1E5 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP4 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH3 0x1FA JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP3 DUP2 MSTORE POP DUP3 DUP2 MSTORE POP POP POP PUSH1 0x0 NOT PUSH1 0x0 SHL PUSH16 0x14D55414131657D55393125352551151 PUSH1 0x82 SHL SWAP1 DUP4 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH3 0x234 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP4 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH3 0x249 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP3 DUP2 MSTORE POP DUP3 DUP2 MSTORE POP POP POP PUSH32 0xABB92614F53337043B55DC996A83EBB09ADCE78EC336CA188EA02180B61D1C14 DUP3 DUP3 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x2C3 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x2A9 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x304 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x2EA JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND ISZERO ISZERO SWAP3 POP PUSH3 0x381 SWAP2 POP POP JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F206164647265737320696E76656E746F727900000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT PUSH1 0x60 SWAP2 SWAP1 SWAP2 SHL AND PUSH1 0xC0 MSTORE POP POP POP PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH1 0x60 SHR PUSH2 0x32A6 PUSH3 0x3D3 PUSH1 0x0 CODECOPY DUP1 PUSH2 0xDB8 MSTORE POP DUP1 PUSH2 0x12E6 MSTORE DUP1 PUSH2 0x1EB1 MSTORE POP DUP1 PUSH2 0x1259 MSTORE DUP1 PUSH2 0x1FBE MSTORE POP PUSH2 0x32A6 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1AC JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6B8F9C43 GT PUSH2 0xEC JUMPI DUP1 PUSH4 0xA963B257 GT PUSH2 0x8A JUMPI DUP1 PUSH4 0xCF3AE77B GT PUSH2 0x64 JUMPI DUP1 PUSH4 0xCF3AE77B EQ PUSH2 0xA3B JUMPI DUP1 PUSH4 0xD55F9273 EQ PUSH2 0xAEB JUMPI DUP1 PUSH4 0xF21F537D EQ PUSH2 0xB00 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0xB15 JUMPI PUSH2 0x1AC JUMP JUMPDEST DUP1 PUSH4 0xA963B257 EQ PUSH2 0x97C JUMPI DUP1 PUSH4 0xBE9A6555 EQ PUSH2 0xA11 JUMPI DUP1 PUSH4 0xC4E41B22 EQ PUSH2 0xA26 JUMPI PUSH2 0x1AC JUMP JUMPDEST DUP1 PUSH4 0x85B3CFAC GT PUSH2 0xC6 JUMPI DUP1 PUSH4 0x85B3CFAC EQ PUSH2 0x8E9 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x928 JUMPI DUP1 PUSH4 0x9E049545 EQ PUSH2 0x93D JUMPI DUP1 PUSH4 0x9EAD7222 EQ PUSH2 0x952 JUMPI PUSH2 0x1AC JUMP JUMPDEST DUP1 PUSH4 0x6B8F9C43 EQ PUSH2 0x88C JUMPI DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x8BF JUMPI DUP1 PUSH4 0x8488BB4E EQ PUSH2 0x8D4 JUMPI PUSH2 0x1AC JUMP JUMPDEST DUP1 PUSH4 0x3628BD93 GT PUSH2 0x159 JUMPI DUP1 PUSH4 0x5C4FAFC7 GT PUSH2 0x133 JUMPI DUP1 PUSH4 0x5C4FAFC7 EQ PUSH2 0x6FE JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x713 JUMPI DUP1 PUSH4 0x5E6E9F70 EQ PUSH2 0x73C JUMPI DUP1 PUSH4 0x61BD3851 EQ PUSH2 0x877 JUMPI PUSH2 0x1AC JUMP JUMPDEST DUP1 PUSH4 0x3628BD93 EQ PUSH2 0x6AD JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x6D4 JUMPI DUP1 PUSH4 0x451B31A2 EQ PUSH2 0x6E9 JUMPI PUSH2 0x1AC JUMP JUMPDEST DUP1 PUSH4 0x23F927C9 GT PUSH2 0x18A JUMPI DUP1 PUSH4 0x23F927C9 EQ PUSH2 0x42C JUMPI DUP1 PUSH4 0x273CBAA0 EQ PUSH2 0x560 JUMPI DUP1 PUSH4 0x2A8A45BC EQ PUSH2 0x5C5 JUMPI PUSH2 0x1AC JUMP JUMPDEST DUP1 PUSH4 0x1323B066 EQ PUSH2 0x1B1 JUMPI DUP1 PUSH4 0x15469171 EQ PUSH2 0x2AE JUMPI DUP1 PUSH4 0x15D52A5C EQ PUSH2 0x3FB JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x253 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x1D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x214 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x226 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x248 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0xB48 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x299 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x281 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP4 POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3F9 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH2 0x100 DUP2 LT ISZERO PUSH2 0x2D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x312 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x324 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x346 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 DUP3 CALLDATALOAD SWAP3 PUSH1 0x40 DUP2 ADD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x368 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x37A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x39C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH1 0x20 DUP2 ADD SWAP1 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x3BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x3CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x3EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0xC3D JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x407 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x410 PUSH2 0xDB6 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x438 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3F9 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x44F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x46A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x47C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x49E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 SWAP5 SWAP4 PUSH1 0x20 DUP2 ADD SWAP4 POP CALLDATALOAD SWAP2 POP POP PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x4EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x500 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x522 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0xDDA SWAP5 POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x56C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x575 PUSH2 0x105A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 DUP2 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x5B1 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x599 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5EF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x5E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x10B2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x654 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x63C JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x693 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x67B JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP9 POP POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x6C2 PUSH2 0x1257 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3F9 PUSH2 0x127B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x6C2 PUSH2 0x12E4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x70A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x410 PUSH2 0x1308 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x71F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x728 PUSH2 0x1320 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x748 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3F9 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x75F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x781 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x793 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x7B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 SWAP5 SWAP4 PUSH1 0x20 DUP2 ADD SWAP4 POP CALLDATALOAD SWAP2 POP POP PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x805 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x817 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x839 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0x1329 SWAP5 POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x883 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x575 PUSH2 0x1506 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x898 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3F9 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x8AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x155F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3F9 PUSH2 0x162C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x410 PUSH2 0x1693 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3F9 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x90C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x16A2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x934 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x410 PUSH2 0x16B7 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x949 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x6C2 PUSH2 0x16C6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x95E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x6C2 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x975 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x16CC JUMP JUMPDEST PUSH2 0x3F9 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x992 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x9D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x9E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xA06 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x16ED JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA1D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3F9 PUSH2 0x17CA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA32 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x6C2 PUSH2 0x17DD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA47 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3F9 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA5E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xA79 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xA8B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xAAD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0x17E3 SWAP5 POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xAF7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x6C2 PUSH2 0x1937 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xB0C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x6C2 PUSH2 0x193D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xB21 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3F9 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xB38 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1943 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x2 SLOAD PUSH1 0x0 EQ ISZERO PUSH2 0xBA4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0xBAC PUSH2 0x19A9 JUMP JUMPDEST PUSH2 0xBB4 PUSH2 0x31DE JUMP JUMPDEST PUSH2 0xBBC PUSH2 0x1A01 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP10 DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP10 AND PUSH1 0x40 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD DUP10 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP9 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x1F DUP8 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD SWAP1 SWAP2 MSTORE DUP6 DUP2 MSTORE SWAP1 DUP7 SWAP1 DUP7 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP POP PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0xC2D DUP2 PUSH2 0x1A05 JUMP JUMPDEST SWAP3 POP SWAP3 POP POP SWAP7 POP SWAP7 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0xC45 PUSH2 0x31DE JUMP JUMPDEST PUSH2 0xC4D PUSH2 0x1A01 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP13 DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP13 AND PUSH1 0x40 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD DUP13 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP12 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x1F DUP11 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD SWAP1 SWAP2 MSTORE DUP9 DUP2 MSTORE SWAP1 DUP10 SWAP1 DUP10 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP POP PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP8 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP7 DUP3 MSTORE SWAP1 SWAP2 DUP8 SWAP2 DUP8 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP POP PUSH1 0xE0 DUP3 ADD MSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP6 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP5 DUP3 MSTORE SWAP1 SWAP2 DUP6 SWAP2 DUP6 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP POP PUSH2 0x100 DUP3 ADD MSTORE PUSH2 0xD32 DUP2 PUSH2 0x1A2C JUMP JUMPDEST PUSH2 0x120 DUP2 ADD MLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD PUSH32 0xF94E453C69AFA2E43777EC90F3A26BCFC9AC74969E1C25A72B056B9F81C93B33 SWAP5 SWAP4 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP2 DUP7 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xD95 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xD7D JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0xDE2 PUSH2 0x1ADD JUMP JUMPDEST PUSH2 0xDF2 PUSH2 0xDED PUSH2 0x1A01 JUMP JUMPDEST PUSH2 0x1B34 JUMP JUMPDEST PUSH1 0x8 SLOAD DUP1 PUSH2 0xE47 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20656D70747920746F6B656E730000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP3 MLOAD DUP1 PUSH2 0xE9B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20656D70747920696E646578657300000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP3 MLOAD DUP2 DUP2 EQ PUSH2 0xEF1 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E636F6E73697374656E742061727261797300000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x0 JUMPDEST DUP4 DUP2 EQ PUSH2 0x1051 JUMPI PUSH1 0x0 DUP8 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xF0C JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP DUP3 DUP2 LT ISZERO PUSH2 0xF6B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E76616C696420696E64657800000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP6 DUP2 LT PUSH2 0xFBF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E646578206F75742D6F662D626F756E647300000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP8 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0xFCD JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP DUP1 PUSH1 0x0 EQ ISZERO PUSH2 0x102D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F20737570706C79000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x8 DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x103B JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SSTORE POP POP PUSH1 0x1 ADD PUSH2 0xEF7 JUMP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x8 DUP1 SLOAD DUP1 PUSH1 0x20 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 DUP1 ISZERO PUSH2 0x10A8 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x1094 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP2 SWAP1 DUP2 SWAP1 DUP2 SWAP1 PUSH1 0x60 SWAP1 DUP2 SWAP1 DUP4 PUSH2 0x10D8 PUSH1 0x4 DUP4 ADD PUSH2 0x1BFB JUMP JUMPDEST DUP3 SLOAD SWAP9 POP SWAP1 POP DUP8 PUSH2 0x1130 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7500000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x3 DUP5 ADD SLOAD SWAP2 SWAP9 POP SWAP7 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP5 POP DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x1166 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1190 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP4 POP DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x11AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x11D4 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x124B JUMPI PUSH1 0x0 DUP1 PUSH2 0x11F2 PUSH1 0x4 DUP7 ADD DUP5 PUSH2 0x1BFF JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP2 PUSH1 0x0 SHR DUP8 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x1206 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP DUP1 PUSH1 0x0 SHR DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x1236 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP POP PUSH1 0x1 ADD PUSH2 0x11DA JUMP JUMPDEST POP POP POP SWAP2 SWAP4 SWAP6 POP SWAP2 SWAP4 SWAP6 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x12CF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x12DA PUSH2 0xDED PUSH2 0x1A01 JUMP JUMPDEST PUSH2 0x12E2 PUSH2 0x1C90 JUMP JUMPDEST JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x1334 PUSH2 0xDED PUSH2 0x1A01 JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD DUP2 EQ PUSH2 0x138B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E636F6E73697374656E742061727261797300000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0x13EC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7500000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP2 ADD DUP3 PUSH2 0x1437 JUMPI PUSH1 0x0 PUSH2 0x1400 DUP3 PUSH2 0x1BFB JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1430 JUMPI PUSH1 0x0 PUSH2 0x1419 DUP5 DUP3 PUSH2 0x1BFF JUMP JUMPDEST POP SWAP1 POP PUSH2 0x1426 DUP5 DUP3 PUSH2 0x1CE8 JUMP JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x1405 JUMP JUMPDEST POP POP PUSH2 0x1442 JUMP JUMPDEST PUSH2 0x1442 DUP2 DUP7 DUP7 PUSH2 0x1DC8 JUMP JUMPDEST DUP6 PUSH32 0xCB3FE5489E0CD43D0F4A33D1E09A4A0463A03D0D38F56165530854E5540DB143 DUP7 DUP7 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x14AA JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1492 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x14E9 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x14D1 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x4 PUSH1 0x0 ADD DUP1 SLOAD DUP1 PUSH1 0x20 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 DUP1 ISZERO PUSH2 0x10A8 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x1094 JUMPI POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x156A PUSH2 0xDED PUSH2 0x1A01 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x15C5 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061796F75743A207A65726F2061646472657373000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 SWAP1 SWAP2 OR SWAP2 DUP3 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD SWAP3 SWAP1 SWAP2 AND DUP3 MSTORE MLOAD PUSH32 0xDD880D24A789958A6398C99C2E54CE31BC10A638CBC42F7DD34285479AE0F855 SWAP2 PUSH1 0x20 SWAP1 DUP3 SWAP1 SUB ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x1680 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x168B PUSH2 0xDED PUSH2 0x1A01 JUMP JUMPDEST PUSH2 0x12E2 PUSH2 0x1F2C JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH2 0x16B2 SWAP1 DUP5 SWAP1 DUP5 DUP5 PUSH2 0x1F6A JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 NOT DUP2 JUMP JUMPDEST PUSH1 0x8 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x16DC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x1741 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x1749 PUSH2 0x19A9 JUMP JUMPDEST PUSH2 0x1751 PUSH2 0x31DE JUMP JUMPDEST PUSH2 0x1759 PUSH2 0x1A01 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP8 DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP8 AND PUSH1 0x40 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD DUP8 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP7 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x1F DUP6 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD SWAP1 SWAP2 MSTORE DUP4 DUP2 MSTORE SWAP1 DUP5 SWAP1 DUP5 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP POP PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x1051 DUP2 PUSH2 0x21A1 JUMP JUMPDEST PUSH2 0x17D5 PUSH2 0xDED PUSH2 0x1A01 JUMP JUMPDEST PUSH2 0x12DA PUSH2 0x21CE JUMP JUMPDEST PUSH1 0x8 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x17EE PUSH2 0xDED PUSH2 0x1A01 JUMP JUMPDEST DUP1 MLOAD DUP1 PUSH2 0x1842 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20656D70747920746F6B656E730000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 EQ PUSH2 0x18F7 JUMPI PUSH1 0x0 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x185A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP DUP1 PUSH1 0x0 EQ ISZERO PUSH2 0x18BA JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F20737570706C79000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x8 DUP1 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP4 SSTORE PUSH1 0x0 SWAP3 SWAP1 SWAP3 MSTORE PUSH32 0xF3F7A9FE364FAAB93B216DA50A3214154F22A0A2B415B23A84C8169E8B636EE3 ADD SWAP2 SWAP1 SWAP2 SSTORE ADD PUSH2 0x1845 JUMP JUMPDEST POP PUSH2 0x1902 PUSH1 0x4 PUSH2 0x1BFB JUMP JUMPDEST ISZERO PUSH2 0x1933 JUMPI PUSH1 0x0 PUSH2 0x1914 PUSH1 0x4 DUP3 PUSH2 0x2250 JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD DUP4 ADD DUP2 SSTORE PUSH1 0x1 ADD DUP1 SLOAD DUP4 ADD SWAP1 SSTORE POP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x7 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x194E PUSH2 0xDED PUSH2 0x1A01 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 DUP3 OR DUP1 DUP5 SSTORE PUSH1 0x40 MLOAD SWAP3 SWAP4 SWAP2 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x12E2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061757361626C653A2070617573656400000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x1A12 DUP4 PUSH2 0x22CA JUMP JUMPDEST PUSH2 0x1A1B DUP4 PUSH2 0x2574 JUMP JUMPDEST POP POP PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xE0 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP2 JUMP JUMPDEST PUSH2 0x1A35 DUP2 PUSH2 0x2611 JUMP JUMPDEST DUP1 PUSH1 0x80 ADD MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x1A50 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1A7A JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP PUSH2 0x120 DUP3 ADD MSTORE PUSH1 0x7 SLOAD PUSH1 0x0 SWAP1 JUMPDEST DUP3 PUSH1 0x80 ADD MLOAD DUP3 EQ PUSH2 0x1AD6 JUMPI PUSH1 0x8 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x1AA0 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD PUSH1 0x0 SHL DUP4 PUSH2 0x120 ADD MLOAD DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1ABF JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1A88 JUMP JUMPDEST PUSH1 0x7 SSTORE POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND PUSH2 0x12E2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061757361626C653A206E6F7420706175736564000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8DA5CB5B 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 PUSH2 0x1B6D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1B81 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1B97 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ PUSH2 0x1BF8 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6F7420746865206F776E657200000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP JUMP JUMPDEST SLOAD SWAP1 JUMP JUMPDEST DUP2 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP4 LT PUSH2 0x1C59 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x456E756D4D61703A20696E646578206F7574206F6620626F756E647300000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 PUSH1 0x0 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x1C6A JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD SWAP1 POP DUP1 PUSH1 0x0 ADD SLOAD DUP2 PUSH1 0x1 ADD SLOAD SWAP3 POP SWAP3 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH2 0x1C98 PUSH2 0x1ADD JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA PUSH2 0x1CCB PUSH2 0x1A01 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0x1DBC JUMPI DUP4 SLOAD PUSH1 0x0 NOT DUP1 DUP4 ADD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x0 SWAP1 DUP8 SWAP1 DUP4 SWAP1 DUP2 LT PUSH2 0x1D1B JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD SWAP1 POP DUP1 DUP8 PUSH1 0x0 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x1D3B JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 DUP5 SLOAD PUSH1 0x2 SWAP1 SWAP4 MUL ADD SWAP2 DUP3 SSTORE PUSH1 0x1 SWAP4 DUP5 ADD SLOAD SWAP2 DUP5 ADD SWAP2 SWAP1 SWAP2 SSTORE DUP4 SLOAD DUP3 MSTORE DUP10 DUP4 ADD SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP1 DUP5 ADD SWAP1 SSTORE DUP7 SLOAD DUP8 SWAP1 DUP1 PUSH2 0x1D7A JUMPI INVALID JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 PUSH1 0x2 PUSH1 0x0 NOT SWAP1 SWAP5 ADD SWAP4 DUP5 MUL ADD DUP3 DUP2 SSTORE PUSH1 0x1 SWAP1 DUP2 ADD DUP4 SWAP1 SSTORE SWAP3 SWAP1 SWAP4 SSTORE DUP9 DUP2 MSTORE DUP10 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x40 DUP3 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE SWAP5 POP PUSH2 0x1DC2 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SWAP2 POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x1EAE JUMPI PUSH1 0x0 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1DE2 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1E54 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F206164647265737320746F6B656E0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1E62 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP DUP1 PUSH1 0x0 EQ ISZERO PUSH2 0x1E8E JUMPI PUSH2 0x1E88 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x1CE8 JUMP JUMPDEST POP PUSH2 0x1EA4 JUMP JUMPDEST PUSH2 0x1EA2 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP4 PUSH2 0x265C JUMP JUMPDEST POP JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x1DCB JUMP JUMPDEST POP PUSH32 0x0 PUSH2 0x1ED9 DUP5 PUSH2 0x1BFB JUMP JUMPDEST GT ISZERO PUSH2 0x16B2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20746F6F206D616E7920746F6B656E730000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x1F34 PUSH2 0x19A9 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH2 0x1CCB PUSH2 0x1A01 JUMP JUMPDEST DUP3 PUSH2 0x1FBC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F20737570706C79000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH2 0x1FE7 PUSH1 0x4 PUSH2 0x1BFB JUMP JUMPDEST LT PUSH2 0x2039 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20746F6F206D616E7920736B757300000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x2044 PUSH1 0x4 DUP6 PUSH2 0x26F6 JUMP JUMPDEST PUSH2 0x2095 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20736B7520616C7265616479206372656174656400000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO PUSH2 0x2107 JUMPI PUSH2 0x20B6 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2740 JUMP JUMPDEST PUSH2 0x2107 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D636F6E74726163742072656365697665720000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP6 DUP2 SSTORE PUSH1 0x1 DUP2 ADD DUP7 SWAP1 SSTORE PUSH1 0x2 DUP2 ADD DUP6 SWAP1 SSTORE PUSH1 0x3 DUP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT SWAP1 SWAP2 AND DUP2 OR SWAP1 SWAP2 SSTORE DUP4 MLOAD DUP9 DUP2 MSTORE SWAP3 DUP4 ADD DUP8 SWAP1 MSTORE DUP3 DUP5 ADD DUP7 SWAP1 MSTORE PUSH1 0x60 DUP4 ADD MSTORE SWAP2 MLOAD PUSH32 0x38BD4AABCE684540CD61351B91F2F5FACF9D6963934347E25AAB93D87AE7AC14 SWAP2 DUP2 SWAP1 SUB PUSH1 0x80 ADD SWAP1 LOG1 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x21AA DUP2 PUSH2 0x22CA JUMP JUMPDEST PUSH2 0x21B3 DUP2 PUSH2 0x2574 JUMP JUMPDEST PUSH2 0x21BC DUP2 PUSH2 0x2746 JUMP JUMPDEST PUSH2 0x21C5 DUP2 PUSH2 0x1A2C JUMP JUMPDEST PUSH2 0x1BF8 DUP2 PUSH2 0x2895 JUMP JUMPDEST PUSH1 0x2 SLOAD ISZERO PUSH2 0x2223 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A20737461727465640000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST TIMESTAMP PUSH1 0x2 SSTORE PUSH32 0x27029695AA5F602A4EE81F4C32DFA86E562F200A17966496F3A7C3F2EC0F9417 PUSH2 0x1CCB PUSH2 0x1A01 JUMP JUMPDEST DUP2 SLOAD PUSH1 0x0 SWAP1 DUP3 LT PUSH2 0x22A8 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x456E756D5365743A20696E646578206F7574206F6620626F756E647300000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP3 PUSH1 0x0 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x22B7 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2329 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F206164647265737320726563697069656E7400000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2388 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F206164647265737320746F6B656E0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x80 DUP2 ADD MLOAD PUSH2 0x23DE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F207175616E7469747920707572636861736500000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0x2444 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7500000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x80 ADD MLOAD DUP2 PUSH1 0x2 ADD SLOAD LT ISZERO PUSH2 0x24A1 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A2061626F7665206D6178207175616E746974790000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 SLOAD PUSH1 0x0 NOT EQ PUSH2 0x2508 JUMPI DUP2 PUSH1 0x80 ADD MLOAD DUP2 PUSH1 0x1 ADD SLOAD LT ISZERO PUSH2 0x2508 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E73756666696369656E7420737570706C7900000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2523 PUSH1 0x4 DUP4 ADD DUP3 PUSH2 0x2D7A JUMP JUMPDEST PUSH2 0x16B2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7520746F6B656E00000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0x25DA JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20756E737570706F7274656420534B550000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP2 ADD PUSH1 0x0 PUSH2 0x25EA DUP5 DUP4 PUSH2 0x2D92 JUMP JUMPDEST SWAP1 POP PUSH2 0x2603 DUP5 PUSH1 0x80 ADD MLOAD DUP3 PUSH2 0x2E02 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0xC0 SWAP1 SWAP5 ADD SWAP4 SWAP1 SWAP4 MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x0 NOT EQ PUSH2 0x1933 JUMPI PUSH1 0x80 DUP3 ADD MLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH2 0x2641 SWAP2 PUSH2 0x2E5B JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x1 DUP5 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 PUSH2 0x26C1 JUMPI POP POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE DUP4 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD DUP5 DUP2 MSTORE DUP7 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP10 SSTORE PUSH1 0x0 DUP10 DUP2 MSTORE DUP5 DUP2 KECCAK256 SWAP6 MLOAD PUSH1 0x2 SWAP1 SWAP4 MUL SWAP1 SWAP6 ADD SWAP2 DUP3 SSTORE SWAP2 MLOAD SWAP1 DUP3 ADD SSTORE DUP7 SLOAD DUP7 DUP5 MSTORE DUP2 DUP9 ADD SWAP1 SWAP3 MSTORE SWAP3 SWAP1 SWAP2 KECCAK256 SSTORE PUSH2 0x26EF JUMP JUMPDEST DUP3 DUP6 PUSH1 0x0 ADD PUSH1 0x1 DUP4 SUB DUP2 SLOAD DUP2 LT PUSH2 0x26D4 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD PUSH1 0x1 ADD DUP2 SWAP1 SSTORE POP PUSH1 0x0 SWAP2 POP POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2702 DUP4 DUP4 PUSH2 0x2D7A JUMP JUMPDEST PUSH2 0x2738 JUMPI POP DUP2 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP5 SSTORE PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 SWAP1 SWAP4 ADD DUP5 SWAP1 SSTORE DUP5 SLOAD DUP5 DUP3 MSTORE DUP3 DUP7 ADD SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0x1DC2 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x1DC2 JUMP JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x2869 JUMPI DUP1 PUSH1 0xC0 ADD MLOAD CALLVALUE LT ISZERO PUSH2 0x27C8 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E73756666696369656E742045544800000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xC0 DUP3 ADD MLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 DUP2 ISZERO PUSH2 0x8FC MUL SWAP2 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x2806 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x0 PUSH2 0x2820 DUP3 PUSH1 0xC0 ADD MLOAD CALLVALUE PUSH2 0x2E5B SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x2863 JUMPI DUP2 MLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 DUP3 ISZERO PUSH2 0x8FC MUL SWAP1 DUP4 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x2861 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP JUMPDEST POP PUSH2 0x1BF8 JUMP JUMPDEST PUSH2 0x1BF8 PUSH2 0x2874 PUSH2 0x1A01 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xC0 DUP5 ADD MLOAD PUSH1 0x40 DUP6 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP4 SWAP3 AND SWAP1 PUSH2 0x2EB8 JUMP JUMPDEST DUP1 PUSH1 0x60 ADD MLOAD DUP2 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x29F844483CA6B10B5C0611D039AFC15CE8F6380E905307B381C3A8EE4E90E11E DUP5 PUSH1 0x20 ADD MLOAD DUP6 PUSH1 0x80 ADD MLOAD DUP7 PUSH1 0xA0 ADD MLOAD DUP8 PUSH1 0xC0 ADD MLOAD DUP9 PUSH1 0xE0 ADD MLOAD DUP10 PUSH2 0x100 ADD MLOAD DUP11 PUSH2 0x120 ADD MLOAD PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP5 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x292C JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2914 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x295C JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2944 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x298C JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2974 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP4 POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP7 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2A03 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x29EB JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x2A30 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP DUP4 DUP2 SUB DUP3 MSTORE DUP5 MLOAD DUP2 MSTORE DUP5 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP7 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2A63 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2A4B JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x2A90 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP8 POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 ISZERO PUSH2 0x1933 JUMPI PUSH4 0x61ECEAE8 PUSH1 0xE0 SHL PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x61ECEAE8 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD DUP7 PUSH1 0x40 ADD MLOAD DUP8 PUSH1 0x60 ADD MLOAD DUP9 PUSH1 0x80 ADD MLOAD DUP10 PUSH1 0xA0 ADD MLOAD DUP11 PUSH1 0xC0 ADD MLOAD DUP12 PUSH1 0xE0 ADD MLOAD DUP13 PUSH2 0x100 ADD MLOAD DUP14 PUSH2 0x120 ADD MLOAD PUSH1 0x40 MLOAD DUP12 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP6 DUP2 SUB DUP6 MSTORE DUP11 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2BC9 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2BB1 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x2BF6 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP DUP6 DUP2 SUB DUP5 MSTORE DUP9 MLOAD DUP2 MSTORE DUP9 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP1 DUP12 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2C2B JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2C13 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP6 DUP2 SUB DUP4 MSTORE DUP8 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2C6A JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2C52 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP6 DUP2 SUB DUP3 MSTORE DUP7 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2CA9 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2C91 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP15 POP POP POP POP POP POP POP POP POP POP POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2CDA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2CEE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2D04 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND EQ PUSH2 0x1933 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F74696669636174696F6E2072656675736564000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x0 SWAP1 PUSH2 0x2DAE SWAP1 DUP4 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2F46 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x1DC2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20756E737570706F72746564207061796D656E7420746F6B656E00 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x2E11 JUMPI POP PUSH1 0x0 PUSH2 0x1DC2 JUMP JUMPDEST DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 PUSH2 0x2E1E JUMPI INVALID JUMPDEST DIV EQ PUSH2 0x26EF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x3250 PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP3 GT ISZERO PUSH2 0x2EB2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x24 DUP4 ADD MSTORE DUP5 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x84 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 OR SWAP1 MSTORE PUSH2 0x2F40 SWAP1 DUP6 SWAP1 PUSH2 0x2FD6 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 PUSH2 0x2FA9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x456E756D4D61703A206E6F6E6578697374656E74206B65790000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP4 PUSH1 0x0 ADD PUSH1 0x1 DUP3 SUB DUP2 SLOAD DUP2 LT PUSH2 0x2FBB JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD PUSH1 0x1 ADD SLOAD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 PUSH2 0x2FE9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x2740 JUMP JUMPDEST PUSH2 0x303A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433230577261707065723A206E6F6E2D636F6E7472616374000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x3095 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x3058 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x30F7 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x30FC JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 ISZERO PUSH2 0x317B JUMPI DUP1 MLOAD ISZERO PUSH2 0x3176 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3123 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x3176 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433230577261707065723A206F7065726174696F6E206661696C65640000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x31D7 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x31CE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433230577261707065723A206F7065726174696F6E206661696C65640000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 MLOAD DUP1 DUP3 PUSH1 0x20 ADD REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x140 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP1 NOT AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE POP SWAP1 JUMP INVALID MSTORE8 PUSH2 0x6665 0x4D PUSH2 0x7468 GASPRICE KECCAK256 PUSH14 0x756C7469706C69636174696F6E20 PUSH16 0x766572666C6F77A26469706673582212 KECCAK256 0x4F 0x4F 0x25 0xD4 CODECOPY PUSH8 0xB0CCBC0B225A569C CODECOPY SAR DUP5 0xE5 SWAP11 SWAP14 0xA7 0x25 0xCF PUSH7 0x6C69A981358F0A DIFFICULTY PUSH5 0x736F6C6343 STOP SMOD MOD STOP CALLER ","sourceMap":"440:3685:13:-:0;;;993:196;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;993:196:13;;;;;;;;;;;960:6:1;:15;;-1:-1:-1;;;;;;960:15:1;2518:10:32;960:15:1;;;;;990:40;;993:196:13;;;;;;;;;;;;;;1225:1:25;;993:196:13;;;;1225:1:25;;993:196:13;;1225:1:25;;2518:10:32;;993:196:13;;2518:10:32;;;;990:40:1;;960:6;;990:40;-1:-1:-1;;;;;;512:27:8;::::1;504:60;;;::::0;;-1:-1:-1;;;504:60:8;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;574:12;:28:::0;;-1:-1:-1;;;;;574:28:8;::::1;-1:-1:-1::0;;;;;;574:28:8;;::::1;::::0;::::1;::::0;;;617:30:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;-1:-1:-1::0;;543:6:5;:16;;-1:-1:-1;;543:16:5;;;;;;;;;;2570:28:32::2;::::0;;;2608:44:::2;::::0;;;2687:16:::2;::::0;;2701:1:::2;2687:16:::0;;;;;::::2;::::0;;-1:-1:-1;;2687:16:32::2;::::0;::::2;::::0;;::::2;::::0;::::2;-1:-1:-1::0;;2739:16:32::2;::::0;;2753:1:::2;2739:16:::0;;;;;::::2;::::0;;2662:41;;-1:-1:-1;2713:23:32::2;::::0;2739:16;;-1:-1:-1;2753:1:32;2739:16:::2;::::0;::::2;::::0;;::::2;::::0;::::2;-1:-1:-1::0;;2766:8:32;;2713:42;;-1:-1:-1;;;;2765:66:32;1751:44:::2;::::0;-1:-1:-1;2766:5:32;;2803:27:::2;::::0;2766:8:::2;;;;;;;;;2776:6;2783:1;2776:9;;;;;;;;;;;;;2765:66;;;::::0;::::2;;;::::0;::::2;;-1:-1:-1::0;;2886:34:32::2;;-1:-1:-1::0;;;2841:80:32::2;2842:5;2848:1;2842:8;;;;;;;;;;;;;2852:6;2859:1;2852:9;;;;;;;;;;;;;2841:80;;;::::0;::::2;;;::::0;::::2;;2936:26;2948:5;2955:6;2936:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::2;::::0;;;::::2;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::2;::::0;;;::::2;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;;;;;;1307:24:25;::::1;::::0;::::1;::::0;-1:-1:-1;1299:65:25::1;::::0;-1:-1:-1;;1299:65:25::1;;::::0;;-1:-1:-1;;;1299:65:25;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;;;;1374:22:25::1;::::0;;;;;::::1;::::0;-1:-1:-1;;;440:3685:13;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"generatedSources":[],"immutableReferences":{"4261":[{"length":32,"start":3512}],"5785":[{"length":32,"start":4697},{"length":32,"start":8126}],"5787":[{"length":32,"start":4838},{"length":32,"start":7857}]},"linkReferences":{},"object":"6080604052600436106101ac5760003560e01c80636b8f9c43116100ec578063a963b2571161008a578063cf3ae77b11610064578063cf3ae77b14610a3b578063d55f927314610aeb578063f21f537d14610b00578063f2fde38b14610b15576101ac565b8063a963b2571461097c578063be9a655514610a11578063c4e41b2214610a26576101ac565b806385b3cfac116100c657806385b3cfac146108e95780638da5cb5b146109285780639e0495451461093d5780639ead722214610952576101ac565b80636b8f9c431461088c5780638456cb59146108bf5780638488bb4e146108d4576101ac565b80633628bd93116101595780635c4fafc7116101335780635c4fafc7146106fe5780635c975abb146107135780635e6e9f701461073c57806361bd385114610877576101ac565b80633628bd93146106ad5780633f4ba83a146106d4578063451b31a2146106e9576101ac565b806323f927c91161018a57806323f927c91461042c578063273cbaa0146105605780632a8a45bc146105c5576101ac565b80631323b066146101b157806315469171146102ae57806315d52a5c146103fb575b600080fd5b3480156101bd57600080fd5b50610253600480360360a08110156101d457600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a08101608082013564010000000081111561021457600080fd5b82018360208201111561022657600080fd5b8035906020019184600183028401116401000000008311171561024857600080fd5b509092509050610b48565b6040518083815260200180602001828103825283818151815260200191508051906020019060200280838360005b83811015610299578181015183820152602001610281565b50505050905001935050505060405180910390f35b3480156102ba57600080fd5b506103f960048036036101008110156102d257600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a08101608082013564010000000081111561031257600080fd5b82018360208201111561032457600080fd5b8035906020019184600183028401116401000000008311171561034657600080fd5b9193909282359260408101906020013564010000000081111561036857600080fd5b82018360208201111561037a57600080fd5b8035906020019184602083028401116401000000008311171561039c57600080fd5b9193909290916020810190356401000000008111156103ba57600080fd5b8201836020820111156103cc57600080fd5b803590602001918460208302840111640100000000831117156103ee57600080fd5b509092509050610c3d565b005b34801561040757600080fd5b50610410610db6565b604080516001600160a01b039092168252519081900360200190f35b34801561043857600080fd5b506103f96004803603604081101561044f57600080fd5b81019060208101813564010000000081111561046a57600080fd5b82018360208201111561047c57600080fd5b8035906020019184602083028401116401000000008311171561049e57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092959493602081019350359150506401000000008111156104ee57600080fd5b82018360208201111561050057600080fd5b8035906020019184602083028401116401000000008311171561052257600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610dda945050505050565b34801561056c57600080fd5b5061057561105a565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156105b1578181015183820152602001610599565b505050509050019250505060405180910390f35b3480156105d157600080fd5b506105ef600480360360208110156105e857600080fd5b50356110b2565b60405180878152602001868152602001858152602001846001600160a01b031681526020018060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561065457818101518382015260200161063c565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561069357818101518382015260200161067b565b505050509050019850505050505050505060405180910390f35b3480156106b957600080fd5b506106c2611257565b60408051918252519081900360200190f35b3480156106e057600080fd5b506103f961127b565b3480156106f557600080fd5b506106c26112e4565b34801561070a57600080fd5b50610410611308565b34801561071f57600080fd5b50610728611320565b604080519115158252519081900360200190f35b34801561074857600080fd5b506103f96004803603606081101561075f57600080fd5b8135919081019060408101602082013564010000000081111561078157600080fd5b82018360208201111561079357600080fd5b803590602001918460208302840111640100000000831117156107b557600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561080557600080fd5b82018360208201111561081757600080fd5b8035906020019184602083028401116401000000008311171561083957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611329945050505050565b34801561088357600080fd5b50610575611506565b34801561089857600080fd5b506103f9600480360360208110156108af57600080fd5b50356001600160a01b031661155f565b3480156108cb57600080fd5b506103f961162c565b3480156108e057600080fd5b50610410611693565b3480156108f557600080fd5b506103f96004803603606081101561090c57600080fd5b50803590602081013590604001356001600160a01b03166116a2565b34801561093457600080fd5b506104106116b7565b34801561094957600080fd5b506106c26116c6565b34801561095e57600080fd5b506106c26004803603602081101561097557600080fd5b50356116cc565b6103f9600480360360a081101561099257600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a0810160808201356401000000008111156109d257600080fd5b8201836020820111156109e457600080fd5b80359060200191846001830284011164010000000083111715610a0657600080fd5b5090925090506116ed565b348015610a1d57600080fd5b506103f96117ca565b348015610a3257600080fd5b506106c26117dd565b348015610a4757600080fd5b506103f960048036036020811015610a5e57600080fd5b810190602081018135640100000000811115610a7957600080fd5b820183602082011115610a8b57600080fd5b80359060200191846020830284011164010000000083111715610aad57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506117e3945050505050565b348015610af757600080fd5b506106c2611937565b348015610b0c57600080fd5b506106c261193d565b348015610b2157600080fd5b506103f960048036036020811015610b3857600080fd5b50356001600160a01b0316611943565b6000606060025460001415610ba4576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b610bac6119a9565b610bb46131de565b610bbc611a01565b6001600160a01b03908116825289811660208084019190915290891660408084019190915260608301899052608083018890528051601f870183900483028101830190915285815290869086908190840183828082843760009201919091525050505060a0820152610c2d81611a05565b9250925050965096945050505050565b610c456131de565b610c4d611a01565b6001600160a01b0390811682528c8116602080840191909152908c16604080840191909152606083018c9052608083018b90528051601f8a0183900483028101830190915288815290899089908190840183828082843760009201919091525050505060a082015260c081018690526040805160208087028281018201909352868252909187918791829185019084908082843760009201919091525050505060e082015260408051602080850282810182019093528482529091859185918291850190849080828437600092019190915250505050610100820152610d3281611a2c565b61012081015160408051602080825283518183015283517ff94e453c69afa2e43777ec90f3a26bcfc9ac74969e1c25a72b056b9f81c93b339493839290830191818601910280838360005b83811015610d95578181015183820152602001610d7d565b505050509050019250505060405180910390a1505050505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b610de2611add565b610df2610ded611a01565b611b34565b60085480610e47576040805162461bcd60e51b815260206004820152601260248201527f53616c653a20656d70747920746f6b656e730000000000000000000000000000604482015290519081900360640190fd5b825180610e9b576040805162461bcd60e51b815260206004820152601360248201527f53616c653a20656d70747920696e646578657300000000000000000000000000604482015290519081900360640190fd5b8251818114610ef1576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20696e636f6e73697374656e742061727261797300000000000000604482015290519081900360640190fd5b60075460005b838114611051576000878281518110610f0c57fe5b6020026020010151905082811015610f6b576040805162461bcd60e51b815260206004820152601360248201527f53616c653a20696e76616c696420696e64657800000000000000000000000000604482015290519081900360640190fd5b858110610fbf576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20696e646578206f75742d6f662d626f756e647300000000000000604482015290519081900360640190fd5b6000878381518110610fcd57fe5b60200260200101519050806000141561102d576040805162461bcd60e51b815260206004820152601160248201527f53616c653a207a65726f20737570706c79000000000000000000000000000000604482015290519081900360640190fd5b806008838154811061103b57fe5b6000918252602090912001555050600101610ef7565b50505050505050565b606060088054806020026020016040519081016040528092919081815260200182805480156110a857602002820191906000526020600020905b815481526020019060010190808311611094575b5050505050905090565b60008181526006602052604081208190819081906060908190836110d860048301611bfb565b82549850905087611130576040805162461bcd60e51b815260206004820152601660248201527f53616c653a206e6f6e2d6578697374656e7420736b7500000000000000000000604482015290519081900360640190fd5b60018201546002830154600384015491985096506001600160a01b031694508067ffffffffffffffff8111801561116657600080fd5b50604051908082528060200260200182016040528015611190578160200160208202803683370190505b5093508067ffffffffffffffff811180156111aa57600080fd5b506040519080825280602002602001820160405280156111d4578160200160208202803683370190505b50925060005b8181101561124b576000806111f26004860184611bff565b915091508160001c87848151811061120657fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508060001c86848151811061123657fe5b602090810291909101015250506001016111da565b50505091939550919395565b7f000000000000000000000000000000000000000000000000000000000000000090565b6002546112cf576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b6112da610ded611a01565b6112e2611c90565b565b7f000000000000000000000000000000000000000000000000000000000000000090565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b60035460ff1681565b611334610ded611a01565b81518151811461138b576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20696e636f6e73697374656e742061727261797300000000000000604482015290519081900360640190fd5b600084815260066020526040902080546113ec576040805162461bcd60e51b815260206004820152601660248201527f53616c653a206e6f6e2d6578697374656e7420736b7500000000000000000000604482015290519081900360640190fd5b600481018261143757600061140082611bfb565b905060005b818110156114305760006114198482611bff565b5090506114268482611ce8565b5050600101611405565b5050611442565b611442818686611dc8565b857fcb3fe5489e0cd43d0f4a33d1e09a4a0463a03d0d38f56165530854e5540db1438686604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156114aa578181015183820152602001611492565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156114e95781810151838201526020016114d1565b5050505090500194505050505060405180910390a2505050505050565b606060046000018054806020026020016040519081016040528092919081815260200182805480156110a85760200282019190600052602060002090815481526020019060010190808311611094575050505050905090565b61156a610ded611a01565b6001600160a01b0381166115c5576040805162461bcd60e51b815260206004820152601460248201527f5061796f75743a207a65726f2061646472657373000000000000000000000000604482015290519081900360640190fd5b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03838116919091179182905560408051929091168252517fdd880d24a789958a6398c99c2e54ce31bc10a638cbc42f7dd34285479ae0f855916020908290030190a150565b600254611680576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b61168b610ded611a01565b6112e2611f2c565b6001546001600160a01b031681565b6008546116b29084908484611f6a565b505050565b6000546001600160a01b031690565b60001981565b600881815481106116dc57600080fd5b600091825260209091200154905081565b600254611741576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b6117496119a9565b6117516131de565b611759611a01565b6001600160a01b03908116825287811660208084019190915290871660408084019190915260608301879052608083018690528051601f850183900483028101830190915283815290849084908190840183828082843760009201919091525050505060a0820152611051816121a1565b6117d5610ded611a01565b6112da6121ce565b60085490565b6117ee610ded611a01565b805180611842576040805162461bcd60e51b815260206004820152601260248201527f53616c653a20656d70747920746f6b656e730000000000000000000000000000604482015290519081900360640190fd5b60005b8181146118f757600083828151811061185a57fe5b6020026020010151905080600014156118ba576040805162461bcd60e51b815260206004820152601160248201527f53616c653a207a65726f20737570706c79000000000000000000000000000000604482015290519081900360640190fd5b60088054600181810183556000929092527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3019190915501611845565b506119026004611bfb565b15611933576000611914600482612250565b6000908152600660205260409020805483018155600101805483019055505b5050565b60075481565b60025490565b61194e610ded611a01565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383811691821780845560405192939116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b60035460ff16156112e2576040805162461bcd60e51b815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b3390565b60006060611a12836122ca565b611a1b83612574565b505060c081015160e0909101519091565b611a3581612611565b806080015167ffffffffffffffff81118015611a5057600080fd5b50604051908082528060200260200182016040528015611a7a578160200160208202803683370190505b506101208201526007546000905b82608001518214611ad65760088181548110611aa057fe5b906000526020600020015460001b8361012001518381518110611abf57fe5b602090810291909101015260019182019101611a88565b6007555050565b60035460ff166112e2576040805162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604482015290519081900360640190fd5b306001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015611b6d57600080fd5b505afa158015611b81573d6000803e3d6000fd5b505050506040513d6020811015611b9757600080fd5b50516001600160a01b03828116911614611bf8576040805162461bcd60e51b815260206004820152601660248201527f4f776e61626c653a206e6f7420746865206f776e657200000000000000000000604482015290519081900360640190fd5b50565b5490565b815460009081908310611c59576040805162461bcd60e51b815260206004820152601c60248201527f456e756d4d61703a20696e646578206f7574206f6620626f756e647300000000604482015290519081900360640190fd5b6000846000018481548110611c6a57fe5b906000526020600020906002020190508060000154816001015492509250509250929050565b611c98611add565b6003805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611ccb611a01565b604080516001600160a01b039092168252519081900360200190a1565b60008181526001830160205260408120548015611dbc5783546000198083019190810190600090879083908110611d1b57fe5b9060005260206000209060020201905080876000018481548110611d3b57fe5b600091825260208083208454600290930201918255600193840154918401919091558354825289830190526040902090840190558654879080611d7a57fe5b6000828152602080822060026000199094019384020182815560019081018390559290935588815289820190925260408220919091559450611dc29350505050565b60009150505b92915050565b60005b8251811015611eae576000838281518110611de257fe5b6020026020010151905060006001600160a01b0316816001600160a01b03161415611e54576040805162461bcd60e51b815260206004820152601860248201527f53616c653a207a65726f206164647265737320746f6b656e0000000000000000604482015290519081900360640190fd5b6000838381518110611e6257fe5b602002602001015190508060001415611e8e57611e88866001600160a01b038416611ce8565b50611ea4565b611ea2866001600160a01b0384168361265c565b505b5050600101611dcb565b507f0000000000000000000000000000000000000000000000000000000000000000611ed984611bfb565b11156116b2576040805162461bcd60e51b815260206004820152601560248201527f53616c653a20746f6f206d616e7920746f6b656e730000000000000000000000604482015290519081900360640190fd5b611f346119a9565b6003805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611ccb611a01565b82611fbc576040805162461bcd60e51b815260206004820152601160248201527f53616c653a207a65726f20737570706c79000000000000000000000000000000604482015290519081900360640190fd5b7f0000000000000000000000000000000000000000000000000000000000000000611fe76004611bfb565b10612039576040805162461bcd60e51b815260206004820152601360248201527f53616c653a20746f6f206d616e7920736b757300000000000000000000000000604482015290519081900360640190fd5b6120446004856126f6565b612095576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20736b7520616c7265616479206372656174656400000000000000604482015290519081900360640190fd5b6001600160a01b03811615612107576120b6816001600160a01b0316612740565b612107576040805162461bcd60e51b815260206004820152601b60248201527f53616c653a206e6f6e2d636f6e74726163742072656365697665720000000000604482015290519081900360640190fd5b60008481526006602090815260409182902085815560018101869055600281018590556003810180546001600160a01b03861673ffffffffffffffffffffffffffffffffffffffff1990911681179091558351888152928301879052828401869052606083015291517f38bd4aabce684540cd61351b91f2f5facf9d6963934347e25aab93d87ae7ac149181900360800190a15050505050565b6121aa816122ca565b6121b381612574565b6121bc81612746565b6121c581611a2c565b611bf881612895565b60025415612223576040805162461bcd60e51b815260206004820152601260248201527f537461727461626c653a20737461727465640000000000000000000000000000604482015290519081900360640190fd5b426002557f27029695aa5f602a4ee81f4c32dfa86e562f200a17966496f3a7c3f2ec0f9417611ccb611a01565b815460009082106122a8576040805162461bcd60e51b815260206004820152601c60248201527f456e756d5365743a20696e646578206f7574206f6620626f756e647300000000604482015290519081900360640190fd5b8260000182815481106122b757fe5b9060005260206000200154905092915050565b60208101516001600160a01b0316612329576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a207a65726f206164647265737320726563697069656e7400000000604482015290519081900360640190fd5b60408101516001600160a01b0316612388576040805162461bcd60e51b815260206004820152601860248201527f53616c653a207a65726f206164647265737320746f6b656e0000000000000000604482015290519081900360640190fd5b60808101516123de576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a207a65726f207175616e7469747920707572636861736500000000604482015290519081900360640190fd5b606081015160009081526006602052604090208054612444576040805162461bcd60e51b815260206004820152601660248201527f53616c653a206e6f6e2d6578697374656e7420736b7500000000000000000000604482015290519081900360640190fd5b8160800151816002015410156124a1576040805162461bcd60e51b815260206004820152601860248201527f53616c653a2061626f7665206d6178207175616e746974790000000000000000604482015290519081900360640190fd5b80546000191461250857816080015181600101541015612508576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20696e73756666696369656e7420737570706c7900000000000000604482015290519081900360640190fd5b60408201516001600160a01b03166125236004830182612d7a565b6116b2576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a206e6f6e2d6578697374656e7420736b7520746f6b656e00000000604482015290519081900360640190fd5b6060810151600090815260066020526040902080546125da576040805162461bcd60e51b815260206004820152601560248201527f53616c653a20756e737570706f7274656420534b550000000000000000000000604482015290519081900360640190fd5b6004810160006125ea8483612d92565b9050612603846080015182612e0290919063ffffffff16565b60c090940193909352505050565b60608101516000908152600660205260409020805460001914611933576080820151600182015461264191612e5b565b60608301516000908152600660205260409020600101555050565b6000828152600184016020526040812054806126c15750506040805180820182528381526020808201848152865460018181018955600089815284812095516002909302909501918255915190820155865486845281880190925292909120556126ef565b828560000160018303815481106126d457fe5b90600052602060002090600202016001018190555060009150505b9392505050565b60006127028383612d7a565b61273857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611dc2565b506000611dc2565b3b151590565b60408101516001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415612869578060c001513410156127c8576040805162461bcd60e51b815260206004820152601660248201527f53616c653a20696e73756666696369656e742045544800000000000000000000604482015290519081900360640190fd5b60015460c08201516040516001600160a01b039092169181156108fc0291906000818181858888f19350505050158015612806573d6000803e3d6000fd5b5060006128208260c0015134612e5b90919063ffffffff16565b905080156128635781516040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612861573d6000803e3d6000fd5b505b50611bf8565b611bf8612874611a01565b60015460c084015160408501516001600160a01b0390811693921690612eb8565b806060015181604001516001600160a01b031682600001516001600160a01b03167f29f844483ca6b10b5c0611d039afc15ce8f6380e905307b381c3a8ee4e90e11e846020015185608001518660a001518760c001518860e001518961010001518a610120015160405160200180848051906020019060200280838360005b8381101561292c578181015183820152602001612914565b50505050905001838051906020019060200280838360005b8381101561295c578181015183820152602001612944565b50505050905001828051906020019060200280838360005b8381101561298c578181015183820152602001612974565b50505050905001935050505060405160208183030381529060405260405180866001600160a01b031681526020018581526020018060200184815260200180602001838103835286818151815260200191508051906020019080838360005b83811015612a035781810151838201526020016129eb565b50505050905090810190601f168015612a305780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015612a63578181015183820152602001612a4b565b50505050905090810190601f168015612a905780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390a460608101516000908152600660205260409020600301546001600160a01b03168015611933576361eceae860e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916816001600160a01b03166361eceae8846000015185602001518660400151876060015188608001518960a001518a60c001518b60e001518c61010001518d61012001516040518b63ffffffff1660e01b8152600401808b6001600160a01b031681526020018a6001600160a01b03168152602001896001600160a01b031681526020018881526020018781526020018060200186815260200180602001806020018060200185810385528a818151815260200191508051906020019080838360005b83811015612bc9578181015183820152602001612bb1565b50505050905090810190601f168015612bf65780820380516001836020036101000a031916815260200191505b508581038452885181528851602091820191808b01910280838360005b83811015612c2b578181015183820152602001612c13565b50505050905001858103835287818151815260200191508051906020019060200280838360005b83811015612c6a578181015183820152602001612c52565b50505050905001858103825286818151815260200191508051906020019060200280838360005b83811015612ca9578181015183820152602001612c91565b505050509050019e505050505050505050505050505050602060405180830381600087803b158015612cda57600080fd5b505af1158015612cee573d6000803e3d6000fd5b505050506040513d6020811015612d0457600080fd5b50517fffffffff000000000000000000000000000000000000000000000000000000001614611933576040805162461bcd60e51b815260206004820152601a60248201527f53616c653a206e6f74696669636174696f6e2072656675736564000000000000604482015290519081900360640190fd5b60009081526001919091016020526040902054151590565b6040820151600090612dae9083906001600160a01b0316612f46565b905080611dc2576040805162461bcd60e51b815260206004820152601f60248201527f53616c653a20756e737570706f72746564207061796d656e7420746f6b656e00604482015290519081900360640190fd5b600082612e1157506000611dc2565b82820282848281612e1e57fe5b04146126ef5760405162461bcd60e51b81526004018080602001828103825260218152602001806132506021913960400191505060405180910390fd5b600082821115612eb2576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052612f40908590612fd6565b50505050565b600081815260018301602052604081205480612fa9576040805162461bcd60e51b815260206004820152601860248201527f456e756d4d61703a206e6f6e6578697374656e74206b65790000000000000000604482015290519081900360640190fd5b836000016001820381548110612fbb57fe5b90600052602060002090600202016001015491505092915050565b81612fe96001600160a01b038216612740565b61303a576040805162461bcd60e51b815260206004820152601a60248201527f4552433230577261707065723a206e6f6e2d636f6e7472616374000000000000604482015290519081900360640190fd5b600080826001600160a01b0316846040518082805190602001908083835b6020831061309557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613058565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146130f7576040519150601f19603f3d011682016040523d82523d6000602084013e6130fc565b606091505b5091509150811561317b578051156131765780806020019051602081101561312357600080fd5b5051613176576040805162461bcd60e51b815260206004820152601e60248201527f4552433230577261707065723a206f7065726174696f6e206661696c65640000604482015290519081900360640190fd5b6131d7565b80516131ce576040805162461bcd60e51b815260206004820152601e60248201527f4552433230577261707065723a206f7065726174696f6e206661696c65640000604482015290519081900360640190fd5b80518082602001fd5b5050505050565b60405180610140016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160008019168152602001600081526020016060815260200160008152602001606081526020016060815260200160608152509056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a26469706673582212204f4f25d43967b0ccbc0b225a569c391d84e59a9da725cf666c69a981358f0a4464736f6c63430007060033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1AC JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6B8F9C43 GT PUSH2 0xEC JUMPI DUP1 PUSH4 0xA963B257 GT PUSH2 0x8A JUMPI DUP1 PUSH4 0xCF3AE77B GT PUSH2 0x64 JUMPI DUP1 PUSH4 0xCF3AE77B EQ PUSH2 0xA3B JUMPI DUP1 PUSH4 0xD55F9273 EQ PUSH2 0xAEB JUMPI DUP1 PUSH4 0xF21F537D EQ PUSH2 0xB00 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0xB15 JUMPI PUSH2 0x1AC JUMP JUMPDEST DUP1 PUSH4 0xA963B257 EQ PUSH2 0x97C JUMPI DUP1 PUSH4 0xBE9A6555 EQ PUSH2 0xA11 JUMPI DUP1 PUSH4 0xC4E41B22 EQ PUSH2 0xA26 JUMPI PUSH2 0x1AC JUMP JUMPDEST DUP1 PUSH4 0x85B3CFAC GT PUSH2 0xC6 JUMPI DUP1 PUSH4 0x85B3CFAC EQ PUSH2 0x8E9 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x928 JUMPI DUP1 PUSH4 0x9E049545 EQ PUSH2 0x93D JUMPI DUP1 PUSH4 0x9EAD7222 EQ PUSH2 0x952 JUMPI PUSH2 0x1AC JUMP JUMPDEST DUP1 PUSH4 0x6B8F9C43 EQ PUSH2 0x88C JUMPI DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x8BF JUMPI DUP1 PUSH4 0x8488BB4E EQ PUSH2 0x8D4 JUMPI PUSH2 0x1AC JUMP JUMPDEST DUP1 PUSH4 0x3628BD93 GT PUSH2 0x159 JUMPI DUP1 PUSH4 0x5C4FAFC7 GT PUSH2 0x133 JUMPI DUP1 PUSH4 0x5C4FAFC7 EQ PUSH2 0x6FE JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x713 JUMPI DUP1 PUSH4 0x5E6E9F70 EQ PUSH2 0x73C JUMPI DUP1 PUSH4 0x61BD3851 EQ PUSH2 0x877 JUMPI PUSH2 0x1AC JUMP JUMPDEST DUP1 PUSH4 0x3628BD93 EQ PUSH2 0x6AD JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x6D4 JUMPI DUP1 PUSH4 0x451B31A2 EQ PUSH2 0x6E9 JUMPI PUSH2 0x1AC JUMP JUMPDEST DUP1 PUSH4 0x23F927C9 GT PUSH2 0x18A JUMPI DUP1 PUSH4 0x23F927C9 EQ PUSH2 0x42C JUMPI DUP1 PUSH4 0x273CBAA0 EQ PUSH2 0x560 JUMPI DUP1 PUSH4 0x2A8A45BC EQ PUSH2 0x5C5 JUMPI PUSH2 0x1AC JUMP JUMPDEST DUP1 PUSH4 0x1323B066 EQ PUSH2 0x1B1 JUMPI DUP1 PUSH4 0x15469171 EQ PUSH2 0x2AE JUMPI DUP1 PUSH4 0x15D52A5C EQ PUSH2 0x3FB JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x253 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x1D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x214 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x226 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x248 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0xB48 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x299 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x281 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP4 POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3F9 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH2 0x100 DUP2 LT ISZERO PUSH2 0x2D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x312 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x324 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x346 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 DUP3 CALLDATALOAD SWAP3 PUSH1 0x40 DUP2 ADD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x368 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x37A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x39C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH1 0x20 DUP2 ADD SWAP1 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x3BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x3CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x3EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0xC3D JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x407 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x410 PUSH2 0xDB6 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x438 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3F9 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x44F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x46A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x47C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x49E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 SWAP5 SWAP4 PUSH1 0x20 DUP2 ADD SWAP4 POP CALLDATALOAD SWAP2 POP POP PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x4EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x500 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x522 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0xDDA SWAP5 POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x56C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x575 PUSH2 0x105A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 DUP2 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x5B1 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x599 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5EF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x5E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x10B2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x654 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x63C JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x693 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x67B JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP9 POP POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x6C2 PUSH2 0x1257 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3F9 PUSH2 0x127B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x6C2 PUSH2 0x12E4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x70A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x410 PUSH2 0x1308 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x71F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x728 PUSH2 0x1320 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x748 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3F9 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x75F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x781 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x793 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x7B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 SWAP5 SWAP4 PUSH1 0x20 DUP2 ADD SWAP4 POP CALLDATALOAD SWAP2 POP POP PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x805 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x817 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x839 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0x1329 SWAP5 POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x883 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x575 PUSH2 0x1506 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x898 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3F9 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x8AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x155F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3F9 PUSH2 0x162C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x410 PUSH2 0x1693 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3F9 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x90C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x16A2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x934 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x410 PUSH2 0x16B7 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x949 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x6C2 PUSH2 0x16C6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x95E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x6C2 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x975 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x16CC JUMP JUMPDEST PUSH2 0x3F9 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x992 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x9D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x9E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xA06 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x16ED JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA1D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3F9 PUSH2 0x17CA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA32 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x6C2 PUSH2 0x17DD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA47 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3F9 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA5E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xA79 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xA8B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xAAD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0x17E3 SWAP5 POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xAF7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x6C2 PUSH2 0x1937 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xB0C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x6C2 PUSH2 0x193D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xB21 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3F9 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xB38 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1943 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x2 SLOAD PUSH1 0x0 EQ ISZERO PUSH2 0xBA4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0xBAC PUSH2 0x19A9 JUMP JUMPDEST PUSH2 0xBB4 PUSH2 0x31DE JUMP JUMPDEST PUSH2 0xBBC PUSH2 0x1A01 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP10 DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP10 AND PUSH1 0x40 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD DUP10 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP9 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x1F DUP8 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD SWAP1 SWAP2 MSTORE DUP6 DUP2 MSTORE SWAP1 DUP7 SWAP1 DUP7 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP POP PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0xC2D DUP2 PUSH2 0x1A05 JUMP JUMPDEST SWAP3 POP SWAP3 POP POP SWAP7 POP SWAP7 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0xC45 PUSH2 0x31DE JUMP JUMPDEST PUSH2 0xC4D PUSH2 0x1A01 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP13 DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP13 AND PUSH1 0x40 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD DUP13 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP12 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x1F DUP11 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD SWAP1 SWAP2 MSTORE DUP9 DUP2 MSTORE SWAP1 DUP10 SWAP1 DUP10 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP POP PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP8 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP7 DUP3 MSTORE SWAP1 SWAP2 DUP8 SWAP2 DUP8 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP POP PUSH1 0xE0 DUP3 ADD MSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP6 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP5 DUP3 MSTORE SWAP1 SWAP2 DUP6 SWAP2 DUP6 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP POP PUSH2 0x100 DUP3 ADD MSTORE PUSH2 0xD32 DUP2 PUSH2 0x1A2C JUMP JUMPDEST PUSH2 0x120 DUP2 ADD MLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD PUSH32 0xF94E453C69AFA2E43777EC90F3A26BCFC9AC74969E1C25A72B056B9F81C93B33 SWAP5 SWAP4 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP2 DUP7 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xD95 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xD7D JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0xDE2 PUSH2 0x1ADD JUMP JUMPDEST PUSH2 0xDF2 PUSH2 0xDED PUSH2 0x1A01 JUMP JUMPDEST PUSH2 0x1B34 JUMP JUMPDEST PUSH1 0x8 SLOAD DUP1 PUSH2 0xE47 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20656D70747920746F6B656E730000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP3 MLOAD DUP1 PUSH2 0xE9B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20656D70747920696E646578657300000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP3 MLOAD DUP2 DUP2 EQ PUSH2 0xEF1 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E636F6E73697374656E742061727261797300000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x0 JUMPDEST DUP4 DUP2 EQ PUSH2 0x1051 JUMPI PUSH1 0x0 DUP8 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xF0C JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP DUP3 DUP2 LT ISZERO PUSH2 0xF6B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E76616C696420696E64657800000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP6 DUP2 LT PUSH2 0xFBF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E646578206F75742D6F662D626F756E647300000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP8 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0xFCD JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP DUP1 PUSH1 0x0 EQ ISZERO PUSH2 0x102D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F20737570706C79000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x8 DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x103B JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SSTORE POP POP PUSH1 0x1 ADD PUSH2 0xEF7 JUMP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x8 DUP1 SLOAD DUP1 PUSH1 0x20 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 DUP1 ISZERO PUSH2 0x10A8 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x1094 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP2 SWAP1 DUP2 SWAP1 DUP2 SWAP1 PUSH1 0x60 SWAP1 DUP2 SWAP1 DUP4 PUSH2 0x10D8 PUSH1 0x4 DUP4 ADD PUSH2 0x1BFB JUMP JUMPDEST DUP3 SLOAD SWAP9 POP SWAP1 POP DUP8 PUSH2 0x1130 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7500000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x3 DUP5 ADD SLOAD SWAP2 SWAP9 POP SWAP7 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP5 POP DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x1166 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1190 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP4 POP DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x11AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x11D4 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x124B JUMPI PUSH1 0x0 DUP1 PUSH2 0x11F2 PUSH1 0x4 DUP7 ADD DUP5 PUSH2 0x1BFF JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP2 PUSH1 0x0 SHR DUP8 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x1206 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP DUP1 PUSH1 0x0 SHR DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x1236 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP POP PUSH1 0x1 ADD PUSH2 0x11DA JUMP JUMPDEST POP POP POP SWAP2 SWAP4 SWAP6 POP SWAP2 SWAP4 SWAP6 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x12CF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x12DA PUSH2 0xDED PUSH2 0x1A01 JUMP JUMPDEST PUSH2 0x12E2 PUSH2 0x1C90 JUMP JUMPDEST JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x1334 PUSH2 0xDED PUSH2 0x1A01 JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD DUP2 EQ PUSH2 0x138B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E636F6E73697374656E742061727261797300000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0x13EC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7500000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP2 ADD DUP3 PUSH2 0x1437 JUMPI PUSH1 0x0 PUSH2 0x1400 DUP3 PUSH2 0x1BFB JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1430 JUMPI PUSH1 0x0 PUSH2 0x1419 DUP5 DUP3 PUSH2 0x1BFF JUMP JUMPDEST POP SWAP1 POP PUSH2 0x1426 DUP5 DUP3 PUSH2 0x1CE8 JUMP JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x1405 JUMP JUMPDEST POP POP PUSH2 0x1442 JUMP JUMPDEST PUSH2 0x1442 DUP2 DUP7 DUP7 PUSH2 0x1DC8 JUMP JUMPDEST DUP6 PUSH32 0xCB3FE5489E0CD43D0F4A33D1E09A4A0463A03D0D38F56165530854E5540DB143 DUP7 DUP7 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x14AA JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1492 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x14E9 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x14D1 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x4 PUSH1 0x0 ADD DUP1 SLOAD DUP1 PUSH1 0x20 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 DUP1 ISZERO PUSH2 0x10A8 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x1094 JUMPI POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x156A PUSH2 0xDED PUSH2 0x1A01 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x15C5 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061796F75743A207A65726F2061646472657373000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 SWAP1 SWAP2 OR SWAP2 DUP3 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD SWAP3 SWAP1 SWAP2 AND DUP3 MSTORE MLOAD PUSH32 0xDD880D24A789958A6398C99C2E54CE31BC10A638CBC42F7DD34285479AE0F855 SWAP2 PUSH1 0x20 SWAP1 DUP3 SWAP1 SUB ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x1680 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x168B PUSH2 0xDED PUSH2 0x1A01 JUMP JUMPDEST PUSH2 0x12E2 PUSH2 0x1F2C JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH2 0x16B2 SWAP1 DUP5 SWAP1 DUP5 DUP5 PUSH2 0x1F6A JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 NOT DUP2 JUMP JUMPDEST PUSH1 0x8 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x16DC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x1741 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x1749 PUSH2 0x19A9 JUMP JUMPDEST PUSH2 0x1751 PUSH2 0x31DE JUMP JUMPDEST PUSH2 0x1759 PUSH2 0x1A01 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP8 DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP8 AND PUSH1 0x40 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD DUP8 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP7 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x1F DUP6 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD SWAP1 SWAP2 MSTORE DUP4 DUP2 MSTORE SWAP1 DUP5 SWAP1 DUP5 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP POP PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x1051 DUP2 PUSH2 0x21A1 JUMP JUMPDEST PUSH2 0x17D5 PUSH2 0xDED PUSH2 0x1A01 JUMP JUMPDEST PUSH2 0x12DA PUSH2 0x21CE JUMP JUMPDEST PUSH1 0x8 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x17EE PUSH2 0xDED PUSH2 0x1A01 JUMP JUMPDEST DUP1 MLOAD DUP1 PUSH2 0x1842 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20656D70747920746F6B656E730000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 EQ PUSH2 0x18F7 JUMPI PUSH1 0x0 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x185A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP DUP1 PUSH1 0x0 EQ ISZERO PUSH2 0x18BA JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F20737570706C79000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x8 DUP1 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP4 SSTORE PUSH1 0x0 SWAP3 SWAP1 SWAP3 MSTORE PUSH32 0xF3F7A9FE364FAAB93B216DA50A3214154F22A0A2B415B23A84C8169E8B636EE3 ADD SWAP2 SWAP1 SWAP2 SSTORE ADD PUSH2 0x1845 JUMP JUMPDEST POP PUSH2 0x1902 PUSH1 0x4 PUSH2 0x1BFB JUMP JUMPDEST ISZERO PUSH2 0x1933 JUMPI PUSH1 0x0 PUSH2 0x1914 PUSH1 0x4 DUP3 PUSH2 0x2250 JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD DUP4 ADD DUP2 SSTORE PUSH1 0x1 ADD DUP1 SLOAD DUP4 ADD SWAP1 SSTORE POP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x7 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x194E PUSH2 0xDED PUSH2 0x1A01 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 DUP3 OR DUP1 DUP5 SSTORE PUSH1 0x40 MLOAD SWAP3 SWAP4 SWAP2 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x12E2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061757361626C653A2070617573656400000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x1A12 DUP4 PUSH2 0x22CA JUMP JUMPDEST PUSH2 0x1A1B DUP4 PUSH2 0x2574 JUMP JUMPDEST POP POP PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xE0 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP2 JUMP JUMPDEST PUSH2 0x1A35 DUP2 PUSH2 0x2611 JUMP JUMPDEST DUP1 PUSH1 0x80 ADD MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x1A50 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1A7A JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP PUSH2 0x120 DUP3 ADD MSTORE PUSH1 0x7 SLOAD PUSH1 0x0 SWAP1 JUMPDEST DUP3 PUSH1 0x80 ADD MLOAD DUP3 EQ PUSH2 0x1AD6 JUMPI PUSH1 0x8 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x1AA0 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD PUSH1 0x0 SHL DUP4 PUSH2 0x120 ADD MLOAD DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1ABF JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1A88 JUMP JUMPDEST PUSH1 0x7 SSTORE POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND PUSH2 0x12E2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061757361626C653A206E6F7420706175736564000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8DA5CB5B 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 PUSH2 0x1B6D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1B81 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1B97 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ PUSH2 0x1BF8 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6F7420746865206F776E657200000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP JUMP JUMPDEST SLOAD SWAP1 JUMP JUMPDEST DUP2 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP4 LT PUSH2 0x1C59 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x456E756D4D61703A20696E646578206F7574206F6620626F756E647300000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 PUSH1 0x0 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x1C6A JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD SWAP1 POP DUP1 PUSH1 0x0 ADD SLOAD DUP2 PUSH1 0x1 ADD SLOAD SWAP3 POP SWAP3 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH2 0x1C98 PUSH2 0x1ADD JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA PUSH2 0x1CCB PUSH2 0x1A01 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0x1DBC JUMPI DUP4 SLOAD PUSH1 0x0 NOT DUP1 DUP4 ADD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x0 SWAP1 DUP8 SWAP1 DUP4 SWAP1 DUP2 LT PUSH2 0x1D1B JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD SWAP1 POP DUP1 DUP8 PUSH1 0x0 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x1D3B JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 DUP5 SLOAD PUSH1 0x2 SWAP1 SWAP4 MUL ADD SWAP2 DUP3 SSTORE PUSH1 0x1 SWAP4 DUP5 ADD SLOAD SWAP2 DUP5 ADD SWAP2 SWAP1 SWAP2 SSTORE DUP4 SLOAD DUP3 MSTORE DUP10 DUP4 ADD SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP1 DUP5 ADD SWAP1 SSTORE DUP7 SLOAD DUP8 SWAP1 DUP1 PUSH2 0x1D7A JUMPI INVALID JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 PUSH1 0x2 PUSH1 0x0 NOT SWAP1 SWAP5 ADD SWAP4 DUP5 MUL ADD DUP3 DUP2 SSTORE PUSH1 0x1 SWAP1 DUP2 ADD DUP4 SWAP1 SSTORE SWAP3 SWAP1 SWAP4 SSTORE DUP9 DUP2 MSTORE DUP10 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x40 DUP3 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE SWAP5 POP PUSH2 0x1DC2 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SWAP2 POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x1EAE JUMPI PUSH1 0x0 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1DE2 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1E54 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F206164647265737320746F6B656E0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1E62 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP DUP1 PUSH1 0x0 EQ ISZERO PUSH2 0x1E8E JUMPI PUSH2 0x1E88 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x1CE8 JUMP JUMPDEST POP PUSH2 0x1EA4 JUMP JUMPDEST PUSH2 0x1EA2 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP4 PUSH2 0x265C JUMP JUMPDEST POP JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x1DCB JUMP JUMPDEST POP PUSH32 0x0 PUSH2 0x1ED9 DUP5 PUSH2 0x1BFB JUMP JUMPDEST GT ISZERO PUSH2 0x16B2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20746F6F206D616E7920746F6B656E730000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x1F34 PUSH2 0x19A9 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH2 0x1CCB PUSH2 0x1A01 JUMP JUMPDEST DUP3 PUSH2 0x1FBC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F20737570706C79000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH2 0x1FE7 PUSH1 0x4 PUSH2 0x1BFB JUMP JUMPDEST LT PUSH2 0x2039 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20746F6F206D616E7920736B757300000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x2044 PUSH1 0x4 DUP6 PUSH2 0x26F6 JUMP JUMPDEST PUSH2 0x2095 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20736B7520616C7265616479206372656174656400000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO PUSH2 0x2107 JUMPI PUSH2 0x20B6 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2740 JUMP JUMPDEST PUSH2 0x2107 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D636F6E74726163742072656365697665720000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP6 DUP2 SSTORE PUSH1 0x1 DUP2 ADD DUP7 SWAP1 SSTORE PUSH1 0x2 DUP2 ADD DUP6 SWAP1 SSTORE PUSH1 0x3 DUP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT SWAP1 SWAP2 AND DUP2 OR SWAP1 SWAP2 SSTORE DUP4 MLOAD DUP9 DUP2 MSTORE SWAP3 DUP4 ADD DUP8 SWAP1 MSTORE DUP3 DUP5 ADD DUP7 SWAP1 MSTORE PUSH1 0x60 DUP4 ADD MSTORE SWAP2 MLOAD PUSH32 0x38BD4AABCE684540CD61351B91F2F5FACF9D6963934347E25AAB93D87AE7AC14 SWAP2 DUP2 SWAP1 SUB PUSH1 0x80 ADD SWAP1 LOG1 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x21AA DUP2 PUSH2 0x22CA JUMP JUMPDEST PUSH2 0x21B3 DUP2 PUSH2 0x2574 JUMP JUMPDEST PUSH2 0x21BC DUP2 PUSH2 0x2746 JUMP JUMPDEST PUSH2 0x21C5 DUP2 PUSH2 0x1A2C JUMP JUMPDEST PUSH2 0x1BF8 DUP2 PUSH2 0x2895 JUMP JUMPDEST PUSH1 0x2 SLOAD ISZERO PUSH2 0x2223 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A20737461727465640000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST TIMESTAMP PUSH1 0x2 SSTORE PUSH32 0x27029695AA5F602A4EE81F4C32DFA86E562F200A17966496F3A7C3F2EC0F9417 PUSH2 0x1CCB PUSH2 0x1A01 JUMP JUMPDEST DUP2 SLOAD PUSH1 0x0 SWAP1 DUP3 LT PUSH2 0x22A8 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x456E756D5365743A20696E646578206F7574206F6620626F756E647300000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP3 PUSH1 0x0 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x22B7 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2329 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F206164647265737320726563697069656E7400000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2388 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F206164647265737320746F6B656E0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x80 DUP2 ADD MLOAD PUSH2 0x23DE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F207175616E7469747920707572636861736500000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0x2444 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7500000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x80 ADD MLOAD DUP2 PUSH1 0x2 ADD SLOAD LT ISZERO PUSH2 0x24A1 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A2061626F7665206D6178207175616E746974790000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 SLOAD PUSH1 0x0 NOT EQ PUSH2 0x2508 JUMPI DUP2 PUSH1 0x80 ADD MLOAD DUP2 PUSH1 0x1 ADD SLOAD LT ISZERO PUSH2 0x2508 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E73756666696369656E7420737570706C7900000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2523 PUSH1 0x4 DUP4 ADD DUP3 PUSH2 0x2D7A JUMP JUMPDEST PUSH2 0x16B2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7520746F6B656E00000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0x25DA JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20756E737570706F7274656420534B550000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP2 ADD PUSH1 0x0 PUSH2 0x25EA DUP5 DUP4 PUSH2 0x2D92 JUMP JUMPDEST SWAP1 POP PUSH2 0x2603 DUP5 PUSH1 0x80 ADD MLOAD DUP3 PUSH2 0x2E02 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0xC0 SWAP1 SWAP5 ADD SWAP4 SWAP1 SWAP4 MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x0 NOT EQ PUSH2 0x1933 JUMPI PUSH1 0x80 DUP3 ADD MLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH2 0x2641 SWAP2 PUSH2 0x2E5B JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x1 DUP5 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 PUSH2 0x26C1 JUMPI POP POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE DUP4 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD DUP5 DUP2 MSTORE DUP7 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP10 SSTORE PUSH1 0x0 DUP10 DUP2 MSTORE DUP5 DUP2 KECCAK256 SWAP6 MLOAD PUSH1 0x2 SWAP1 SWAP4 MUL SWAP1 SWAP6 ADD SWAP2 DUP3 SSTORE SWAP2 MLOAD SWAP1 DUP3 ADD SSTORE DUP7 SLOAD DUP7 DUP5 MSTORE DUP2 DUP9 ADD SWAP1 SWAP3 MSTORE SWAP3 SWAP1 SWAP2 KECCAK256 SSTORE PUSH2 0x26EF JUMP JUMPDEST DUP3 DUP6 PUSH1 0x0 ADD PUSH1 0x1 DUP4 SUB DUP2 SLOAD DUP2 LT PUSH2 0x26D4 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD PUSH1 0x1 ADD DUP2 SWAP1 SSTORE POP PUSH1 0x0 SWAP2 POP POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2702 DUP4 DUP4 PUSH2 0x2D7A JUMP JUMPDEST PUSH2 0x2738 JUMPI POP DUP2 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP5 SSTORE PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 SWAP1 SWAP4 ADD DUP5 SWAP1 SSTORE DUP5 SLOAD DUP5 DUP3 MSTORE DUP3 DUP7 ADD SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0x1DC2 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x1DC2 JUMP JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x2869 JUMPI DUP1 PUSH1 0xC0 ADD MLOAD CALLVALUE LT ISZERO PUSH2 0x27C8 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E73756666696369656E742045544800000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xC0 DUP3 ADD MLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 DUP2 ISZERO PUSH2 0x8FC MUL SWAP2 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x2806 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x0 PUSH2 0x2820 DUP3 PUSH1 0xC0 ADD MLOAD CALLVALUE PUSH2 0x2E5B SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x2863 JUMPI DUP2 MLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 DUP3 ISZERO PUSH2 0x8FC MUL SWAP1 DUP4 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x2861 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP JUMPDEST POP PUSH2 0x1BF8 JUMP JUMPDEST PUSH2 0x1BF8 PUSH2 0x2874 PUSH2 0x1A01 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xC0 DUP5 ADD MLOAD PUSH1 0x40 DUP6 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP4 SWAP3 AND SWAP1 PUSH2 0x2EB8 JUMP JUMPDEST DUP1 PUSH1 0x60 ADD MLOAD DUP2 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x29F844483CA6B10B5C0611D039AFC15CE8F6380E905307B381C3A8EE4E90E11E DUP5 PUSH1 0x20 ADD MLOAD DUP6 PUSH1 0x80 ADD MLOAD DUP7 PUSH1 0xA0 ADD MLOAD DUP8 PUSH1 0xC0 ADD MLOAD DUP9 PUSH1 0xE0 ADD MLOAD DUP10 PUSH2 0x100 ADD MLOAD DUP11 PUSH2 0x120 ADD MLOAD PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP5 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x292C JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2914 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x295C JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2944 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x298C JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2974 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP4 POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP7 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2A03 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x29EB JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x2A30 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP DUP4 DUP2 SUB DUP3 MSTORE DUP5 MLOAD DUP2 MSTORE DUP5 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP7 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2A63 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2A4B JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x2A90 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP8 POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 ISZERO PUSH2 0x1933 JUMPI PUSH4 0x61ECEAE8 PUSH1 0xE0 SHL PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x61ECEAE8 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD DUP7 PUSH1 0x40 ADD MLOAD DUP8 PUSH1 0x60 ADD MLOAD DUP9 PUSH1 0x80 ADD MLOAD DUP10 PUSH1 0xA0 ADD MLOAD DUP11 PUSH1 0xC0 ADD MLOAD DUP12 PUSH1 0xE0 ADD MLOAD DUP13 PUSH2 0x100 ADD MLOAD DUP14 PUSH2 0x120 ADD MLOAD PUSH1 0x40 MLOAD DUP12 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP6 DUP2 SUB DUP6 MSTORE DUP11 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2BC9 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2BB1 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x2BF6 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP DUP6 DUP2 SUB DUP5 MSTORE DUP9 MLOAD DUP2 MSTORE DUP9 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP1 DUP12 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2C2B JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2C13 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP6 DUP2 SUB DUP4 MSTORE DUP8 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2C6A JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2C52 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP6 DUP2 SUB DUP3 MSTORE DUP7 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2CA9 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2C91 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP15 POP POP POP POP POP POP POP POP POP POP POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2CDA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2CEE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2D04 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND EQ PUSH2 0x1933 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F74696669636174696F6E2072656675736564000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x0 SWAP1 PUSH2 0x2DAE SWAP1 DUP4 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2F46 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x1DC2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20756E737570706F72746564207061796D656E7420746F6B656E00 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x2E11 JUMPI POP PUSH1 0x0 PUSH2 0x1DC2 JUMP JUMPDEST DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 PUSH2 0x2E1E JUMPI INVALID JUMPDEST DIV EQ PUSH2 0x26EF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x3250 PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP3 GT ISZERO PUSH2 0x2EB2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x24 DUP4 ADD MSTORE DUP5 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x84 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 OR SWAP1 MSTORE PUSH2 0x2F40 SWAP1 DUP6 SWAP1 PUSH2 0x2FD6 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 PUSH2 0x2FA9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x456E756D4D61703A206E6F6E6578697374656E74206B65790000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP4 PUSH1 0x0 ADD PUSH1 0x1 DUP3 SUB DUP2 SLOAD DUP2 LT PUSH2 0x2FBB JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD PUSH1 0x1 ADD SLOAD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 PUSH2 0x2FE9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x2740 JUMP JUMPDEST PUSH2 0x303A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433230577261707065723A206E6F6E2D636F6E7472616374000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x3095 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x3058 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x30F7 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x30FC JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 ISZERO PUSH2 0x317B JUMPI DUP1 MLOAD ISZERO PUSH2 0x3176 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3123 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x3176 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433230577261707065723A206F7065726174696F6E206661696C65640000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x31D7 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x31CE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433230577261707065723A206F7065726174696F6E206661696C65640000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 MLOAD DUP1 DUP3 PUSH1 0x20 ADD REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x140 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP1 NOT AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE POP SWAP1 JUMP INVALID MSTORE8 PUSH2 0x6665 0x4D PUSH2 0x7468 GASPRICE KECCAK256 PUSH14 0x756C7469706C69636174696F6E20 PUSH16 0x766572666C6F77A26469706673582212 KECCAK256 0x4F 0x4F 0x25 0xD4 CODECOPY PUSH8 0xB0CCBC0B225A569C CODECOPY SAR DUP5 0xE5 SWAP11 SWAP14 0xA7 0x25 0xCF PUSH7 0x6C69A981358F0A DIFFICULTY PUSH5 0x736F6C6343 STOP SMOD MOD STOP CALLER ","sourceMap":"440:3685:13:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9044:610:32;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9044:610:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9044:610:32;;-1:-1:-1;9044:610:32;-1:-1:-1;9044:610:32;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3310:813:13;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3310:813:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3310:813:13;;-1:-1:-1;3310:813:13;-1:-1:-1;3310:813:13;:::i;:::-;;530:34:25;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;530:34:25;;;;;;;;;;;;;;3677:948;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3677:948:25;;;;;;;;-1:-1:-1;3677:948:25;;-1:-1:-1;;3677:948:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3677:948:25;;-1:-1:-1;3677:948:25;;-1:-1:-1;;;;;3677:948:25:i;2581:98:13:-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10463:1027:32;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10463:1027:32;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10463:1027:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2166:95:13;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;4169:114:32;;;;;;;;;;;;;:::i;2383:112:13:-;;;;;;;;;;;;;:::i;1698:98:32:-;;;;;;;;;;;;;:::i;482:18:5:-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;5032:943:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5032:943:32;;;;;;;;-1:-1:-1;5032:943:32;;-1:-1:-1;;5032:943:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5032:943:32;;-1:-1:-1;5032:943:32;;-1:-1:-1;;;;;5032:943:32:i;11621:110::-;;;;;;;;;;;;;:::i;660:263:8:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;660:263:8;-1:-1:-1;;;;;660:263:8;;:::i;3787:110:32:-;;;;;;;;;;;;;:::i;379:35:8:-;;;;;;;;;;;;;:::i;1835:231:13:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1835:231:13;;;;;;;;;;;-1:-1:-1;;;;;1835:231:13;;:::i;1114:94:1:-;;;;;;;;;;;;;:::i;1802:69:32:-;;;;;;;;;;;;;:::i;603:26:25:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;603:26:25;;:::i;6962:537:32:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6962:537:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6962:537:32;;-1:-1:-1;6962:537:32;-1:-1:-1;6962:537:32;:::i;3396:118::-;;;;;;;;;;;;;:::i;4745:104:25:-;;;;;;;;;;;;;:::i;1806:633::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1806:633:25;;-1:-1:-1;1806:633:25;;-1:-1:-1;;;;;1806:633:25:i;571:25::-;;;;;;;;;;;;;:::i;1276:85:6:-;;;;;;;;;;;;;:::i;1448:197:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1448:197:1;-1:-1:-1;;;;;1448:197:1;;:::i;9044:610:32:-;9266:18;9286:28;988:10:6;;1002:1;988:15;;980:50;;;;;-1:-1:-1;;;980:50:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;9326:19:32::1;:17;:19::i;:::-;9355:28;;:::i;:::-;9414:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;9393:33:32;;::::1;::::0;;9436:30;;::::1;:18;::::0;;::::1;:30:::0;;;;9476:22;;::::1;:14;::::0;;::::1;:22:::0;;;;9508:12:::1;::::0;::::1;:18:::0;;;9536:17:::1;::::0;::::1;:28:::0;;;9574;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;;;9594:8;;;;;;9574:28;::::1;9594:8:::0;;;;9574:28;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;;;;9574:17:32::1;::::0;::::1;:28:::0;9620:27:::1;9574:8:::0;9620:17:::1;:27::i;:::-;9613:34;;;;;9044:610:::0;;;;;;;;;:::o;3310:813:13:-;3609:32;;:::i;:::-;3677:12;:10;:12::i;:::-;-1:-1:-1;;;;;3652:37:13;;;;;3699:34;;;:22;;;;:34;;;;3743:26;;;:18;;;;:26;;;;3779:16;;;:22;;;3811:21;;;:32;;;3853;;;;;;;;;;;;;;;;;;;;;3877:8;;;;;;3853:32;;3877:8;;;;3853:32;;;;;;;;;-1:-1:-1;;;;3853:21:13;;;:32;3895:23;;;:36;;;3941:38;;;;;;;;;;;;;;;;;;;;3968:11;;;;;;3941:38;;;3968:11;;3941:38;3968:11;3941:38;;;;;;;;;-1:-1:-1;;;;3941:24:13;;;:38;3989;;;;;;;;;;;;;;;;;;;;4016:11;;;;;;3989:38;;;4016:11;;3989:38;4016:11;3989:38;;;;;;;;;-1:-1:-1;;;;3989:24:13;;;:38;4038:23;3989:12;4038:9;:23::i;:::-;4090:25;;;;4077:39;;;;;;;;;;;;;;;;;4090:25;4077:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3310:813;;;;;;;;;;;;:::o;530:34:25:-;;;:::o;3677:948::-;3772:16;:14;:16::i;:::-;3798:31;3816:12;:10;:12::i;:::-;3798:17;:31::i;:::-;3865:9;:16;3933:20;3925:51;;;;;-1:-1:-1;;;3925:51:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;4008:14;;4041:15;4033:47;;;;;-1:-1:-1;;;4033:47:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;4111:13;;4143:23;;;4135:61;;;;;-1:-1:-1;;;4135:61:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;4229:10;;4207:19;4250:369;4275:10;4270:1;:15;4250:369;;4306:13;4322:7;4330:1;4322:10;;;;;;;;;;;;;;4306:26;;4364:11;4355:5;:20;;4347:52;;;;;-1:-1:-1;;;4347:52:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;4429:15;4421:5;:23;4413:61;;;;;-1:-1:-1;;;4413:61:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;4489:13;4505:6;4512:1;4505:9;;;;;;;;;;;;;;4489:25;;4537:5;4546:1;4537:10;;4529:40;;;;;-1:-1:-1;;;4529:40:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;4603:5;4584:9;4594:5;4584:16;;;;;;;;;;;;;;;;;:24;-1:-1:-1;;4287:3:25;;4250:369;;;;3677:948;;;;;;:::o;2581:98:13:-;2628:16;2663:9;2656:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2581:98;:::o;10463:1027:32:-;10573:19;10841:14;;;:9;:14;;;;;10573:19;;;;;;10730:23;;;;10573:19;10882:23;:14;;;:21;:23::i;:::-;10930:19;;;-1:-1:-1;10865:40:32;-1:-1:-1;10967:16:32;10959:51;;;;;-1:-1:-1;;;10959:51:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;11038:23;;;;11096:30;;;;11160:29;;;;11038:23;;-1:-1:-1;11096:30:32;-1:-1:-1;;;;;;11160:29:32;;-1:-1:-1;11223:6:32;11209:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11209:21:32;;11200:30;;11263:6;11249:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11249:21:32;;11240:30;;11285:9;11280:204;11304:6;11300:1;:10;11280:204;;;11332:13;;11364:20;:14;;;11382:1;11364:17;:20::i;:::-;11331:53;;;;11426:5;11418:14;;11398:6;11405:1;11398:9;;;;;;;;;;;;;:35;-1:-1:-1;;;;;11398:35:32;;;-1:-1:-1;;;;;11398:35:32;;;;;11467:5;11459:14;;11447:6;11454:1;11447:9;;;;;;;;;;;;;;;;;:26;-1:-1:-1;;11312:3:32;;11280:204;;;;10463:1027;;;;;;;;;:::o;2166:95:13:-;2241:13;2166:95;:::o;4169:114:32:-;988:10:6;;980:50;;;;;-1:-1:-1;;;980:50:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;4225:31:32::1;4243:12;:10;:12::i;4225:31::-;4266:10;:8;:10::i;:::-;4169:114::o:0;2383:112:13:-;2467:21;2383:112;:::o;1698:98:32:-;1751:44;1698:98;:::o;482:18:5:-;;;;;;:::o;5032:943:32:-;5176:31;5194:12;:10;:12::i;5176:31::-;5234:13;;5275;;5265:23;;5257:61;;;;;-1:-1:-1;;;5257:61:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;5328:23;5354:14;;;:9;:14;;;;;5386:19;;5378:59;;;;;-1:-1:-1;;;5378:59:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;5482:14;;;5510:11;5506:410;;5537:21;5561:20;:11;:18;:20::i;:::-;5537:44;;5600:9;5595:236;5619:13;5615:1;:17;5595:236;;;5737:13;5756:17;:11;5737:13;5756:14;:17::i;:::-;-1:-1:-1;5736:37:32;-1:-1:-1;5791:25:32;:11;5736:37;5791:18;:25::i;:::-;-1:-1:-1;;5634:3:32;;5595:236;;;;5506:410;;;;5861:44;5877:11;5890:6;5898;5861:15;:44::i;:::-;5948:3;5931:37;5953:6;5961;5931:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5032:943;;;;;;:::o;11621:110::-;11672:21;11712:5;:12;;11705:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11621:110;:::o;660:263:8:-;733:31;751:12;:10;:12::i;733:31::-;-1:-1:-1;;;;;782:27:8;;774:60;;;;;-1:-1:-1;;;774:60:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;844:12;:28;;-1:-1:-1;;844:28:8;-1:-1:-1;;;;;844:28:8;;;;;;;;;;;887:29;;;903:12;;;;887:29;;;;;;;;;;;;;660:263;:::o;3787:110:32:-;988:10:6;;980:50;;;;;-1:-1:-1;;;980:50:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;3841:31:32::1;3859:12;:10;:12::i;3841:31::-;3882:8;:6;:8::i;379:35:8:-:0;;;-1:-1:-1;;;;;379:35:8;;:::o;1835:231:13:-;1995:9;:16;1979:80;;1990:3;;2013:22;2037:21;1979:10;:80::i;:::-;1835:231;;;:::o;1114:94:1:-;1169:7;1195:6;-1:-1:-1;;;;;1195:6:1;1114:94;:::o;1802:69:32:-;-1:-1:-1;;1802:69:32;:::o;603:26:25:-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;603:26:25;:::o;6962:537:32:-;988:10:6;;980:50;;;;;-1:-1:-1;;;980:50:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;7183:19:32::1;:17;:19::i;:::-;7212:28;;:::i;:::-;7271:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;7250:33:32;;::::1;::::0;;7293:30;;::::1;:18;::::0;;::::1;:30:::0;;;;7333:22;;::::1;:14;::::0;;::::1;:22:::0;;;;7365:12:::1;::::0;::::1;:18:::0;;;7393:17:::1;::::0;::::1;:28:::0;;;7431;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;;;7451:8;;;;;;7431:28;::::1;7451:8:::0;;;;7431:28;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;;;;7431:17:32::1;::::0;::::1;:28:::0;7470:22:::1;7431:8:::0;7470:12:::1;:22::i;3396:118::-:0;3438:31;3456:12;:10;:12::i;3438:31::-;3479:8;:6;:8::i;4745:104:25:-;4826:9;:16;4745:104;:::o;1806:633::-;1875:31;1893:12;:10;:12::i;1875:31::-;1936:13;;1968:14;1960:45;;;;;-1:-1:-1;;;1960:45:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;2021:9;2016:182;2041:9;2036:1;:14;2016:182;;2071:13;2087:6;2094:1;2087:9;;;;;;;;;;;;;;2071:25;;2119:5;2128:1;2119:10;;2111:40;;;;;-1:-1:-1;;;2111:40:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;2166:9;:21;;;;;;;;-1:-1:-1;2166:21:25;;;;;;;;;;2052:3;2016:182;;;;2212:14;:5;:12;:14::i;:::-;:19;2208:225;;2247:11;2261;:5;2247:11;2261:8;:11::i;:::-;2286:23;2312:14;;;:9;:14;;;;;2340:32;;;;;;-1:-1:-1;2386:23:25;:36;;;;;;-1:-1:-1;2208:225:25;1806:633;;:::o;571:25::-;;;;:::o;1276:85:6:-;1344:10;;1276:85;:::o;1448:197:1:-;1527:31;1545:12;:10;:12::i;1527:31::-;1568:6;:17;;-1:-1:-1;;1568:17:1;-1:-1:-1;;;;;1568:17:1;;;;;;;;;1600:38;;1568:17;;1621:6;;;1600:38;;1568:6;1600:38;1448:197;:::o;572:96:5:-;634:6;;;;633:7;625:36;;;;;-1:-1:-1;;;625:36:5;;;;;;;;;;;;;;;;;;;;;;;;;;;355:104:7;442:10;355:104;:::o;882:291:30:-;970:18;990:28;1030:21;1042:8;1030:11;:21::i;:::-;1061:18;1070:8;1061;:18::i;:::-;-1:-1:-1;;1103:19:30;;;;1146:20;;;;;1103:19;;882:291::o;5527:489:25:-;5612:25;5628:8;5612:15;:25::i;:::-;5686:8;:17;;;5672:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5672:32:25;-1:-1:-1;5648:21:25;;;:56;5769:10;;5715:18;;5790:185;5811:8;:17;;;5797:10;:31;5790:185;;5888:9;5898:11;5888:22;;;;;;;;;;;;;;;;5880:31;;5844:8;:21;;;5866:10;5844:33;;;;;;;;;;;;;;;;;:67;5925:12;;;;;5951:13;5790:185;;;5985:10;:24;-1:-1:-1;;5527:489:25:o;674:96:5:-;732:6;;;;724:39;;;;;-1:-1:-1;;;724:39:5;;;;;;;;;;;;;;;;;;;;;;;;;;;1770:136:1;1860:4;-1:-1:-1;;;;;1860:10:1;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1860:12:1;-1:-1:-1;;;;;1849:23:1;;;;;;1841:58;;;;;-1:-1:-1;;;1841:58:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;1770:136;:::o;4367:107:2:-;4449:18;;4367:107::o;4827:264::-;4930:18;;4894:7;;;;4930:26;-1:-1:-1;4922:67:2;;;;;-1:-1:-1;;;4922:67:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;5000:22;5025:3;:11;;5037:5;5025:18;;;;;;;;;;;;;;;;;;5000:43;;5061:5;:9;;;5072:5;:11;;;5053:31;;;;;4827:264;;;;;:::o;1166:131:5:-;1213:16;:14;:16::i;:::-;1239:6;:14;;-1:-1:-1;;1239:14:5;;;1268:22;1277:12;:10;:12::i;:::-;1268:22;;;-1:-1:-1;;;;;1268:22:5;;;;;;;;;;;;;;1166:131::o;2556:1520:2:-;2620:4;2753:16;;;:11;;;:16;;;;;;2784:13;;2780:1290;;3221:18;;-1:-1:-1;;3175:12:2;;;;3221:22;;;;3151:21;;3221:3;;:22;;3512;;;;;;;;;;;;;;;;3483:51;;3655:9;3626:3;:11;;3638:13;3626:26;;;;;;;;;;;;;;;;:38;;:26;;;;;:38;;;;;;;;;;;;;;;3742:13;;3730:26;;:11;;;:26;;;;;3759:17;;;3730:46;;3882:17;;3730:3;;3882:17;;;;;;;;;;;;;;-1:-1:-1;;3882:17:2;;;;;;;;;;;;;;;;;;;;;3974:16;;;:11;;;:16;;;;;;3967:23;;;;3882:17;-1:-1:-1;4005:11:2;;-1:-1:-1;;;;4005:11:2;2780:1290;4054:5;4047:12;;;2556:1520;;;;;:::o;13862:663:32:-;14032:9;14027:403;14051:6;:13;14047:1;:17;14027:403;;;14085:13;14101:6;14108:1;14101:9;;;;;;;;;;;;;;14085:25;;14149:1;-1:-1:-1;;;;;14132:19:32;:5;-1:-1:-1;;;;;14132:19:32;;;14124:56;;;;;-1:-1:-1;;;14124:56:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;14194:13;14210:6;14217:1;14210:9;;;;;;;;;;;;;;14194:25;;14237:5;14246:1;14237:10;14233:187;;;14267:43;:11;-1:-1:-1;;;;;14294:14:32;;14267:18;:43::i;:::-;;14233:187;;;14349:56;:11;-1:-1:-1;;;;;14373:14:32;;14398:5;14349:15;:56::i;:::-;;14233:187;-1:-1:-1;;14066:3:32;;14027:403;;;;14471:21;14447:20;:11;:18;:20::i;:::-;:45;;14439:79;;;;;-1:-1:-1;;;14439:79:32;;;;;;;;;;;;;;;;;;;;;;;;;;;905:129:5;950:19;:17;:19::i;:::-;979:6;:13;;-1:-1:-1;;979:13:5;988:4;979:13;;;1007:20;1014:12;:10;:12::i;12511:877:32:-;12701:16;12693:46;;;;;-1:-1:-1;;;12693:46:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;12774:13;12757:14;:5;:12;:14::i;:::-;:30;12749:62;;;;;-1:-1:-1;;;12749:62:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;12829:14;:5;12839:3;12829:9;:14::i;:::-;12821:52;;;;;-1:-1:-1;;;12821:52:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12887:35:32;;;12883:140;;12946:34;:21;-1:-1:-1;;;;;12946:32:32;;:34::i;:::-;12938:74;;;;;-1:-1:-1;;;12938:74:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;13032:23;13058:14;;;:9;:14;;;;;;;;;13082:33;;;13125:23;;;:37;;;13172:30;;;:55;;;13237:29;;;:53;;-1:-1:-1;;;;;13237:53:32;;-1:-1:-1;;13237:53:32;;;;;;;;13305:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12511:877;;;;;:::o;1275:225:30:-;1354:21;1366:8;1354:11;:21::i;:::-;1385:18;1394:8;1385;:18::i;:::-;1413;1422:8;1413;:18::i;:::-;1441:19;1451:8;1441:9;:19::i;:::-;1470:23;1484:8;1470:13;:23::i;1496:131:6:-;789:10;;:15;781:46;;;;;-1:-1:-1;;;781:46:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;1569:15:::1;1556:10;:28:::0;1599:21:::1;1607:12;:10;:12::i;4301:193:3:-:0;4395:17;;4368:7;;4395:25;-1:-1:-1;4387:66:3;;;;;-1:-1:-1;;;4387:66:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;4470:3;:10;;4481:5;4470:17;;;;;;;;;;;;;;;;4463:24;;4301:193;;;;:::o;15465:852:32:-;15565:18;;;;-1:-1:-1;;;;;15565:32:32;15557:73;;;;;-1:-1:-1;;;15557:73:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;15648:14;;;;-1:-1:-1;;;;;15648:28:32;15640:65;;;;;-1:-1:-1;;;15640:65:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;15723:17;;;;15715:63;;;;;-1:-1:-1;;;15715:63:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;15824:12;;;;15788:23;15814;;;:9;:23;;;;;15855:19;;15847:59;;;;;-1:-1:-1;;;15847:59:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;15958:8;:17;;;15924:7;:30;;;:51;;15916:88;;;;;-1:-1:-1;;;15916:88:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;16018:19;;-1:-1:-1;;16018:39:32;16014:152;;16108:8;:17;;;16081:7;:23;;;:44;;16073:82;;;;;-1:-1:-1;;;16073:82:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;16210:14;;;;-1:-1:-1;;;;;16202:23:32;16244:33;:14;;;16202:23;16244;:33::i;:::-;16236:74;;;;;-1:-1:-1;;;16236:74:32;;;;;;;;;;;;;;;;;;;;;;;;;;;1788:388:26;1913:12;;;;1877:23;1903;;;:9;:23;;;;;1944:19;;1936:58;;;;;-1:-1:-1;;;1936:58:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;2033:14;;;2004:26;2077:28;2088:8;2033:14;2077:10;:28::i;:::-;2057:48;;2137:32;2151:8;:17;;;2137:9;:13;;:32;;;;:::i;:::-;2115:19;;;;:54;;;;-1:-1:-1;;;1788:388:26:o;16954:308:32:-;17075:12;;;;17039:23;17065;;;:9;:23;;;;;17102:19;;-1:-1:-1;;17102:39:32;17098:158;;17227:17;;;;17199:23;;;;:46;;:27;:46::i;:::-;17167:12;;;;17157:23;;;;:9;:23;;;;;:39;;:88;16954:308;;:::o;1678:710:2:-;1784:4;1917:16;;;:11;;;:16;;;;;;1948:13;1944:438;;-1:-1:-1;;2043:34:2;;;;;;;;;;;;;;;;;;2026:52;;;;;;;;:11;:52;;;;;;;;;;;;;;;;;;;;;;;;2232:18;;2213:16;;;:11;;;:16;;;;;;;:37;2264:11;;1944:438;2340:5;2306:3;:11;;2329:1;2318:8;:12;2306:25;;;;;;;;;;;;;;;;;;:31;;:39;;;;2366:5;2359:12;;;1678:710;;;;;;:::o;1481:400:3:-;1544:4;1565:20;1574:3;1579:5;1565:8;:20::i;:::-;1560:315;;-1:-1:-1;1601:22:3;;;;;;;;:10;:22;;;;;;;;;;;;;1779:17;;1758:18;;;:11;;;:18;;;;;;:38;;;;1810:11;;1560:315;-1:-1:-1;1859:5:3;1852:12;;913:377:10;1229:20;1275:8;;;913:377::o;2637:566:26:-;2725:14;;;;-1:-1:-1;;;;;2725:27:26;1751:44:32;2725:27:26;2721:476;;;2789:8;:19;;;2776:9;:32;;2768:67;;;;;-1:-1:-1;;;2768:67:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;2850:12;;2872:19;;;;2850:42;;-1:-1:-1;;;;;2850:12:26;;;;:42;;;;;2872:19;2850:12;:42;:12;:42;2872:19;2850:12;:42;;;;;;;;;;;;;;;;;;;;;2907:14;2924:34;2938:8;:19;;;2924:9;:13;;:34;;;;:::i;:::-;2907:51;-1:-1:-1;2977:11:26;;2973:85;;3008:18;;:35;;-1:-1:-1;;;;;3008:27:26;;;;:35;;;;;3036:6;;3008:18;:35;:18;:35;3036:6;3008:27;:35;;;;;;;;;;;;;;;;;;;;;2973:85;2721:476;;;;3088:98;3138:12;:10;:12::i;:::-;3152;;3166:19;;;;3102:14;;;;-1:-1:-1;;;;;3088:49:26;;;;:98;3152:12;;3088:49;:98::i;17993:1293:32:-;18201:8;:12;;;18173:8;:14;;;-1:-1:-1;;;;;18087:328:32;18109:8;:18;;;-1:-1:-1;;;;;18087:328:32;;18141:8;:18;;;18227:8;:17;;;18258:8;:17;;;18289:8;:19;;;18339:8;:20;;;18361:8;:20;;;18383:8;:21;;;18322:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18087:328;;;;-1:-1:-1;;;;;18087:328:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18087:328:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18468:12;;;;18426:29;18458:23;;;:9;:23;;;;;:45;;;-1:-1:-1;;;;;18458:45:32;18517:35;;18513:767;;19095:82;;;18593:584;;;18624:21;-1:-1:-1;;;;;18593:84:32;;18699:8;:18;;;18739:8;:18;;;18779:8;:14;;;18815:8;:12;;;18849:8;:17;;;18888:8;:17;;;18927:8;:19;;;18968:8;:20;;;19010:8;:20;;;19052:8;:21;;;18593:498;;;;;;;;;;;;;-1:-1:-1;;;;;18593:498:32;;;;;;-1:-1:-1;;;;;18593:498:32;;;;;;-1:-1:-1;;;;;18593:498:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18593:498:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18593:498:32;:584;;;18568:701;;;;;-1:-1:-1;;;18568:701:32;;;;;;;;;;;;;;;;;;;;;;;;;;;4155:122:2;4226:4;4249:16;;;:11;;;;;:16;;;;;;:21;;;4155:122::o;3773:278:26:-;3958:14;;;;3882:17;;3931:44;;:6;;-1:-1:-1;;;;;3950:23:26;3931:10;:44::i;:::-;3923:53;-1:-1:-1;3994:14:26;3986:58;;;;;-1:-1:-1;;;3986:58:26;;;;;;;;;;;;;;;;;;;;;;;;;;;3538:215:11;3596:7;3619:6;3615:20;;-1:-1:-1;3634:1:11;3627:8;;3615:20;3657:5;;;3661:1;3657;:5;:1;3680:5;;;;;:10;3672:56;;;;-1:-1:-1;;;3672:56:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3136:155;3194:7;3226:1;3221;:6;;3213:49;;;;;-1:-1:-1;;;3213:49:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3279:5:11;;;3136:155::o;645:259:9:-;828:68;;;-1:-1:-1;;;;;828:68:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;851:27;828:68;;;793:104;;821:5;;793:27;:104::i;:::-;645:259;;;;:::o;5243:298:2:-;5309:7;5347:16;;;:11;;;:16;;;;;;5381:13;5373:50;;;;;-1:-1:-1;;;5373:50:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;5476:3;:11;;5499:1;5488:8;:12;5476:25;;;;;;;;;;;;;;;;;;:31;;;5469:38;;;5243:298;;;;:::o;1147:870:9:-;1272:5;1296:19;-1:-1:-1;;;;;1296:17:9;;;:19::i;:::-;1288:58;;;;;-1:-1:-1;;;1288:58:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;1417:12;1431:17;1452:6;-1:-1:-1;;;;;1452:11:9;1464:8;1452:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1416:57;;;;1487:7;1483:528;;;1514:11;;:16;1510:122;;1569:4;1558:24;;;;;;;;;;;;;;;-1:-1:-1;1558:24:9;1550:67;;;;;-1:-1:-1;;;1550:67:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;1483:528;;;1720:11;;1716:95;;1756:40;;;-1:-1:-1;;;1756:40:9;;;;;;;;;;;;;;;;;;;;;;;;;;;1716:95;1938:4;1932:11;1982:4;1975;1971:2;1967:13;1960:27;1902:99;1147:870;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o"},"methodIdentifiers":{"SUPPLY_UNLIMITED()":"9e049545","TOKEN_ETH()":"5c4fafc7","addSupply(uint256[])":"cf3ae77b","createSku(bytes32,uint256,address)":"85b3cfac","estimatePurchase(address,address,bytes32,uint256,bytes)":"1323b066","getSkuCapacity()":"3628bd93","getSkuInfo(bytes32)":"2a8a45bc","getSkus()":"61bd3851","getTokenList()":"273cbaa0","getTokensPerSkuCapacity()":"451b31a2","getTotalSupply()":"c4e41b22","inventory()":"15d52a5c","owner()":"8da5cb5b","pause()":"8456cb59","paused()":"5c975abb","payoutWallet()":"8488bb4e","purchaseFor(address,address,bytes32,uint256,bytes)":"a963b257","setPayoutWallet(address)":"6b8f9c43","setSupply(uint256[],uint256[])":"23f927c9","start()":"be9a6555","startedAt()":"f21f537d","tokenIndex()":"d55f9273","tokenList(uint256)":"9ead7222","transferOwnership(address)":"f2fde38b","underscoreDelivery(address,address,bytes32,uint256,bytes,uint256,bytes32[],bytes32[])":"15469171","unpause()":"3f4ba83a","updateSkuPricing(bytes32,address[],uint256[])":"5e6e9f70"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"inventory_\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"payoutWallet\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokensPerSkuCapacity\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32[]\",\"name\":\"tokens\",\"type\":\"bytes32[]\"}],\"name\":\"DeliveryData\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32[]\",\"name\":\"names\",\"type\":\"bytes32[]\"},{\"indexed\":false,\"internalType\":\"bytes32[]\",\"name\":\"values\",\"type\":\"bytes32[]\"}],\"name\":\"MagicValues\",\"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\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"payoutWallet_\",\"type\":\"address\"}],\"name\":\"PayoutWalletSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"purchaser\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalPrice\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extData\",\"type\":\"bytes\"}],\"name\":\"Purchase\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"maxQuantityPerPurchase\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"notificationsReceiver\",\"type\":\"address\"}],\"name\":\"SkuCreation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"prices\",\"type\":\"uint256[]\"}],\"name\":\"SkuPricingUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Started\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"SUPPLY_UNLIMITED\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TOKEN_ETH\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"tokens\",\"type\":\"uint256[]\"}],\"name\":\"addSupply\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"maxQuantityPerPurchase\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"notificationsReceiver\",\"type\":\"address\"}],\"name\":\"createSku\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"estimatePurchase\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalPrice\",\"type\":\"uint256\"},{\"internalType\":\"bytes32[]\",\"name\":\"pricingData\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSkuCapacity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"}],\"name\":\"getSkuInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"remainingSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxQuantityPerPurchase\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"notificationsReceiver\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"prices\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSkus\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"skus\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTokenList\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTokensPerSkuCapacity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inventory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"payoutWallet\",\"outputs\":[{\"internalType\":\"address payable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"purchaseFor\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"payoutWallet_\",\"type\":\"address\"}],\"name\":\"setPayoutWallet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"indexes\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokens\",\"type\":\"uint256[]\"}],\"name\":\"setSupply\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"start\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"tokenList\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"totalPrice\",\"type\":\"uint256\"},{\"internalType\":\"bytes32[]\",\"name\":\"pricingData\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"paymentData\",\"type\":\"bytes32[]\"}],\"name\":\"underscoreDelivery\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"prices\",\"type\":\"uint256[]\"}],\"name\":\"updateSkuPricing\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"addSupply(uint256[])\":{\"details\":\"Reverts if called by any other than the contract owner.Reverts if `tokens` is empty.Reverts if any of `tokens` are zero.The list of tokens specified (in sequence) will be appended to the end of the ordered  sale supply list.\",\"params\":{\"tokens\":\"The list of tokens to add.\"}},\"constructor\":{\"details\":\"Reverts if `inventory_` is the zero address.Emits the `MagicValues` event.Emits the `Paused` event.\",\"params\":{\"inventory_\":\"The IFixedOrderInventoryTransferable contract from which the sale inventory NFTs are attributed from.\",\"payoutWallet\":\"The payout wallet.\",\"tokensPerSkuCapacity\":\"the cap for the number of tokens managed per SKU.\"}},\"createSku(bytes32,uint256,address)\":{\"details\":\"Reverts if the initial sale supply is empty.Reverts if `sku` already exists.Reverts if `notificationsReceiver` is not the zero address and is not a contract  address.Reverts if the update results in too many SKUs.Emits the `SkuCreation` event.\",\"params\":{\"maxQuantityPerPurchase\":\"The maximum allowed quantity for a single purchase.\",\"notificationsReceiver\":\"The purchase notifications receiver contract address. If  set to the zero address, the notification is not enabled.\",\"sku\":\"The SKU identifier.\"}},\"estimatePurchase(address,address,bytes32,uint256,bytes)\":{\"details\":\"This function MUST compute the same price as `purchaseFor` would in identical conditions (same arguments, same point in time).If an implementer contract uses the `pricingData` field, it SHOULD document how to interpret the values.Reverts if the sale has not started.Reverts if the sale is paused.Reverts if `recipient` is the zero address.Reverts if `token` is the zero address.Reverts if `quantity` is zero.Reverts if `quantity` is greater than the maximum purchase quantity.Reverts if `quantity` is greater than the remaining supply.Reverts if `sku` does not exist.Reverts if `sku` exists but does not have a price set for `token`.\",\"params\":{\"quantity\":\"The quantity used to calculate the total price amount.\",\"recipient\":\"The recipient of the purchase used to calculate the total price amount.\",\"sku\":\"The identifier of the SKU used to calculate the total price amount.\",\"token\":\"The payment token used to calculate the total price amount.\",\"userData\":\"Optional extra user input data.\"},\"returns\":{\"pricingData\":\"Implementation-specific extra pricing data, such as details about discounts applied.  If not empty, the implementer MUST document how to interepret the values.\",\"totalPrice\":\"The computed total price.\"}},\"getSkuCapacity()\":{\"returns\":{\"_0\":\"The sale SKU capacity.\"}},\"getSkuInfo(bytes32)\":{\"details\":\"WARNING: it is the responsibility of the implementer to ensure that the number of payment tokens is bounded, so that this function does not run out of gas.Reverts if `sku` does not exist.\",\"params\":{\"sku\":\"The SKU identifier.\"},\"returns\":{\"maxQuantityPerPurchase\":\"The maximum allowed quantity for a single purchase.\",\"notificationsReceiver\":\"The address of a contract on which to call the `onPurchaseNotificationReceived` function.\",\"prices\":\"The list of associated prices for each of the `tokens`.\",\"remainingSupply\":\"The remaining supply for sale.\",\"tokens\":\"The list of supported payment tokens.\",\"totalSupply\":\"The initial total supply for sale.\"}},\"getSkus()\":{\"returns\":{\"skus\":\"the list of created SKU identifiers.\"}},\"getTokenList()\":{\"returns\":{\"_0\":\"The token list.\"}},\"getTokensPerSkuCapacity()\":{\"returns\":{\"_0\":\"The sale tokens-per-sku capacity.\"}},\"getTotalSupply()\":{\"returns\":{\"_0\":\"The amount of total sale supply.\"}},\"pause()\":{\"details\":\"Emits the `Paused` event.Reverts if called by any other than the contract owner.Reverts if the contract has not been started yet.Reverts if the contract is already paused.\"},\"purchaseFor(address,address,bytes32,uint256,bytes)\":{\"details\":\"Reverts if the sale has not started.Reverts if the sale is paused.Reverts if `recipient` is the zero address.Reverts if `token` is the zero address.Reverts if `quantity` is zero.Reverts if `quantity` is greater than the maximum purchase quantity.Reverts if `quantity` is greater than the remaining supply.Reverts if `sku` does not exist.Reverts if `sku` exists but does not have a price set for `token`.Emits the Purchase event.\",\"params\":{\"quantity\":\"The quantity to purchase.\",\"recipient\":\"The recipient of the purchase.\",\"sku\":\"The identifier of the SKU to purchase.\",\"token\":\"The token to use as the payment currency.\",\"userData\":\"Optional extra user input data.\"}},\"setSupply(uint256[],uint256[])\":{\"details\":\"Reverts if called by any other than the contract owner.Reverts if called when the contract is not paused.Reverts if the sale supply is empty.Reverts if the lengths of `indexes` and `tokens` do not match.Reverts if `indexes` is zero length.Reverts if any of `indexes` are less than `tokenIndex`.Reverts if any of `indexes` are out-of-bounds.Reverts it `tokens` is zero length.Reverts if any of `tokens` are zero.Does not allow resizing of the sale supply, only the re-ordering or replacment of  existing tokens.Because the elements of `indexes` and `tokens` are processed in sequence, duplicate  entries in either array are permitted, which allows for ordered operations to be performed  on the ordered sale supply list in the same transaction.\",\"params\":{\"indexes\":\"The list of indexes in the ordered sale supply list whose element values  will be set.\",\"tokens\":\"The new tokens to set in the ordered sale supply list at the corresponding  positions provided by `indexes`.\"}},\"start()\":{\"details\":\"Emits the `Started` event.Emits the `Unpaused` event.Reverts if called by any other than the contract owner.Reverts if the contract has already been started.Reverts if the contract is not paused.\"},\"startedAt()\":{\"returns\":{\"_0\":\"The timestamp when the contract entered the started state.\"}},\"transferOwnership(address)\":{\"details\":\"Reverts if the sender is not the current contract owner.\",\"params\":{\"newOwner\":\"the address of the new owner. Use the zero address to renounce the ownership.\"}},\"underscoreDelivery(address,address,bytes32,uint256,bytes,uint256,bytes32[],bytes32[])\":{\"details\":\"Emits the DeliveryData event.\",\"params\":{\"paymentData\":\"Data set by the `_payment()` puchase lifecycle function.\",\"pricingData\":\"Data set by the `_pricing()` purchase lifecycle function.\",\"quantity\":\"The quantity to purchase.\",\"recipient\":\"The recipient of the purchase.\",\"sku\":\"The identifier of the SKU to purchase.\",\"token\":\"The token to use as the payment currency.\",\"totalPrice\":\"The amount of `token` paid.\",\"userData\":\"Optional extra user input data.\"}},\"unpause()\":{\"details\":\"Emits the `Unpaused` event.Reverts if called by any other than the contract owner.Reverts if the contract has not been started yet.Reverts if the contract is not paused.\"},\"updateSkuPricing(bytes32,address[],uint256[])\":{\"details\":\"Reverts if called by any other than the contract owner.Reverts if `tokens` and `prices` have different lengths.Reverts if `sku` does not exist.Reverts if one of the `tokens` is the zero address.Reverts if the update results in too many tokens for the SKU.Emits the `SkuPricingUpdate` event.\",\"params\":{\"prices\":\"The list of prices to apply for each payment token.  Zero price values are used to disable a payment token.\",\"sku\":\"The identifier of the SKU.\",\"tokens\":\"The list of payment tokens to update.  If empty, disable all the existing payment tokens.\"}}},\"title\":\"FixedOrderInventorySaleMock A FixedPricesSale contract mock implementation that handles the purchase of NFTs of an inventory contract to a receipient. The provisioning of the NFTs occurs in a sequential order defined by a token list. Only a single SKU is supported.\",\"version\":1},\"userdoc\":{\"events\":{\"MagicValues(bytes32[],bytes32[])\":{\"notice\":\"Event emitted to notify about the magic values necessary for interfacing with this contract.\"},\"OwnershipTransferred(address,address)\":{\"notice\":\"Event emited when ownership of a contract changes.\"},\"Purchase(address,address,address,bytes32,uint256,bytes,uint256,bytes)\":{\"notice\":\"Event emitted to notify about a purchase.\"},\"SkuCreation(bytes32,uint256,uint256,address)\":{\"notice\":\"Event emitted to notify about the creation of a SKU.\"},\"SkuPricingUpdate(bytes32,address[],uint256[])\":{\"notice\":\"Event emitted to notify about a change in the pricing of a SKU.\"}},\"kind\":\"user\",\"methods\":{\"SUPPLY_UNLIMITED()\":{\"notice\":\"Returns the magic value used to represent an infinite, never-decreasing SKU's supply.\"},\"TOKEN_ETH()\":{\"notice\":\"Returns the magic value used to represent the ETH payment token.\"},\"addSupply(uint256[])\":{\"notice\":\"Adds additional tokens to the sale supply.\"},\"constructor\":{\"notice\":\"Constructor.\"},\"createSku(bytes32,uint256,address)\":{\"notice\":\"Creates an SKU.\"},\"estimatePurchase(address,address,bytes32,uint256,bytes)\":{\"notice\":\"Estimates the computed final total amount to pay for a purchase, including any potential discount.\"},\"getSkuCapacity()\":{\"notice\":\"Retrieves the sale SKU capacity.\"},\"getSkuInfo(bytes32)\":{\"notice\":\"Returns the information relative to a SKU.\"},\"getSkus()\":{\"notice\":\"Returns the list of created SKU identifiers.\"},\"getTokenList()\":{\"notice\":\"Retrieves the token list.\"},\"getTokensPerSkuCapacity()\":{\"notice\":\"Retrieves the sale tokens-per-sku capacity.\"},\"getTotalSupply()\":{\"notice\":\"Retrieves the amount of total sale supply.\"},\"owner()\":{\"notice\":\"Gets the address of the current contract owner.\"},\"pause()\":{\"notice\":\"Pauses the contract.\"},\"purchaseFor(address,address,bytes32,uint256,bytes)\":{\"notice\":\"Performs a purchase.\"},\"setSupply(uint256[],uint256[])\":{\"notice\":\"Sets the tokens of the ordered sale supply list.\"},\"start()\":{\"notice\":\"Actvates, or 'starts', the contract.\"},\"startedAt()\":{\"notice\":\"Returns the timestamp when the contract entered the started state.\"},\"transferOwnership(address)\":{\"notice\":\"See {IERC173-transferOwnership(address)}\"},\"underscoreDelivery(address,address,bytes32,uint256,bytes,uint256,bytes32[],bytes32[])\":{\"notice\":\"Calls the internal `_delivery()` purchase lifecycle function.\"},\"unpause()\":{\"notice\":\"Resumes the contract.\"},\"updateSkuPricing(bytes32,address[],uint256[])\":{\"notice\":\"Sets the token prices for the specified product SKU.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/mocks/sale/FixedOrderInventorySaleMock.sol\":\"FixedOrderInventorySaleMock\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":2000},\"remappings\":[]},\"sources\":{\"@animoca/ethereum-contracts-core-1.1.2/contracts/access/IERC173.sol\":{\"keccak256\":\"0xeb8a2c766577e782ad66ce8591a8d206b0f37b657754cc7a43beeb2d9343873b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3b404032cb4e21bae47b5e9af1290e41117040b10f69e3b2f93522b97e329b59\",\"dweb:/ipfs/QmRJHYkkvWcXGuFJdbqV18yh9QUk5g4zETrrxD2HnU3iRw\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/access/Ownable.sol\":{\"keccak256\":\"0xbfd1129669bb7c154ee84b3aa1484e421ca68cb725c1039a897629631fd8b096\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://edc634aeae7272726745b1cbbf116dfdde51833b71a143e94fe7de89e9b14566\",\"dweb:/ipfs/QmXtXckxdFM3VeLvsjMWhqt44WAf7XKVYKt9bUT7pyWbjH\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/algo/EnumMap.sol\":{\"keccak256\":\"0x12716c299c0965f4f87c2792cda2bd6029ba629c1172cdfef08d95cb2d7c283f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8d17c9bcb9bb0b9f399f6366f85b4db981df6e319f90b1b84910d6c44a79d032\",\"dweb:/ipfs/QmcqU3Gj8BP88yRV571GyCcW2UAjxq2xiqRofXFKYzkRXT\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/algo/EnumSet.sol\":{\"keccak256\":\"0x0aaea4634a7c64ef61b1ee8380912084427b45b6b4fc254b76d4b78e39f92d35\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://356a344f770d238dd864e8530d2ee05e350f269346cdf02432bc767e90520ce1\",\"dweb:/ipfs/QmfQfasYUY69X4wnzizPqT8P24YZTAPQGgFQErsSzV5sva\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/lifecycle/Pausable.sol\":{\"keccak256\":\"0xaa32d2e66a8edb68c64ffab1db69925248cf3f774c40b062e1e8ff2f4d5eebed\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://37451b151d862be6413ee1d18e3500a9100128f09926a2260d0ea058c3148d8a\",\"dweb:/ipfs/QmNLsaNioeA4LK8fVpqvSkQrCob1DkENcqQUurqDQbQK3G\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/lifecycle/Startable.sol\":{\"keccak256\":\"0x87e273577d4716cbbb325f03ec91207e1022bb7f56cdcda56593c603d2b4592f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d305d7c885971e1b82a363b4c9237c4201390610621a67605b89694ca9680e35\",\"dweb:/ipfs/QmWZX1cEfsfQSoEjBgBaBn3rKJxfyaJMpJyofpM9LG4tEp\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/metatx/ManagedIdentity.sol\":{\"keccak256\":\"0xe544b34375f19f9d1ad6e309f2fc56849263cc3c3c77009f6b38782f7dea9971\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3eb04bbf1c13ca82971c1cb2fdd96a23e2dfaa5df6a7d3b7e773dd3a760cf4e4\",\"dweb:/ipfs/QmXArzbKQgsMebfYVSQtaCLAs3rp3FYp6MKjSQnZoGDnjf\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/payment/PayoutWallet.sol\":{\"keccak256\":\"0x45ef7f68177cb61463f0ac759782f490821917fac3a71a18263c38193a9c6229\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://67839b4cc5897d723099ebfd8e0593e809b02cf422056efc1497f88dd7abb415\",\"dweb:/ipfs/QmYFRXvggoT8RzWB7SSJmfaBY3xkoVYNaGotTLBxjXqqxx\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/utils/ERC20Wrapper.sol\":{\"keccak256\":\"0x57922168ce32d2260022c0c7075137940e7d3cf0bb0d2213e62194050fbcf392\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b2dbba2defa32aa9edb54797f9b3f4ec1c1e5f71193deb99289136fa2f02ad79\",\"dweb:/ipfs/QmbUbzdwyWwjw3VW1o5oBKyuG9cFN7n8j55P8MDAg3sCuK\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/utils/types/AddressIsContract.sol\":{\"keccak256\":\"0x08373f750eedc1226b22b8ab1e156b0689c463590fa7dc40e99329b2da7b5d47\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fac8cdd7be4a83b47b18c8a48c1b1779a2590118049734665a6de91e77f27d35\",\"dweb:/ipfs/QmcAobvMpD5TisPTQSihPhywmVbPv1jDhffJCaZptM7YLv\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0xcc78a17dd88fa5a2edc60c8489e2f405c0913b377216a5b26b35656b2d0dab52\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://526dc85e1f9b9b45830e202568d267d93dde7a4fcccf4ad7798dadcd92304d3c\",\"dweb:/ipfs/QmaoXMB972J3cSDLtBq3xBo4jLwqD2uzXTwujtSPqkYVhR\"]},\"contracts/mocks/sale/FixedOrderInventorySaleMock.sol\":{\"keccak256\":\"0xe29edc3a605530e6b4ddec6a1253da5af30accc541a25e9682f79878c3da263f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4363077602e74f865cdc38521c69d39b9398f3abc8d23f3a0c3312ddad75b8b3\",\"dweb:/ipfs/QmTzgbL8BbVGMxwxGsMmyUaYb8TbUZjwaQuxT3zcnKbH2y\"]},\"contracts/sale/FixedOrderInventorySale.sol\":{\"keccak256\":\"0x01c4c65bb0baa3349682a5d6f875afe52d9323d56e43f7a11fd0e0a643257232\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d5b03ec27fb816bea622224440bea5aaee9a9c9180cc4c088906587374b34c07\",\"dweb:/ipfs/QmYzcUED3rvjkiBXeUQE9GMYkr6eW7fXednJKrRWCaQfy8\"]},\"contracts/sale/FixedPricesSale.sol\":{\"keccak256\":\"0xad902ccee0e2a42eea07b4c1e011202096daff92b43158a1569d139caf93b3f0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a702cc102db63b18e0581da5d6c01ee9320cec4b690c3117b4f77316fce45185\",\"dweb:/ipfs/QmWL7kh3kBSxDYjVoq9gN79UpKLrRBgJCHqquyaCE8UWhe\"]},\"contracts/sale/abstract/PurchaseLifeCycles.sol\":{\"keccak256\":\"0xaa18c1de5628dbd5ff281f06354b0156cb8bd24a6f5b490a787931c374266f6a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2e0731a0100fc1bda747176f169cacc5d61d89df1c78884d8843a834d58f7dcd\",\"dweb:/ipfs/QmZRDAxcvQ9QySqnmQLVM1i797NCqSJrJjKUneEmTufXBQ\"]},\"contracts/sale/abstract/Sale.sol\":{\"keccak256\":\"0x32dd01f3ca07c26e834f5784b4f2434c9cf309e3e30b2421a26da16ccf5d0e26\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://009418ea08f714b3f536d09e04d65ec39d3a4e9ba33e554ac8a26036cff8335b\",\"dweb:/ipfs/QmQvMXpCaaAwtHE4qxXYn2rxPgPzqzJM6aGuyz4nut5CH5\"]},\"contracts/sale/interfaces/IPurchaseNotificationsReceiver.sol\":{\"keccak256\":\"0xa85dcec80f528757a52dd66f88ae14845477e3ec733cb4d22af6db71d19e90f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://36e14e08666d5fd2af5b78848a84a11c666c65c94ca46f88e896c041da1dc1c7\",\"dweb:/ipfs/QmYiHM2DBVuX4adJfJMSvdrdfmDooHxhwGtmhNP7k2DY9n\"]},\"contracts/sale/interfaces/ISale.sol\":{\"keccak256\":\"0x0d731f242662465b2aa3ea9fe3581d0e77e3f61601390f68e4c9c75fc2103f5f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2a04d527397a7f75bd1d701fa7af263cb0799ef4d2f32dc44bb6c9598cee3625\",\"dweb:/ipfs/QmRnsakvvkU1yJyviEM8eytdCTUvjqsw1aqzdntycoG2aV\"]}},\"version\":1}"}},"contracts/mocks/sale/FixedPricesSaleMock.sol":{"FixedPricesSaleMock":{"abi":[{"inputs":[{"internalType":"address payable","name":"payoutWallet_","type":"address"},{"internalType":"uint256","name":"skusCapacity","type":"uint256"},{"internalType":"uint256","name":"tokensPerSkuCapacity","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32[]","name":"names","type":"bytes32[]"},{"indexed":false,"internalType":"bytes32[]","name":"values","type":"bytes32[]"}],"name":"MagicValues","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":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"payoutWallet_","type":"address"}],"name":"PayoutWalletSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"purchaser","type":"address"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"bytes32","name":"sku","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"quantity","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"userData","type":"bytes"},{"indexed":false,"internalType":"uint256","name":"totalPrice","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"extData","type":"bytes"}],"name":"Purchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"sku","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxQuantityPerPurchase","type":"uint256"},{"indexed":false,"internalType":"address","name":"notificationsReceiver","type":"address"}],"name":"SkuCreation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"sku","type":"bytes32"},{"indexed":false,"internalType":"address[]","name":"tokens","type":"address[]"},{"indexed":false,"internalType":"uint256[]","name":"prices","type":"uint256[]"}],"name":"SkuPricingUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Started","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"SUPPLY_UNLIMITED","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOKEN_ETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"uint256","name":"maxQuantityPerPurchase","type":"uint256"},{"internalType":"address","name":"notificationsReceiver","type":"address"}],"name":"createSku","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"estimatePurchase","outputs":[{"internalType":"uint256","name":"totalPrice","type":"uint256"},{"internalType":"bytes32[]","name":"pricingData","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"sku","type":"bytes32"}],"name":"getSkuInfo","outputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"uint256","name":"remainingSupply","type":"uint256"},{"internalType":"uint256","name":"maxQuantityPerPurchase","type":"uint256"},{"internalType":"address","name":"notificationsReceiver","type":"address"},{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"prices","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSkus","outputs":[{"internalType":"bytes32[]","name":"skus","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payoutWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"purchaseFor","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address payable","name":"payoutWallet_","type":"address"}],"name":"setPayoutWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"start","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"prices","type":"uint256[]"}],"name":"updateSkuPricing","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"60c06040523480156200001157600080fd5b5060405162002a1d38038062002a1d833981810160405260608110156200003757600080fd5b5080516020820151604092830151600080546001600160a01b031916339081178255945193949293919285928592859285928592859260019290918691839182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001600160a01b038116620000fa576040805162461bcd60e51b815260206004820152601460248201527f5061796f75743a207a65726f2061646472657373000000000000000000000000604482015290519081900360640190fd5b600180546001600160a01b0383166001600160a01b0319909116811790915560408051918252517fdd880d24a789958a6398c99c2e54ce31bc10a638cbc42f7dd34285479ae0f8559181900360200190a150506003805460ff1916911515919091179055608082905260a081905260408051600280825260608201835260009260208301908036833750506040805160028082526060820183529394506000939092509060208301908036833750508351919250680a89e968a9cbe8aa8960bb1b9173eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee91508490600090620001df57fe5b6020026020010183600081518110620001f457fe5b602002602001018281525082815250505060001960001b6f14d55414131657d5539312535255115160821b90836001815181106200022e57fe5b60200260200101836001815181106200024357fe5b60200260200101828152508281525050507fabb92614f53337043b55dc996a83ebb09adce78ec336ca188ea02180b61d1c148282604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015620002bd578181015183820152602001620002a3565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015620002fe578181015183820152602001620002e4565b5050505090500194505050505060405180910390a1505050505050505050505060805160a0516126db620003426000398061154052508061107552506126db6000f3fe60806040526004361061010e5760003560e01c80636b8f9c43116100a55780639e04954511610074578063be9a655511610059578063be9a65551461067c578063f21f537d14610691578063f2fde38b146106a65761010e565b80639e049545146105c0578063a963b257146105e75761010e565b80636b8f9c431461054e5780638456cb59146105815780638488bb4e146105965780638da5cb5b146105ab5761010e565b80635c4fafc7116100e15780635c4fafc7146103545780635c975abb146103855780635e6e9f70146103ae57806361bd3851146104e95761010e565b80631323b066146101135780632a8a45bc146102105780632c87927b146102f85780633f4ba83a1461033f575b600080fd5b34801561011f57600080fd5b506101b5600480360360a081101561013657600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a08101608082013564010000000081111561017657600080fd5b82018360208201111561018857600080fd5b803590602001918460018302840111640100000000831117156101aa57600080fd5b5090925090506106d9565b6040518083815260200180602001828103825283818151815260200191508051906020019060200280838360005b838110156101fb5781810151838201526020016101e3565b50505050905001935050505060405180910390f35b34801561021c57600080fd5b5061023a6004803603602081101561023357600080fd5b50356107ce565b60405180878152602001868152602001858152602001846001600160a01b031681526020018060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561029f578181015183820152602001610287565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156102de5781810151838201526020016102c6565b505050509050019850505050505050505060405180910390f35b34801561030457600080fd5b5061033d6004803603608081101561031b57600080fd5b50803590602081013590604081013590606001356001600160a01b0316610973565b005b34801561034b57600080fd5b5061033d610985565b34801561036057600080fd5b506103696109f3565b604080516001600160a01b039092168252519081900360200190f35b34801561039157600080fd5b5061039a610a0b565b604080519115158252519081900360200190f35b3480156103ba57600080fd5b5061033d600480360360608110156103d157600080fd5b813591908101906040810160208201356401000000008111156103f357600080fd5b82018360208201111561040557600080fd5b8035906020019184602083028401116401000000008311171561042757600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561047757600080fd5b82018360208201111561048957600080fd5b803590602001918460208302840111640100000000831117156104ab57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610a14945050505050565b3480156104f557600080fd5b506104fe610bf1565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561053a578181015183820152602001610522565b505050509050019250505060405180910390f35b34801561055a57600080fd5b5061033d6004803603602081101561057157600080fd5b50356001600160a01b0316610c4c565b34801561058d57600080fd5b5061033d610d19565b3480156105a257600080fd5b50610369610d80565b3480156105b757600080fd5b50610369610d8f565b3480156105cc57600080fd5b506105d5610d9e565b60408051918252519081900360200190f35b61033d600480360360a08110156105fd57600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a08101608082013564010000000081111561063d57600080fd5b82018360208201111561064f57600080fd5b8035906020019184600183028401116401000000008311171561067157600080fd5b509092509050610da4565b34801561068857600080fd5b5061033d610e8a565b34801561069d57600080fd5b506105d5610e9d565b3480156106b257600080fd5b5061033d600480360360208110156106c957600080fd5b50356001600160a01b0316610ea3565b6000606060025460001415610735576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b61073d610f09565b610745612613565b61074d610f61565b6001600160a01b03908116825289811660208084019190915290891660408084019190915260608301899052608083018890528051601f870183900483028101830190915285815290869086908190840183828082843760009201919091525050505060a08201526107be81610f65565b9250925050965096945050505050565b60008181526006602052604081208190819081906060908190836107f460048301610f8c565b8254985090508761084c576040805162461bcd60e51b815260206004820152601660248201527f53616c653a206e6f6e2d6578697374656e7420736b7500000000000000000000604482015290519081900360640190fd5b60018201546002830154600384015491985096506001600160a01b031694508067ffffffffffffffff8111801561088257600080fd5b506040519080825280602002602001820160405280156108ac578160200160208202803683370190505b5093508067ffffffffffffffff811180156108c657600080fd5b506040519080825280602002602001820160405280156108f0578160200160208202803683370190505b50925060005b818110156109675760008061090e6004860184610f90565b915091508160001c87848151811061092257fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508060001c86848151811061095257fe5b602090810291909101015250506001016108f6565b50505091939550919395565b61097f84848484611021565b50505050565b6002546109d9576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b6109e96109e4610f61565b611258565b6109f161131f565b565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b60035460ff1681565b610a1f6109e4610f61565b815181518114610a76576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20696e636f6e73697374656e742061727261797300000000000000604482015290519081900360640190fd5b60008481526006602052604090208054610ad7576040805162461bcd60e51b815260206004820152601660248201527f53616c653a206e6f6e2d6578697374656e7420736b7500000000000000000000604482015290519081900360640190fd5b6004810182610b22576000610aeb82610f8c565b905060005b81811015610b1b576000610b048482610f90565b509050610b118482611377565b5050600101610af0565b5050610b2d565b610b2d818686611457565b857fcb3fe5489e0cd43d0f4a33d1e09a4a0463a03d0d38f56165530854e5540db1438686604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015610b95578181015183820152602001610b7d565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015610bd4578181015183820152602001610bbc565b5050505090500194505050505060405180910390a2505050505050565b60606004600001805480602002602001604051908101604052809291908181526020018280548015610c4257602002820191906000526020600020905b815481526020019060010190808311610c2e575b5050505050905090565b610c576109e4610f61565b6001600160a01b038116610cb2576040805162461bcd60e51b815260206004820152601460248201527f5061796f75743a207a65726f2061646472657373000000000000000000000000604482015290519081900360640190fd5b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03838116919091179182905560408051929091168252517fdd880d24a789958a6398c99c2e54ce31bc10a638cbc42f7dd34285479ae0f855916020908290030190a150565b600254610d6d576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b610d786109e4610f61565b6109f16115c0565b6001546001600160a01b031681565b6000546001600160a01b031690565b60001981565b600254610df8576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b610e00610f09565b610e08612613565b610e10610f61565b6001600160a01b03908116825287811660208084019190915290871660408084019190915260608301879052608083018690528051601f850183900483028101830190915283815290849084908190840183828082843760009201919091525050505060a0820152610e81816115fe565b50505050505050565b610e956109e4610f61565b6109e961162b565b60025490565b610eae6109e4610f61565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383811691821780845560405192939116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b60035460ff16156109f1576040805162461bcd60e51b815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b3390565b60006060610f72836116ad565b610f7b83611957565b505060c081015160e0909101519091565b5490565b815460009081908310610fea576040805162461bcd60e51b815260206004820152601c60248201527f456e756d4d61703a20696e646578206f7574206f6620626f756e647300000000604482015290519081900360640190fd5b6000846000018481548110610ffb57fe5b906000526020600020906002020190508060000154816001015492509250509250929050565b82611073576040805162461bcd60e51b815260206004820152601160248201527f53616c653a207a65726f20737570706c79000000000000000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000061109e6004610f8c565b106110f0576040805162461bcd60e51b815260206004820152601360248201527f53616c653a20746f6f206d616e7920736b757300000000000000000000000000604482015290519081900360640190fd5b6110fb6004856119f4565b61114c576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20736b7520616c7265616479206372656174656400000000000000604482015290519081900360640190fd5b6001600160a01b038116156111be5761116d816001600160a01b0316611a3e565b6111be576040805162461bcd60e51b815260206004820152601b60248201527f53616c653a206e6f6e2d636f6e74726163742072656365697665720000000000604482015290519081900360640190fd5b60008481526006602090815260409182902085815560018101869055600281018590556003810180546001600160a01b03861673ffffffffffffffffffffffffffffffffffffffff1990911681179091558351888152928301879052828401869052606083015291517f38bd4aabce684540cd61351b91f2f5facf9d6963934347e25aab93d87ae7ac149181900360800190a15050505050565b306001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561129157600080fd5b505afa1580156112a5573d6000803e3d6000fd5b505050506040513d60208110156112bb57600080fd5b50516001600160a01b0382811691161461131c576040805162461bcd60e51b815260206004820152601660248201527f4f776e61626c653a206e6f7420746865206f776e657200000000000000000000604482015290519081900360640190fd5b50565b611327611a44565b6003805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61135a610f61565b604080516001600160a01b039092168252519081900360200190a1565b6000818152600183016020526040812054801561144b57835460001980830191908101906000908790839081106113aa57fe5b90600052602060002090600202019050808760000184815481106113ca57fe5b60009182526020808320845460029093020191825560019384015491840191909155835482528983019052604090209084019055865487908061140957fe5b60008281526020808220600260001990940193840201828155600190810183905592909355888152898201909252604082209190915594506114519350505050565b60009150505b92915050565b60005b825181101561153d57600083828151811061147157fe5b6020026020010151905060006001600160a01b0316816001600160a01b031614156114e3576040805162461bcd60e51b815260206004820152601860248201527f53616c653a207a65726f206164647265737320746f6b656e0000000000000000604482015290519081900360640190fd5b60008383815181106114f157fe5b60200260200101519050806000141561151d57611517866001600160a01b038416611377565b50611533565b611531866001600160a01b03841683611a9b565b505b505060010161145a565b507f000000000000000000000000000000000000000000000000000000000000000061156884610f8c565b11156115bb576040805162461bcd60e51b815260206004820152601560248201527f53616c653a20746f6f206d616e7920746f6b656e730000000000000000000000604482015290519081900360640190fd5b505050565b6115c8610f09565b6003805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861135a610f61565b611607816116ad565b61161081611957565b61161981611b35565b61162281611c84565b61131c81611cd0565b60025415611680576040805162461bcd60e51b815260206004820152601260248201527f537461727461626c653a20737461727465640000000000000000000000000000604482015290519081900360640190fd5b426002557f27029695aa5f602a4ee81f4c32dfa86e562f200a17966496f3a7c3f2ec0f941761135a610f61565b60208101516001600160a01b031661170c576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a207a65726f206164647265737320726563697069656e7400000000604482015290519081900360640190fd5b60408101516001600160a01b031661176b576040805162461bcd60e51b815260206004820152601860248201527f53616c653a207a65726f206164647265737320746f6b656e0000000000000000604482015290519081900360640190fd5b60808101516117c1576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a207a65726f207175616e7469747920707572636861736500000000604482015290519081900360640190fd5b606081015160009081526006602052604090208054611827576040805162461bcd60e51b815260206004820152601660248201527f53616c653a206e6f6e2d6578697374656e7420736b7500000000000000000000604482015290519081900360640190fd5b816080015181600201541015611884576040805162461bcd60e51b815260206004820152601860248201527f53616c653a2061626f7665206d6178207175616e746974790000000000000000604482015290519081900360640190fd5b8054600019146118eb578160800151816001015410156118eb576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20696e73756666696369656e7420737570706c7900000000000000604482015290519081900360640190fd5b60408201516001600160a01b031661190660048301826121b5565b6115bb576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a206e6f6e2d6578697374656e7420736b7520746f6b656e00000000604482015290519081900360640190fd5b6060810151600090815260066020526040902080546119bd576040805162461bcd60e51b815260206004820152601560248201527f53616c653a20756e737570706f7274656420534b550000000000000000000000604482015290519081900360640190fd5b6004810160006119cd84836121cd565b90506119e684608001518261223d90919063ffffffff16565b60c090940193909352505050565b6000611a0083836121b5565b611a3657508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611451565b506000611451565b3b151590565b60035460ff166109f1576040805162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604482015290519081900360640190fd5b600082815260018401602052604081205480611b00575050604080518082018252838152602080820184815286546001818101895560008981528481209551600290930290950191825591519082015586548684528188019092529290912055611b2e565b82856000016001830381548110611b1357fe5b90600052602060002090600202016001018190555060009150505b9392505050565b60408101516001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415611c58578060c00151341015611bb7576040805162461bcd60e51b815260206004820152601660248201527f53616c653a20696e73756666696369656e742045544800000000000000000000604482015290519081900360640190fd5b60015460c08201516040516001600160a01b039092169181156108fc0291906000818181858888f19350505050158015611bf5573d6000803e3d6000fd5b506000611c0f8260c001513461229690919063ffffffff16565b90508015611c525781516040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611c50573d6000803e3d6000fd5b505b5061131c565b61131c611c63610f61565b60015460c084015160408501516001600160a01b03908116939216906122f3565b60608101516000908152600660205260409020805460001914611ccc5760808201516001820154611cb491612296565b60608301516000908152600660205260409020600101555b5050565b806060015181604001516001600160a01b031682600001516001600160a01b03167f29f844483ca6b10b5c0611d039afc15ce8f6380e905307b381c3a8ee4e90e11e846020015185608001518660a001518760c001518860e001518961010001518a610120015160405160200180848051906020019060200280838360005b83811015611d67578181015183820152602001611d4f565b50505050905001838051906020019060200280838360005b83811015611d97578181015183820152602001611d7f565b50505050905001828051906020019060200280838360005b83811015611dc7578181015183820152602001611daf565b50505050905001935050505060405160208183030381529060405260405180866001600160a01b031681526020018581526020018060200184815260200180602001838103835286818151815260200191508051906020019080838360005b83811015611e3e578181015183820152602001611e26565b50505050905090810190601f168015611e6b5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015611e9e578181015183820152602001611e86565b50505050905090810190601f168015611ecb5780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390a460608101516000908152600660205260409020600301546001600160a01b03168015611ccc576361eceae860e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916816001600160a01b03166361eceae8846000015185602001518660400151876060015188608001518960a001518a60c001518b60e001518c61010001518d61012001516040518b63ffffffff1660e01b8152600401808b6001600160a01b031681526020018a6001600160a01b03168152602001896001600160a01b031681526020018881526020018781526020018060200186815260200180602001806020018060200185810385528a818151815260200191508051906020019080838360005b83811015612004578181015183820152602001611fec565b50505050905090810190601f1680156120315780820380516001836020036101000a031916815260200191505b508581038452885181528851602091820191808b01910280838360005b8381101561206657818101518382015260200161204e565b50505050905001858103835287818151815260200191508051906020019060200280838360005b838110156120a557818101518382015260200161208d565b50505050905001858103825286818151815260200191508051906020019060200280838360005b838110156120e45781810151838201526020016120cc565b505050509050019e505050505050505050505050505050602060405180830381600087803b15801561211557600080fd5b505af1158015612129573d6000803e3d6000fd5b505050506040513d602081101561213f57600080fd5b50517fffffffff000000000000000000000000000000000000000000000000000000001614611ccc576040805162461bcd60e51b815260206004820152601a60248201527f53616c653a206e6f74696669636174696f6e2072656675736564000000000000604482015290519081900360640190fd5b60009081526001919091016020526040902054151590565b60408201516000906121e99083906001600160a01b031661237b565b905080611451576040805162461bcd60e51b815260206004820152601f60248201527f53616c653a20756e737570706f72746564207061796d656e7420746f6b656e00604482015290519081900360640190fd5b60008261224c57506000611451565b8282028284828161225957fe5b0414611b2e5760405162461bcd60e51b81526004018080602001828103825260218152602001806126856021913960400191505060405180910390fd5b6000828211156122ed576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261097f90859061240b565b6000818152600183016020526040812054806123de576040805162461bcd60e51b815260206004820152601860248201527f456e756d4d61703a206e6f6e6578697374656e74206b65790000000000000000604482015290519081900360640190fd5b8360000160018203815481106123f057fe5b90600052602060002090600202016001015491505092915050565b8161241e6001600160a01b038216611a3e565b61246f576040805162461bcd60e51b815260206004820152601a60248201527f4552433230577261707065723a206e6f6e2d636f6e7472616374000000000000604482015290519081900360640190fd5b600080826001600160a01b0316846040518082805190602001908083835b602083106124ca57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161248d565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461252c576040519150601f19603f3d011682016040523d82523d6000602084013e612531565b606091505b509150915081156125b0578051156125ab5780806020019051602081101561255857600080fd5b50516125ab576040805162461bcd60e51b815260206004820152601e60248201527f4552433230577261707065723a206f7065726174696f6e206661696c65640000604482015290519081900360640190fd5b61260c565b8051612603576040805162461bcd60e51b815260206004820152601e60248201527f4552433230577261707065723a206f7065726174696f6e206661696c65640000604482015290519081900360640190fd5b80518082602001fd5b5050505050565b60405180610140016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160008019168152602001600081526020016060815260200160008152602001606081526020016060815260200160608152509056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220538c1b11d2e4a53343ff4cd37eae21bad8c5953103c87adbb9e4bb1bf6f47ee464736f6c63430007060033","opcodes":"PUSH1 0xC0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x2A1D CODESIZE SUB DUP1 PUSH3 0x2A1D DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x60 DUP2 LT ISZERO PUSH3 0x37 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 SWAP3 DUP4 ADD MLOAD PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND CALLER SWAP1 DUP2 OR DUP3 SSTORE SWAP5 MLOAD SWAP4 SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 DUP6 SWAP3 DUP6 SWAP3 DUP6 SWAP3 DUP6 SWAP3 DUP6 SWAP3 DUP6 SWAP3 PUSH1 0x1 SWAP3 SWAP1 SWAP2 DUP7 SWAP2 DUP4 SWAP2 DUP3 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP3 SWAP1 LOG3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH3 0xFA JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061796F75743A207A65726F2061646472657373000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 SWAP2 AND DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD PUSH32 0xDD880D24A789958A6398C99C2E54CE31BC10A638CBC42F7DD34285479AE0F855 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP POP PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x80 DUP3 SWAP1 MSTORE PUSH1 0xA0 DUP2 SWAP1 MSTORE 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 POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x2 DUP1 DUP3 MSTORE PUSH1 0x60 DUP3 ADD DUP4 MSTORE SWAP4 SWAP5 POP PUSH1 0x0 SWAP4 SWAP1 SWAP3 POP SWAP1 PUSH1 0x20 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP POP DUP4 MLOAD SWAP2 SWAP3 POP PUSH9 0xA89E968A9CBE8AA89 PUSH1 0xBB SHL SWAP2 PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE SWAP2 POP DUP5 SWAP1 PUSH1 0x0 SWAP1 PUSH3 0x1DF JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP4 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH3 0x1F4 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP3 DUP2 MSTORE POP DUP3 DUP2 MSTORE POP POP POP PUSH1 0x0 NOT PUSH1 0x0 SHL PUSH16 0x14D55414131657D55393125352551151 PUSH1 0x82 SHL SWAP1 DUP4 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH3 0x22E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP4 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH3 0x243 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP3 DUP2 MSTORE POP DUP3 DUP2 MSTORE POP POP POP PUSH32 0xABB92614F53337043B55DC996A83EBB09ADCE78EC336CA188EA02180B61D1C14 DUP3 DUP3 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x2BD JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x2A3 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x2FE JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x2E4 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP POP POP POP POP POP POP POP PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH2 0x26DB PUSH3 0x342 PUSH1 0x0 CODECOPY DUP1 PUSH2 0x1540 MSTORE POP DUP1 PUSH2 0x1075 MSTORE POP PUSH2 0x26DB PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x10E JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6B8F9C43 GT PUSH2 0xA5 JUMPI DUP1 PUSH4 0x9E049545 GT PUSH2 0x74 JUMPI DUP1 PUSH4 0xBE9A6555 GT PUSH2 0x59 JUMPI DUP1 PUSH4 0xBE9A6555 EQ PUSH2 0x67C JUMPI DUP1 PUSH4 0xF21F537D EQ PUSH2 0x691 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x6A6 JUMPI PUSH2 0x10E JUMP JUMPDEST DUP1 PUSH4 0x9E049545 EQ PUSH2 0x5C0 JUMPI DUP1 PUSH4 0xA963B257 EQ PUSH2 0x5E7 JUMPI PUSH2 0x10E JUMP JUMPDEST DUP1 PUSH4 0x6B8F9C43 EQ PUSH2 0x54E JUMPI DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x581 JUMPI DUP1 PUSH4 0x8488BB4E EQ PUSH2 0x596 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x5AB JUMPI PUSH2 0x10E JUMP JUMPDEST DUP1 PUSH4 0x5C4FAFC7 GT PUSH2 0xE1 JUMPI DUP1 PUSH4 0x5C4FAFC7 EQ PUSH2 0x354 JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x385 JUMPI DUP1 PUSH4 0x5E6E9F70 EQ PUSH2 0x3AE JUMPI DUP1 PUSH4 0x61BD3851 EQ PUSH2 0x4E9 JUMPI PUSH2 0x10E JUMP JUMPDEST DUP1 PUSH4 0x1323B066 EQ PUSH2 0x113 JUMPI DUP1 PUSH4 0x2A8A45BC EQ PUSH2 0x210 JUMPI DUP1 PUSH4 0x2C87927B EQ PUSH2 0x2F8 JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x33F JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x11F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1B5 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x136 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x176 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x188 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x1AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x6D9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1FB JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1E3 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP4 POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x21C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x23A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x233 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x7CE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x29F JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x287 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2DE JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2C6 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP9 POP POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x304 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x31B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x973 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x34B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33D PUSH2 0x985 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x360 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x369 PUSH2 0x9F3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x391 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x39A PUSH2 0xA0B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x3D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x3F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x405 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x427 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 SWAP5 SWAP4 PUSH1 0x20 DUP2 ADD SWAP4 POP CALLDATALOAD SWAP2 POP POP PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x477 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x489 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x4AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0xA14 SWAP5 POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4FE PUSH2 0xBF1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 DUP2 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x53A JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x522 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x55A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x571 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xC4C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x58D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33D PUSH2 0xD19 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5A2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x369 PUSH2 0xD80 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x369 PUSH2 0xD8F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5D5 PUSH2 0xD9E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x33D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x5FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x63D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x64F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x671 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0xDA4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x688 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33D PUSH2 0xE8A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x69D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5D5 PUSH2 0xE9D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x6C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xEA3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x2 SLOAD PUSH1 0x0 EQ ISZERO PUSH2 0x735 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x73D PUSH2 0xF09 JUMP JUMPDEST PUSH2 0x745 PUSH2 0x2613 JUMP JUMPDEST PUSH2 0x74D PUSH2 0xF61 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP10 DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP10 AND PUSH1 0x40 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD DUP10 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP9 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x1F DUP8 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD SWAP1 SWAP2 MSTORE DUP6 DUP2 MSTORE SWAP1 DUP7 SWAP1 DUP7 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP POP PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x7BE DUP2 PUSH2 0xF65 JUMP JUMPDEST SWAP3 POP SWAP3 POP POP SWAP7 POP SWAP7 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP2 SWAP1 DUP2 SWAP1 DUP2 SWAP1 PUSH1 0x60 SWAP1 DUP2 SWAP1 DUP4 PUSH2 0x7F4 PUSH1 0x4 DUP4 ADD PUSH2 0xF8C JUMP JUMPDEST DUP3 SLOAD SWAP9 POP SWAP1 POP DUP8 PUSH2 0x84C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7500000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x3 DUP5 ADD SLOAD SWAP2 SWAP9 POP SWAP7 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP5 POP DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x882 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x8AC JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP4 POP DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x8C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x8F0 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x967 JUMPI PUSH1 0x0 DUP1 PUSH2 0x90E PUSH1 0x4 DUP7 ADD DUP5 PUSH2 0xF90 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP2 PUSH1 0x0 SHR DUP8 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x922 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP DUP1 PUSH1 0x0 SHR DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x952 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP POP PUSH1 0x1 ADD PUSH2 0x8F6 JUMP JUMPDEST POP POP POP SWAP2 SWAP4 SWAP6 POP SWAP2 SWAP4 SWAP6 JUMP JUMPDEST PUSH2 0x97F DUP5 DUP5 DUP5 DUP5 PUSH2 0x1021 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x9D9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x9E9 PUSH2 0x9E4 PUSH2 0xF61 JUMP JUMPDEST PUSH2 0x1258 JUMP JUMPDEST PUSH2 0x9F1 PUSH2 0x131F JUMP JUMPDEST JUMP JUMPDEST PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0xA1F PUSH2 0x9E4 PUSH2 0xF61 JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD DUP2 EQ PUSH2 0xA76 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E636F6E73697374656E742061727261797300000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0xAD7 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7500000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP2 ADD DUP3 PUSH2 0xB22 JUMPI PUSH1 0x0 PUSH2 0xAEB DUP3 PUSH2 0xF8C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xB1B JUMPI PUSH1 0x0 PUSH2 0xB04 DUP5 DUP3 PUSH2 0xF90 JUMP JUMPDEST POP SWAP1 POP PUSH2 0xB11 DUP5 DUP3 PUSH2 0x1377 JUMP JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0xAF0 JUMP JUMPDEST POP POP PUSH2 0xB2D JUMP JUMPDEST PUSH2 0xB2D DUP2 DUP7 DUP7 PUSH2 0x1457 JUMP JUMPDEST DUP6 PUSH32 0xCB3FE5489E0CD43D0F4A33D1E09A4A0463A03D0D38F56165530854E5540DB143 DUP7 DUP7 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xB95 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xB7D JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xBD4 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xBBC JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x4 PUSH1 0x0 ADD DUP1 SLOAD DUP1 PUSH1 0x20 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 DUP1 ISZERO PUSH2 0xC42 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0xC2E JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0xC57 PUSH2 0x9E4 PUSH2 0xF61 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xCB2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061796F75743A207A65726F2061646472657373000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 SWAP1 SWAP2 OR SWAP2 DUP3 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD SWAP3 SWAP1 SWAP2 AND DUP3 MSTORE MLOAD PUSH32 0xDD880D24A789958A6398C99C2E54CE31BC10A638CBC42F7DD34285479AE0F855 SWAP2 PUSH1 0x20 SWAP1 DUP3 SWAP1 SUB ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0xD6D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0xD78 PUSH2 0x9E4 PUSH2 0xF61 JUMP JUMPDEST PUSH2 0x9F1 PUSH2 0x15C0 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 NOT DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0xDF8 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0xE00 PUSH2 0xF09 JUMP JUMPDEST PUSH2 0xE08 PUSH2 0x2613 JUMP JUMPDEST PUSH2 0xE10 PUSH2 0xF61 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP8 DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP8 AND PUSH1 0x40 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD DUP8 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP7 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x1F DUP6 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD SWAP1 SWAP2 MSTORE DUP4 DUP2 MSTORE SWAP1 DUP5 SWAP1 DUP5 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP POP PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0xE81 DUP2 PUSH2 0x15FE JUMP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0xE95 PUSH2 0x9E4 PUSH2 0xF61 JUMP JUMPDEST PUSH2 0x9E9 PUSH2 0x162B JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xEAE PUSH2 0x9E4 PUSH2 0xF61 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 DUP3 OR DUP1 DUP5 SSTORE PUSH1 0x40 MLOAD SWAP3 SWAP4 SWAP2 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x9F1 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061757361626C653A2070617573656400000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0xF72 DUP4 PUSH2 0x16AD JUMP JUMPDEST PUSH2 0xF7B DUP4 PUSH2 0x1957 JUMP JUMPDEST POP POP PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xE0 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP2 JUMP JUMPDEST SLOAD SWAP1 JUMP JUMPDEST DUP2 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP4 LT PUSH2 0xFEA JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x456E756D4D61703A20696E646578206F7574206F6620626F756E647300000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 PUSH1 0x0 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0xFFB JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD SWAP1 POP DUP1 PUSH1 0x0 ADD SLOAD DUP2 PUSH1 0x1 ADD SLOAD SWAP3 POP SWAP3 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP3 PUSH2 0x1073 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F20737570706C79000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH2 0x109E PUSH1 0x4 PUSH2 0xF8C JUMP JUMPDEST LT PUSH2 0x10F0 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20746F6F206D616E7920736B757300000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x10FB PUSH1 0x4 DUP6 PUSH2 0x19F4 JUMP JUMPDEST PUSH2 0x114C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20736B7520616C7265616479206372656174656400000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO PUSH2 0x11BE JUMPI PUSH2 0x116D DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1A3E JUMP JUMPDEST PUSH2 0x11BE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D636F6E74726163742072656365697665720000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP6 DUP2 SSTORE PUSH1 0x1 DUP2 ADD DUP7 SWAP1 SSTORE PUSH1 0x2 DUP2 ADD DUP6 SWAP1 SSTORE PUSH1 0x3 DUP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT SWAP1 SWAP2 AND DUP2 OR SWAP1 SWAP2 SSTORE DUP4 MLOAD DUP9 DUP2 MSTORE SWAP3 DUP4 ADD DUP8 SWAP1 MSTORE DUP3 DUP5 ADD DUP7 SWAP1 MSTORE PUSH1 0x60 DUP4 ADD MSTORE SWAP2 MLOAD PUSH32 0x38BD4AABCE684540CD61351B91F2F5FACF9D6963934347E25AAB93D87AE7AC14 SWAP2 DUP2 SWAP1 SUB PUSH1 0x80 ADD SWAP1 LOG1 POP POP POP POP POP JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8DA5CB5B 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 PUSH2 0x1291 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x12A5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x12BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ PUSH2 0x131C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6F7420746865206F776E657200000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0x1327 PUSH2 0x1A44 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA PUSH2 0x135A PUSH2 0xF61 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0x144B JUMPI DUP4 SLOAD PUSH1 0x0 NOT DUP1 DUP4 ADD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x0 SWAP1 DUP8 SWAP1 DUP4 SWAP1 DUP2 LT PUSH2 0x13AA JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD SWAP1 POP DUP1 DUP8 PUSH1 0x0 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x13CA JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 DUP5 SLOAD PUSH1 0x2 SWAP1 SWAP4 MUL ADD SWAP2 DUP3 SSTORE PUSH1 0x1 SWAP4 DUP5 ADD SLOAD SWAP2 DUP5 ADD SWAP2 SWAP1 SWAP2 SSTORE DUP4 SLOAD DUP3 MSTORE DUP10 DUP4 ADD SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP1 DUP5 ADD SWAP1 SSTORE DUP7 SLOAD DUP8 SWAP1 DUP1 PUSH2 0x1409 JUMPI INVALID JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 PUSH1 0x2 PUSH1 0x0 NOT SWAP1 SWAP5 ADD SWAP4 DUP5 MUL ADD DUP3 DUP2 SSTORE PUSH1 0x1 SWAP1 DUP2 ADD DUP4 SWAP1 SSTORE SWAP3 SWAP1 SWAP4 SSTORE DUP9 DUP2 MSTORE DUP10 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x40 DUP3 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE SWAP5 POP PUSH2 0x1451 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SWAP2 POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x153D JUMPI PUSH1 0x0 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1471 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x14E3 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F206164647265737320746F6B656E0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x14F1 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP DUP1 PUSH1 0x0 EQ ISZERO PUSH2 0x151D JUMPI PUSH2 0x1517 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x1377 JUMP JUMPDEST POP PUSH2 0x1533 JUMP JUMPDEST PUSH2 0x1531 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP4 PUSH2 0x1A9B JUMP JUMPDEST POP JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x145A JUMP JUMPDEST POP PUSH32 0x0 PUSH2 0x1568 DUP5 PUSH2 0xF8C JUMP JUMPDEST GT ISZERO PUSH2 0x15BB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20746F6F206D616E7920746F6B656E730000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x15C8 PUSH2 0xF09 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH2 0x135A PUSH2 0xF61 JUMP JUMPDEST PUSH2 0x1607 DUP2 PUSH2 0x16AD JUMP JUMPDEST PUSH2 0x1610 DUP2 PUSH2 0x1957 JUMP JUMPDEST PUSH2 0x1619 DUP2 PUSH2 0x1B35 JUMP JUMPDEST PUSH2 0x1622 DUP2 PUSH2 0x1C84 JUMP JUMPDEST PUSH2 0x131C DUP2 PUSH2 0x1CD0 JUMP JUMPDEST PUSH1 0x2 SLOAD ISZERO PUSH2 0x1680 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A20737461727465640000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST TIMESTAMP PUSH1 0x2 SSTORE PUSH32 0x27029695AA5F602A4EE81F4C32DFA86E562F200A17966496F3A7C3F2EC0F9417 PUSH2 0x135A PUSH2 0xF61 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x170C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F206164647265737320726563697069656E7400000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x176B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F206164647265737320746F6B656E0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x80 DUP2 ADD MLOAD PUSH2 0x17C1 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F207175616E7469747920707572636861736500000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0x1827 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7500000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x80 ADD MLOAD DUP2 PUSH1 0x2 ADD SLOAD LT ISZERO PUSH2 0x1884 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A2061626F7665206D6178207175616E746974790000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 SLOAD PUSH1 0x0 NOT EQ PUSH2 0x18EB JUMPI DUP2 PUSH1 0x80 ADD MLOAD DUP2 PUSH1 0x1 ADD SLOAD LT ISZERO PUSH2 0x18EB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E73756666696369656E7420737570706C7900000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1906 PUSH1 0x4 DUP4 ADD DUP3 PUSH2 0x21B5 JUMP JUMPDEST PUSH2 0x15BB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7520746F6B656E00000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0x19BD JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20756E737570706F7274656420534B550000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP2 ADD PUSH1 0x0 PUSH2 0x19CD DUP5 DUP4 PUSH2 0x21CD JUMP JUMPDEST SWAP1 POP PUSH2 0x19E6 DUP5 PUSH1 0x80 ADD MLOAD DUP3 PUSH2 0x223D SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0xC0 SWAP1 SWAP5 ADD SWAP4 SWAP1 SWAP4 MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A00 DUP4 DUP4 PUSH2 0x21B5 JUMP JUMPDEST PUSH2 0x1A36 JUMPI POP DUP2 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP5 SSTORE PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 SWAP1 SWAP4 ADD DUP5 SWAP1 SSTORE DUP5 SLOAD DUP5 DUP3 MSTORE DUP3 DUP7 ADD SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0x1451 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x1451 JUMP JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND PUSH2 0x9F1 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061757361626C653A206E6F7420706175736564000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x1 DUP5 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 PUSH2 0x1B00 JUMPI POP POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE DUP4 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD DUP5 DUP2 MSTORE DUP7 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP10 SSTORE PUSH1 0x0 DUP10 DUP2 MSTORE DUP5 DUP2 KECCAK256 SWAP6 MLOAD PUSH1 0x2 SWAP1 SWAP4 MUL SWAP1 SWAP6 ADD SWAP2 DUP3 SSTORE SWAP2 MLOAD SWAP1 DUP3 ADD SSTORE DUP7 SLOAD DUP7 DUP5 MSTORE DUP2 DUP9 ADD SWAP1 SWAP3 MSTORE SWAP3 SWAP1 SWAP2 KECCAK256 SSTORE PUSH2 0x1B2E JUMP JUMPDEST DUP3 DUP6 PUSH1 0x0 ADD PUSH1 0x1 DUP4 SUB DUP2 SLOAD DUP2 LT PUSH2 0x1B13 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD PUSH1 0x1 ADD DUP2 SWAP1 SSTORE POP PUSH1 0x0 SWAP2 POP POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x1C58 JUMPI DUP1 PUSH1 0xC0 ADD MLOAD CALLVALUE LT ISZERO PUSH2 0x1BB7 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E73756666696369656E742045544800000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xC0 DUP3 ADD MLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 DUP2 ISZERO PUSH2 0x8FC MUL SWAP2 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x1BF5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x0 PUSH2 0x1C0F DUP3 PUSH1 0xC0 ADD MLOAD CALLVALUE PUSH2 0x2296 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x1C52 JUMPI DUP2 MLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 DUP3 ISZERO PUSH2 0x8FC MUL SWAP1 DUP4 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x1C50 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP JUMPDEST POP PUSH2 0x131C JUMP JUMPDEST PUSH2 0x131C PUSH2 0x1C63 PUSH2 0xF61 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xC0 DUP5 ADD MLOAD PUSH1 0x40 DUP6 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP4 SWAP3 AND SWAP1 PUSH2 0x22F3 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x0 NOT EQ PUSH2 0x1CCC JUMPI PUSH1 0x80 DUP3 ADD MLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH2 0x1CB4 SWAP2 PUSH2 0x2296 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SSTORE JUMPDEST POP POP JUMP JUMPDEST DUP1 PUSH1 0x60 ADD MLOAD DUP2 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x29F844483CA6B10B5C0611D039AFC15CE8F6380E905307B381C3A8EE4E90E11E DUP5 PUSH1 0x20 ADD MLOAD DUP6 PUSH1 0x80 ADD MLOAD DUP7 PUSH1 0xA0 ADD MLOAD DUP8 PUSH1 0xC0 ADD MLOAD DUP9 PUSH1 0xE0 ADD MLOAD DUP10 PUSH2 0x100 ADD MLOAD DUP11 PUSH2 0x120 ADD MLOAD PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP5 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1D67 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1D4F JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1D97 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1D7F JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1DC7 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1DAF JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP4 POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP7 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1E3E JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1E26 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1E6B JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP DUP4 DUP2 SUB DUP3 MSTORE DUP5 MLOAD DUP2 MSTORE DUP5 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP7 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1E9E JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1E86 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1ECB JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP8 POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 ISZERO PUSH2 0x1CCC JUMPI PUSH4 0x61ECEAE8 PUSH1 0xE0 SHL PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x61ECEAE8 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD DUP7 PUSH1 0x40 ADD MLOAD DUP8 PUSH1 0x60 ADD MLOAD DUP9 PUSH1 0x80 ADD MLOAD DUP10 PUSH1 0xA0 ADD MLOAD DUP11 PUSH1 0xC0 ADD MLOAD DUP12 PUSH1 0xE0 ADD MLOAD DUP13 PUSH2 0x100 ADD MLOAD DUP14 PUSH2 0x120 ADD MLOAD PUSH1 0x40 MLOAD DUP12 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP6 DUP2 SUB DUP6 MSTORE DUP11 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2004 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1FEC JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x2031 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP DUP6 DUP2 SUB DUP5 MSTORE DUP9 MLOAD DUP2 MSTORE DUP9 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP1 DUP12 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2066 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x204E JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP6 DUP2 SUB DUP4 MSTORE DUP8 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x20A5 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x208D JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP6 DUP2 SUB DUP3 MSTORE DUP7 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x20E4 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x20CC JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP15 POP POP POP POP POP POP POP POP POP POP POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2115 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2129 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x213F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND EQ PUSH2 0x1CCC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F74696669636174696F6E2072656675736564000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x0 SWAP1 PUSH2 0x21E9 SWAP1 DUP4 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x237B JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x1451 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20756E737570706F72746564207061796D656E7420746F6B656E00 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x224C JUMPI POP PUSH1 0x0 PUSH2 0x1451 JUMP JUMPDEST DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 PUSH2 0x2259 JUMPI INVALID JUMPDEST DIV EQ PUSH2 0x1B2E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2685 PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP3 GT ISZERO PUSH2 0x22ED JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x24 DUP4 ADD MSTORE DUP5 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x84 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 OR SWAP1 MSTORE PUSH2 0x97F SWAP1 DUP6 SWAP1 PUSH2 0x240B JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 PUSH2 0x23DE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x456E756D4D61703A206E6F6E6578697374656E74206B65790000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP4 PUSH1 0x0 ADD PUSH1 0x1 DUP3 SUB DUP2 SLOAD DUP2 LT PUSH2 0x23F0 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD PUSH1 0x1 ADD SLOAD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 PUSH2 0x241E PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x1A3E JUMP JUMPDEST PUSH2 0x246F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433230577261707065723A206E6F6E2D636F6E7472616374000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x24CA JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x248D JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x252C JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x2531 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 ISZERO PUSH2 0x25B0 JUMPI DUP1 MLOAD ISZERO PUSH2 0x25AB JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2558 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x25AB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433230577261707065723A206F7065726174696F6E206661696C65640000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x260C JUMP JUMPDEST DUP1 MLOAD PUSH2 0x2603 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433230577261707065723A206F7065726174696F6E206661696C65640000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 MLOAD DUP1 DUP3 PUSH1 0x20 ADD REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x140 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP1 NOT AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE POP SWAP1 JUMP INVALID MSTORE8 PUSH2 0x6665 0x4D PUSH2 0x7468 GASPRICE KECCAK256 PUSH14 0x756C7469706C69636174696F6E20 PUSH16 0x766572666C6F77A26469706673582212 KECCAK256 MSTORE8 DUP13 SHL GT 0xD2 0xE4 0xA5 CALLER NUMBER SELFDESTRUCT 0x4C 0xD3 PUSH31 0xAE21BAD8C5953103C87ADBB9E4BB1BF6F47EE464736F6C6343000706003300 ","sourceMap":"131:827:14:-:0;;;501:194;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;501:194:14;;;;;;;;;;;960:6:1;:15;;-1:-1:-1;;;;;;960:15:1;2518:10:32;960:15:1;;;;;990:40;;501:194:14;;;;;;;;;;;;;;;;;;2554:4:32;;2518:10;;501:194:14;;2518:10:32;;;;990:40:1;;960:6;;990:40;-1:-1:-1;;;;;;512:27:8;::::1;504:60;;;::::0;;-1:-1:-1;;;504:60:8;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;574:12;:28:::0;;-1:-1:-1;;;;;574:28:8;::::1;-1:-1:-1::0;;;;;;574:28:8;;::::1;::::0;::::1;::::0;;;617:30:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;-1:-1:-1::0;;543:6:5;:16;;-1:-1:-1;;543:16:5;;;;;;;;;;2570:28:32::2;::::0;;;2608:44:::2;::::0;;;2687:16:::2;::::0;;2701:1:::2;2687:16:::0;;;;;::::2;::::0;;-1:-1:-1;;2687:16:32::2;::::0;::::2;::::0;;::::2;::::0;::::2;-1:-1:-1::0;;2739:16:32::2;::::0;;2753:1:::2;2739:16:::0;;;;;::::2;::::0;;2662:41;;-1:-1:-1;2713:23:32::2;::::0;2739:16;;-1:-1:-1;2753:1:32;2739:16:::2;::::0;::::2;::::0;;::::2;::::0;::::2;-1:-1:-1::0;;2766:8:32;;2713:42;;-1:-1:-1;;;;2765:66:32;1751:44:::2;::::0;-1:-1:-1;2766:5:32;;2803:27:::2;::::0;2766:8:::2;;;;;;;;;2776:6;2783:1;2776:9;;;;;;;;;;;;;2765:66;;;::::0;::::2;;;::::0;::::2;;-1:-1:-1::0;;2886:34:32::2;;-1:-1:-1::0;;;2841:80:32::2;2842:5;2848:1;2842:8;;;;;;;;;;;;;2852:6;2859:1;2852:9;;;;;;;;;;;;;2841:80;;;::::0;::::2;;;::::0;::::2;;2936:26;2948:5;2955:6;2936:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::2;::::0;;;::::2;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::2;::::0;;;::::2;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;2380:589;;::::0;;;919:183:26;;;501:194:14;;;131:827;;;;;;;;;;;;"},"deployedBytecode":{"generatedSources":[],"immutableReferences":{"5785":[{"length":32,"start":4213}],"5787":[{"length":32,"start":5440}]},"linkReferences":{},"object":"60806040526004361061010e5760003560e01c80636b8f9c43116100a55780639e04954511610074578063be9a655511610059578063be9a65551461067c578063f21f537d14610691578063f2fde38b146106a65761010e565b80639e049545146105c0578063a963b257146105e75761010e565b80636b8f9c431461054e5780638456cb59146105815780638488bb4e146105965780638da5cb5b146105ab5761010e565b80635c4fafc7116100e15780635c4fafc7146103545780635c975abb146103855780635e6e9f70146103ae57806361bd3851146104e95761010e565b80631323b066146101135780632a8a45bc146102105780632c87927b146102f85780633f4ba83a1461033f575b600080fd5b34801561011f57600080fd5b506101b5600480360360a081101561013657600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a08101608082013564010000000081111561017657600080fd5b82018360208201111561018857600080fd5b803590602001918460018302840111640100000000831117156101aa57600080fd5b5090925090506106d9565b6040518083815260200180602001828103825283818151815260200191508051906020019060200280838360005b838110156101fb5781810151838201526020016101e3565b50505050905001935050505060405180910390f35b34801561021c57600080fd5b5061023a6004803603602081101561023357600080fd5b50356107ce565b60405180878152602001868152602001858152602001846001600160a01b031681526020018060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561029f578181015183820152602001610287565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156102de5781810151838201526020016102c6565b505050509050019850505050505050505060405180910390f35b34801561030457600080fd5b5061033d6004803603608081101561031b57600080fd5b50803590602081013590604081013590606001356001600160a01b0316610973565b005b34801561034b57600080fd5b5061033d610985565b34801561036057600080fd5b506103696109f3565b604080516001600160a01b039092168252519081900360200190f35b34801561039157600080fd5b5061039a610a0b565b604080519115158252519081900360200190f35b3480156103ba57600080fd5b5061033d600480360360608110156103d157600080fd5b813591908101906040810160208201356401000000008111156103f357600080fd5b82018360208201111561040557600080fd5b8035906020019184602083028401116401000000008311171561042757600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561047757600080fd5b82018360208201111561048957600080fd5b803590602001918460208302840111640100000000831117156104ab57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610a14945050505050565b3480156104f557600080fd5b506104fe610bf1565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561053a578181015183820152602001610522565b505050509050019250505060405180910390f35b34801561055a57600080fd5b5061033d6004803603602081101561057157600080fd5b50356001600160a01b0316610c4c565b34801561058d57600080fd5b5061033d610d19565b3480156105a257600080fd5b50610369610d80565b3480156105b757600080fd5b50610369610d8f565b3480156105cc57600080fd5b506105d5610d9e565b60408051918252519081900360200190f35b61033d600480360360a08110156105fd57600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a08101608082013564010000000081111561063d57600080fd5b82018360208201111561064f57600080fd5b8035906020019184600183028401116401000000008311171561067157600080fd5b509092509050610da4565b34801561068857600080fd5b5061033d610e8a565b34801561069d57600080fd5b506105d5610e9d565b3480156106b257600080fd5b5061033d600480360360208110156106c957600080fd5b50356001600160a01b0316610ea3565b6000606060025460001415610735576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b61073d610f09565b610745612613565b61074d610f61565b6001600160a01b03908116825289811660208084019190915290891660408084019190915260608301899052608083018890528051601f870183900483028101830190915285815290869086908190840183828082843760009201919091525050505060a08201526107be81610f65565b9250925050965096945050505050565b60008181526006602052604081208190819081906060908190836107f460048301610f8c565b8254985090508761084c576040805162461bcd60e51b815260206004820152601660248201527f53616c653a206e6f6e2d6578697374656e7420736b7500000000000000000000604482015290519081900360640190fd5b60018201546002830154600384015491985096506001600160a01b031694508067ffffffffffffffff8111801561088257600080fd5b506040519080825280602002602001820160405280156108ac578160200160208202803683370190505b5093508067ffffffffffffffff811180156108c657600080fd5b506040519080825280602002602001820160405280156108f0578160200160208202803683370190505b50925060005b818110156109675760008061090e6004860184610f90565b915091508160001c87848151811061092257fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508060001c86848151811061095257fe5b602090810291909101015250506001016108f6565b50505091939550919395565b61097f84848484611021565b50505050565b6002546109d9576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b6109e96109e4610f61565b611258565b6109f161131f565b565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b60035460ff1681565b610a1f6109e4610f61565b815181518114610a76576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20696e636f6e73697374656e742061727261797300000000000000604482015290519081900360640190fd5b60008481526006602052604090208054610ad7576040805162461bcd60e51b815260206004820152601660248201527f53616c653a206e6f6e2d6578697374656e7420736b7500000000000000000000604482015290519081900360640190fd5b6004810182610b22576000610aeb82610f8c565b905060005b81811015610b1b576000610b048482610f90565b509050610b118482611377565b5050600101610af0565b5050610b2d565b610b2d818686611457565b857fcb3fe5489e0cd43d0f4a33d1e09a4a0463a03d0d38f56165530854e5540db1438686604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015610b95578181015183820152602001610b7d565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015610bd4578181015183820152602001610bbc565b5050505090500194505050505060405180910390a2505050505050565b60606004600001805480602002602001604051908101604052809291908181526020018280548015610c4257602002820191906000526020600020905b815481526020019060010190808311610c2e575b5050505050905090565b610c576109e4610f61565b6001600160a01b038116610cb2576040805162461bcd60e51b815260206004820152601460248201527f5061796f75743a207a65726f2061646472657373000000000000000000000000604482015290519081900360640190fd5b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03838116919091179182905560408051929091168252517fdd880d24a789958a6398c99c2e54ce31bc10a638cbc42f7dd34285479ae0f855916020908290030190a150565b600254610d6d576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b610d786109e4610f61565b6109f16115c0565b6001546001600160a01b031681565b6000546001600160a01b031690565b60001981565b600254610df8576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b610e00610f09565b610e08612613565b610e10610f61565b6001600160a01b03908116825287811660208084019190915290871660408084019190915260608301879052608083018690528051601f850183900483028101830190915283815290849084908190840183828082843760009201919091525050505060a0820152610e81816115fe565b50505050505050565b610e956109e4610f61565b6109e961162b565b60025490565b610eae6109e4610f61565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383811691821780845560405192939116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b60035460ff16156109f1576040805162461bcd60e51b815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b3390565b60006060610f72836116ad565b610f7b83611957565b505060c081015160e0909101519091565b5490565b815460009081908310610fea576040805162461bcd60e51b815260206004820152601c60248201527f456e756d4d61703a20696e646578206f7574206f6620626f756e647300000000604482015290519081900360640190fd5b6000846000018481548110610ffb57fe5b906000526020600020906002020190508060000154816001015492509250509250929050565b82611073576040805162461bcd60e51b815260206004820152601160248201527f53616c653a207a65726f20737570706c79000000000000000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000061109e6004610f8c565b106110f0576040805162461bcd60e51b815260206004820152601360248201527f53616c653a20746f6f206d616e7920736b757300000000000000000000000000604482015290519081900360640190fd5b6110fb6004856119f4565b61114c576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20736b7520616c7265616479206372656174656400000000000000604482015290519081900360640190fd5b6001600160a01b038116156111be5761116d816001600160a01b0316611a3e565b6111be576040805162461bcd60e51b815260206004820152601b60248201527f53616c653a206e6f6e2d636f6e74726163742072656365697665720000000000604482015290519081900360640190fd5b60008481526006602090815260409182902085815560018101869055600281018590556003810180546001600160a01b03861673ffffffffffffffffffffffffffffffffffffffff1990911681179091558351888152928301879052828401869052606083015291517f38bd4aabce684540cd61351b91f2f5facf9d6963934347e25aab93d87ae7ac149181900360800190a15050505050565b306001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561129157600080fd5b505afa1580156112a5573d6000803e3d6000fd5b505050506040513d60208110156112bb57600080fd5b50516001600160a01b0382811691161461131c576040805162461bcd60e51b815260206004820152601660248201527f4f776e61626c653a206e6f7420746865206f776e657200000000000000000000604482015290519081900360640190fd5b50565b611327611a44565b6003805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61135a610f61565b604080516001600160a01b039092168252519081900360200190a1565b6000818152600183016020526040812054801561144b57835460001980830191908101906000908790839081106113aa57fe5b90600052602060002090600202019050808760000184815481106113ca57fe5b60009182526020808320845460029093020191825560019384015491840191909155835482528983019052604090209084019055865487908061140957fe5b60008281526020808220600260001990940193840201828155600190810183905592909355888152898201909252604082209190915594506114519350505050565b60009150505b92915050565b60005b825181101561153d57600083828151811061147157fe5b6020026020010151905060006001600160a01b0316816001600160a01b031614156114e3576040805162461bcd60e51b815260206004820152601860248201527f53616c653a207a65726f206164647265737320746f6b656e0000000000000000604482015290519081900360640190fd5b60008383815181106114f157fe5b60200260200101519050806000141561151d57611517866001600160a01b038416611377565b50611533565b611531866001600160a01b03841683611a9b565b505b505060010161145a565b507f000000000000000000000000000000000000000000000000000000000000000061156884610f8c565b11156115bb576040805162461bcd60e51b815260206004820152601560248201527f53616c653a20746f6f206d616e7920746f6b656e730000000000000000000000604482015290519081900360640190fd5b505050565b6115c8610f09565b6003805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861135a610f61565b611607816116ad565b61161081611957565b61161981611b35565b61162281611c84565b61131c81611cd0565b60025415611680576040805162461bcd60e51b815260206004820152601260248201527f537461727461626c653a20737461727465640000000000000000000000000000604482015290519081900360640190fd5b426002557f27029695aa5f602a4ee81f4c32dfa86e562f200a17966496f3a7c3f2ec0f941761135a610f61565b60208101516001600160a01b031661170c576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a207a65726f206164647265737320726563697069656e7400000000604482015290519081900360640190fd5b60408101516001600160a01b031661176b576040805162461bcd60e51b815260206004820152601860248201527f53616c653a207a65726f206164647265737320746f6b656e0000000000000000604482015290519081900360640190fd5b60808101516117c1576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a207a65726f207175616e7469747920707572636861736500000000604482015290519081900360640190fd5b606081015160009081526006602052604090208054611827576040805162461bcd60e51b815260206004820152601660248201527f53616c653a206e6f6e2d6578697374656e7420736b7500000000000000000000604482015290519081900360640190fd5b816080015181600201541015611884576040805162461bcd60e51b815260206004820152601860248201527f53616c653a2061626f7665206d6178207175616e746974790000000000000000604482015290519081900360640190fd5b8054600019146118eb578160800151816001015410156118eb576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20696e73756666696369656e7420737570706c7900000000000000604482015290519081900360640190fd5b60408201516001600160a01b031661190660048301826121b5565b6115bb576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a206e6f6e2d6578697374656e7420736b7520746f6b656e00000000604482015290519081900360640190fd5b6060810151600090815260066020526040902080546119bd576040805162461bcd60e51b815260206004820152601560248201527f53616c653a20756e737570706f7274656420534b550000000000000000000000604482015290519081900360640190fd5b6004810160006119cd84836121cd565b90506119e684608001518261223d90919063ffffffff16565b60c090940193909352505050565b6000611a0083836121b5565b611a3657508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611451565b506000611451565b3b151590565b60035460ff166109f1576040805162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604482015290519081900360640190fd5b600082815260018401602052604081205480611b00575050604080518082018252838152602080820184815286546001818101895560008981528481209551600290930290950191825591519082015586548684528188019092529290912055611b2e565b82856000016001830381548110611b1357fe5b90600052602060002090600202016001018190555060009150505b9392505050565b60408101516001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415611c58578060c00151341015611bb7576040805162461bcd60e51b815260206004820152601660248201527f53616c653a20696e73756666696369656e742045544800000000000000000000604482015290519081900360640190fd5b60015460c08201516040516001600160a01b039092169181156108fc0291906000818181858888f19350505050158015611bf5573d6000803e3d6000fd5b506000611c0f8260c001513461229690919063ffffffff16565b90508015611c525781516040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611c50573d6000803e3d6000fd5b505b5061131c565b61131c611c63610f61565b60015460c084015160408501516001600160a01b03908116939216906122f3565b60608101516000908152600660205260409020805460001914611ccc5760808201516001820154611cb491612296565b60608301516000908152600660205260409020600101555b5050565b806060015181604001516001600160a01b031682600001516001600160a01b03167f29f844483ca6b10b5c0611d039afc15ce8f6380e905307b381c3a8ee4e90e11e846020015185608001518660a001518760c001518860e001518961010001518a610120015160405160200180848051906020019060200280838360005b83811015611d67578181015183820152602001611d4f565b50505050905001838051906020019060200280838360005b83811015611d97578181015183820152602001611d7f565b50505050905001828051906020019060200280838360005b83811015611dc7578181015183820152602001611daf565b50505050905001935050505060405160208183030381529060405260405180866001600160a01b031681526020018581526020018060200184815260200180602001838103835286818151815260200191508051906020019080838360005b83811015611e3e578181015183820152602001611e26565b50505050905090810190601f168015611e6b5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015611e9e578181015183820152602001611e86565b50505050905090810190601f168015611ecb5780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390a460608101516000908152600660205260409020600301546001600160a01b03168015611ccc576361eceae860e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916816001600160a01b03166361eceae8846000015185602001518660400151876060015188608001518960a001518a60c001518b60e001518c61010001518d61012001516040518b63ffffffff1660e01b8152600401808b6001600160a01b031681526020018a6001600160a01b03168152602001896001600160a01b031681526020018881526020018781526020018060200186815260200180602001806020018060200185810385528a818151815260200191508051906020019080838360005b83811015612004578181015183820152602001611fec565b50505050905090810190601f1680156120315780820380516001836020036101000a031916815260200191505b508581038452885181528851602091820191808b01910280838360005b8381101561206657818101518382015260200161204e565b50505050905001858103835287818151815260200191508051906020019060200280838360005b838110156120a557818101518382015260200161208d565b50505050905001858103825286818151815260200191508051906020019060200280838360005b838110156120e45781810151838201526020016120cc565b505050509050019e505050505050505050505050505050602060405180830381600087803b15801561211557600080fd5b505af1158015612129573d6000803e3d6000fd5b505050506040513d602081101561213f57600080fd5b50517fffffffff000000000000000000000000000000000000000000000000000000001614611ccc576040805162461bcd60e51b815260206004820152601a60248201527f53616c653a206e6f74696669636174696f6e2072656675736564000000000000604482015290519081900360640190fd5b60009081526001919091016020526040902054151590565b60408201516000906121e99083906001600160a01b031661237b565b905080611451576040805162461bcd60e51b815260206004820152601f60248201527f53616c653a20756e737570706f72746564207061796d656e7420746f6b656e00604482015290519081900360640190fd5b60008261224c57506000611451565b8282028284828161225957fe5b0414611b2e5760405162461bcd60e51b81526004018080602001828103825260218152602001806126856021913960400191505060405180910390fd5b6000828211156122ed576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261097f90859061240b565b6000818152600183016020526040812054806123de576040805162461bcd60e51b815260206004820152601860248201527f456e756d4d61703a206e6f6e6578697374656e74206b65790000000000000000604482015290519081900360640190fd5b8360000160018203815481106123f057fe5b90600052602060002090600202016001015491505092915050565b8161241e6001600160a01b038216611a3e565b61246f576040805162461bcd60e51b815260206004820152601a60248201527f4552433230577261707065723a206e6f6e2d636f6e7472616374000000000000604482015290519081900360640190fd5b600080826001600160a01b0316846040518082805190602001908083835b602083106124ca57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161248d565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461252c576040519150601f19603f3d011682016040523d82523d6000602084013e612531565b606091505b509150915081156125b0578051156125ab5780806020019051602081101561255857600080fd5b50516125ab576040805162461bcd60e51b815260206004820152601e60248201527f4552433230577261707065723a206f7065726174696f6e206661696c65640000604482015290519081900360640190fd5b61260c565b8051612603576040805162461bcd60e51b815260206004820152601e60248201527f4552433230577261707065723a206f7065726174696f6e206661696c65640000604482015290519081900360640190fd5b80518082602001fd5b5050505050565b60405180610140016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160008019168152602001600081526020016060815260200160008152602001606081526020016060815260200160608152509056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220538c1b11d2e4a53343ff4cd37eae21bad8c5953103c87adbb9e4bb1bf6f47ee464736f6c63430007060033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x10E JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6B8F9C43 GT PUSH2 0xA5 JUMPI DUP1 PUSH4 0x9E049545 GT PUSH2 0x74 JUMPI DUP1 PUSH4 0xBE9A6555 GT PUSH2 0x59 JUMPI DUP1 PUSH4 0xBE9A6555 EQ PUSH2 0x67C JUMPI DUP1 PUSH4 0xF21F537D EQ PUSH2 0x691 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x6A6 JUMPI PUSH2 0x10E JUMP JUMPDEST DUP1 PUSH4 0x9E049545 EQ PUSH2 0x5C0 JUMPI DUP1 PUSH4 0xA963B257 EQ PUSH2 0x5E7 JUMPI PUSH2 0x10E JUMP JUMPDEST DUP1 PUSH4 0x6B8F9C43 EQ PUSH2 0x54E JUMPI DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x581 JUMPI DUP1 PUSH4 0x8488BB4E EQ PUSH2 0x596 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x5AB JUMPI PUSH2 0x10E JUMP JUMPDEST DUP1 PUSH4 0x5C4FAFC7 GT PUSH2 0xE1 JUMPI DUP1 PUSH4 0x5C4FAFC7 EQ PUSH2 0x354 JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x385 JUMPI DUP1 PUSH4 0x5E6E9F70 EQ PUSH2 0x3AE JUMPI DUP1 PUSH4 0x61BD3851 EQ PUSH2 0x4E9 JUMPI PUSH2 0x10E JUMP JUMPDEST DUP1 PUSH4 0x1323B066 EQ PUSH2 0x113 JUMPI DUP1 PUSH4 0x2A8A45BC EQ PUSH2 0x210 JUMPI DUP1 PUSH4 0x2C87927B EQ PUSH2 0x2F8 JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x33F JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x11F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1B5 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x136 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x176 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x188 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x1AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x6D9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1FB JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1E3 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP4 POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x21C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x23A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x233 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x7CE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x29F JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x287 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2DE JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2C6 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP9 POP POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x304 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x31B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x973 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x34B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33D PUSH2 0x985 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x360 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x369 PUSH2 0x9F3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x391 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x39A PUSH2 0xA0B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x3D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x3F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x405 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x427 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 SWAP5 SWAP4 PUSH1 0x20 DUP2 ADD SWAP4 POP CALLDATALOAD SWAP2 POP POP PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x477 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x489 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x4AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0xA14 SWAP5 POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4FE PUSH2 0xBF1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 DUP2 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x53A JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x522 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x55A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x571 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xC4C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x58D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33D PUSH2 0xD19 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5A2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x369 PUSH2 0xD80 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x369 PUSH2 0xD8F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5D5 PUSH2 0xD9E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x33D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x5FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x63D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x64F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x671 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0xDA4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x688 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33D PUSH2 0xE8A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x69D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5D5 PUSH2 0xE9D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x6C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xEA3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x2 SLOAD PUSH1 0x0 EQ ISZERO PUSH2 0x735 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x73D PUSH2 0xF09 JUMP JUMPDEST PUSH2 0x745 PUSH2 0x2613 JUMP JUMPDEST PUSH2 0x74D PUSH2 0xF61 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP10 DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP10 AND PUSH1 0x40 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD DUP10 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP9 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x1F DUP8 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD SWAP1 SWAP2 MSTORE DUP6 DUP2 MSTORE SWAP1 DUP7 SWAP1 DUP7 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP POP PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x7BE DUP2 PUSH2 0xF65 JUMP JUMPDEST SWAP3 POP SWAP3 POP POP SWAP7 POP SWAP7 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP2 SWAP1 DUP2 SWAP1 DUP2 SWAP1 PUSH1 0x60 SWAP1 DUP2 SWAP1 DUP4 PUSH2 0x7F4 PUSH1 0x4 DUP4 ADD PUSH2 0xF8C JUMP JUMPDEST DUP3 SLOAD SWAP9 POP SWAP1 POP DUP8 PUSH2 0x84C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7500000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x3 DUP5 ADD SLOAD SWAP2 SWAP9 POP SWAP7 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP5 POP DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x882 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x8AC JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP4 POP DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x8C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x8F0 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x967 JUMPI PUSH1 0x0 DUP1 PUSH2 0x90E PUSH1 0x4 DUP7 ADD DUP5 PUSH2 0xF90 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP2 PUSH1 0x0 SHR DUP8 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x922 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP DUP1 PUSH1 0x0 SHR DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x952 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP POP PUSH1 0x1 ADD PUSH2 0x8F6 JUMP JUMPDEST POP POP POP SWAP2 SWAP4 SWAP6 POP SWAP2 SWAP4 SWAP6 JUMP JUMPDEST PUSH2 0x97F DUP5 DUP5 DUP5 DUP5 PUSH2 0x1021 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x9D9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x9E9 PUSH2 0x9E4 PUSH2 0xF61 JUMP JUMPDEST PUSH2 0x1258 JUMP JUMPDEST PUSH2 0x9F1 PUSH2 0x131F JUMP JUMPDEST JUMP JUMPDEST PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0xA1F PUSH2 0x9E4 PUSH2 0xF61 JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD DUP2 EQ PUSH2 0xA76 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E636F6E73697374656E742061727261797300000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0xAD7 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7500000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP2 ADD DUP3 PUSH2 0xB22 JUMPI PUSH1 0x0 PUSH2 0xAEB DUP3 PUSH2 0xF8C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xB1B JUMPI PUSH1 0x0 PUSH2 0xB04 DUP5 DUP3 PUSH2 0xF90 JUMP JUMPDEST POP SWAP1 POP PUSH2 0xB11 DUP5 DUP3 PUSH2 0x1377 JUMP JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0xAF0 JUMP JUMPDEST POP POP PUSH2 0xB2D JUMP JUMPDEST PUSH2 0xB2D DUP2 DUP7 DUP7 PUSH2 0x1457 JUMP JUMPDEST DUP6 PUSH32 0xCB3FE5489E0CD43D0F4A33D1E09A4A0463A03D0D38F56165530854E5540DB143 DUP7 DUP7 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xB95 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xB7D JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xBD4 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xBBC JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x4 PUSH1 0x0 ADD DUP1 SLOAD DUP1 PUSH1 0x20 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 DUP1 ISZERO PUSH2 0xC42 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0xC2E JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0xC57 PUSH2 0x9E4 PUSH2 0xF61 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xCB2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061796F75743A207A65726F2061646472657373000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 SWAP1 SWAP2 OR SWAP2 DUP3 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD SWAP3 SWAP1 SWAP2 AND DUP3 MSTORE MLOAD PUSH32 0xDD880D24A789958A6398C99C2E54CE31BC10A638CBC42F7DD34285479AE0F855 SWAP2 PUSH1 0x20 SWAP1 DUP3 SWAP1 SUB ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0xD6D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0xD78 PUSH2 0x9E4 PUSH2 0xF61 JUMP JUMPDEST PUSH2 0x9F1 PUSH2 0x15C0 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 NOT DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0xDF8 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0xE00 PUSH2 0xF09 JUMP JUMPDEST PUSH2 0xE08 PUSH2 0x2613 JUMP JUMPDEST PUSH2 0xE10 PUSH2 0xF61 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP8 DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP8 AND PUSH1 0x40 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD DUP8 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP7 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x1F DUP6 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD SWAP1 SWAP2 MSTORE DUP4 DUP2 MSTORE SWAP1 DUP5 SWAP1 DUP5 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP POP PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0xE81 DUP2 PUSH2 0x15FE JUMP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0xE95 PUSH2 0x9E4 PUSH2 0xF61 JUMP JUMPDEST PUSH2 0x9E9 PUSH2 0x162B JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xEAE PUSH2 0x9E4 PUSH2 0xF61 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 DUP3 OR DUP1 DUP5 SSTORE PUSH1 0x40 MLOAD SWAP3 SWAP4 SWAP2 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x9F1 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061757361626C653A2070617573656400000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0xF72 DUP4 PUSH2 0x16AD JUMP JUMPDEST PUSH2 0xF7B DUP4 PUSH2 0x1957 JUMP JUMPDEST POP POP PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xE0 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP2 JUMP JUMPDEST SLOAD SWAP1 JUMP JUMPDEST DUP2 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP4 LT PUSH2 0xFEA JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x456E756D4D61703A20696E646578206F7574206F6620626F756E647300000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 PUSH1 0x0 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0xFFB JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD SWAP1 POP DUP1 PUSH1 0x0 ADD SLOAD DUP2 PUSH1 0x1 ADD SLOAD SWAP3 POP SWAP3 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP3 PUSH2 0x1073 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F20737570706C79000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH2 0x109E PUSH1 0x4 PUSH2 0xF8C JUMP JUMPDEST LT PUSH2 0x10F0 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20746F6F206D616E7920736B757300000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x10FB PUSH1 0x4 DUP6 PUSH2 0x19F4 JUMP JUMPDEST PUSH2 0x114C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20736B7520616C7265616479206372656174656400000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO PUSH2 0x11BE JUMPI PUSH2 0x116D DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1A3E JUMP JUMPDEST PUSH2 0x11BE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D636F6E74726163742072656365697665720000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP6 DUP2 SSTORE PUSH1 0x1 DUP2 ADD DUP7 SWAP1 SSTORE PUSH1 0x2 DUP2 ADD DUP6 SWAP1 SSTORE PUSH1 0x3 DUP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT SWAP1 SWAP2 AND DUP2 OR SWAP1 SWAP2 SSTORE DUP4 MLOAD DUP9 DUP2 MSTORE SWAP3 DUP4 ADD DUP8 SWAP1 MSTORE DUP3 DUP5 ADD DUP7 SWAP1 MSTORE PUSH1 0x60 DUP4 ADD MSTORE SWAP2 MLOAD PUSH32 0x38BD4AABCE684540CD61351B91F2F5FACF9D6963934347E25AAB93D87AE7AC14 SWAP2 DUP2 SWAP1 SUB PUSH1 0x80 ADD SWAP1 LOG1 POP POP POP POP POP JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8DA5CB5B 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 PUSH2 0x1291 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x12A5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x12BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ PUSH2 0x131C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6F7420746865206F776E657200000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0x1327 PUSH2 0x1A44 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA PUSH2 0x135A PUSH2 0xF61 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0x144B JUMPI DUP4 SLOAD PUSH1 0x0 NOT DUP1 DUP4 ADD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x0 SWAP1 DUP8 SWAP1 DUP4 SWAP1 DUP2 LT PUSH2 0x13AA JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD SWAP1 POP DUP1 DUP8 PUSH1 0x0 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x13CA JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 DUP5 SLOAD PUSH1 0x2 SWAP1 SWAP4 MUL ADD SWAP2 DUP3 SSTORE PUSH1 0x1 SWAP4 DUP5 ADD SLOAD SWAP2 DUP5 ADD SWAP2 SWAP1 SWAP2 SSTORE DUP4 SLOAD DUP3 MSTORE DUP10 DUP4 ADD SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP1 DUP5 ADD SWAP1 SSTORE DUP7 SLOAD DUP8 SWAP1 DUP1 PUSH2 0x1409 JUMPI INVALID JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 PUSH1 0x2 PUSH1 0x0 NOT SWAP1 SWAP5 ADD SWAP4 DUP5 MUL ADD DUP3 DUP2 SSTORE PUSH1 0x1 SWAP1 DUP2 ADD DUP4 SWAP1 SSTORE SWAP3 SWAP1 SWAP4 SSTORE DUP9 DUP2 MSTORE DUP10 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x40 DUP3 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE SWAP5 POP PUSH2 0x1451 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SWAP2 POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x153D JUMPI PUSH1 0x0 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1471 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x14E3 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F206164647265737320746F6B656E0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x14F1 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP DUP1 PUSH1 0x0 EQ ISZERO PUSH2 0x151D JUMPI PUSH2 0x1517 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x1377 JUMP JUMPDEST POP PUSH2 0x1533 JUMP JUMPDEST PUSH2 0x1531 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP4 PUSH2 0x1A9B JUMP JUMPDEST POP JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x145A JUMP JUMPDEST POP PUSH32 0x0 PUSH2 0x1568 DUP5 PUSH2 0xF8C JUMP JUMPDEST GT ISZERO PUSH2 0x15BB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20746F6F206D616E7920746F6B656E730000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x15C8 PUSH2 0xF09 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH2 0x135A PUSH2 0xF61 JUMP JUMPDEST PUSH2 0x1607 DUP2 PUSH2 0x16AD JUMP JUMPDEST PUSH2 0x1610 DUP2 PUSH2 0x1957 JUMP JUMPDEST PUSH2 0x1619 DUP2 PUSH2 0x1B35 JUMP JUMPDEST PUSH2 0x1622 DUP2 PUSH2 0x1C84 JUMP JUMPDEST PUSH2 0x131C DUP2 PUSH2 0x1CD0 JUMP JUMPDEST PUSH1 0x2 SLOAD ISZERO PUSH2 0x1680 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A20737461727465640000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST TIMESTAMP PUSH1 0x2 SSTORE PUSH32 0x27029695AA5F602A4EE81F4C32DFA86E562F200A17966496F3A7C3F2EC0F9417 PUSH2 0x135A PUSH2 0xF61 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x170C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F206164647265737320726563697069656E7400000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x176B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F206164647265737320746F6B656E0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x80 DUP2 ADD MLOAD PUSH2 0x17C1 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F207175616E7469747920707572636861736500000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0x1827 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7500000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x80 ADD MLOAD DUP2 PUSH1 0x2 ADD SLOAD LT ISZERO PUSH2 0x1884 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A2061626F7665206D6178207175616E746974790000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 SLOAD PUSH1 0x0 NOT EQ PUSH2 0x18EB JUMPI DUP2 PUSH1 0x80 ADD MLOAD DUP2 PUSH1 0x1 ADD SLOAD LT ISZERO PUSH2 0x18EB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E73756666696369656E7420737570706C7900000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1906 PUSH1 0x4 DUP4 ADD DUP3 PUSH2 0x21B5 JUMP JUMPDEST PUSH2 0x15BB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7520746F6B656E00000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0x19BD JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20756E737570706F7274656420534B550000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP2 ADD PUSH1 0x0 PUSH2 0x19CD DUP5 DUP4 PUSH2 0x21CD JUMP JUMPDEST SWAP1 POP PUSH2 0x19E6 DUP5 PUSH1 0x80 ADD MLOAD DUP3 PUSH2 0x223D SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0xC0 SWAP1 SWAP5 ADD SWAP4 SWAP1 SWAP4 MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A00 DUP4 DUP4 PUSH2 0x21B5 JUMP JUMPDEST PUSH2 0x1A36 JUMPI POP DUP2 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP5 SSTORE PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 SWAP1 SWAP4 ADD DUP5 SWAP1 SSTORE DUP5 SLOAD DUP5 DUP3 MSTORE DUP3 DUP7 ADD SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0x1451 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x1451 JUMP JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND PUSH2 0x9F1 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061757361626C653A206E6F7420706175736564000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x1 DUP5 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 PUSH2 0x1B00 JUMPI POP POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE DUP4 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD DUP5 DUP2 MSTORE DUP7 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP10 SSTORE PUSH1 0x0 DUP10 DUP2 MSTORE DUP5 DUP2 KECCAK256 SWAP6 MLOAD PUSH1 0x2 SWAP1 SWAP4 MUL SWAP1 SWAP6 ADD SWAP2 DUP3 SSTORE SWAP2 MLOAD SWAP1 DUP3 ADD SSTORE DUP7 SLOAD DUP7 DUP5 MSTORE DUP2 DUP9 ADD SWAP1 SWAP3 MSTORE SWAP3 SWAP1 SWAP2 KECCAK256 SSTORE PUSH2 0x1B2E JUMP JUMPDEST DUP3 DUP6 PUSH1 0x0 ADD PUSH1 0x1 DUP4 SUB DUP2 SLOAD DUP2 LT PUSH2 0x1B13 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD PUSH1 0x1 ADD DUP2 SWAP1 SSTORE POP PUSH1 0x0 SWAP2 POP POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x1C58 JUMPI DUP1 PUSH1 0xC0 ADD MLOAD CALLVALUE LT ISZERO PUSH2 0x1BB7 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E73756666696369656E742045544800000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xC0 DUP3 ADD MLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 DUP2 ISZERO PUSH2 0x8FC MUL SWAP2 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x1BF5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x0 PUSH2 0x1C0F DUP3 PUSH1 0xC0 ADD MLOAD CALLVALUE PUSH2 0x2296 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x1C52 JUMPI DUP2 MLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 DUP3 ISZERO PUSH2 0x8FC MUL SWAP1 DUP4 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x1C50 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP JUMPDEST POP PUSH2 0x131C JUMP JUMPDEST PUSH2 0x131C PUSH2 0x1C63 PUSH2 0xF61 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xC0 DUP5 ADD MLOAD PUSH1 0x40 DUP6 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP4 SWAP3 AND SWAP1 PUSH2 0x22F3 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x0 NOT EQ PUSH2 0x1CCC JUMPI PUSH1 0x80 DUP3 ADD MLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH2 0x1CB4 SWAP2 PUSH2 0x2296 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SSTORE JUMPDEST POP POP JUMP JUMPDEST DUP1 PUSH1 0x60 ADD MLOAD DUP2 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x29F844483CA6B10B5C0611D039AFC15CE8F6380E905307B381C3A8EE4E90E11E DUP5 PUSH1 0x20 ADD MLOAD DUP6 PUSH1 0x80 ADD MLOAD DUP7 PUSH1 0xA0 ADD MLOAD DUP8 PUSH1 0xC0 ADD MLOAD DUP9 PUSH1 0xE0 ADD MLOAD DUP10 PUSH2 0x100 ADD MLOAD DUP11 PUSH2 0x120 ADD MLOAD PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP5 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1D67 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1D4F JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1D97 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1D7F JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1DC7 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1DAF JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP4 POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP7 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1E3E JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1E26 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1E6B JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP DUP4 DUP2 SUB DUP3 MSTORE DUP5 MLOAD DUP2 MSTORE DUP5 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP7 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1E9E JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1E86 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1ECB JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP8 POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 ISZERO PUSH2 0x1CCC JUMPI PUSH4 0x61ECEAE8 PUSH1 0xE0 SHL PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x61ECEAE8 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD DUP7 PUSH1 0x40 ADD MLOAD DUP8 PUSH1 0x60 ADD MLOAD DUP9 PUSH1 0x80 ADD MLOAD DUP10 PUSH1 0xA0 ADD MLOAD DUP11 PUSH1 0xC0 ADD MLOAD DUP12 PUSH1 0xE0 ADD MLOAD DUP13 PUSH2 0x100 ADD MLOAD DUP14 PUSH2 0x120 ADD MLOAD PUSH1 0x40 MLOAD DUP12 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP6 DUP2 SUB DUP6 MSTORE DUP11 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2004 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1FEC JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x2031 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP DUP6 DUP2 SUB DUP5 MSTORE DUP9 MLOAD DUP2 MSTORE DUP9 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP1 DUP12 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2066 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x204E JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP6 DUP2 SUB DUP4 MSTORE DUP8 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x20A5 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x208D JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP6 DUP2 SUB DUP3 MSTORE DUP7 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x20E4 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x20CC JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP15 POP POP POP POP POP POP POP POP POP POP POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2115 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2129 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x213F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND EQ PUSH2 0x1CCC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F74696669636174696F6E2072656675736564000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x0 SWAP1 PUSH2 0x21E9 SWAP1 DUP4 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x237B JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x1451 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20756E737570706F72746564207061796D656E7420746F6B656E00 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x224C JUMPI POP PUSH1 0x0 PUSH2 0x1451 JUMP JUMPDEST DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 PUSH2 0x2259 JUMPI INVALID JUMPDEST DIV EQ PUSH2 0x1B2E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2685 PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP3 GT ISZERO PUSH2 0x22ED JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x24 DUP4 ADD MSTORE DUP5 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x84 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 OR SWAP1 MSTORE PUSH2 0x97F SWAP1 DUP6 SWAP1 PUSH2 0x240B JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 PUSH2 0x23DE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x456E756D4D61703A206E6F6E6578697374656E74206B65790000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP4 PUSH1 0x0 ADD PUSH1 0x1 DUP3 SUB DUP2 SLOAD DUP2 LT PUSH2 0x23F0 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD PUSH1 0x1 ADD SLOAD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 PUSH2 0x241E PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x1A3E JUMP JUMPDEST PUSH2 0x246F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433230577261707065723A206E6F6E2D636F6E7472616374000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x24CA JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x248D JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x252C JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x2531 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 ISZERO PUSH2 0x25B0 JUMPI DUP1 MLOAD ISZERO PUSH2 0x25AB JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2558 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x25AB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433230577261707065723A206F7065726174696F6E206661696C65640000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x260C JUMP JUMPDEST DUP1 MLOAD PUSH2 0x2603 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433230577261707065723A206F7065726174696F6E206661696C65640000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 MLOAD DUP1 DUP3 PUSH1 0x20 ADD REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x140 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP1 NOT AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE POP SWAP1 JUMP INVALID MSTORE8 PUSH2 0x6665 0x4D PUSH2 0x7468 GASPRICE KECCAK256 PUSH14 0x756C7469706C69636174696F6E20 PUSH16 0x766572666C6F77A26469706673582212 KECCAK256 MSTORE8 DUP13 SHL GT 0xD2 0xE4 0xA5 CALLER NUMBER SELFDESTRUCT 0x4C 0xD3 PUSH31 0xAE21BAD8C5953103C87ADBB9E4BB1BF6F47EE464736F6C6343000706003300 ","sourceMap":"131:827:14:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9044:610:32;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9044:610:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9044:610:32;;-1:-1:-1;9044:610:32;-1:-1:-1;9044:610:32;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10463:1027;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10463:1027:32;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10463:1027:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;701:255:14;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;701:255:14;;;;;;;;;;;;;;;;-1:-1:-1;;;;;701:255:14;;:::i;:::-;;4169:114:32;;;;;;;;;;;;;:::i;1698:98::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;1698:98:32;;;;;;;;;;;;;;482:18:5;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;5032:943:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5032:943:32;;;;;;;;-1:-1:-1;5032:943:32;;-1:-1:-1;;5032:943:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5032:943:32;;-1:-1:-1;5032:943:32;;-1:-1:-1;;;;;5032:943:32:i;11621:110::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;660:263:8;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;660:263:8;-1:-1:-1;;;;;660:263:8;;:::i;3787:110:32:-;;;;;;;;;;;;;:::i;379:35:8:-;;;;;;;;;;;;;:::i;1114:94:1:-;;;;;;;;;;;;;:::i;1802:69:32:-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;6962:537;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6962:537:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6962:537:32;;-1:-1:-1;6962:537:32;-1:-1:-1;6962:537:32;:::i;3396:118::-;;;;;;;;;;;;;:::i;1276:85:6:-;;;;;;;;;;;;;:::i;1448:197:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1448:197:1;-1:-1:-1;;;;;1448:197:1;;:::i;9044:610:32:-;9266:18;9286:28;988:10:6;;1002:1;988:15;;980:50;;;;;-1:-1:-1;;;980:50:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;9326:19:32::1;:17;:19::i;:::-;9355:28;;:::i;:::-;9414:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;9393:33:32;;::::1;::::0;;9436:30;;::::1;:18;::::0;;::::1;:30:::0;;;;9476:22;;::::1;:14;::::0;;::::1;:22:::0;;;;9508:12:::1;::::0;::::1;:18:::0;;;9536:17:::1;::::0;::::1;:28:::0;;;9574;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;;;9594:8;;;;;;9574:28;::::1;9594:8:::0;;;;9574:28;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;;;;9574:17:32::1;::::0;::::1;:28:::0;9620:27:::1;9574:8:::0;9620:17:::1;:27::i;:::-;9613:34;;;;;9044:610:::0;;;;;;;;;:::o;10463:1027::-;10573:19;10841:14;;;:9;:14;;;;;10573:19;;;;;;10730:23;;;;10573:19;10882:23;:14;;;:21;:23::i;:::-;10930:19;;;-1:-1:-1;10865:40:32;-1:-1:-1;10967:16:32;10959:51;;;;;-1:-1:-1;;;10959:51:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;11038:23;;;;11096:30;;;;11160:29;;;;11038:23;;-1:-1:-1;11096:30:32;-1:-1:-1;;;;;;11160:29:32;;-1:-1:-1;11223:6:32;11209:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11209:21:32;;11200:30;;11263:6;11249:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11249:21:32;;11240:30;;11285:9;11280:204;11304:6;11300:1;:10;11280:204;;;11332:13;;11364:20;:14;;;11382:1;11364:17;:20::i;:::-;11331:53;;;;11426:5;11418:14;;11398:6;11405:1;11398:9;;;;;;;;;;;;;:35;-1:-1:-1;;;;;11398:35:32;;;-1:-1:-1;;;;;11398:35:32;;;;;11467:5;11459:14;;11447:6;11454:1;11447:9;;;;;;;;;;;;;;;;;:26;-1:-1:-1;;11312:3:32;;11280:204;;;;10463:1027;;;;;;;;;:::o;701:255:14:-;874:75;885:3;890:11;903:22;927:21;874:10;:75::i;:::-;701:255;;;;:::o;4169:114:32:-;988:10:6;;980:50;;;;;-1:-1:-1;;;980:50:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;4225:31:32::1;4243:12;:10;:12::i;:::-;4225:17;:31::i;:::-;4266:10;:8;:10::i;:::-;4169:114::o:0;1698:98::-;1751:44;1698:98;:::o;482:18:5:-;;;;;;:::o;5032:943:32:-;5176:31;5194:12;:10;:12::i;5176:31::-;5234:13;;5275;;5265:23;;5257:61;;;;;-1:-1:-1;;;5257:61:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;5328:23;5354:14;;;:9;:14;;;;;5386:19;;5378:59;;;;;-1:-1:-1;;;5378:59:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;5482:14;;;5510:11;5506:410;;5537:21;5561:20;:11;:18;:20::i;:::-;5537:44;;5600:9;5595:236;5619:13;5615:1;:17;5595:236;;;5737:13;5756:17;:11;5737:13;5756:14;:17::i;:::-;-1:-1:-1;5736:37:32;-1:-1:-1;5791:25:32;:11;5736:37;5791:18;:25::i;:::-;-1:-1:-1;;5634:3:32;;5595:236;;;;5506:410;;;;5861:44;5877:11;5890:6;5898;5861:15;:44::i;:::-;5948:3;5931:37;5953:6;5961;5931:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5032:943;;;;;;:::o;11621:110::-;11672:21;11712:5;:12;;11705:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11621:110;:::o;660:263:8:-;733:31;751:12;:10;:12::i;733:31::-;-1:-1:-1;;;;;782:27:8;;774:60;;;;;-1:-1:-1;;;774:60:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;844:12;:28;;-1:-1:-1;;844:28:8;-1:-1:-1;;;;;844:28:8;;;;;;;;;;;887:29;;;903:12;;;;887:29;;;;;;;;;;;;;660:263;:::o;3787:110:32:-;988:10:6;;980:50;;;;;-1:-1:-1;;;980:50:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;3841:31:32::1;3859:12;:10;:12::i;3841:31::-;3882:8;:6;:8::i;379:35:8:-:0;;;-1:-1:-1;;;;;379:35:8;;:::o;1114:94:1:-;1169:7;1195:6;-1:-1:-1;;;;;1195:6:1;1114:94;:::o;1802:69:32:-;-1:-1:-1;;1802:69:32;:::o;6962:537::-;988:10:6;;980:50;;;;;-1:-1:-1;;;980:50:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;7183:19:32::1;:17;:19::i;:::-;7212:28;;:::i;:::-;7271:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;7250:33:32;;::::1;::::0;;7293:30;;::::1;:18;::::0;;::::1;:30:::0;;;;7333:22;;::::1;:14;::::0;;::::1;:22:::0;;;;7365:12:::1;::::0;::::1;:18:::0;;;7393:17:::1;::::0;::::1;:28:::0;;;7431;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;;;7451:8;;;;;;7431:28;::::1;7451:8:::0;;;;7431:28;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;;;;7431:17:32::1;::::0;::::1;:28:::0;7470:22:::1;7431:8:::0;7470:12:::1;:22::i;:::-;1040:1:6;6962:537:32::0;;;;;;:::o;3396:118::-;3438:31;3456:12;:10;:12::i;3438:31::-;3479:8;:6;:8::i;1276:85:6:-;1344:10;;1276:85;:::o;1448:197:1:-;1527:31;1545:12;:10;:12::i;1527:31::-;1568:6;:17;;-1:-1:-1;;1568:17:1;-1:-1:-1;;;;;1568:17:1;;;;;;;;;1600:38;;1568:17;;1621:6;;;1600:38;;1568:6;1600:38;1448:197;:::o;572:96:5:-;634:6;;;;633:7;625:36;;;;;-1:-1:-1;;;625:36:5;;;;;;;;;;;;;;;;;;;;;;;;;;;355:104:7;442:10;355:104;:::o;882:291:30:-;970:18;990:28;1030:21;1042:8;1030:11;:21::i;:::-;1061:18;1070:8;1061;:18::i;:::-;-1:-1:-1;;1103:19:30;;;;1146:20;;;;;1103:19;;882:291::o;4367:107:2:-;4449:18;;4367:107::o;4827:264::-;4930:18;;4894:7;;;;4930:26;-1:-1:-1;4922:67:2;;;;;-1:-1:-1;;;4922:67:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;5000:22;5025:3;:11;;5037:5;5025:18;;;;;;;;;;;;;;;;;;5000:43;;5061:5;:9;;;5072:5;:11;;;5053:31;;;;;4827:264;;;;;:::o;12511:877:32:-;12701:16;12693:46;;;;;-1:-1:-1;;;12693:46:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;12774:13;12757:14;:5;:12;:14::i;:::-;:30;12749:62;;;;;-1:-1:-1;;;12749:62:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;12829:14;:5;12839:3;12829:9;:14::i;:::-;12821:52;;;;;-1:-1:-1;;;12821:52:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12887:35:32;;;12883:140;;12946:34;:21;-1:-1:-1;;;;;12946:32:32;;:34::i;:::-;12938:74;;;;;-1:-1:-1;;;12938:74:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;13032:23;13058:14;;;:9;:14;;;;;;;;;13082:33;;;13125:23;;;:37;;;13172:30;;;:55;;;13237:29;;;:53;;-1:-1:-1;;;;;13237:53:32;;-1:-1:-1;;13237:53:32;;;;;;;;13305:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12511:877;;;;;:::o;1770:136:1:-;1860:4;-1:-1:-1;;;;;1860:10:1;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1860:12:1;-1:-1:-1;;;;;1849:23:1;;;;;;1841:58;;;;;-1:-1:-1;;;1841:58:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;1770:136;:::o;1166:131:5:-;1213:16;:14;:16::i;:::-;1239:6;:14;;-1:-1:-1;;1239:14:5;;;1268:22;1277:12;:10;:12::i;:::-;1268:22;;;-1:-1:-1;;;;;1268:22:5;;;;;;;;;;;;;;1166:131::o;2556:1520:2:-;2620:4;2753:16;;;:11;;;:16;;;;;;2784:13;;2780:1290;;3221:18;;-1:-1:-1;;3175:12:2;;;;3221:22;;;;3151:21;;3221:3;;:22;;3512;;;;;;;;;;;;;;;;3483:51;;3655:9;3626:3;:11;;3638:13;3626:26;;;;;;;;;;;;;;;;:38;;:26;;;;;:38;;;;;;;;;;;;;;;3742:13;;3730:26;;:11;;;:26;;;;;3759:17;;;3730:46;;3882:17;;3730:3;;3882:17;;;;;;;;;;;;;;-1:-1:-1;;3882:17:2;;;;;;;;;;;;;;;;;;;;;3974:16;;;:11;;;:16;;;;;;3967:23;;;;3882:17;-1:-1:-1;4005:11:2;;-1:-1:-1;;;;4005:11:2;2780:1290;4054:5;4047:12;;;2556:1520;;;;;:::o;13862:663:32:-;14032:9;14027:403;14051:6;:13;14047:1;:17;14027:403;;;14085:13;14101:6;14108:1;14101:9;;;;;;;;;;;;;;14085:25;;14149:1;-1:-1:-1;;;;;14132:19:32;:5;-1:-1:-1;;;;;14132:19:32;;;14124:56;;;;;-1:-1:-1;;;14124:56:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;14194:13;14210:6;14217:1;14210:9;;;;;;;;;;;;;;14194:25;;14237:5;14246:1;14237:10;14233:187;;;14267:43;:11;-1:-1:-1;;;;;14294:14:32;;14267:18;:43::i;:::-;;14233:187;;;14349:56;:11;-1:-1:-1;;;;;14373:14:32;;14398:5;14349:15;:56::i;:::-;;14233:187;-1:-1:-1;;14066:3:32;;14027:403;;;;14471:21;14447:20;:11;:18;:20::i;:::-;:45;;14439:79;;;;;-1:-1:-1;;;14439:79:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;13862:663;;;:::o;905:129:5:-;950:19;:17;:19::i;:::-;979:6;:13;;-1:-1:-1;;979:13:5;988:4;979:13;;;1007:20;1014:12;:10;:12::i;1275:225:30:-;1354:21;1366:8;1354:11;:21::i;:::-;1385:18;1394:8;1385;:18::i;:::-;1413;1422:8;1413;:18::i;:::-;1441:19;1451:8;1441:9;:19::i;:::-;1470:23;1484:8;1470:13;:23::i;1496:131:6:-;789:10;;:15;781:46;;;;;-1:-1:-1;;;781:46:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;1569:15:::1;1556:10;:28:::0;1599:21:::1;1607:12;:10;:12::i;15465:852:32:-:0;15565:18;;;;-1:-1:-1;;;;;15565:32:32;15557:73;;;;;-1:-1:-1;;;15557:73:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;15648:14;;;;-1:-1:-1;;;;;15648:28:32;15640:65;;;;;-1:-1:-1;;;15640:65:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;15723:17;;;;15715:63;;;;;-1:-1:-1;;;15715:63:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;15824:12;;;;15788:23;15814;;;:9;:23;;;;;15855:19;;15847:59;;;;;-1:-1:-1;;;15847:59:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;15958:8;:17;;;15924:7;:30;;;:51;;15916:88;;;;;-1:-1:-1;;;15916:88:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;16018:19;;-1:-1:-1;;16018:39:32;16014:152;;16108:8;:17;;;16081:7;:23;;;:44;;16073:82;;;;;-1:-1:-1;;;16073:82:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;16210:14;;;;-1:-1:-1;;;;;16202:23:32;16244:33;:14;;;16202:23;16244;:33::i;:::-;16236:74;;;;;-1:-1:-1;;;16236:74:32;;;;;;;;;;;;;;;;;;;;;;;;;;;1788:388:26;1913:12;;;;1877:23;1903;;;:9;:23;;;;;1944:19;;1936:58;;;;;-1:-1:-1;;;1936:58:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;2033:14;;;2004:26;2077:28;2088:8;2033:14;2077:10;:28::i;:::-;2057:48;;2137:32;2151:8;:17;;;2137:9;:13;;:32;;;;:::i;:::-;2115:19;;;;:54;;;;-1:-1:-1;;;1788:388:26:o;1481:400:3:-;1544:4;1565:20;1574:3;1579:5;1565:8;:20::i;:::-;1560:315;;-1:-1:-1;1601:22:3;;;;;;;;:10;:22;;;;;;;;;;;;;1779:17;;1758:18;;;:11;;;:18;;;;;;:38;;;;1810:11;;1560:315;-1:-1:-1;1859:5:3;1852:12;;913:377:10;1229:20;1275:8;;;913:377::o;674:96:5:-;732:6;;;;724:39;;;;;-1:-1:-1;;;724:39:5;;;;;;;;;;;;;;;;;;;;;;;;;;;1678:710:2;1784:4;1917:16;;;:11;;;:16;;;;;;1948:13;1944:438;;-1:-1:-1;;2043:34:2;;;;;;;;;;;;;;;;;;2026:52;;;;;;;;:11;:52;;;;;;;;;;;;;;;;;;;;;;;;2232:18;;2213:16;;;:11;;;:16;;;;;;;:37;2264:11;;1944:438;2340:5;2306:3;:11;;2329:1;2318:8;:12;2306:25;;;;;;;;;;;;;;;;;;:31;;:39;;;;2366:5;2359:12;;;1678:710;;;;;;:::o;2637:566:26:-;2725:14;;;;-1:-1:-1;;;;;2725:27:26;1751:44:32;2725:27:26;2721:476;;;2789:8;:19;;;2776:9;:32;;2768:67;;;;;-1:-1:-1;;;2768:67:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;2850:12;;2872:19;;;;2850:42;;-1:-1:-1;;;;;2850:12:26;;;;:42;;;;;2872:19;2850:12;:42;:12;:42;2872:19;2850:12;:42;;;;;;;;;;;;;;;;;;;;;2907:14;2924:34;2938:8;:19;;;2924:9;:13;;:34;;;;:::i;:::-;2907:51;-1:-1:-1;2977:11:26;;2973:85;;3008:18;;:35;;-1:-1:-1;;;;;3008:27:26;;;;:35;;;;;3036:6;;3008:18;:35;:18;:35;3036:6;3008:27;:35;;;;;;;;;;;;;;;;;;;;;2973:85;2721:476;;;;3088:98;3138:12;:10;:12::i;:::-;3152;;3166:19;;;;3102:14;;;;-1:-1:-1;;;;;3088:49:26;;;;:98;3152:12;;3088:49;:98::i;16954:308:32:-;17075:12;;;;17039:23;17065;;;:9;:23;;;;;17102:19;;-1:-1:-1;;17102:39:32;17098:158;;17227:17;;;;17199:23;;;;:46;;:27;:46::i;:::-;17167:12;;;;17157:23;;;;:9;:23;;;;;:39;;:88;17098:158;16954:308;;:::o;17993:1293::-;18201:8;:12;;;18173:8;:14;;;-1:-1:-1;;;;;18087:328:32;18109:8;:18;;;-1:-1:-1;;;;;18087:328:32;;18141:8;:18;;;18227:8;:17;;;18258:8;:17;;;18289:8;:19;;;18339:8;:20;;;18361:8;:20;;;18383:8;:21;;;18322:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18087:328;;;;-1:-1:-1;;;;;18087:328:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18087:328:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18468:12;;;;18426:29;18458:23;;;:9;:23;;;;;:45;;;-1:-1:-1;;;;;18458:45:32;18517:35;;18513:767;;19095:82;;;18593:584;;;18624:21;-1:-1:-1;;;;;18593:84:32;;18699:8;:18;;;18739:8;:18;;;18779:8;:14;;;18815:8;:12;;;18849:8;:17;;;18888:8;:17;;;18927:8;:19;;;18968:8;:20;;;19010:8;:20;;;19052:8;:21;;;18593:498;;;;;;;;;;;;;-1:-1:-1;;;;;18593:498:32;;;;;;-1:-1:-1;;;;;18593:498:32;;;;;;-1:-1:-1;;;;;18593:498:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18593:498:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18593:498:32;:584;;;18568:701;;;;;-1:-1:-1;;;18568:701:32;;;;;;;;;;;;;;;;;;;;;;;;;;;4155:122:2;4226:4;4249:16;;;:11;;;;;:16;;;;;;:21;;;4155:122::o;3773:278:26:-;3958:14;;;;3882:17;;3931:44;;:6;;-1:-1:-1;;;;;3950:23:26;3931:10;:44::i;:::-;3923:53;-1:-1:-1;3994:14:26;3986:58;;;;;-1:-1:-1;;;3986:58:26;;;;;;;;;;;;;;;;;;;;;;;;;;;3538:215:11;3596:7;3619:6;3615:20;;-1:-1:-1;3634:1:11;3627:8;;3615:20;3657:5;;;3661:1;3657;:5;:1;3680:5;;;;;:10;3672:56;;;;-1:-1:-1;;;3672:56:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3136:155;3194:7;3226:1;3221;:6;;3213:49;;;;;-1:-1:-1;;;3213:49:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3279:5:11;;;3136:155::o;645:259:9:-;828:68;;;-1:-1:-1;;;;;828:68:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;851:27;828:68;;;793:104;;821:5;;793:27;:104::i;5243:298:2:-;5309:7;5347:16;;;:11;;;:16;;;;;;5381:13;5373:50;;;;;-1:-1:-1;;;5373:50:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;5476:3;:11;;5499:1;5488:8;:12;5476:25;;;;;;;;;;;;;;;;;;:31;;;5469:38;;;5243:298;;;;:::o;1147:870:9:-;1272:5;1296:19;-1:-1:-1;;;;;1296:17:9;;;:19::i;:::-;1288:58;;;;;-1:-1:-1;;;1288:58:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;1417:12;1431:17;1452:6;-1:-1:-1;;;;;1452:11:9;1464:8;1452:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1416:57;;;;1487:7;1483:528;;;1514:11;;:16;1510:122;;1569:4;1558:24;;;;;;;;;;;;;;;-1:-1:-1;1558:24:9;1550:67;;;;;-1:-1:-1;;;1550:67:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;1483:528;;;1720:11;;1716:95;;1756:40;;;-1:-1:-1;;;1756:40:9;;;;;;;;;;;;;;;;;;;;;;;;;;;1716:95;1938:4;1932:11;1982:4;1975;1971:2;1967:13;1960:27;1902:99;1147:870;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o"},"methodIdentifiers":{"SUPPLY_UNLIMITED()":"9e049545","TOKEN_ETH()":"5c4fafc7","createSku(bytes32,uint256,uint256,address)":"2c87927b","estimatePurchase(address,address,bytes32,uint256,bytes)":"1323b066","getSkuInfo(bytes32)":"2a8a45bc","getSkus()":"61bd3851","owner()":"8da5cb5b","pause()":"8456cb59","paused()":"5c975abb","payoutWallet()":"8488bb4e","purchaseFor(address,address,bytes32,uint256,bytes)":"a963b257","setPayoutWallet(address)":"6b8f9c43","start()":"be9a6555","startedAt()":"f21f537d","transferOwnership(address)":"f2fde38b","unpause()":"3f4ba83a","updateSkuPricing(bytes32,address[],uint256[])":"5e6e9f70"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"payoutWallet_\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"skusCapacity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensPerSkuCapacity\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32[]\",\"name\":\"names\",\"type\":\"bytes32[]\"},{\"indexed\":false,\"internalType\":\"bytes32[]\",\"name\":\"values\",\"type\":\"bytes32[]\"}],\"name\":\"MagicValues\",\"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\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"payoutWallet_\",\"type\":\"address\"}],\"name\":\"PayoutWalletSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"purchaser\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalPrice\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extData\",\"type\":\"bytes\"}],\"name\":\"Purchase\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"maxQuantityPerPurchase\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"notificationsReceiver\",\"type\":\"address\"}],\"name\":\"SkuCreation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"prices\",\"type\":\"uint256[]\"}],\"name\":\"SkuPricingUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Started\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"SUPPLY_UNLIMITED\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TOKEN_ETH\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxQuantityPerPurchase\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"notificationsReceiver\",\"type\":\"address\"}],\"name\":\"createSku\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"estimatePurchase\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalPrice\",\"type\":\"uint256\"},{\"internalType\":\"bytes32[]\",\"name\":\"pricingData\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"}],\"name\":\"getSkuInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"remainingSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxQuantityPerPurchase\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"notificationsReceiver\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"prices\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSkus\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"skus\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"payoutWallet\",\"outputs\":[{\"internalType\":\"address payable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"purchaseFor\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"payoutWallet_\",\"type\":\"address\"}],\"name\":\"setPayoutWallet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"start\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"prices\",\"type\":\"uint256[]\"}],\"name\":\"updateSkuPricing\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Emits the `MagicValues` event.Emits the `Paused` event.\",\"params\":{\"payoutWallet_\":\"the payout wallet.\",\"skusCapacity\":\"the cap for the number of managed SKUs.\",\"tokensPerSkuCapacity\":\"the cap for the number of tokens managed per SKU.\"}},\"estimatePurchase(address,address,bytes32,uint256,bytes)\":{\"details\":\"This function MUST compute the same price as `purchaseFor` would in identical conditions (same arguments, same point in time).If an implementer contract uses the `pricingData` field, it SHOULD document how to interpret the values.Reverts if the sale has not started.Reverts if the sale is paused.Reverts if `recipient` is the zero address.Reverts if `token` is the zero address.Reverts if `quantity` is zero.Reverts if `quantity` is greater than the maximum purchase quantity.Reverts if `quantity` is greater than the remaining supply.Reverts if `sku` does not exist.Reverts if `sku` exists but does not have a price set for `token`.\",\"params\":{\"quantity\":\"The quantity used to calculate the total price amount.\",\"recipient\":\"The recipient of the purchase used to calculate the total price amount.\",\"sku\":\"The identifier of the SKU used to calculate the total price amount.\",\"token\":\"The payment token used to calculate the total price amount.\",\"userData\":\"Optional extra user input data.\"},\"returns\":{\"pricingData\":\"Implementation-specific extra pricing data, such as details about discounts applied.  If not empty, the implementer MUST document how to interepret the values.\",\"totalPrice\":\"The computed total price.\"}},\"getSkuInfo(bytes32)\":{\"details\":\"WARNING: it is the responsibility of the implementer to ensure that the number of payment tokens is bounded, so that this function does not run out of gas.Reverts if `sku` does not exist.\",\"params\":{\"sku\":\"The SKU identifier.\"},\"returns\":{\"maxQuantityPerPurchase\":\"The maximum allowed quantity for a single purchase.\",\"notificationsReceiver\":\"The address of a contract on which to call the `onPurchaseNotificationReceived` function.\",\"prices\":\"The list of associated prices for each of the `tokens`.\",\"remainingSupply\":\"The remaining supply for sale.\",\"tokens\":\"The list of supported payment tokens.\",\"totalSupply\":\"The initial total supply for sale.\"}},\"getSkus()\":{\"returns\":{\"skus\":\"the list of created SKU identifiers.\"}},\"pause()\":{\"details\":\"Emits the `Paused` event.Reverts if called by any other than the contract owner.Reverts if the contract has not been started yet.Reverts if the contract is already paused.\"},\"purchaseFor(address,address,bytes32,uint256,bytes)\":{\"details\":\"Reverts if the sale has not started.Reverts if the sale is paused.Reverts if `recipient` is the zero address.Reverts if `token` is the zero address.Reverts if `quantity` is zero.Reverts if `quantity` is greater than the maximum purchase quantity.Reverts if `quantity` is greater than the remaining supply.Reverts if `sku` does not exist.Reverts if `sku` exists but does not have a price set for `token`.Emits the Purchase event.\",\"params\":{\"quantity\":\"The quantity to purchase.\",\"recipient\":\"The recipient of the purchase.\",\"sku\":\"The identifier of the SKU to purchase.\",\"token\":\"The token to use as the payment currency.\",\"userData\":\"Optional extra user input data.\"}},\"start()\":{\"details\":\"Emits the `Started` event.Emits the `Unpaused` event.Reverts if called by any other than the contract owner.Reverts if the contract has already been started.Reverts if the contract is not paused.\"},\"startedAt()\":{\"returns\":{\"_0\":\"The timestamp when the contract entered the started state.\"}},\"transferOwnership(address)\":{\"details\":\"Reverts if the sender is not the current contract owner.\",\"params\":{\"newOwner\":\"the address of the new owner. Use the zero address to renounce the ownership.\"}},\"unpause()\":{\"details\":\"Emits the `Unpaused` event.Reverts if called by any other than the contract owner.Reverts if the contract has not been started yet.Reverts if the contract is not paused.\"},\"updateSkuPricing(bytes32,address[],uint256[])\":{\"details\":\"Reverts if called by any other than the contract owner.Reverts if `tokens` and `prices` have different lengths.Reverts if `sku` does not exist.Reverts if one of the `tokens` is the zero address.Reverts if the update results in too many tokens for the SKU.Emits the `SkuPricingUpdate` event.\",\"params\":{\"prices\":\"The list of prices to apply for each payment token.  Zero price values are used to disable a payment token.\",\"sku\":\"The identifier of the SKU.\",\"tokens\":\"The list of payment tokens to update.  If empty, disable all the existing payment tokens.\"}}},\"version\":1},\"userdoc\":{\"events\":{\"MagicValues(bytes32[],bytes32[])\":{\"notice\":\"Event emitted to notify about the magic values necessary for interfacing with this contract.\"},\"OwnershipTransferred(address,address)\":{\"notice\":\"Event emited when ownership of a contract changes.\"},\"Purchase(address,address,address,bytes32,uint256,bytes,uint256,bytes)\":{\"notice\":\"Event emitted to notify about a purchase.\"},\"SkuCreation(bytes32,uint256,uint256,address)\":{\"notice\":\"Event emitted to notify about the creation of a SKU.\"},\"SkuPricingUpdate(bytes32,address[],uint256[])\":{\"notice\":\"Event emitted to notify about a change in the pricing of a SKU.\"}},\"kind\":\"user\",\"methods\":{\"SUPPLY_UNLIMITED()\":{\"notice\":\"Returns the magic value used to represent an infinite, never-decreasing SKU's supply.\"},\"TOKEN_ETH()\":{\"notice\":\"Returns the magic value used to represent the ETH payment token.\"},\"constructor\":{\"notice\":\"Constructor.\"},\"estimatePurchase(address,address,bytes32,uint256,bytes)\":{\"notice\":\"Estimates the computed final total amount to pay for a purchase, including any potential discount.\"},\"getSkuInfo(bytes32)\":{\"notice\":\"Returns the information relative to a SKU.\"},\"getSkus()\":{\"notice\":\"Returns the list of created SKU identifiers.\"},\"owner()\":{\"notice\":\"Gets the address of the current contract owner.\"},\"pause()\":{\"notice\":\"Pauses the contract.\"},\"purchaseFor(address,address,bytes32,uint256,bytes)\":{\"notice\":\"Performs a purchase.\"},\"start()\":{\"notice\":\"Actvates, or 'starts', the contract.\"},\"startedAt()\":{\"notice\":\"Returns the timestamp when the contract entered the started state.\"},\"transferOwnership(address)\":{\"notice\":\"See {IERC173-transferOwnership(address)}\"},\"unpause()\":{\"notice\":\"Resumes the contract.\"},\"updateSkuPricing(bytes32,address[],uint256[])\":{\"notice\":\"Sets the token prices for the specified product SKU.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/mocks/sale/FixedPricesSaleMock.sol\":\"FixedPricesSaleMock\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":2000},\"remappings\":[]},\"sources\":{\"@animoca/ethereum-contracts-core-1.1.2/contracts/access/IERC173.sol\":{\"keccak256\":\"0xeb8a2c766577e782ad66ce8591a8d206b0f37b657754cc7a43beeb2d9343873b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3b404032cb4e21bae47b5e9af1290e41117040b10f69e3b2f93522b97e329b59\",\"dweb:/ipfs/QmRJHYkkvWcXGuFJdbqV18yh9QUk5g4zETrrxD2HnU3iRw\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/access/Ownable.sol\":{\"keccak256\":\"0xbfd1129669bb7c154ee84b3aa1484e421ca68cb725c1039a897629631fd8b096\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://edc634aeae7272726745b1cbbf116dfdde51833b71a143e94fe7de89e9b14566\",\"dweb:/ipfs/QmXtXckxdFM3VeLvsjMWhqt44WAf7XKVYKt9bUT7pyWbjH\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/algo/EnumMap.sol\":{\"keccak256\":\"0x12716c299c0965f4f87c2792cda2bd6029ba629c1172cdfef08d95cb2d7c283f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8d17c9bcb9bb0b9f399f6366f85b4db981df6e319f90b1b84910d6c44a79d032\",\"dweb:/ipfs/QmcqU3Gj8BP88yRV571GyCcW2UAjxq2xiqRofXFKYzkRXT\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/algo/EnumSet.sol\":{\"keccak256\":\"0x0aaea4634a7c64ef61b1ee8380912084427b45b6b4fc254b76d4b78e39f92d35\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://356a344f770d238dd864e8530d2ee05e350f269346cdf02432bc767e90520ce1\",\"dweb:/ipfs/QmfQfasYUY69X4wnzizPqT8P24YZTAPQGgFQErsSzV5sva\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/lifecycle/Pausable.sol\":{\"keccak256\":\"0xaa32d2e66a8edb68c64ffab1db69925248cf3f774c40b062e1e8ff2f4d5eebed\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://37451b151d862be6413ee1d18e3500a9100128f09926a2260d0ea058c3148d8a\",\"dweb:/ipfs/QmNLsaNioeA4LK8fVpqvSkQrCob1DkENcqQUurqDQbQK3G\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/lifecycle/Startable.sol\":{\"keccak256\":\"0x87e273577d4716cbbb325f03ec91207e1022bb7f56cdcda56593c603d2b4592f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d305d7c885971e1b82a363b4c9237c4201390610621a67605b89694ca9680e35\",\"dweb:/ipfs/QmWZX1cEfsfQSoEjBgBaBn3rKJxfyaJMpJyofpM9LG4tEp\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/metatx/ManagedIdentity.sol\":{\"keccak256\":\"0xe544b34375f19f9d1ad6e309f2fc56849263cc3c3c77009f6b38782f7dea9971\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3eb04bbf1c13ca82971c1cb2fdd96a23e2dfaa5df6a7d3b7e773dd3a760cf4e4\",\"dweb:/ipfs/QmXArzbKQgsMebfYVSQtaCLAs3rp3FYp6MKjSQnZoGDnjf\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/payment/PayoutWallet.sol\":{\"keccak256\":\"0x45ef7f68177cb61463f0ac759782f490821917fac3a71a18263c38193a9c6229\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://67839b4cc5897d723099ebfd8e0593e809b02cf422056efc1497f88dd7abb415\",\"dweb:/ipfs/QmYFRXvggoT8RzWB7SSJmfaBY3xkoVYNaGotTLBxjXqqxx\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/utils/ERC20Wrapper.sol\":{\"keccak256\":\"0x57922168ce32d2260022c0c7075137940e7d3cf0bb0d2213e62194050fbcf392\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b2dbba2defa32aa9edb54797f9b3f4ec1c1e5f71193deb99289136fa2f02ad79\",\"dweb:/ipfs/QmbUbzdwyWwjw3VW1o5oBKyuG9cFN7n8j55P8MDAg3sCuK\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/utils/types/AddressIsContract.sol\":{\"keccak256\":\"0x08373f750eedc1226b22b8ab1e156b0689c463590fa7dc40e99329b2da7b5d47\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fac8cdd7be4a83b47b18c8a48c1b1779a2590118049734665a6de91e77f27d35\",\"dweb:/ipfs/QmcAobvMpD5TisPTQSihPhywmVbPv1jDhffJCaZptM7YLv\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0xcc78a17dd88fa5a2edc60c8489e2f405c0913b377216a5b26b35656b2d0dab52\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://526dc85e1f9b9b45830e202568d267d93dde7a4fcccf4ad7798dadcd92304d3c\",\"dweb:/ipfs/QmaoXMB972J3cSDLtBq3xBo4jLwqD2uzXTwujtSPqkYVhR\"]},\"contracts/mocks/sale/FixedPricesSaleMock.sol\":{\"keccak256\":\"0x79255e43e5d50df59bd9ffbe58d725d722fc9463c10efa62c4fd46054bc1cdd9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://55fcd41c5c359ce465205188f07dfba5e8fd3df9e223f89390d4602f696ba334\",\"dweb:/ipfs/QmbzuQAzLkk87yFVf8R22cmcBqqkkLg7whRzWb7T5MqGwQ\"]},\"contracts/sale/FixedPricesSale.sol\":{\"keccak256\":\"0xad902ccee0e2a42eea07b4c1e011202096daff92b43158a1569d139caf93b3f0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a702cc102db63b18e0581da5d6c01ee9320cec4b690c3117b4f77316fce45185\",\"dweb:/ipfs/QmWL7kh3kBSxDYjVoq9gN79UpKLrRBgJCHqquyaCE8UWhe\"]},\"contracts/sale/abstract/PurchaseLifeCycles.sol\":{\"keccak256\":\"0xaa18c1de5628dbd5ff281f06354b0156cb8bd24a6f5b490a787931c374266f6a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2e0731a0100fc1bda747176f169cacc5d61d89df1c78884d8843a834d58f7dcd\",\"dweb:/ipfs/QmZRDAxcvQ9QySqnmQLVM1i797NCqSJrJjKUneEmTufXBQ\"]},\"contracts/sale/abstract/Sale.sol\":{\"keccak256\":\"0x32dd01f3ca07c26e834f5784b4f2434c9cf309e3e30b2421a26da16ccf5d0e26\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://009418ea08f714b3f536d09e04d65ec39d3a4e9ba33e554ac8a26036cff8335b\",\"dweb:/ipfs/QmQvMXpCaaAwtHE4qxXYn2rxPgPzqzJM6aGuyz4nut5CH5\"]},\"contracts/sale/interfaces/IPurchaseNotificationsReceiver.sol\":{\"keccak256\":\"0xa85dcec80f528757a52dd66f88ae14845477e3ec733cb4d22af6db71d19e90f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://36e14e08666d5fd2af5b78848a84a11c666c65c94ca46f88e896c041da1dc1c7\",\"dweb:/ipfs/QmYiHM2DBVuX4adJfJMSvdrdfmDooHxhwGtmhNP7k2DY9n\"]},\"contracts/sale/interfaces/ISale.sol\":{\"keccak256\":\"0x0d731f242662465b2aa3ea9fe3581d0e77e3f61601390f68e4c9c75fc2103f5f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2a04d527397a7f75bd1d701fa7af263cb0799ef4d2f32dc44bb6c9598cee3625\",\"dweb:/ipfs/QmRnsakvvkU1yJyviEM8eytdCTUvjqsw1aqzdntycoG2aV\"]}},\"version\":1}"}},"contracts/mocks/sale/SaleMock.sol":{"SaleMock":{"abi":[{"inputs":[{"internalType":"address payable","name":"payoutWallet_","type":"address"},{"internalType":"uint256","name":"skusCapacity","type":"uint256"},{"internalType":"uint256","name":"tokensPerSkuCapacity","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32[]","name":"names","type":"bytes32[]"},{"indexed":false,"internalType":"bytes32[]","name":"values","type":"bytes32[]"}],"name":"MagicValues","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":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"payoutWallet_","type":"address"}],"name":"PayoutWalletSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"purchaser","type":"address"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"bytes32","name":"sku","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"quantity","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"userData","type":"bytes"},{"indexed":false,"internalType":"uint256","name":"totalPrice","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"extData","type":"bytes"}],"name":"Purchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address payable","name":"recipient","type":"address"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"bytes32","name":"sku","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"quantity","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"userData","type":"bytes"}],"name":"PurchaseForCalled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"sku","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxQuantityPerPurchase","type":"uint256"},{"indexed":false,"internalType":"address","name":"notificationsReceiver","type":"address"}],"name":"SkuCreation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"sku","type":"bytes32"},{"indexed":false,"internalType":"address[]","name":"tokens","type":"address[]"},{"indexed":false,"internalType":"uint256[]","name":"prices","type":"uint256[]"}],"name":"SkuPricingUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Started","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"SUPPLY_UNLIMITED","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOKEN_ETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"uint256","name":"maxQuantityPerPurchase","type":"uint256"},{"internalType":"address","name":"notificationsReceiver","type":"address"}],"name":"createSku","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"},{"internalType":"uint256","name":"totalPrice","type":"uint256"},{"internalType":"bytes32[]","name":"pricingData","type":"bytes32[]"},{"internalType":"bytes32[]","name":"paymentData","type":"bytes32[]"},{"internalType":"bytes32[]","name":"deliveryData","type":"bytes32[]"}],"name":"delivery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"estimatePurchase","outputs":[{"internalType":"uint256","name":"totalPrice","type":"uint256"},{"internalType":"bytes32[]","name":"pricingData","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"sku","type":"bytes32"}],"name":"getSkuInfo","outputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"uint256","name":"remainingSupply","type":"uint256"},{"internalType":"uint256","name":"maxQuantityPerPurchase","type":"uint256"},{"internalType":"address","name":"notificationsReceiver","type":"address"},{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"prices","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSkus","outputs":[{"internalType":"bytes32[]","name":"skus","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"},{"internalType":"uint256","name":"totalPrice","type":"uint256"},{"internalType":"bytes32[]","name":"pricingData","type":"bytes32[]"},{"internalType":"bytes32[]","name":"paymentData","type":"bytes32[]"},{"internalType":"bytes32[]","name":"deliveryData","type":"bytes32[]"}],"name":"notification","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payoutWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"purchaseFor","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bool","name":"paused","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"payoutWallet_","type":"address"}],"name":"setPayoutWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"prices","type":"uint256[]"}],"name":"setTokenPrices","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"start","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"prices","type":"uint256[]"}],"name":"updateSkuPricing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"},{"internalType":"uint256","name":"totalPrice","type":"uint256"},{"internalType":"bytes32[]","name":"pricingData","type":"bytes32[]"},{"internalType":"bytes32[]","name":"paymentData","type":"bytes32[]"},{"internalType":"bytes32[]","name":"deliveryData","type":"bytes32[]"}],"name":"validation","outputs":[],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"60c06040523480156200001157600080fd5b5060405162002f9738038062002f97833981810160405260608110156200003757600080fd5b5080516020820151604092830151600080546001600160a01b031916339081178255945193949293919285928592859260019290918691839182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001600160a01b038116620000f4576040805162461bcd60e51b815260206004820152601460248201527f5061796f75743a207a65726f2061646472657373000000000000000000000000604482015290519081900360640190fd5b600180546001600160a01b0383166001600160a01b0319909116811790915560408051918252517fdd880d24a789958a6398c99c2e54ce31bc10a638cbc42f7dd34285479ae0f8559181900360200190a150506003805460ff1916911515919091179055608082905260a081905260408051600280825260608201835260009260208301908036833750506040805160028082526060820183529394506000939092509060208301908036833750508351919250680a89e968a9cbe8aa8960bb1b9173eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee91508490600090620001d957fe5b6020026020010183600081518110620001ee57fe5b602002602001018281525082815250505060001960001b6f14d55414131657d5539312535255115160821b90836001815181106200022857fe5b60200260200101836001815181106200023d57fe5b60200260200101828152508281525050507fabb92614f53337043b55dc996a83ebb09adce78ec336ca188ea02180b61d1c148282604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015620002b75781810151838201526020016200029d565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015620002f8578181015183820152602001620002de565b5050505090500194505050505060405180910390a1505050505050505060805160a051612c5e6200033960003980611edb525080611b4b5250612c5e6000f3fe6080604052600436106101755760003560e01c80638456cb59116100cb5780639e0495451161007f578063be9a655511610059578063be9a655514610cbc578063f21f537d14610cd1578063f2fde38b14610ce657610175565b80639e04954514610a63578063a963b25714610a8a578063bb955d7814610b1f57610175565b80638da5cb5b116100b05780638da5cb5b146107145780639674ab1e146107295780639bbeb124146108c657610175565b80638456cb59146106ea5780638488bb4e146106ff57610175565b8063460b7e841161012d5780635e6e9f70116101075780635e6e9f701461051757806361bd3851146106525780636b8f9c43146106b757610175565b8063460b7e84146103e75780635c4fafc7146104bd5780635c975abb146104ee57610175565b80632a8a45bc1161015e5780632a8a45bc146102a55780632c87927b1461038d5780633f4ba83a146103d257610175565b80631323b0661461017a57806316c38b3c14610277575b600080fd5b34801561018657600080fd5b5061021c600480360360a081101561019d57600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a0810160808201356401000000008111156101dd57600080fd5b8201836020820111156101ef57600080fd5b8035906020019184600183028401116401000000008311171561021157600080fd5b509092509050610d19565b6040518083815260200180602001828103825283818151815260200191508051906020019060200280838360005b8381101561026257818101518382015260200161024a565b50505050905001935050505060405180910390f35b34801561028357600080fd5b506102a36004803603602081101561029a57600080fd5b50351515610e0e565b005b3480156102b157600080fd5b506102cf600480360360208110156102c857600080fd5b5035610e2c565b60405180878152602001868152602001858152602001846001600160a01b031681526020018060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561033457818101518382015260200161031c565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561037357818101518382015260200161035b565b505050509050019850505050505050505060405180910390f35b34801561039957600080fd5b506102a3600480360360808110156103b057600080fd5b50803590602081013590604081013590606001356001600160a01b0316610fd1565b3480156103de57600080fd5b506102a3610fe3565b3480156103f357600080fd5b506102a36004803603606081101561040a57600080fd5b8135919081019060408101602082013564010000000081111561042c57600080fd5b82018360208201111561043e57600080fd5b8035906020019184602083028401116401000000008311171561046057600080fd5b91939092909160208101903564010000000081111561047e57600080fd5b82018360208201111561049057600080fd5b803590602001918460208302840111640100000000831117156104b257600080fd5b509092509050611051565b3480156104c957600080fd5b506104d26110e7565b604080516001600160a01b039092168252519081900360200190f35b3480156104fa57600080fd5b506105036110ff565b604080519115158252519081900360200190f35b34801561052357600080fd5b506102a36004803603606081101561053a57600080fd5b8135919081019060408101602082013564010000000081111561055c57600080fd5b82018360208201111561056e57600080fd5b8035906020019184602083028401116401000000008311171561059057600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092959493602081019350359150506401000000008111156105e057600080fd5b8201836020820111156105f257600080fd5b8035906020019184602083028401116401000000008311171561061457600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611108945050505050565b34801561065e57600080fd5b506106676112e5565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156106a357818101518382015260200161068b565b505050509050019250505060405180910390f35b3480156106c357600080fd5b506102a3600480360360208110156106da57600080fd5b50356001600160a01b0316611340565b3480156106f657600080fd5b506102a361140d565b34801561070b57600080fd5b506104d2611474565b34801561072057600080fd5b506104d2611483565b34801561073557600080fd5b506102a3600480360361012081101561074d57600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a08101608082013564010000000081111561078d57600080fd5b82018360208201111561079f57600080fd5b803590602001918460018302840111640100000000831117156107c157600080fd5b919390928235926040810190602001356401000000008111156107e357600080fd5b8201836020820111156107f557600080fd5b8035906020019184602083028401116401000000008311171561081757600080fd5b91939092909160208101903564010000000081111561083557600080fd5b82018360208201111561084757600080fd5b8035906020019184602083028401116401000000008311171561086957600080fd5b91939092909160208101903564010000000081111561088757600080fd5b82018360208201111561089957600080fd5b803590602001918460208302840111640100000000831117156108bb57600080fd5b509092509050611492565b3480156108d257600080fd5b506102a360048036036101208110156108ea57600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a08101608082013564010000000081111561092a57600080fd5b82018360208201111561093c57600080fd5b8035906020019184600183028401116401000000008311171561095e57600080fd5b9193909282359260408101906020013564010000000081111561098057600080fd5b82018360208201111561099257600080fd5b803590602001918460208302840111640100000000831117156109b457600080fd5b9193909290916020810190356401000000008111156109d257600080fd5b8201836020820111156109e457600080fd5b80359060200191846020830284011164010000000083111715610a0657600080fd5b919390929091602081019035640100000000811115610a2457600080fd5b820183602082011115610a3657600080fd5b80359060200191846020830284011164010000000083111715610a5857600080fd5b5090925090506115b9565b348015610a6f57600080fd5b50610a786116d0565b60408051918252519081900360200190f35b6102a3600480360360a0811015610aa057600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135640100000000811115610ae057600080fd5b820183602082011115610af257600080fd5b80359060200191846001830284011164010000000083111715610b1457600080fd5b5090925090506116d6565b348015610b2b57600080fd5b506102a36004803603610120811015610b4357600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135640100000000811115610b8357600080fd5b820183602082011115610b9557600080fd5b80359060200191846001830284011164010000000083111715610bb757600080fd5b91939092823592604081019060200135640100000000811115610bd957600080fd5b820183602082011115610beb57600080fd5b80359060200191846020830284011164010000000083111715610c0d57600080fd5b919390929091602081019035640100000000811115610c2b57600080fd5b820183602082011115610c3d57600080fd5b80359060200191846020830284011164010000000083111715610c5f57600080fd5b919390929091602081019035640100000000811115610c7d57600080fd5b820183602082011115610c8f57600080fd5b80359060200191846020830284011164010000000083111715610cb157600080fd5b5090925090506117b3565b348015610cc857600080fd5b506102a36118ca565b348015610cdd57600080fd5b50610a786118dd565b348015610cf257600080fd5b506102a360048036036020811015610d0957600080fd5b50356001600160a01b03166118e3565b6000606060025460001415610d75576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b610d7d611949565b610d85612bb7565b610d8d6119a1565b6001600160a01b03908116825289811660208084019190915290891660408084019190915260608301899052608083018890528051601f870183900483028101830190915285815290869086908190840183828082843760009201919091525050505060a0820152610dfe816119a5565b9250925050965096945050505050565b8015610e2157610e1c6119cc565b610e29565b610e29611a27565b50565b6000818152600660205260408120819081908190606090819083610e5260048301611a62565b82549850905087610eaa576040805162461bcd60e51b815260206004820152601660248201527f53616c653a206e6f6e2d6578697374656e7420736b7500000000000000000000604482015290519081900360640190fd5b60018201546002830154600384015491985096506001600160a01b031694508067ffffffffffffffff81118015610ee057600080fd5b50604051908082528060200260200182016040528015610f0a578160200160208202803683370190505b5093508067ffffffffffffffff81118015610f2457600080fd5b50604051908082528060200260200182016040528015610f4e578160200160208202803683370190505b50925060005b81811015610fc557600080610f6c6004860184611a66565b915091508160001c878481518110610f8057fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508060001c868481518110610fb057fe5b60209081029190910101525050600101610f54565b50505091939550919395565b610fdd84848484611af7565b50505050565b600254611037576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b6110476110426119a1565b611d2e565b61104f611a27565b565b600060066000878152602001908152602001600020905060008160040190506110de8187878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808b0282810182019093528a82529093508a925089918291850190849080828437600092019190915250611df292505050565b50505050505050565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b60035460ff1681565b6111136110426119a1565b81518151811461116a576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20696e636f6e73697374656e742061727261797300000000000000604482015290519081900360640190fd5b600084815260066020526040902080546111cb576040805162461bcd60e51b815260206004820152601660248201527f53616c653a206e6f6e2d6578697374656e7420736b7500000000000000000000604482015290519081900360640190fd5b60048101826112165760006111df82611a62565b905060005b8181101561120f5760006111f88482611a66565b5090506112058482611f5b565b50506001016111e4565b5050611221565b611221818686611df2565b857fcb3fe5489e0cd43d0f4a33d1e09a4a0463a03d0d38f56165530854e5540db1438686604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015611289578181015183820152602001611271565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156112c85781810151838201526020016112b0565b5050505090500194505050505060405180910390a2505050505050565b6060600460000180548060200260200160405190810160405280929190818152602001828054801561133657602002820191906000526020600020905b815481526020019060010190808311611322575b5050505050905090565b61134b6110426119a1565b6001600160a01b0381166113a6576040805162461bcd60e51b815260206004820152601460248201527f5061796f75743a207a65726f2061646472657373000000000000000000000000604482015290519081900360640190fd5b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03838116919091179182905560408051929091168252517fdd880d24a789958a6398c99c2e54ce31bc10a638cbc42f7dd34285479ae0f855916020908290030190a150565b600254611461576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b61146c6110426119a1565b61104f6119cc565b6001546001600160a01b031681565b6000546001600160a01b031690565b600061159e8e8e8e8e8e8e8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508d8d8d80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508c8c80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508b8b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061203b92505050565b90506115a98161209d565b5050505050505050505050505050565b60006116c58e8e8e8e8e8e8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508d8d8d80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508c8c80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508b8b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061203b92505050565b90506115a981612586565b60001981565b60025461172a576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b611732611949565b61173a612bb7565b6117426119a1565b6001600160a01b03908116825287811660208084019190915290871660408084019190915260608301879052608083018690528051601f850183900483028101830190915283815290849084908190840183828082843760009201919091525050505060a08201526110de81612830565b60006118bf8e8e8e8e8e8e8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508d8d8d80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508c8c80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508b8b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061203b92505050565b90506115a98161285d565b6118d56110426119a1565b6110476128a8565b60025490565b6118ee6110426119a1565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383811691821780845560405192939116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b60035460ff161561104f576040805162461bcd60e51b815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b3390565b600060606119b283612586565b6119bb8361292a565b505060c081015160e0909101519091565b6119d4611949565b6003805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611a0a6119a1565b604080516001600160a01b039092168252519081900360200190a1565b611a2f612971565b6003805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611a0a6119a1565b5490565b815460009081908310611ac0576040805162461bcd60e51b815260206004820152601c60248201527f456e756d4d61703a20696e646578206f7574206f6620626f756e647300000000604482015290519081900360640190fd5b6000846000018481548110611ad157fe5b906000526020600020906002020190508060000154816001015492509250509250929050565b82611b49576040805162461bcd60e51b815260206004820152601160248201527f53616c653a207a65726f20737570706c79000000000000000000000000000000604482015290519081900360640190fd5b7f0000000000000000000000000000000000000000000000000000000000000000611b746004611a62565b10611bc6576040805162461bcd60e51b815260206004820152601360248201527f53616c653a20746f6f206d616e7920736b757300000000000000000000000000604482015290519081900360640190fd5b611bd16004856129c8565b611c22576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20736b7520616c7265616479206372656174656400000000000000604482015290519081900360640190fd5b6001600160a01b03811615611c9457611c43816001600160a01b0316612a12565b611c94576040805162461bcd60e51b815260206004820152601b60248201527f53616c653a206e6f6e2d636f6e74726163742072656365697665720000000000604482015290519081900360640190fd5b60008481526006602090815260409182902085815560018101869055600281018590556003810180546001600160a01b03861673ffffffffffffffffffffffffffffffffffffffff1990911681179091558351888152928301879052828401869052606083015291517f38bd4aabce684540cd61351b91f2f5facf9d6963934347e25aab93d87ae7ac149181900360800190a15050505050565b306001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015611d6757600080fd5b505afa158015611d7b573d6000803e3d6000fd5b505050506040513d6020811015611d9157600080fd5b50516001600160a01b03828116911614610e29576040805162461bcd60e51b815260206004820152601660248201527f4f776e61626c653a206e6f7420746865206f776e657200000000000000000000604482015290519081900360640190fd5b60005b8251811015611ed8576000838281518110611e0c57fe5b6020026020010151905060006001600160a01b0316816001600160a01b03161415611e7e576040805162461bcd60e51b815260206004820152601860248201527f53616c653a207a65726f206164647265737320746f6b656e0000000000000000604482015290519081900360640190fd5b6000838381518110611e8c57fe5b602002602001015190508060001415611eb857611eb2866001600160a01b038416611f5b565b50611ece565b611ecc866001600160a01b03841683612a18565b505b5050600101611df5565b507f0000000000000000000000000000000000000000000000000000000000000000611f0384611a62565b1115611f56576040805162461bcd60e51b815260206004820152601560248201527f53616c653a20746f6f206d616e7920746f6b656e730000000000000000000000604482015290519081900360640190fd5b505050565b6000818152600183016020526040812054801561202f5783546000198083019190810190600090879083908110611f8e57fe5b9060005260206000209060020201905080876000018481548110611fae57fe5b600091825260208083208454600290930201918255600193840154918401919091558354825289830190526040902090840190558654879080611fed57fe5b60008281526020808220600260001990940193840201828155600190810183905592909355888152898201909252604082209190915594506120359350505050565b60009150505b92915050565b612043612bb7565b61204b6119a1565b6001600160a01b039081168252998a1660208201529790981660408801526060870195909552608086019390935260a085019190915260c084015260e083015261010082015261012081019190915290565b806060015181604001516001600160a01b031682600001516001600160a01b03167f29f844483ca6b10b5c0611d039afc15ce8f6380e905307b381c3a8ee4e90e11e846020015185608001518660a001518760c001518860e001518961010001518a610120015160405160200180848051906020019060200280838360005b8381101561213457818101518382015260200161211c565b50505050905001838051906020019060200280838360005b8381101561216457818101518382015260200161214c565b50505050905001828051906020019060200280838360005b8381101561219457818101518382015260200161217c565b50505050905001935050505060405160208183030381529060405260405180866001600160a01b031681526020018581526020018060200184815260200180602001838103835286818151815260200191508051906020019080838360005b8381101561220b5781810151838201526020016121f3565b50505050905090810190601f1680156122385780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b8381101561226b578181015183820152602001612253565b50505050905090810190601f1680156122985780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390a460608101516000908152600660205260409020600301546001600160a01b03168015612582576361eceae860e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916816001600160a01b03166361eceae8846000015185602001518660400151876060015188608001518960a001518a60c001518b60e001518c61010001518d61012001516040518b63ffffffff1660e01b8152600401808b6001600160a01b031681526020018a6001600160a01b03168152602001896001600160a01b031681526020018881526020018781526020018060200186815260200180602001806020018060200185810385528a818151815260200191508051906020019080838360005b838110156123d15781810151838201526020016123b9565b50505050905090810190601f1680156123fe5780820380516001836020036101000a031916815260200191505b508581038452885181528851602091820191808b01910280838360005b8381101561243357818101518382015260200161241b565b50505050905001858103835287818151815260200191508051906020019060200280838360005b8381101561247257818101518382015260200161245a565b50505050905001858103825286818151815260200191508051906020019060200280838360005b838110156124b1578181015183820152602001612499565b505050509050019e505050505050505050505050505050602060405180830381600087803b1580156124e257600080fd5b505af11580156124f6573d6000803e3d6000fd5b505050506040513d602081101561250c57600080fd5b50517fffffffff000000000000000000000000000000000000000000000000000000001614612582576040805162461bcd60e51b815260206004820152601a60248201527f53616c653a206e6f74696669636174696f6e2072656675736564000000000000604482015290519081900360640190fd5b5050565b60208101516001600160a01b03166125e5576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a207a65726f206164647265737320726563697069656e7400000000604482015290519081900360640190fd5b60408101516001600160a01b0316612644576040805162461bcd60e51b815260206004820152601860248201527f53616c653a207a65726f206164647265737320746f6b656e0000000000000000604482015290519081900360640190fd5b608081015161269a576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a207a65726f207175616e7469747920707572636861736500000000604482015290519081900360640190fd5b606081015160009081526006602052604090208054612700576040805162461bcd60e51b815260206004820152601660248201527f53616c653a206e6f6e2d6578697374656e7420736b7500000000000000000000604482015290519081900360640190fd5b81608001518160020154101561275d576040805162461bcd60e51b815260206004820152601860248201527f53616c653a2061626f7665206d6178207175616e746974790000000000000000604482015290519081900360640190fd5b8054600019146127c4578160800151816001015410156127c4576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20696e73756666696369656e7420737570706c7900000000000000604482015290519081900360640190fd5b60408201516001600160a01b03166127df6004830182612ab2565b611f56576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a206e6f6e2d6578697374656e7420736b7520746f6b656e00000000604482015290519081900360640190fd5b61283981612586565b6128428161292a565b61284b81610e29565b6128548161285d565b610e298161209d565b60608101516000908152600660205260409020805460001914612582576080820151600182015461288d91612aca565b60608301516000908152600660205260409020600101555050565b600254156128fd576040805162461bcd60e51b815260206004820152601260248201527f537461727461626c653a20737461727465640000000000000000000000000000604482015290519081900360640190fd5b426002557f27029695aa5f602a4ee81f4c32dfa86e562f200a17966496f3a7c3f2ec0f9417611a0a6119a1565b60608101516000908152600660205260408082209083015190916001600160a01b039091169061295d6004840183612b27565b60808501510260c090940193909352505050565b60035460ff1661104f576040805162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604482015290519081900360640190fd5b60006129d48383612ab2565b612a0a57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155612035565b506000612035565b3b151590565b600082815260018401602052604081205480612a7d575050604080518082018252838152602080820184815286546001818101895560008981528481209551600290930290950191825591519082015586548684528188019092529290912055612aab565b82856000016001830381548110612a9057fe5b90600052602060002090600202016001018190555060009150505b9392505050565b60009081526001919091016020526040902054151590565b600082821115612b21576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b600081815260018301602052604081205480612b8a576040805162461bcd60e51b815260206004820152601860248201527f456e756d4d61703a206e6f6e6578697374656e74206b65790000000000000000604482015290519081900360640190fd5b836000016001820381548110612b9c57fe5b90600052602060002090600202016001015491505092915050565b60405180610140016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160008019168152602001600081526020016060815260200160008152602001606081526020016060815260200160608152509056fea2646970667358221220f7fae6968448dc3e6053df6842c0453aff17061723911f0db65fc829e27e3e4164736f6c63430007060033","opcodes":"PUSH1 0xC0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x2F97 CODESIZE SUB DUP1 PUSH3 0x2F97 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x60 DUP2 LT ISZERO PUSH3 0x37 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 SWAP3 DUP4 ADD MLOAD PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND CALLER SWAP1 DUP2 OR DUP3 SSTORE SWAP5 MLOAD SWAP4 SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 DUP6 SWAP3 DUP6 SWAP3 DUP6 SWAP3 PUSH1 0x1 SWAP3 SWAP1 SWAP2 DUP7 SWAP2 DUP4 SWAP2 DUP3 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP3 SWAP1 LOG3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH3 0xF4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061796F75743A207A65726F2061646472657373000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 SWAP2 AND DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD PUSH32 0xDD880D24A789958A6398C99C2E54CE31BC10A638CBC42F7DD34285479AE0F855 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP POP PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x80 DUP3 SWAP1 MSTORE PUSH1 0xA0 DUP2 SWAP1 MSTORE 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 POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x2 DUP1 DUP3 MSTORE PUSH1 0x60 DUP3 ADD DUP4 MSTORE SWAP4 SWAP5 POP PUSH1 0x0 SWAP4 SWAP1 SWAP3 POP SWAP1 PUSH1 0x20 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP POP DUP4 MLOAD SWAP2 SWAP3 POP PUSH9 0xA89E968A9CBE8AA89 PUSH1 0xBB SHL SWAP2 PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE SWAP2 POP DUP5 SWAP1 PUSH1 0x0 SWAP1 PUSH3 0x1D9 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP4 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH3 0x1EE JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP3 DUP2 MSTORE POP DUP3 DUP2 MSTORE POP POP POP PUSH1 0x0 NOT PUSH1 0x0 SHL PUSH16 0x14D55414131657D55393125352551151 PUSH1 0x82 SHL SWAP1 DUP4 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH3 0x228 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP4 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH3 0x23D JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP3 DUP2 MSTORE POP DUP3 DUP2 MSTORE POP POP POP PUSH32 0xABB92614F53337043B55DC996A83EBB09ADCE78EC336CA188EA02180B61D1C14 DUP3 DUP3 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x2B7 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x29D JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x2F8 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x2DE JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP POP POP POP POP PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH2 0x2C5E PUSH3 0x339 PUSH1 0x0 CODECOPY DUP1 PUSH2 0x1EDB MSTORE POP DUP1 PUSH2 0x1B4B MSTORE POP PUSH2 0x2C5E PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x175 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8456CB59 GT PUSH2 0xCB JUMPI DUP1 PUSH4 0x9E049545 GT PUSH2 0x7F JUMPI DUP1 PUSH4 0xBE9A6555 GT PUSH2 0x59 JUMPI DUP1 PUSH4 0xBE9A6555 EQ PUSH2 0xCBC JUMPI DUP1 PUSH4 0xF21F537D EQ PUSH2 0xCD1 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0xCE6 JUMPI PUSH2 0x175 JUMP JUMPDEST DUP1 PUSH4 0x9E049545 EQ PUSH2 0xA63 JUMPI DUP1 PUSH4 0xA963B257 EQ PUSH2 0xA8A JUMPI DUP1 PUSH4 0xBB955D78 EQ PUSH2 0xB1F JUMPI PUSH2 0x175 JUMP JUMPDEST DUP1 PUSH4 0x8DA5CB5B GT PUSH2 0xB0 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x714 JUMPI DUP1 PUSH4 0x9674AB1E EQ PUSH2 0x729 JUMPI DUP1 PUSH4 0x9BBEB124 EQ PUSH2 0x8C6 JUMPI PUSH2 0x175 JUMP JUMPDEST DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x6EA JUMPI DUP1 PUSH4 0x8488BB4E EQ PUSH2 0x6FF JUMPI PUSH2 0x175 JUMP JUMPDEST DUP1 PUSH4 0x460B7E84 GT PUSH2 0x12D JUMPI DUP1 PUSH4 0x5E6E9F70 GT PUSH2 0x107 JUMPI DUP1 PUSH4 0x5E6E9F70 EQ PUSH2 0x517 JUMPI DUP1 PUSH4 0x61BD3851 EQ PUSH2 0x652 JUMPI DUP1 PUSH4 0x6B8F9C43 EQ PUSH2 0x6B7 JUMPI PUSH2 0x175 JUMP JUMPDEST DUP1 PUSH4 0x460B7E84 EQ PUSH2 0x3E7 JUMPI DUP1 PUSH4 0x5C4FAFC7 EQ PUSH2 0x4BD JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x4EE JUMPI PUSH2 0x175 JUMP JUMPDEST DUP1 PUSH4 0x2A8A45BC GT PUSH2 0x15E JUMPI DUP1 PUSH4 0x2A8A45BC EQ PUSH2 0x2A5 JUMPI DUP1 PUSH4 0x2C87927B EQ PUSH2 0x38D JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x3D2 JUMPI PUSH2 0x175 JUMP JUMPDEST DUP1 PUSH4 0x1323B066 EQ PUSH2 0x17A JUMPI DUP1 PUSH4 0x16C38B3C EQ PUSH2 0x277 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x186 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x21C PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x19D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x1DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x1EF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x211 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0xD19 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x262 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x24A JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP4 POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x283 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2A3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x29A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD ISZERO ISZERO PUSH2 0xE0E JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2CF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0xE2C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x334 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x31C JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x373 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x35B JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP9 POP POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x399 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2A3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x3B0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xFD1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2A3 PUSH2 0xFE3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2A3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x40A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x42C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x43E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x460 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH1 0x20 DUP2 ADD SWAP1 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x47E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x490 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x4B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x1051 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4D2 PUSH2 0x10E7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4FA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x503 PUSH2 0x10FF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x523 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2A3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x53A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x55C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x56E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x590 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 SWAP5 SWAP4 PUSH1 0x20 DUP2 ADD SWAP4 POP CALLDATALOAD SWAP2 POP POP PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x5E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x5F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x614 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0x1108 SWAP5 POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x65E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x667 PUSH2 0x12E5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 DUP2 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x6A3 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x68B JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2A3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x6DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1340 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2A3 PUSH2 0x140D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x70B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4D2 PUSH2 0x1474 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x720 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4D2 PUSH2 0x1483 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x735 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2A3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH2 0x120 DUP2 LT ISZERO PUSH2 0x74D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x78D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x79F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x7C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 DUP3 CALLDATALOAD SWAP3 PUSH1 0x40 DUP2 ADD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x7E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x7F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x817 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH1 0x20 DUP2 ADD SWAP1 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x835 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x847 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x869 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH1 0x20 DUP2 ADD SWAP1 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x887 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x899 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x8BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x1492 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2A3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH2 0x120 DUP2 LT ISZERO PUSH2 0x8EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x92A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x93C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x95E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 DUP3 CALLDATALOAD SWAP3 PUSH1 0x40 DUP2 ADD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x980 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x992 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x9B4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH1 0x20 DUP2 ADD SWAP1 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x9D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x9E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xA06 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH1 0x20 DUP2 ADD SWAP1 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xA24 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xA36 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xA58 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x15B9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA6F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA78 PUSH2 0x16D0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x2A3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0xAA0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xAE0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xAF2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xB14 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x16D6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xB2B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2A3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH2 0x120 DUP2 LT ISZERO PUSH2 0xB43 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xB83 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xB95 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xBB7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 DUP3 CALLDATALOAD SWAP3 PUSH1 0x40 DUP2 ADD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xBD9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xBEB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xC0D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH1 0x20 DUP2 ADD SWAP1 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xC2B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xC3D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xC5F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH1 0x20 DUP2 ADD SWAP1 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xC7D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xC8F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xCB1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x17B3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xCC8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2A3 PUSH2 0x18CA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xCDD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA78 PUSH2 0x18DD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xCF2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2A3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xD09 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x18E3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x2 SLOAD PUSH1 0x0 EQ ISZERO PUSH2 0xD75 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0xD7D PUSH2 0x1949 JUMP JUMPDEST PUSH2 0xD85 PUSH2 0x2BB7 JUMP JUMPDEST PUSH2 0xD8D PUSH2 0x19A1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP10 DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP10 AND PUSH1 0x40 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD DUP10 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP9 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x1F DUP8 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD SWAP1 SWAP2 MSTORE DUP6 DUP2 MSTORE SWAP1 DUP7 SWAP1 DUP7 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP POP PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0xDFE DUP2 PUSH2 0x19A5 JUMP JUMPDEST SWAP3 POP SWAP3 POP POP SWAP7 POP SWAP7 SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP1 ISZERO PUSH2 0xE21 JUMPI PUSH2 0xE1C PUSH2 0x19CC JUMP JUMPDEST PUSH2 0xE29 JUMP JUMPDEST PUSH2 0xE29 PUSH2 0x1A27 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP2 SWAP1 DUP2 SWAP1 DUP2 SWAP1 PUSH1 0x60 SWAP1 DUP2 SWAP1 DUP4 PUSH2 0xE52 PUSH1 0x4 DUP4 ADD PUSH2 0x1A62 JUMP JUMPDEST DUP3 SLOAD SWAP9 POP SWAP1 POP DUP8 PUSH2 0xEAA JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7500000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x3 DUP5 ADD SLOAD SWAP2 SWAP9 POP SWAP7 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP5 POP DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0xEE0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xF0A JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP4 POP DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0xF24 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xF4E JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xFC5 JUMPI PUSH1 0x0 DUP1 PUSH2 0xF6C PUSH1 0x4 DUP7 ADD DUP5 PUSH2 0x1A66 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP2 PUSH1 0x0 SHR DUP8 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0xF80 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP DUP1 PUSH1 0x0 SHR DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0xFB0 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP POP PUSH1 0x1 ADD PUSH2 0xF54 JUMP JUMPDEST POP POP POP SWAP2 SWAP4 SWAP6 POP SWAP2 SWAP4 SWAP6 JUMP JUMPDEST PUSH2 0xFDD DUP5 DUP5 DUP5 DUP5 PUSH2 0x1AF7 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x1037 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x1047 PUSH2 0x1042 PUSH2 0x19A1 JUMP JUMPDEST PUSH2 0x1D2E JUMP JUMPDEST PUSH2 0x104F PUSH2 0x1A27 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 PUSH1 0x6 PUSH1 0x0 DUP8 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SWAP1 POP PUSH1 0x0 DUP2 PUSH1 0x4 ADD SWAP1 POP PUSH2 0x10DE DUP2 DUP8 DUP8 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP12 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP11 DUP3 MSTORE SWAP1 SWAP4 POP DUP11 SWAP3 POP DUP10 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1DF2 SWAP3 POP POP POP JUMP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x1113 PUSH2 0x1042 PUSH2 0x19A1 JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD DUP2 EQ PUSH2 0x116A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E636F6E73697374656E742061727261797300000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0x11CB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7500000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP2 ADD DUP3 PUSH2 0x1216 JUMPI PUSH1 0x0 PUSH2 0x11DF DUP3 PUSH2 0x1A62 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x120F JUMPI PUSH1 0x0 PUSH2 0x11F8 DUP5 DUP3 PUSH2 0x1A66 JUMP JUMPDEST POP SWAP1 POP PUSH2 0x1205 DUP5 DUP3 PUSH2 0x1F5B JUMP JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x11E4 JUMP JUMPDEST POP POP PUSH2 0x1221 JUMP JUMPDEST PUSH2 0x1221 DUP2 DUP7 DUP7 PUSH2 0x1DF2 JUMP JUMPDEST DUP6 PUSH32 0xCB3FE5489E0CD43D0F4A33D1E09A4A0463A03D0D38F56165530854E5540DB143 DUP7 DUP7 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1289 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1271 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x12C8 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x12B0 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x4 PUSH1 0x0 ADD DUP1 SLOAD DUP1 PUSH1 0x20 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 DUP1 ISZERO PUSH2 0x1336 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x1322 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x134B PUSH2 0x1042 PUSH2 0x19A1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x13A6 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061796F75743A207A65726F2061646472657373000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 SWAP1 SWAP2 OR SWAP2 DUP3 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD SWAP3 SWAP1 SWAP2 AND DUP3 MSTORE MLOAD PUSH32 0xDD880D24A789958A6398C99C2E54CE31BC10A638CBC42F7DD34285479AE0F855 SWAP2 PUSH1 0x20 SWAP1 DUP3 SWAP1 SUB ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x1461 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x146C PUSH2 0x1042 PUSH2 0x19A1 JUMP JUMPDEST PUSH2 0x104F PUSH2 0x19CC JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x159E DUP15 DUP15 DUP15 DUP15 DUP15 DUP15 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP DUP14 DUP14 DUP14 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP DUP13 DUP13 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP DUP12 DUP12 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x203B SWAP3 POP POP POP JUMP JUMPDEST SWAP1 POP PUSH2 0x15A9 DUP2 PUSH2 0x209D JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x16C5 DUP15 DUP15 DUP15 DUP15 DUP15 DUP15 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP DUP14 DUP14 DUP14 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP DUP13 DUP13 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP DUP12 DUP12 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x203B SWAP3 POP POP POP JUMP JUMPDEST SWAP1 POP PUSH2 0x15A9 DUP2 PUSH2 0x2586 JUMP JUMPDEST PUSH1 0x0 NOT DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x172A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x1732 PUSH2 0x1949 JUMP JUMPDEST PUSH2 0x173A PUSH2 0x2BB7 JUMP JUMPDEST PUSH2 0x1742 PUSH2 0x19A1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP8 DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP8 AND PUSH1 0x40 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD DUP8 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP7 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x1F DUP6 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD SWAP1 SWAP2 MSTORE DUP4 DUP2 MSTORE SWAP1 DUP5 SWAP1 DUP5 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP POP PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x10DE DUP2 PUSH2 0x2830 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x18BF DUP15 DUP15 DUP15 DUP15 DUP15 DUP15 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP DUP14 DUP14 DUP14 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP DUP13 DUP13 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP DUP12 DUP12 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x203B SWAP3 POP POP POP JUMP JUMPDEST SWAP1 POP PUSH2 0x15A9 DUP2 PUSH2 0x285D JUMP JUMPDEST PUSH2 0x18D5 PUSH2 0x1042 PUSH2 0x19A1 JUMP JUMPDEST PUSH2 0x1047 PUSH2 0x28A8 JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x18EE PUSH2 0x1042 PUSH2 0x19A1 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 DUP3 OR DUP1 DUP5 SSTORE PUSH1 0x40 MLOAD SWAP3 SWAP4 SWAP2 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x104F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061757361626C653A2070617573656400000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x19B2 DUP4 PUSH2 0x2586 JUMP JUMPDEST PUSH2 0x19BB DUP4 PUSH2 0x292A JUMP JUMPDEST POP POP PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xE0 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP2 JUMP JUMPDEST PUSH2 0x19D4 PUSH2 0x1949 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH2 0x1A0A PUSH2 0x19A1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 JUMP JUMPDEST PUSH2 0x1A2F PUSH2 0x2971 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA PUSH2 0x1A0A PUSH2 0x19A1 JUMP JUMPDEST SLOAD SWAP1 JUMP JUMPDEST DUP2 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP4 LT PUSH2 0x1AC0 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x456E756D4D61703A20696E646578206F7574206F6620626F756E647300000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 PUSH1 0x0 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x1AD1 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD SWAP1 POP DUP1 PUSH1 0x0 ADD SLOAD DUP2 PUSH1 0x1 ADD SLOAD SWAP3 POP SWAP3 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP3 PUSH2 0x1B49 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F20737570706C79000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH2 0x1B74 PUSH1 0x4 PUSH2 0x1A62 JUMP JUMPDEST LT PUSH2 0x1BC6 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20746F6F206D616E7920736B757300000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x1BD1 PUSH1 0x4 DUP6 PUSH2 0x29C8 JUMP JUMPDEST PUSH2 0x1C22 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20736B7520616C7265616479206372656174656400000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO PUSH2 0x1C94 JUMPI PUSH2 0x1C43 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2A12 JUMP JUMPDEST PUSH2 0x1C94 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D636F6E74726163742072656365697665720000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP6 DUP2 SSTORE PUSH1 0x1 DUP2 ADD DUP7 SWAP1 SSTORE PUSH1 0x2 DUP2 ADD DUP6 SWAP1 SSTORE PUSH1 0x3 DUP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT SWAP1 SWAP2 AND DUP2 OR SWAP1 SWAP2 SSTORE DUP4 MLOAD DUP9 DUP2 MSTORE SWAP3 DUP4 ADD DUP8 SWAP1 MSTORE DUP3 DUP5 ADD DUP7 SWAP1 MSTORE PUSH1 0x60 DUP4 ADD MSTORE SWAP2 MLOAD PUSH32 0x38BD4AABCE684540CD61351B91F2F5FACF9D6963934347E25AAB93D87AE7AC14 SWAP2 DUP2 SWAP1 SUB PUSH1 0x80 ADD SWAP1 LOG1 POP POP POP POP POP JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8DA5CB5B 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 PUSH2 0x1D67 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1D7B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1D91 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ PUSH2 0xE29 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6F7420746865206F776E657200000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x1ED8 JUMPI PUSH1 0x0 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1E0C JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1E7E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F206164647265737320746F6B656E0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1E8C JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP DUP1 PUSH1 0x0 EQ ISZERO PUSH2 0x1EB8 JUMPI PUSH2 0x1EB2 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x1F5B JUMP JUMPDEST POP PUSH2 0x1ECE JUMP JUMPDEST PUSH2 0x1ECC DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP4 PUSH2 0x2A18 JUMP JUMPDEST POP JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x1DF5 JUMP JUMPDEST POP PUSH32 0x0 PUSH2 0x1F03 DUP5 PUSH2 0x1A62 JUMP JUMPDEST GT ISZERO PUSH2 0x1F56 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20746F6F206D616E7920746F6B656E730000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0x202F JUMPI DUP4 SLOAD PUSH1 0x0 NOT DUP1 DUP4 ADD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x0 SWAP1 DUP8 SWAP1 DUP4 SWAP1 DUP2 LT PUSH2 0x1F8E JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD SWAP1 POP DUP1 DUP8 PUSH1 0x0 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x1FAE JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 DUP5 SLOAD PUSH1 0x2 SWAP1 SWAP4 MUL ADD SWAP2 DUP3 SSTORE PUSH1 0x1 SWAP4 DUP5 ADD SLOAD SWAP2 DUP5 ADD SWAP2 SWAP1 SWAP2 SSTORE DUP4 SLOAD DUP3 MSTORE DUP10 DUP4 ADD SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP1 DUP5 ADD SWAP1 SSTORE DUP7 SLOAD DUP8 SWAP1 DUP1 PUSH2 0x1FED JUMPI INVALID JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 PUSH1 0x2 PUSH1 0x0 NOT SWAP1 SWAP5 ADD SWAP4 DUP5 MUL ADD DUP3 DUP2 SSTORE PUSH1 0x1 SWAP1 DUP2 ADD DUP4 SWAP1 SSTORE SWAP3 SWAP1 SWAP4 SSTORE DUP9 DUP2 MSTORE DUP10 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x40 DUP3 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE SWAP5 POP PUSH2 0x2035 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SWAP2 POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x2043 PUSH2 0x2BB7 JUMP JUMPDEST PUSH2 0x204B PUSH2 0x19A1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE SWAP10 DUP11 AND PUSH1 0x20 DUP3 ADD MSTORE SWAP8 SWAP1 SWAP9 AND PUSH1 0x40 DUP9 ADD MSTORE PUSH1 0x60 DUP8 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x80 DUP7 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0xA0 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x100 DUP3 ADD MSTORE PUSH2 0x120 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST DUP1 PUSH1 0x60 ADD MLOAD DUP2 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x29F844483CA6B10B5C0611D039AFC15CE8F6380E905307B381C3A8EE4E90E11E DUP5 PUSH1 0x20 ADD MLOAD DUP6 PUSH1 0x80 ADD MLOAD DUP7 PUSH1 0xA0 ADD MLOAD DUP8 PUSH1 0xC0 ADD MLOAD DUP9 PUSH1 0xE0 ADD MLOAD DUP10 PUSH2 0x100 ADD MLOAD DUP11 PUSH2 0x120 ADD MLOAD PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP5 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2134 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x211C JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2164 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x214C JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2194 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x217C JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP4 POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP7 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x220B JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x21F3 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x2238 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP DUP4 DUP2 SUB DUP3 MSTORE DUP5 MLOAD DUP2 MSTORE DUP5 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP7 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x226B JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2253 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x2298 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP8 POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 ISZERO PUSH2 0x2582 JUMPI PUSH4 0x61ECEAE8 PUSH1 0xE0 SHL PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x61ECEAE8 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD DUP7 PUSH1 0x40 ADD MLOAD DUP8 PUSH1 0x60 ADD MLOAD DUP9 PUSH1 0x80 ADD MLOAD DUP10 PUSH1 0xA0 ADD MLOAD DUP11 PUSH1 0xC0 ADD MLOAD DUP12 PUSH1 0xE0 ADD MLOAD DUP13 PUSH2 0x100 ADD MLOAD DUP14 PUSH2 0x120 ADD MLOAD PUSH1 0x40 MLOAD DUP12 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP6 DUP2 SUB DUP6 MSTORE DUP11 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x23D1 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x23B9 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x23FE JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP DUP6 DUP2 SUB DUP5 MSTORE DUP9 MLOAD DUP2 MSTORE DUP9 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP1 DUP12 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2433 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x241B JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP6 DUP2 SUB DUP4 MSTORE DUP8 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2472 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x245A JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP6 DUP2 SUB DUP3 MSTORE DUP7 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x24B1 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2499 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP15 POP POP POP POP POP POP POP POP POP POP POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x24E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x24F6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x250C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND EQ PUSH2 0x2582 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F74696669636174696F6E2072656675736564000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x25E5 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F206164647265737320726563697069656E7400000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2644 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F206164647265737320746F6B656E0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x80 DUP2 ADD MLOAD PUSH2 0x269A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F207175616E7469747920707572636861736500000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0x2700 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7500000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x80 ADD MLOAD DUP2 PUSH1 0x2 ADD SLOAD LT ISZERO PUSH2 0x275D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A2061626F7665206D6178207175616E746974790000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 SLOAD PUSH1 0x0 NOT EQ PUSH2 0x27C4 JUMPI DUP2 PUSH1 0x80 ADD MLOAD DUP2 PUSH1 0x1 ADD SLOAD LT ISZERO PUSH2 0x27C4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E73756666696369656E7420737570706C7900000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x27DF PUSH1 0x4 DUP4 ADD DUP3 PUSH2 0x2AB2 JUMP JUMPDEST PUSH2 0x1F56 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7520746F6B656E00000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x2839 DUP2 PUSH2 0x2586 JUMP JUMPDEST PUSH2 0x2842 DUP2 PUSH2 0x292A JUMP JUMPDEST PUSH2 0x284B DUP2 PUSH2 0xE29 JUMP JUMPDEST PUSH2 0x2854 DUP2 PUSH2 0x285D JUMP JUMPDEST PUSH2 0xE29 DUP2 PUSH2 0x209D JUMP JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x0 NOT EQ PUSH2 0x2582 JUMPI PUSH1 0x80 DUP3 ADD MLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH2 0x288D SWAP2 PUSH2 0x2ACA JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SSTORE POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD ISZERO PUSH2 0x28FD JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A20737461727465640000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST TIMESTAMP PUSH1 0x2 SSTORE PUSH32 0x27029695AA5F602A4EE81F4C32DFA86E562F200A17966496F3A7C3F2EC0F9417 PUSH2 0x1A0A PUSH2 0x19A1 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP1 DUP4 ADD MLOAD SWAP1 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH2 0x295D PUSH1 0x4 DUP5 ADD DUP4 PUSH2 0x2B27 JUMP JUMPDEST PUSH1 0x80 DUP6 ADD MLOAD MUL PUSH1 0xC0 SWAP1 SWAP5 ADD SWAP4 SWAP1 SWAP4 MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND PUSH2 0x104F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061757361626C653A206E6F7420706175736564000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x29D4 DUP4 DUP4 PUSH2 0x2AB2 JUMP JUMPDEST PUSH2 0x2A0A JUMPI POP DUP2 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP5 SSTORE PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 SWAP1 SWAP4 ADD DUP5 SWAP1 SSTORE DUP5 SLOAD DUP5 DUP3 MSTORE DUP3 DUP7 ADD SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0x2035 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x2035 JUMP JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x1 DUP5 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 PUSH2 0x2A7D JUMPI POP POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE DUP4 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD DUP5 DUP2 MSTORE DUP7 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP10 SSTORE PUSH1 0x0 DUP10 DUP2 MSTORE DUP5 DUP2 KECCAK256 SWAP6 MLOAD PUSH1 0x2 SWAP1 SWAP4 MUL SWAP1 SWAP6 ADD SWAP2 DUP3 SSTORE SWAP2 MLOAD SWAP1 DUP3 ADD SSTORE DUP7 SLOAD DUP7 DUP5 MSTORE DUP2 DUP9 ADD SWAP1 SWAP3 MSTORE SWAP3 SWAP1 SWAP2 KECCAK256 SSTORE PUSH2 0x2AAB JUMP JUMPDEST DUP3 DUP6 PUSH1 0x0 ADD PUSH1 0x1 DUP4 SUB DUP2 SLOAD DUP2 LT PUSH2 0x2A90 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD PUSH1 0x1 ADD DUP2 SWAP1 SSTORE POP PUSH1 0x0 SWAP2 POP POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 GT ISZERO PUSH2 0x2B21 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 PUSH2 0x2B8A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x456E756D4D61703A206E6F6E6578697374656E74206B65790000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP4 PUSH1 0x0 ADD PUSH1 0x1 DUP3 SUB DUP2 SLOAD DUP2 LT PUSH2 0x2B9C JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD PUSH1 0x1 ADD SLOAD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x140 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP1 NOT AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE POP SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xF7 STATICCALL 0xE6 SWAP7 DUP5 0x48 0xDC RETURNDATACOPY PUSH1 0x53 0xDF PUSH9 0x42C0453AFF17061723 SWAP2 0x1F 0xD 0xB6 0x5F 0xC8 0x29 0xE2 PUSH31 0x3E4164736F6C63430007060033000000000000000000000000000000000000 ","sourceMap":"136:4271:15:-:0;;;358:183;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;358:183:15;;;;;;;;;;;960:6:1;:15;;-1:-1:-1;;;;;;960:15:1;2518:10:32;960:15:1;;;;;990:40;;358:183:15;;;;;;;;;;;;2554:4:32;;2518:10;;358:183:15;;2518:10:32;;;;990:40:1;;960:6;;990:40;-1:-1:-1;;;;;;512:27:8;::::1;504:60;;;::::0;;-1:-1:-1;;;504:60:8;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;574:12;:28:::0;;-1:-1:-1;;;;;574:28:8;::::1;-1:-1:-1::0;;;;;;574:28:8;;::::1;::::0;::::1;::::0;;;617:30:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;-1:-1:-1::0;;543:6:5;:16;;-1:-1:-1;;543:16:5;;;;;;;;;;2570:28:32::2;::::0;;;2608:44:::2;::::0;;;2687:16:::2;::::0;;2701:1:::2;2687:16:::0;;;;;::::2;::::0;;-1:-1:-1;;2687:16:32::2;::::0;::::2;::::0;;::::2;::::0;::::2;-1:-1:-1::0;;2739:16:32::2;::::0;;2753:1:::2;2739:16:::0;;;;;::::2;::::0;;2662:41;;-1:-1:-1;2713:23:32::2;::::0;2739:16;;-1:-1:-1;2753:1:32;2739:16:::2;::::0;::::2;::::0;;::::2;::::0;::::2;-1:-1:-1::0;;2766:8:32;;2713:42;;-1:-1:-1;;;;2765:66:32;1751:44:::2;::::0;-1:-1:-1;2766:5:32;;2803:27:::2;::::0;2766:8:::2;;;;;;;;;2776:6;2783:1;2776:9;;;;;;;;;;;;;2765:66;;;::::0;::::2;;;::::0;::::2;;-1:-1:-1::0;;2886:34:32::2;;-1:-1:-1::0;;;2841:80:32::2;2842:5;2848:1;2842:8;;;;;;;;;;;;;2852:6;2859:1;2852:9;;;;;;;;;;;;;2841:80;;;::::0;::::2;;;::::0;::::2;;2936:26;2948:5;2955:6;2936:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::2;::::0;;;::::2;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::2;::::0;;;::::2;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;2380:589;;::::0;;;358:183:15;;;136:4271;;;;;;;;;;;;"},"deployedBytecode":{"generatedSources":[],"immutableReferences":{"5785":[{"length":32,"start":6987}],"5787":[{"length":32,"start":7899}]},"linkReferences":{},"object":"6080604052600436106101755760003560e01c80638456cb59116100cb5780639e0495451161007f578063be9a655511610059578063be9a655514610cbc578063f21f537d14610cd1578063f2fde38b14610ce657610175565b80639e04954514610a63578063a963b25714610a8a578063bb955d7814610b1f57610175565b80638da5cb5b116100b05780638da5cb5b146107145780639674ab1e146107295780639bbeb124146108c657610175565b80638456cb59146106ea5780638488bb4e146106ff57610175565b8063460b7e841161012d5780635e6e9f70116101075780635e6e9f701461051757806361bd3851146106525780636b8f9c43146106b757610175565b8063460b7e84146103e75780635c4fafc7146104bd5780635c975abb146104ee57610175565b80632a8a45bc1161015e5780632a8a45bc146102a55780632c87927b1461038d5780633f4ba83a146103d257610175565b80631323b0661461017a57806316c38b3c14610277575b600080fd5b34801561018657600080fd5b5061021c600480360360a081101561019d57600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a0810160808201356401000000008111156101dd57600080fd5b8201836020820111156101ef57600080fd5b8035906020019184600183028401116401000000008311171561021157600080fd5b509092509050610d19565b6040518083815260200180602001828103825283818151815260200191508051906020019060200280838360005b8381101561026257818101518382015260200161024a565b50505050905001935050505060405180910390f35b34801561028357600080fd5b506102a36004803603602081101561029a57600080fd5b50351515610e0e565b005b3480156102b157600080fd5b506102cf600480360360208110156102c857600080fd5b5035610e2c565b60405180878152602001868152602001858152602001846001600160a01b031681526020018060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561033457818101518382015260200161031c565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561037357818101518382015260200161035b565b505050509050019850505050505050505060405180910390f35b34801561039957600080fd5b506102a3600480360360808110156103b057600080fd5b50803590602081013590604081013590606001356001600160a01b0316610fd1565b3480156103de57600080fd5b506102a3610fe3565b3480156103f357600080fd5b506102a36004803603606081101561040a57600080fd5b8135919081019060408101602082013564010000000081111561042c57600080fd5b82018360208201111561043e57600080fd5b8035906020019184602083028401116401000000008311171561046057600080fd5b91939092909160208101903564010000000081111561047e57600080fd5b82018360208201111561049057600080fd5b803590602001918460208302840111640100000000831117156104b257600080fd5b509092509050611051565b3480156104c957600080fd5b506104d26110e7565b604080516001600160a01b039092168252519081900360200190f35b3480156104fa57600080fd5b506105036110ff565b604080519115158252519081900360200190f35b34801561052357600080fd5b506102a36004803603606081101561053a57600080fd5b8135919081019060408101602082013564010000000081111561055c57600080fd5b82018360208201111561056e57600080fd5b8035906020019184602083028401116401000000008311171561059057600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092959493602081019350359150506401000000008111156105e057600080fd5b8201836020820111156105f257600080fd5b8035906020019184602083028401116401000000008311171561061457600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611108945050505050565b34801561065e57600080fd5b506106676112e5565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156106a357818101518382015260200161068b565b505050509050019250505060405180910390f35b3480156106c357600080fd5b506102a3600480360360208110156106da57600080fd5b50356001600160a01b0316611340565b3480156106f657600080fd5b506102a361140d565b34801561070b57600080fd5b506104d2611474565b34801561072057600080fd5b506104d2611483565b34801561073557600080fd5b506102a3600480360361012081101561074d57600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a08101608082013564010000000081111561078d57600080fd5b82018360208201111561079f57600080fd5b803590602001918460018302840111640100000000831117156107c157600080fd5b919390928235926040810190602001356401000000008111156107e357600080fd5b8201836020820111156107f557600080fd5b8035906020019184602083028401116401000000008311171561081757600080fd5b91939092909160208101903564010000000081111561083557600080fd5b82018360208201111561084757600080fd5b8035906020019184602083028401116401000000008311171561086957600080fd5b91939092909160208101903564010000000081111561088757600080fd5b82018360208201111561089957600080fd5b803590602001918460208302840111640100000000831117156108bb57600080fd5b509092509050611492565b3480156108d257600080fd5b506102a360048036036101208110156108ea57600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a08101608082013564010000000081111561092a57600080fd5b82018360208201111561093c57600080fd5b8035906020019184600183028401116401000000008311171561095e57600080fd5b9193909282359260408101906020013564010000000081111561098057600080fd5b82018360208201111561099257600080fd5b803590602001918460208302840111640100000000831117156109b457600080fd5b9193909290916020810190356401000000008111156109d257600080fd5b8201836020820111156109e457600080fd5b80359060200191846020830284011164010000000083111715610a0657600080fd5b919390929091602081019035640100000000811115610a2457600080fd5b820183602082011115610a3657600080fd5b80359060200191846020830284011164010000000083111715610a5857600080fd5b5090925090506115b9565b348015610a6f57600080fd5b50610a786116d0565b60408051918252519081900360200190f35b6102a3600480360360a0811015610aa057600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135640100000000811115610ae057600080fd5b820183602082011115610af257600080fd5b80359060200191846001830284011164010000000083111715610b1457600080fd5b5090925090506116d6565b348015610b2b57600080fd5b506102a36004803603610120811015610b4357600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135640100000000811115610b8357600080fd5b820183602082011115610b9557600080fd5b80359060200191846001830284011164010000000083111715610bb757600080fd5b91939092823592604081019060200135640100000000811115610bd957600080fd5b820183602082011115610beb57600080fd5b80359060200191846020830284011164010000000083111715610c0d57600080fd5b919390929091602081019035640100000000811115610c2b57600080fd5b820183602082011115610c3d57600080fd5b80359060200191846020830284011164010000000083111715610c5f57600080fd5b919390929091602081019035640100000000811115610c7d57600080fd5b820183602082011115610c8f57600080fd5b80359060200191846020830284011164010000000083111715610cb157600080fd5b5090925090506117b3565b348015610cc857600080fd5b506102a36118ca565b348015610cdd57600080fd5b50610a786118dd565b348015610cf257600080fd5b506102a360048036036020811015610d0957600080fd5b50356001600160a01b03166118e3565b6000606060025460001415610d75576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b610d7d611949565b610d85612bb7565b610d8d6119a1565b6001600160a01b03908116825289811660208084019190915290891660408084019190915260608301899052608083018890528051601f870183900483028101830190915285815290869086908190840183828082843760009201919091525050505060a0820152610dfe816119a5565b9250925050965096945050505050565b8015610e2157610e1c6119cc565b610e29565b610e29611a27565b50565b6000818152600660205260408120819081908190606090819083610e5260048301611a62565b82549850905087610eaa576040805162461bcd60e51b815260206004820152601660248201527f53616c653a206e6f6e2d6578697374656e7420736b7500000000000000000000604482015290519081900360640190fd5b60018201546002830154600384015491985096506001600160a01b031694508067ffffffffffffffff81118015610ee057600080fd5b50604051908082528060200260200182016040528015610f0a578160200160208202803683370190505b5093508067ffffffffffffffff81118015610f2457600080fd5b50604051908082528060200260200182016040528015610f4e578160200160208202803683370190505b50925060005b81811015610fc557600080610f6c6004860184611a66565b915091508160001c878481518110610f8057fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508060001c868481518110610fb057fe5b60209081029190910101525050600101610f54565b50505091939550919395565b610fdd84848484611af7565b50505050565b600254611037576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b6110476110426119a1565b611d2e565b61104f611a27565b565b600060066000878152602001908152602001600020905060008160040190506110de8187878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808b0282810182019093528a82529093508a925089918291850190849080828437600092019190915250611df292505050565b50505050505050565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b60035460ff1681565b6111136110426119a1565b81518151811461116a576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20696e636f6e73697374656e742061727261797300000000000000604482015290519081900360640190fd5b600084815260066020526040902080546111cb576040805162461bcd60e51b815260206004820152601660248201527f53616c653a206e6f6e2d6578697374656e7420736b7500000000000000000000604482015290519081900360640190fd5b60048101826112165760006111df82611a62565b905060005b8181101561120f5760006111f88482611a66565b5090506112058482611f5b565b50506001016111e4565b5050611221565b611221818686611df2565b857fcb3fe5489e0cd43d0f4a33d1e09a4a0463a03d0d38f56165530854e5540db1438686604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015611289578181015183820152602001611271565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156112c85781810151838201526020016112b0565b5050505090500194505050505060405180910390a2505050505050565b6060600460000180548060200260200160405190810160405280929190818152602001828054801561133657602002820191906000526020600020905b815481526020019060010190808311611322575b5050505050905090565b61134b6110426119a1565b6001600160a01b0381166113a6576040805162461bcd60e51b815260206004820152601460248201527f5061796f75743a207a65726f2061646472657373000000000000000000000000604482015290519081900360640190fd5b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03838116919091179182905560408051929091168252517fdd880d24a789958a6398c99c2e54ce31bc10a638cbc42f7dd34285479ae0f855916020908290030190a150565b600254611461576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b61146c6110426119a1565b61104f6119cc565b6001546001600160a01b031681565b6000546001600160a01b031690565b600061159e8e8e8e8e8e8e8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508d8d8d80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508c8c80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508b8b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061203b92505050565b90506115a98161209d565b5050505050505050505050505050565b60006116c58e8e8e8e8e8e8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508d8d8d80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508c8c80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508b8b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061203b92505050565b90506115a981612586565b60001981565b60025461172a576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b611732611949565b61173a612bb7565b6117426119a1565b6001600160a01b03908116825287811660208084019190915290871660408084019190915260608301879052608083018690528051601f850183900483028101830190915283815290849084908190840183828082843760009201919091525050505060a08201526110de81612830565b60006118bf8e8e8e8e8e8e8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508d8d8d80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508c8c80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508b8b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061203b92505050565b90506115a98161285d565b6118d56110426119a1565b6110476128a8565b60025490565b6118ee6110426119a1565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383811691821780845560405192939116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b60035460ff161561104f576040805162461bcd60e51b815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b3390565b600060606119b283612586565b6119bb8361292a565b505060c081015160e0909101519091565b6119d4611949565b6003805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611a0a6119a1565b604080516001600160a01b039092168252519081900360200190a1565b611a2f612971565b6003805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611a0a6119a1565b5490565b815460009081908310611ac0576040805162461bcd60e51b815260206004820152601c60248201527f456e756d4d61703a20696e646578206f7574206f6620626f756e647300000000604482015290519081900360640190fd5b6000846000018481548110611ad157fe5b906000526020600020906002020190508060000154816001015492509250509250929050565b82611b49576040805162461bcd60e51b815260206004820152601160248201527f53616c653a207a65726f20737570706c79000000000000000000000000000000604482015290519081900360640190fd5b7f0000000000000000000000000000000000000000000000000000000000000000611b746004611a62565b10611bc6576040805162461bcd60e51b815260206004820152601360248201527f53616c653a20746f6f206d616e7920736b757300000000000000000000000000604482015290519081900360640190fd5b611bd16004856129c8565b611c22576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20736b7520616c7265616479206372656174656400000000000000604482015290519081900360640190fd5b6001600160a01b03811615611c9457611c43816001600160a01b0316612a12565b611c94576040805162461bcd60e51b815260206004820152601b60248201527f53616c653a206e6f6e2d636f6e74726163742072656365697665720000000000604482015290519081900360640190fd5b60008481526006602090815260409182902085815560018101869055600281018590556003810180546001600160a01b03861673ffffffffffffffffffffffffffffffffffffffff1990911681179091558351888152928301879052828401869052606083015291517f38bd4aabce684540cd61351b91f2f5facf9d6963934347e25aab93d87ae7ac149181900360800190a15050505050565b306001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015611d6757600080fd5b505afa158015611d7b573d6000803e3d6000fd5b505050506040513d6020811015611d9157600080fd5b50516001600160a01b03828116911614610e29576040805162461bcd60e51b815260206004820152601660248201527f4f776e61626c653a206e6f7420746865206f776e657200000000000000000000604482015290519081900360640190fd5b60005b8251811015611ed8576000838281518110611e0c57fe5b6020026020010151905060006001600160a01b0316816001600160a01b03161415611e7e576040805162461bcd60e51b815260206004820152601860248201527f53616c653a207a65726f206164647265737320746f6b656e0000000000000000604482015290519081900360640190fd5b6000838381518110611e8c57fe5b602002602001015190508060001415611eb857611eb2866001600160a01b038416611f5b565b50611ece565b611ecc866001600160a01b03841683612a18565b505b5050600101611df5565b507f0000000000000000000000000000000000000000000000000000000000000000611f0384611a62565b1115611f56576040805162461bcd60e51b815260206004820152601560248201527f53616c653a20746f6f206d616e7920746f6b656e730000000000000000000000604482015290519081900360640190fd5b505050565b6000818152600183016020526040812054801561202f5783546000198083019190810190600090879083908110611f8e57fe5b9060005260206000209060020201905080876000018481548110611fae57fe5b600091825260208083208454600290930201918255600193840154918401919091558354825289830190526040902090840190558654879080611fed57fe5b60008281526020808220600260001990940193840201828155600190810183905592909355888152898201909252604082209190915594506120359350505050565b60009150505b92915050565b612043612bb7565b61204b6119a1565b6001600160a01b039081168252998a1660208201529790981660408801526060870195909552608086019390935260a085019190915260c084015260e083015261010082015261012081019190915290565b806060015181604001516001600160a01b031682600001516001600160a01b03167f29f844483ca6b10b5c0611d039afc15ce8f6380e905307b381c3a8ee4e90e11e846020015185608001518660a001518760c001518860e001518961010001518a610120015160405160200180848051906020019060200280838360005b8381101561213457818101518382015260200161211c565b50505050905001838051906020019060200280838360005b8381101561216457818101518382015260200161214c565b50505050905001828051906020019060200280838360005b8381101561219457818101518382015260200161217c565b50505050905001935050505060405160208183030381529060405260405180866001600160a01b031681526020018581526020018060200184815260200180602001838103835286818151815260200191508051906020019080838360005b8381101561220b5781810151838201526020016121f3565b50505050905090810190601f1680156122385780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b8381101561226b578181015183820152602001612253565b50505050905090810190601f1680156122985780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390a460608101516000908152600660205260409020600301546001600160a01b03168015612582576361eceae860e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916816001600160a01b03166361eceae8846000015185602001518660400151876060015188608001518960a001518a60c001518b60e001518c61010001518d61012001516040518b63ffffffff1660e01b8152600401808b6001600160a01b031681526020018a6001600160a01b03168152602001896001600160a01b031681526020018881526020018781526020018060200186815260200180602001806020018060200185810385528a818151815260200191508051906020019080838360005b838110156123d15781810151838201526020016123b9565b50505050905090810190601f1680156123fe5780820380516001836020036101000a031916815260200191505b508581038452885181528851602091820191808b01910280838360005b8381101561243357818101518382015260200161241b565b50505050905001858103835287818151815260200191508051906020019060200280838360005b8381101561247257818101518382015260200161245a565b50505050905001858103825286818151815260200191508051906020019060200280838360005b838110156124b1578181015183820152602001612499565b505050509050019e505050505050505050505050505050602060405180830381600087803b1580156124e257600080fd5b505af11580156124f6573d6000803e3d6000fd5b505050506040513d602081101561250c57600080fd5b50517fffffffff000000000000000000000000000000000000000000000000000000001614612582576040805162461bcd60e51b815260206004820152601a60248201527f53616c653a206e6f74696669636174696f6e2072656675736564000000000000604482015290519081900360640190fd5b5050565b60208101516001600160a01b03166125e5576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a207a65726f206164647265737320726563697069656e7400000000604482015290519081900360640190fd5b60408101516001600160a01b0316612644576040805162461bcd60e51b815260206004820152601860248201527f53616c653a207a65726f206164647265737320746f6b656e0000000000000000604482015290519081900360640190fd5b608081015161269a576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a207a65726f207175616e7469747920707572636861736500000000604482015290519081900360640190fd5b606081015160009081526006602052604090208054612700576040805162461bcd60e51b815260206004820152601660248201527f53616c653a206e6f6e2d6578697374656e7420736b7500000000000000000000604482015290519081900360640190fd5b81608001518160020154101561275d576040805162461bcd60e51b815260206004820152601860248201527f53616c653a2061626f7665206d6178207175616e746974790000000000000000604482015290519081900360640190fd5b8054600019146127c4578160800151816001015410156127c4576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20696e73756666696369656e7420737570706c7900000000000000604482015290519081900360640190fd5b60408201516001600160a01b03166127df6004830182612ab2565b611f56576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a206e6f6e2d6578697374656e7420736b7520746f6b656e00000000604482015290519081900360640190fd5b61283981612586565b6128428161292a565b61284b81610e29565b6128548161285d565b610e298161209d565b60608101516000908152600660205260409020805460001914612582576080820151600182015461288d91612aca565b60608301516000908152600660205260409020600101555050565b600254156128fd576040805162461bcd60e51b815260206004820152601260248201527f537461727461626c653a20737461727465640000000000000000000000000000604482015290519081900360640190fd5b426002557f27029695aa5f602a4ee81f4c32dfa86e562f200a17966496f3a7c3f2ec0f9417611a0a6119a1565b60608101516000908152600660205260408082209083015190916001600160a01b039091169061295d6004840183612b27565b60808501510260c090940193909352505050565b60035460ff1661104f576040805162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604482015290519081900360640190fd5b60006129d48383612ab2565b612a0a57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155612035565b506000612035565b3b151590565b600082815260018401602052604081205480612a7d575050604080518082018252838152602080820184815286546001818101895560008981528481209551600290930290950191825591519082015586548684528188019092529290912055612aab565b82856000016001830381548110612a9057fe5b90600052602060002090600202016001018190555060009150505b9392505050565b60009081526001919091016020526040902054151590565b600082821115612b21576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b600081815260018301602052604081205480612b8a576040805162461bcd60e51b815260206004820152601860248201527f456e756d4d61703a206e6f6e6578697374656e74206b65790000000000000000604482015290519081900360640190fd5b836000016001820381548110612b9c57fe5b90600052602060002090600202016001015491505092915050565b60405180610140016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160008019168152602001600081526020016060815260200160008152602001606081526020016060815260200160608152509056fea2646970667358221220f7fae6968448dc3e6053df6842c0453aff17061723911f0db65fc829e27e3e4164736f6c63430007060033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x175 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8456CB59 GT PUSH2 0xCB JUMPI DUP1 PUSH4 0x9E049545 GT PUSH2 0x7F JUMPI DUP1 PUSH4 0xBE9A6555 GT PUSH2 0x59 JUMPI DUP1 PUSH4 0xBE9A6555 EQ PUSH2 0xCBC JUMPI DUP1 PUSH4 0xF21F537D EQ PUSH2 0xCD1 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0xCE6 JUMPI PUSH2 0x175 JUMP JUMPDEST DUP1 PUSH4 0x9E049545 EQ PUSH2 0xA63 JUMPI DUP1 PUSH4 0xA963B257 EQ PUSH2 0xA8A JUMPI DUP1 PUSH4 0xBB955D78 EQ PUSH2 0xB1F JUMPI PUSH2 0x175 JUMP JUMPDEST DUP1 PUSH4 0x8DA5CB5B GT PUSH2 0xB0 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x714 JUMPI DUP1 PUSH4 0x9674AB1E EQ PUSH2 0x729 JUMPI DUP1 PUSH4 0x9BBEB124 EQ PUSH2 0x8C6 JUMPI PUSH2 0x175 JUMP JUMPDEST DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x6EA JUMPI DUP1 PUSH4 0x8488BB4E EQ PUSH2 0x6FF JUMPI PUSH2 0x175 JUMP JUMPDEST DUP1 PUSH4 0x460B7E84 GT PUSH2 0x12D JUMPI DUP1 PUSH4 0x5E6E9F70 GT PUSH2 0x107 JUMPI DUP1 PUSH4 0x5E6E9F70 EQ PUSH2 0x517 JUMPI DUP1 PUSH4 0x61BD3851 EQ PUSH2 0x652 JUMPI DUP1 PUSH4 0x6B8F9C43 EQ PUSH2 0x6B7 JUMPI PUSH2 0x175 JUMP JUMPDEST DUP1 PUSH4 0x460B7E84 EQ PUSH2 0x3E7 JUMPI DUP1 PUSH4 0x5C4FAFC7 EQ PUSH2 0x4BD JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x4EE JUMPI PUSH2 0x175 JUMP JUMPDEST DUP1 PUSH4 0x2A8A45BC GT PUSH2 0x15E JUMPI DUP1 PUSH4 0x2A8A45BC EQ PUSH2 0x2A5 JUMPI DUP1 PUSH4 0x2C87927B EQ PUSH2 0x38D JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x3D2 JUMPI PUSH2 0x175 JUMP JUMPDEST DUP1 PUSH4 0x1323B066 EQ PUSH2 0x17A JUMPI DUP1 PUSH4 0x16C38B3C EQ PUSH2 0x277 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x186 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x21C PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x19D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x1DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x1EF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x211 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0xD19 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x262 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x24A JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP4 POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x283 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2A3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x29A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD ISZERO ISZERO PUSH2 0xE0E JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2CF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0xE2C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x334 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x31C JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x373 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x35B JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP9 POP POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x399 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2A3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x3B0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xFD1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2A3 PUSH2 0xFE3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2A3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x40A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x42C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x43E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x460 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH1 0x20 DUP2 ADD SWAP1 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x47E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x490 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x4B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x1051 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4D2 PUSH2 0x10E7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4FA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x503 PUSH2 0x10FF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x523 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2A3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x53A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x55C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x56E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x590 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 SWAP5 SWAP4 PUSH1 0x20 DUP2 ADD SWAP4 POP CALLDATALOAD SWAP2 POP POP PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x5E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x5F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x614 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0x1108 SWAP5 POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x65E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x667 PUSH2 0x12E5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 DUP2 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x6A3 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x68B JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2A3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x6DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1340 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2A3 PUSH2 0x140D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x70B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4D2 PUSH2 0x1474 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x720 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4D2 PUSH2 0x1483 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x735 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2A3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH2 0x120 DUP2 LT ISZERO PUSH2 0x74D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x78D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x79F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x7C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 DUP3 CALLDATALOAD SWAP3 PUSH1 0x40 DUP2 ADD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x7E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x7F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x817 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH1 0x20 DUP2 ADD SWAP1 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x835 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x847 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x869 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH1 0x20 DUP2 ADD SWAP1 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x887 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x899 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x8BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x1492 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2A3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH2 0x120 DUP2 LT ISZERO PUSH2 0x8EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x92A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x93C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x95E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 DUP3 CALLDATALOAD SWAP3 PUSH1 0x40 DUP2 ADD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x980 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x992 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x9B4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH1 0x20 DUP2 ADD SWAP1 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x9D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x9E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xA06 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH1 0x20 DUP2 ADD SWAP1 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xA24 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xA36 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xA58 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x15B9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA6F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA78 PUSH2 0x16D0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x2A3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0xAA0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xAE0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xAF2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xB14 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x16D6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xB2B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2A3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH2 0x120 DUP2 LT ISZERO PUSH2 0xB43 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xB83 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xB95 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xBB7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 DUP3 CALLDATALOAD SWAP3 PUSH1 0x40 DUP2 ADD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xBD9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xBEB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xC0D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH1 0x20 DUP2 ADD SWAP1 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xC2B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xC3D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xC5F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH1 0x20 DUP2 ADD SWAP1 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xC7D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xC8F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xCB1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x17B3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xCC8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2A3 PUSH2 0x18CA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xCDD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA78 PUSH2 0x18DD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xCF2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2A3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xD09 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x18E3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x2 SLOAD PUSH1 0x0 EQ ISZERO PUSH2 0xD75 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0xD7D PUSH2 0x1949 JUMP JUMPDEST PUSH2 0xD85 PUSH2 0x2BB7 JUMP JUMPDEST PUSH2 0xD8D PUSH2 0x19A1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP10 DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP10 AND PUSH1 0x40 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD DUP10 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP9 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x1F DUP8 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD SWAP1 SWAP2 MSTORE DUP6 DUP2 MSTORE SWAP1 DUP7 SWAP1 DUP7 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP POP PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0xDFE DUP2 PUSH2 0x19A5 JUMP JUMPDEST SWAP3 POP SWAP3 POP POP SWAP7 POP SWAP7 SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP1 ISZERO PUSH2 0xE21 JUMPI PUSH2 0xE1C PUSH2 0x19CC JUMP JUMPDEST PUSH2 0xE29 JUMP JUMPDEST PUSH2 0xE29 PUSH2 0x1A27 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP2 SWAP1 DUP2 SWAP1 DUP2 SWAP1 PUSH1 0x60 SWAP1 DUP2 SWAP1 DUP4 PUSH2 0xE52 PUSH1 0x4 DUP4 ADD PUSH2 0x1A62 JUMP JUMPDEST DUP3 SLOAD SWAP9 POP SWAP1 POP DUP8 PUSH2 0xEAA JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7500000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x3 DUP5 ADD SLOAD SWAP2 SWAP9 POP SWAP7 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP5 POP DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0xEE0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xF0A JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP4 POP DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0xF24 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xF4E JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xFC5 JUMPI PUSH1 0x0 DUP1 PUSH2 0xF6C PUSH1 0x4 DUP7 ADD DUP5 PUSH2 0x1A66 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP2 PUSH1 0x0 SHR DUP8 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0xF80 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP DUP1 PUSH1 0x0 SHR DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0xFB0 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP POP PUSH1 0x1 ADD PUSH2 0xF54 JUMP JUMPDEST POP POP POP SWAP2 SWAP4 SWAP6 POP SWAP2 SWAP4 SWAP6 JUMP JUMPDEST PUSH2 0xFDD DUP5 DUP5 DUP5 DUP5 PUSH2 0x1AF7 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x1037 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x1047 PUSH2 0x1042 PUSH2 0x19A1 JUMP JUMPDEST PUSH2 0x1D2E JUMP JUMPDEST PUSH2 0x104F PUSH2 0x1A27 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 PUSH1 0x6 PUSH1 0x0 DUP8 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SWAP1 POP PUSH1 0x0 DUP2 PUSH1 0x4 ADD SWAP1 POP PUSH2 0x10DE DUP2 DUP8 DUP8 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP12 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP11 DUP3 MSTORE SWAP1 SWAP4 POP DUP11 SWAP3 POP DUP10 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1DF2 SWAP3 POP POP POP JUMP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x1113 PUSH2 0x1042 PUSH2 0x19A1 JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD DUP2 EQ PUSH2 0x116A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E636F6E73697374656E742061727261797300000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0x11CB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7500000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP2 ADD DUP3 PUSH2 0x1216 JUMPI PUSH1 0x0 PUSH2 0x11DF DUP3 PUSH2 0x1A62 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x120F JUMPI PUSH1 0x0 PUSH2 0x11F8 DUP5 DUP3 PUSH2 0x1A66 JUMP JUMPDEST POP SWAP1 POP PUSH2 0x1205 DUP5 DUP3 PUSH2 0x1F5B JUMP JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x11E4 JUMP JUMPDEST POP POP PUSH2 0x1221 JUMP JUMPDEST PUSH2 0x1221 DUP2 DUP7 DUP7 PUSH2 0x1DF2 JUMP JUMPDEST DUP6 PUSH32 0xCB3FE5489E0CD43D0F4A33D1E09A4A0463A03D0D38F56165530854E5540DB143 DUP7 DUP7 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1289 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1271 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x12C8 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x12B0 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x4 PUSH1 0x0 ADD DUP1 SLOAD DUP1 PUSH1 0x20 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 DUP1 ISZERO PUSH2 0x1336 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x1322 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x134B PUSH2 0x1042 PUSH2 0x19A1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x13A6 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061796F75743A207A65726F2061646472657373000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 SWAP1 SWAP2 OR SWAP2 DUP3 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD SWAP3 SWAP1 SWAP2 AND DUP3 MSTORE MLOAD PUSH32 0xDD880D24A789958A6398C99C2E54CE31BC10A638CBC42F7DD34285479AE0F855 SWAP2 PUSH1 0x20 SWAP1 DUP3 SWAP1 SUB ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x1461 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x146C PUSH2 0x1042 PUSH2 0x19A1 JUMP JUMPDEST PUSH2 0x104F PUSH2 0x19CC JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x159E DUP15 DUP15 DUP15 DUP15 DUP15 DUP15 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP DUP14 DUP14 DUP14 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP DUP13 DUP13 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP DUP12 DUP12 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x203B SWAP3 POP POP POP JUMP JUMPDEST SWAP1 POP PUSH2 0x15A9 DUP2 PUSH2 0x209D JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x16C5 DUP15 DUP15 DUP15 DUP15 DUP15 DUP15 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP DUP14 DUP14 DUP14 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP DUP13 DUP13 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP DUP12 DUP12 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x203B SWAP3 POP POP POP JUMP JUMPDEST SWAP1 POP PUSH2 0x15A9 DUP2 PUSH2 0x2586 JUMP JUMPDEST PUSH1 0x0 NOT DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x172A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x1732 PUSH2 0x1949 JUMP JUMPDEST PUSH2 0x173A PUSH2 0x2BB7 JUMP JUMPDEST PUSH2 0x1742 PUSH2 0x19A1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP8 DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP8 AND PUSH1 0x40 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD DUP8 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP7 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x1F DUP6 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD SWAP1 SWAP2 MSTORE DUP4 DUP2 MSTORE SWAP1 DUP5 SWAP1 DUP5 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP POP PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x10DE DUP2 PUSH2 0x2830 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x18BF DUP15 DUP15 DUP15 DUP15 DUP15 DUP15 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP DUP14 DUP14 DUP14 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP DUP13 DUP13 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP DUP12 DUP12 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x203B SWAP3 POP POP POP JUMP JUMPDEST SWAP1 POP PUSH2 0x15A9 DUP2 PUSH2 0x285D JUMP JUMPDEST PUSH2 0x18D5 PUSH2 0x1042 PUSH2 0x19A1 JUMP JUMPDEST PUSH2 0x1047 PUSH2 0x28A8 JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x18EE PUSH2 0x1042 PUSH2 0x19A1 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 DUP3 OR DUP1 DUP5 SSTORE PUSH1 0x40 MLOAD SWAP3 SWAP4 SWAP2 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x104F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061757361626C653A2070617573656400000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x19B2 DUP4 PUSH2 0x2586 JUMP JUMPDEST PUSH2 0x19BB DUP4 PUSH2 0x292A JUMP JUMPDEST POP POP PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xE0 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP2 JUMP JUMPDEST PUSH2 0x19D4 PUSH2 0x1949 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH2 0x1A0A PUSH2 0x19A1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 JUMP JUMPDEST PUSH2 0x1A2F PUSH2 0x2971 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA PUSH2 0x1A0A PUSH2 0x19A1 JUMP JUMPDEST SLOAD SWAP1 JUMP JUMPDEST DUP2 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP4 LT PUSH2 0x1AC0 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x456E756D4D61703A20696E646578206F7574206F6620626F756E647300000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 PUSH1 0x0 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x1AD1 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD SWAP1 POP DUP1 PUSH1 0x0 ADD SLOAD DUP2 PUSH1 0x1 ADD SLOAD SWAP3 POP SWAP3 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP3 PUSH2 0x1B49 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F20737570706C79000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH2 0x1B74 PUSH1 0x4 PUSH2 0x1A62 JUMP JUMPDEST LT PUSH2 0x1BC6 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20746F6F206D616E7920736B757300000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x1BD1 PUSH1 0x4 DUP6 PUSH2 0x29C8 JUMP JUMPDEST PUSH2 0x1C22 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20736B7520616C7265616479206372656174656400000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO PUSH2 0x1C94 JUMPI PUSH2 0x1C43 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2A12 JUMP JUMPDEST PUSH2 0x1C94 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D636F6E74726163742072656365697665720000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP6 DUP2 SSTORE PUSH1 0x1 DUP2 ADD DUP7 SWAP1 SSTORE PUSH1 0x2 DUP2 ADD DUP6 SWAP1 SSTORE PUSH1 0x3 DUP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT SWAP1 SWAP2 AND DUP2 OR SWAP1 SWAP2 SSTORE DUP4 MLOAD DUP9 DUP2 MSTORE SWAP3 DUP4 ADD DUP8 SWAP1 MSTORE DUP3 DUP5 ADD DUP7 SWAP1 MSTORE PUSH1 0x60 DUP4 ADD MSTORE SWAP2 MLOAD PUSH32 0x38BD4AABCE684540CD61351B91F2F5FACF9D6963934347E25AAB93D87AE7AC14 SWAP2 DUP2 SWAP1 SUB PUSH1 0x80 ADD SWAP1 LOG1 POP POP POP POP POP JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8DA5CB5B 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 PUSH2 0x1D67 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1D7B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1D91 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ PUSH2 0xE29 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6F7420746865206F776E657200000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x1ED8 JUMPI PUSH1 0x0 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1E0C JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1E7E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F206164647265737320746F6B656E0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1E8C JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP DUP1 PUSH1 0x0 EQ ISZERO PUSH2 0x1EB8 JUMPI PUSH2 0x1EB2 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x1F5B JUMP JUMPDEST POP PUSH2 0x1ECE JUMP JUMPDEST PUSH2 0x1ECC DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP4 PUSH2 0x2A18 JUMP JUMPDEST POP JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x1DF5 JUMP JUMPDEST POP PUSH32 0x0 PUSH2 0x1F03 DUP5 PUSH2 0x1A62 JUMP JUMPDEST GT ISZERO PUSH2 0x1F56 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20746F6F206D616E7920746F6B656E730000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0x202F JUMPI DUP4 SLOAD PUSH1 0x0 NOT DUP1 DUP4 ADD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x0 SWAP1 DUP8 SWAP1 DUP4 SWAP1 DUP2 LT PUSH2 0x1F8E JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD SWAP1 POP DUP1 DUP8 PUSH1 0x0 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x1FAE JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 DUP5 SLOAD PUSH1 0x2 SWAP1 SWAP4 MUL ADD SWAP2 DUP3 SSTORE PUSH1 0x1 SWAP4 DUP5 ADD SLOAD SWAP2 DUP5 ADD SWAP2 SWAP1 SWAP2 SSTORE DUP4 SLOAD DUP3 MSTORE DUP10 DUP4 ADD SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP1 DUP5 ADD SWAP1 SSTORE DUP7 SLOAD DUP8 SWAP1 DUP1 PUSH2 0x1FED JUMPI INVALID JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 PUSH1 0x2 PUSH1 0x0 NOT SWAP1 SWAP5 ADD SWAP4 DUP5 MUL ADD DUP3 DUP2 SSTORE PUSH1 0x1 SWAP1 DUP2 ADD DUP4 SWAP1 SSTORE SWAP3 SWAP1 SWAP4 SSTORE DUP9 DUP2 MSTORE DUP10 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x40 DUP3 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE SWAP5 POP PUSH2 0x2035 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SWAP2 POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x2043 PUSH2 0x2BB7 JUMP JUMPDEST PUSH2 0x204B PUSH2 0x19A1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE SWAP10 DUP11 AND PUSH1 0x20 DUP3 ADD MSTORE SWAP8 SWAP1 SWAP9 AND PUSH1 0x40 DUP9 ADD MSTORE PUSH1 0x60 DUP8 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x80 DUP7 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0xA0 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x100 DUP3 ADD MSTORE PUSH2 0x120 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST DUP1 PUSH1 0x60 ADD MLOAD DUP2 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x29F844483CA6B10B5C0611D039AFC15CE8F6380E905307B381C3A8EE4E90E11E DUP5 PUSH1 0x20 ADD MLOAD DUP6 PUSH1 0x80 ADD MLOAD DUP7 PUSH1 0xA0 ADD MLOAD DUP8 PUSH1 0xC0 ADD MLOAD DUP9 PUSH1 0xE0 ADD MLOAD DUP10 PUSH2 0x100 ADD MLOAD DUP11 PUSH2 0x120 ADD MLOAD PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP5 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2134 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x211C JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2164 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x214C JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2194 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x217C JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP4 POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP7 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x220B JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x21F3 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x2238 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP DUP4 DUP2 SUB DUP3 MSTORE DUP5 MLOAD DUP2 MSTORE DUP5 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP7 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x226B JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2253 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x2298 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP8 POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 ISZERO PUSH2 0x2582 JUMPI PUSH4 0x61ECEAE8 PUSH1 0xE0 SHL PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x61ECEAE8 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD DUP7 PUSH1 0x40 ADD MLOAD DUP8 PUSH1 0x60 ADD MLOAD DUP9 PUSH1 0x80 ADD MLOAD DUP10 PUSH1 0xA0 ADD MLOAD DUP11 PUSH1 0xC0 ADD MLOAD DUP12 PUSH1 0xE0 ADD MLOAD DUP13 PUSH2 0x100 ADD MLOAD DUP14 PUSH2 0x120 ADD MLOAD PUSH1 0x40 MLOAD DUP12 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP6 DUP2 SUB DUP6 MSTORE DUP11 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x23D1 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x23B9 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x23FE JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP DUP6 DUP2 SUB DUP5 MSTORE DUP9 MLOAD DUP2 MSTORE DUP9 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP1 DUP12 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2433 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x241B JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP6 DUP2 SUB DUP4 MSTORE DUP8 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2472 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x245A JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP6 DUP2 SUB DUP3 MSTORE DUP7 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x24B1 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2499 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP15 POP POP POP POP POP POP POP POP POP POP POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x24E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x24F6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x250C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND EQ PUSH2 0x2582 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F74696669636174696F6E2072656675736564000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x25E5 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F206164647265737320726563697069656E7400000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2644 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F206164647265737320746F6B656E0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x80 DUP2 ADD MLOAD PUSH2 0x269A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F207175616E7469747920707572636861736500000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0x2700 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7500000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x80 ADD MLOAD DUP2 PUSH1 0x2 ADD SLOAD LT ISZERO PUSH2 0x275D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A2061626F7665206D6178207175616E746974790000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 SLOAD PUSH1 0x0 NOT EQ PUSH2 0x27C4 JUMPI DUP2 PUSH1 0x80 ADD MLOAD DUP2 PUSH1 0x1 ADD SLOAD LT ISZERO PUSH2 0x27C4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E73756666696369656E7420737570706C7900000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x27DF PUSH1 0x4 DUP4 ADD DUP3 PUSH2 0x2AB2 JUMP JUMPDEST PUSH2 0x1F56 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7520746F6B656E00000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x2839 DUP2 PUSH2 0x2586 JUMP JUMPDEST PUSH2 0x2842 DUP2 PUSH2 0x292A JUMP JUMPDEST PUSH2 0x284B DUP2 PUSH2 0xE29 JUMP JUMPDEST PUSH2 0x2854 DUP2 PUSH2 0x285D JUMP JUMPDEST PUSH2 0xE29 DUP2 PUSH2 0x209D JUMP JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x0 NOT EQ PUSH2 0x2582 JUMPI PUSH1 0x80 DUP3 ADD MLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH2 0x288D SWAP2 PUSH2 0x2ACA JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SSTORE POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD ISZERO PUSH2 0x28FD JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A20737461727465640000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST TIMESTAMP PUSH1 0x2 SSTORE PUSH32 0x27029695AA5F602A4EE81F4C32DFA86E562F200A17966496F3A7C3F2EC0F9417 PUSH2 0x1A0A PUSH2 0x19A1 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP1 DUP4 ADD MLOAD SWAP1 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH2 0x295D PUSH1 0x4 DUP5 ADD DUP4 PUSH2 0x2B27 JUMP JUMPDEST PUSH1 0x80 DUP6 ADD MLOAD MUL PUSH1 0xC0 SWAP1 SWAP5 ADD SWAP4 SWAP1 SWAP4 MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND PUSH2 0x104F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061757361626C653A206E6F7420706175736564000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x29D4 DUP4 DUP4 PUSH2 0x2AB2 JUMP JUMPDEST PUSH2 0x2A0A JUMPI POP DUP2 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP5 SSTORE PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 SWAP1 SWAP4 ADD DUP5 SWAP1 SSTORE DUP5 SLOAD DUP5 DUP3 MSTORE DUP3 DUP7 ADD SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0x2035 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x2035 JUMP JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x1 DUP5 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 PUSH2 0x2A7D JUMPI POP POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE DUP4 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD DUP5 DUP2 MSTORE DUP7 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP10 SSTORE PUSH1 0x0 DUP10 DUP2 MSTORE DUP5 DUP2 KECCAK256 SWAP6 MLOAD PUSH1 0x2 SWAP1 SWAP4 MUL SWAP1 SWAP6 ADD SWAP2 DUP3 SSTORE SWAP2 MLOAD SWAP1 DUP3 ADD SSTORE DUP7 SLOAD DUP7 DUP5 MSTORE DUP2 DUP9 ADD SWAP1 SWAP3 MSTORE SWAP3 SWAP1 SWAP2 KECCAK256 SSTORE PUSH2 0x2AAB JUMP JUMPDEST DUP3 DUP6 PUSH1 0x0 ADD PUSH1 0x1 DUP4 SUB DUP2 SLOAD DUP2 LT PUSH2 0x2A90 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD PUSH1 0x1 ADD DUP2 SWAP1 SSTORE POP PUSH1 0x0 SWAP2 POP POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 GT ISZERO PUSH2 0x2B21 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 PUSH2 0x2B8A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x456E756D4D61703A206E6F6E6578697374656E74206B65790000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP4 PUSH1 0x0 ADD PUSH1 0x1 DUP3 SUB DUP2 SLOAD DUP2 LT PUSH2 0x2B9C JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD PUSH1 0x1 ADD SLOAD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x140 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP1 NOT AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE POP SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xF7 STATICCALL 0xE6 SWAP7 DUP5 0x48 0xDC RETURNDATACOPY PUSH1 0x53 0xDF PUSH9 0x42C0453AFF17061723 SWAP2 0x1F 0xD 0xB6 0x5F 0xC8 0x29 0xE2 PUSH31 0x3E4164736F6C63430007060033000000000000000000000000000000000000 ","sourceMap":"136:4271:15:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9044:610:32;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9044:610:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9044:610:32;;-1:-1:-1;9044:610:32;-1:-1:-1;9044:610:32;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;547:143:15;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;547:143:15;;;;:::i;:::-;;10463:1027:32;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10463:1027:32;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10463:1027:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;696:255:15;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;696:255:15;;;;;;;;;;;;;;;;-1:-1:-1;;;;;696:255:15;;:::i;4169:114:32:-;;;;;;;;;;;;;:::i;957:299:15:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;957:299:15;;-1:-1:-1;957:299:15;-1:-1:-1;957:299:15;:::i;1698:98:32:-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;1698:98:32;;;;;;;;;;;;;;482:18:5;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;5032:943:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5032:943:32;;;;;;;;-1:-1:-1;5032:943:32;;-1:-1:-1;;5032:943:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5032:943:32;;-1:-1:-1;5032:943:32;;-1:-1:-1;;;;;5032:943:32:i;11621:110::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;660:263:8;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;660:263:8;-1:-1:-1;;;;;660:263:8;;:::i;3787:110:32:-;;;;;;;;;;;;;:::i;379:35:8:-;;;;;;;;;;;;;:::i;1114:94:1:-;;;;;;;;;;;;;:::i;2553:643:15:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2553:643:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2553:643:15;;-1:-1:-1;2553:643:15;-1:-1:-1;2553:643:15;:::i;1262:644::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1262:644:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1262:644:15;;-1:-1:-1;1262:644:15;-1:-1:-1;1262:644:15;:::i;1802:69:32:-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;6962:537;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6962:537:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6962:537:32;;-1:-1:-1;6962:537:32;-1:-1:-1;6962:537:32;:::i;1912:635:15:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1912:635:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1912:635:15;;-1:-1:-1;1912:635:15;-1:-1:-1;1912:635:15;:::i;3396:118:32:-;;;;;;;;;;;;;:::i;1276:85:6:-;;;;;;;;;;;;;:::i;1448:197:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1448:197:1;-1:-1:-1;;;;;1448:197:1;;:::i;9044:610:32:-;9266:18;9286:28;988:10:6;;1002:1;988:15;;980:50;;;;;-1:-1:-1;;;980:50:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;9326:19:32::1;:17;:19::i;:::-;9355:28;;:::i;:::-;9414:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;9393:33:32;;::::1;::::0;;9436:30;;::::1;:18;::::0;;::::1;:30:::0;;;;9476:22;;::::1;:14;::::0;;::::1;:22:::0;;;;9508:12:::1;::::0;::::1;:18:::0;;;9536:17:::1;::::0;::::1;:28:::0;;;9574;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;;;9594:8;;;;;;9574:28;::::1;9594:8:::0;;;;9574:28;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;;;;9574:17:32::1;::::0;::::1;:28:::0;9620:27:::1;9574:8:::0;9620:17:::1;:27::i;:::-;9613:34;;;;;9044:610:::0;;;;;;;;;:::o;547:143:15:-;602:6;598:86;;;624:8;:6;:8::i;:::-;598:86;;;663:10;:8;:10::i;:::-;547:143;:::o;10463:1027:32:-;10573:19;10841:14;;;:9;:14;;;;;10573:19;;;;;;10730:23;;;;10573:19;10882:23;:14;;;:21;:23::i;:::-;10930:19;;;-1:-1:-1;10865:40:32;-1:-1:-1;10967:16:32;10959:51;;;;;-1:-1:-1;;;10959:51:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;11038:23;;;;11096:30;;;;11160:29;;;;11038:23;;-1:-1:-1;11096:30:32;-1:-1:-1;;;;;;11160:29:32;;-1:-1:-1;11223:6:32;11209:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11209:21:32;;11200:30;;11263:6;11249:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11249:21:32;;11240:30;;11285:9;11280:204;11304:6;11300:1;:10;11280:204;;;11332:13;;11364:20;:14;;;11382:1;11364:17;:20::i;:::-;11331:53;;;;11426:5;11418:14;;11398:6;11405:1;11398:9;;;;;;;;;;;;;:35;-1:-1:-1;;;;;11398:35:32;;;-1:-1:-1;;;;;11398:35:32;;;;;11467:5;11459:14;;11447:6;11454:1;11447:9;;;;;;;;;;;;;;;;;:26;-1:-1:-1;;11312:3:32;;11280:204;;;;10463:1027;;;;;;;;;:::o;696:255:15:-;869:75;880:3;885:11;898:22;922:21;869:10;:75::i;:::-;696:255;;;;:::o;4169:114:32:-;988:10:6;;980:50;;;;;-1:-1:-1;;;980:50:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;4225:31:32::1;4243:12;:10;:12::i;:::-;4225:17;:31::i;:::-;4266:10;:8;:10::i;:::-;4169:114::o:0;957:299:15:-;1097:23;1123:9;:14;1133:3;1123:14;;;;;;;;;;;1097:40;;1147:31;1181:7;:14;;1147:48;;1205:44;1221:11;1234:6;;1205:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1205:44:15;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1242:6:15;;-1:-1:-1;1242:6:15;;;;1205:44;;;1242:6;;1205:44;1242:6;1205:44;;;;;;;;;-1:-1:-1;1205:15:15;;-1:-1:-1;;;1205:44:15:i;:::-;957:299;;;;;;;:::o;1698:98:32:-;1751:44;1698:98;:::o;482:18:5:-;;;;;;:::o;5032:943:32:-;5176:31;5194:12;:10;:12::i;5176:31::-;5234:13;;5275;;5265:23;;5257:61;;;;;-1:-1:-1;;;5257:61:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;5328:23;5354:14;;;:9;:14;;;;;5386:19;;5378:59;;;;;-1:-1:-1;;;5378:59:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;5482:14;;;5510:11;5506:410;;5537:21;5561:20;:11;:18;:20::i;:::-;5537:44;;5600:9;5595:236;5619:13;5615:1;:17;5595:236;;;5737:13;5756:17;:11;5737:13;5756:14;:17::i;:::-;-1:-1:-1;5736:37:32;-1:-1:-1;5791:25:32;:11;5736:37;5791:18;:25::i;:::-;-1:-1:-1;;5634:3:32;;5595:236;;;;5506:410;;;;5861:44;5877:11;5890:6;5898;5861:15;:44::i;:::-;5948:3;5931:37;5953:6;5961;5931:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5032:943;;;;;;:::o;11621:110::-;11672:21;11712:5;:12;;11705:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11621:110;:::o;660:263:8:-;733:31;751:12;:10;:12::i;733:31::-;-1:-1:-1;;;;;782:27:8;;774:60;;;;;-1:-1:-1;;;774:60:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;844:12;:28;;-1:-1:-1;;844:28:8;-1:-1:-1;;;;;844:28:8;;;;;;;;;;;887:29;;;903:12;;;;887:29;;;;;;;;;;;;;660:263;:::o;3787:110:32:-;988:10:6;;980:50;;;;;-1:-1:-1;;;980:50:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;3841:31:32::1;3859:12;:10;:12::i;3841:31::-;3882:8;:6;:8::i;379:35:8:-:0;;;-1:-1:-1;;;;;379:35:8;;:::o;1114:94:1:-;1169:7;1195:6;-1:-1:-1;;;;;1195:6:1;1114:94;:::o;2553:643:15:-;2887:32;2922:229;2952:9;2975:5;2994:3;3011:8;3033;;2922:229;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3055:10;3079:11;;2922:229;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3104:11;;2922:229;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3129:12;;2922:229;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2922:16:15;;-1:-1:-1;;;2922:229:15:i;:::-;2887:264;;3162:27;3176:12;3162:13;:27::i;:::-;2553:643;;;;;;;;;;;;;;:::o;1262:644::-;1599:32;1634:229;1664:9;1687:5;1706:3;1723:8;1745;;1634:229;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1767:10;1791:11;;1634:229;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1816:11;;1634:229;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1841:12;;1634:229;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1634:16:15;;-1:-1:-1;;;1634:229:15:i;:::-;1599:264;;1874:25;1886:12;1874:11;:25::i;1802:69:32:-;-1:-1:-1;;1802:69:32;:::o;6962:537::-;988:10:6;;980:50;;;;;-1:-1:-1;;;980:50:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;7183:19:32::1;:17;:19::i;:::-;7212:28;;:::i;:::-;7271:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;7250:33:32;;::::1;::::0;;7293:30;;::::1;:18;::::0;;::::1;:30:::0;;;;7333:22;;::::1;:14;::::0;;::::1;:22:::0;;;;7365:12:::1;::::0;::::1;:18:::0;;;7393:17:::1;::::0;::::1;:28:::0;;;7431;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;;;7451:8;;;;;;7431:28;::::1;7451:8:::0;;;;7431:28;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;;;;7431:17:32::1;::::0;::::1;:28:::0;7470:22:::1;7431:8:::0;7470:12:::1;:22::i;1912:635:15:-:0;2242:32;2277:229;2307:9;2330:5;2349:3;2366:8;2388;;2277:229;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2410:10;2434:11;;2277:229;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2459:11;;2277:229;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2484:12;;2277:229;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2277:16:15;;-1:-1:-1;;;2277:229:15:i;:::-;2242:264;;2517:23;2527:12;2517:9;:23::i;3396:118:32:-;3438:31;3456:12;:10;:12::i;3438:31::-;3479:8;:6;:8::i;1276:85:6:-;1344:10;;1276:85;:::o;1448:197:1:-;1527:31;1545:12;:10;:12::i;1527:31::-;1568:6;:17;;-1:-1:-1;;1568:17:1;-1:-1:-1;;;;;1568:17:1;;;;;;;;;1600:38;;1568:17;;1621:6;;;1600:38;;1568:6;1600:38;1448:197;:::o;572:96:5:-;634:6;;;;633:7;625:36;;;;;-1:-1:-1;;;625:36:5;;;;;;;;;;;;;;;;;;;;;;;;;;;355:104:7;442:10;355:104;:::o;882:291:30:-;970:18;990:28;1030:21;1042:8;1030:11;:21::i;:::-;1061:18;1070:8;1061;:18::i;:::-;-1:-1:-1;;1103:19:30;;;;1146:20;;;;;1103:19;;882:291::o;905:129:5:-;950:19;:17;:19::i;:::-;979:6;:13;;-1:-1:-1;;979:13:5;988:4;979:13;;;1007:20;1014:12;:10;:12::i;:::-;1007:20;;;-1:-1:-1;;;;;1007:20:5;;;;;;;;;;;;;;905:129::o;1166:131::-;1213:16;:14;:16::i;:::-;1239:6;:14;;-1:-1:-1;;1239:14:5;;;1268:22;1277:12;:10;:12::i;4367:107:2:-;4449:18;;4367:107::o;4827:264::-;4930:18;;4894:7;;;;4930:26;-1:-1:-1;4922:67:2;;;;;-1:-1:-1;;;4922:67:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;5000:22;5025:3;:11;;5037:5;5025:18;;;;;;;;;;;;;;;;;;5000:43;;5061:5;:9;;;5072:5;:11;;;5053:31;;;;;4827:264;;;;;:::o;12511:877:32:-;12701:16;12693:46;;;;;-1:-1:-1;;;12693:46:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;12774:13;12757:14;:5;:12;:14::i;:::-;:30;12749:62;;;;;-1:-1:-1;;;12749:62:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;12829:14;:5;12839:3;12829:9;:14::i;:::-;12821:52;;;;;-1:-1:-1;;;12821:52:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12887:35:32;;;12883:140;;12946:34;:21;-1:-1:-1;;;;;12946:32:32;;:34::i;:::-;12938:74;;;;;-1:-1:-1;;;12938:74:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;13032:23;13058:14;;;:9;:14;;;;;;;;;13082:33;;;13125:23;;;:37;;;13172:30;;;:55;;;13237:29;;;:53;;-1:-1:-1;;;;;13237:53:32;;-1:-1:-1;;13237:53:32;;;;;;;;13305:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12511:877;;;;;:::o;1770:136:1:-;1860:4;-1:-1:-1;;;;;1860:10:1;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1860:12:1;-1:-1:-1;;;;;1849:23:1;;;;;;1841:58;;;;;-1:-1:-1;;;1841:58:1;;;;;;;;;;;;;;;;;;;;;;;;;;;13862:663:32;14032:9;14027:403;14051:6;:13;14047:1;:17;14027:403;;;14085:13;14101:6;14108:1;14101:9;;;;;;;;;;;;;;14085:25;;14149:1;-1:-1:-1;;;;;14132:19:32;:5;-1:-1:-1;;;;;14132:19:32;;;14124:56;;;;;-1:-1:-1;;;14124:56:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;14194:13;14210:6;14217:1;14210:9;;;;;;;;;;;;;;14194:25;;14237:5;14246:1;14237:10;14233:187;;;14267:43;:11;-1:-1:-1;;;;;14294:14:32;;14267:18;:43::i;:::-;;14233:187;;;14349:56;:11;-1:-1:-1;;;;;14373:14:32;;14398:5;14349:15;:56::i;:::-;;14233:187;-1:-1:-1;;14066:3:32;;14027:403;;;;14471:21;14447:20;:11;:18;:20::i;:::-;:45;;14439:79;;;;;-1:-1:-1;;;14439:79:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;13862:663;;;:::o;2556:1520:2:-;2620:4;2753:16;;;:11;;;:16;;;;;;2784:13;;2780:1290;;3221:18;;-1:-1:-1;;3175:12:2;;;;3221:22;;;;3151:21;;3221:3;;:22;;3512;;;;;;;;;;;;;;;;3483:51;;3655:9;3626:3;:11;;3638:13;3626:26;;;;;;;;;;;;;;;;:38;;:26;;;;;:38;;;;;;;;;;;;;;;3742:13;;3730:26;;:11;;;:26;;;;;3759:17;;;3730:46;;3882:17;;3730:3;;3882:17;;;;;;;;;;;;;;-1:-1:-1;;3882:17:2;;;;;;;;;;;;;;;;;;;;;3974:16;;;:11;;;:16;;;;;;3967:23;;;;3882:17;-1:-1:-1;4005:11:2;;-1:-1:-1;;;;4005:11:2;2780:1290;4054:5;4047:12;;;2556:1520;;;;;:::o;3639:766:15:-;3973:28;;:::i;:::-;4034:12;:10;:12::i;:::-;-1:-1:-1;;;;;4013:33:15;;;;;4056:30;;;:18;;;:30;4096:22;;;;:14;;;:22;4128:12;;;:18;;;;4156:17;;;:28;;;;4194:17;;;:28;;;;4232:19;;;:32;4274:20;;;:34;4318:20;;;:34;4362:21;;;:36;;;;4013:8;3639:766::o;17993:1293:32:-;18201:8;:12;;;18173:8;:14;;;-1:-1:-1;;;;;18087:328:32;18109:8;:18;;;-1:-1:-1;;;;;18087:328:32;;18141:8;:18;;;18227:8;:17;;;18258:8;:17;;;18289:8;:19;;;18339:8;:20;;;18361:8;:20;;;18383:8;:21;;;18322:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18087:328;;;;-1:-1:-1;;;;;18087:328:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18087:328:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18468:12;;;;18426:29;18458:23;;;:9;:23;;;;;:45;;;-1:-1:-1;;;;;18458:45:32;18517:35;;18513:767;;19095:82;;;18593:584;;;18624:21;-1:-1:-1;;;;;18593:84:32;;18699:8;:18;;;18739:8;:18;;;18779:8;:14;;;18815:8;:12;;;18849:8;:17;;;18888:8;:17;;;18927:8;:19;;;18968:8;:20;;;19010:8;:20;;;19052:8;:21;;;18593:498;;;;;;;;;;;;;-1:-1:-1;;;;;18593:498:32;;;;;;-1:-1:-1;;;;;18593:498:32;;;;;;-1:-1:-1;;;;;18593:498:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18593:498:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18593:498:32;:584;;;18568:701;;;;;-1:-1:-1;;;18568:701:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;17993:1293;;:::o;15465:852::-;15565:18;;;;-1:-1:-1;;;;;15565:32:32;15557:73;;;;;-1:-1:-1;;;15557:73:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;15648:14;;;;-1:-1:-1;;;;;15648:28:32;15640:65;;;;;-1:-1:-1;;;15640:65:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;15723:17;;;;15715:63;;;;;-1:-1:-1;;;15715:63:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;15824:12;;;;15788:23;15814;;;:9;:23;;;;;15855:19;;15847:59;;;;;-1:-1:-1;;;15847:59:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;15958:8;:17;;;15924:7;:30;;;:51;;15916:88;;;;;-1:-1:-1;;;15916:88:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;16018:19;;-1:-1:-1;;16018:39:32;16014:152;;16108:8;:17;;;16081:7;:23;;;:44;;16073:82;;;;;-1:-1:-1;;;16073:82:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;16210:14;;;;-1:-1:-1;;;;;16202:23:32;16244:33;:14;;;16202:23;16244;:33::i;:::-;16236:74;;;;;-1:-1:-1;;;16236:74:32;;;;;;;;;;;;;;;;;;;;;;;;;;;1275:225:30;1354:21;1366:8;1354:11;:21::i;:::-;1385:18;1394:8;1385;:18::i;:::-;1413;1422:8;1413;:18::i;:::-;1441:19;1451:8;1441:9;:19::i;:::-;1470:23;1484:8;1470:13;:23::i;16954:308:32:-;17075:12;;;;17039:23;17065;;;:9;:23;;;;;17102:19;;-1:-1:-1;;17102:39:32;17098:158;;17227:17;;;;17199:23;;;;:46;;:27;:46::i;:::-;17167:12;;;;17157:23;;;;:9;:23;;;;;:39;;:88;16954:308;;:::o;1496:131:6:-;789:10;;:15;781:46;;;;;-1:-1:-1;;;781:46:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;1569:15:::1;1556:10;:28:::0;1599:21:::1;1607:12;:10;:12::i;3202:339:15:-:0;3319:12;;;;3283:23;3309;;;:9;:23;;;;;;3372:14;;;;3309:23;;-1:-1:-1;;;;;3364:23:15;;;;3414;:14;;;3364:23;3414:18;:23::i;:::-;3509:17;;;;:25;3487:19;;;;:47;;;;-1:-1:-1;;;3202:339:15:o;674:96:5:-;732:6;;;;724:39;;;;;-1:-1:-1;;;724:39:5;;;;;;;;;;;;;;;;;;;;;;;;;;;1481:400:3;1544:4;1565:20;1574:3;1579:5;1565:8;:20::i;:::-;1560:315;;-1:-1:-1;1601:22:3;;;;;;;;:10;:22;;;;;;;;;;;;;1779:17;;1758:18;;;:11;;;:18;;;;;;:38;;;;1810:11;;1560:315;-1:-1:-1;1859:5:3;1852:12;;913:377:10;1229:20;1275:8;;;913:377::o;1678:710:2:-;1784:4;1917:16;;;:11;;;:16;;;;;;1948:13;1944:438;;-1:-1:-1;;2043:34:2;;;;;;;;;;;;;;;;;;2026:52;;;;;;;;:11;:52;;;;;;;;;;;;;;;;;;;;;;;;2232:18;;2213:16;;;:11;;;:16;;;;;;;:37;2264:11;;1944:438;2340:5;2306:3;:11;;2329:1;2318:8;:12;2306:25;;;;;;;;;;;;;;;;;;:31;;:39;;;;2366:5;2359:12;;;1678:710;;;;;;:::o;4155:122::-;4226:4;4249:16;;;:11;;;;;:16;;;;;;:21;;;4155:122::o;3136:155:11:-;3194:7;3226:1;3221;:6;;3213:49;;;;;-1:-1:-1;;;3213:49:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3279:5:11;;;3136:155::o;5243:298:2:-;5309:7;5347:16;;;:11;;;:16;;;;;;5381:13;5373:50;;;;;-1:-1:-1;;;5373:50:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;5476:3;:11;;5499:1;5488:8;:12;5476:25;;;;;;;;;;;;;;;;;;:31;;;5469:38;;;5243:298;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o"},"methodIdentifiers":{"SUPPLY_UNLIMITED()":"9e049545","TOKEN_ETH()":"5c4fafc7","createSku(bytes32,uint256,uint256,address)":"2c87927b","delivery(address,address,bytes32,uint256,bytes,uint256,bytes32[],bytes32[],bytes32[])":"bb955d78","estimatePurchase(address,address,bytes32,uint256,bytes)":"1323b066","getSkuInfo(bytes32)":"2a8a45bc","getSkus()":"61bd3851","notification(address,address,bytes32,uint256,bytes,uint256,bytes32[],bytes32[],bytes32[])":"9674ab1e","owner()":"8da5cb5b","pause()":"8456cb59","paused()":"5c975abb","payoutWallet()":"8488bb4e","purchaseFor(address,address,bytes32,uint256,bytes)":"a963b257","setPaused(bool)":"16c38b3c","setPayoutWallet(address)":"6b8f9c43","setTokenPrices(bytes32,address[],uint256[])":"460b7e84","start()":"be9a6555","startedAt()":"f21f537d","transferOwnership(address)":"f2fde38b","unpause()":"3f4ba83a","updateSkuPricing(bytes32,address[],uint256[])":"5e6e9f70","validation(address,address,bytes32,uint256,bytes,uint256,bytes32[],bytes32[],bytes32[])":"9bbeb124"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"payoutWallet_\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"skusCapacity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensPerSkuCapacity\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32[]\",\"name\":\"names\",\"type\":\"bytes32[]\"},{\"indexed\":false,\"internalType\":\"bytes32[]\",\"name\":\"values\",\"type\":\"bytes32[]\"}],\"name\":\"MagicValues\",\"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\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"payoutWallet_\",\"type\":\"address\"}],\"name\":\"PayoutWalletSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"purchaser\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalPrice\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extData\",\"type\":\"bytes\"}],\"name\":\"Purchase\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"PurchaseForCalled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"maxQuantityPerPurchase\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"notificationsReceiver\",\"type\":\"address\"}],\"name\":\"SkuCreation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"prices\",\"type\":\"uint256[]\"}],\"name\":\"SkuPricingUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Started\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"SUPPLY_UNLIMITED\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TOKEN_ETH\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxQuantityPerPurchase\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"notificationsReceiver\",\"type\":\"address\"}],\"name\":\"createSku\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"totalPrice\",\"type\":\"uint256\"},{\"internalType\":\"bytes32[]\",\"name\":\"pricingData\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"paymentData\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"deliveryData\",\"type\":\"bytes32[]\"}],\"name\":\"delivery\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"estimatePurchase\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalPrice\",\"type\":\"uint256\"},{\"internalType\":\"bytes32[]\",\"name\":\"pricingData\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"}],\"name\":\"getSkuInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"remainingSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxQuantityPerPurchase\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"notificationsReceiver\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"prices\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSkus\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"skus\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"totalPrice\",\"type\":\"uint256\"},{\"internalType\":\"bytes32[]\",\"name\":\"pricingData\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"paymentData\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"deliveryData\",\"type\":\"bytes32[]\"}],\"name\":\"notification\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"payoutWallet\",\"outputs\":[{\"internalType\":\"address payable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"purchaseFor\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"setPaused\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"payoutWallet_\",\"type\":\"address\"}],\"name\":\"setPayoutWallet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"prices\",\"type\":\"uint256[]\"}],\"name\":\"setTokenPrices\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"start\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"prices\",\"type\":\"uint256[]\"}],\"name\":\"updateSkuPricing\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"totalPrice\",\"type\":\"uint256\"},{\"internalType\":\"bytes32[]\",\"name\":\"pricingData\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"paymentData\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"deliveryData\",\"type\":\"bytes32[]\"}],\"name\":\"validation\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"estimatePurchase(address,address,bytes32,uint256,bytes)\":{\"details\":\"This function MUST compute the same price as `purchaseFor` would in identical conditions (same arguments, same point in time).If an implementer contract uses the `pricingData` field, it SHOULD document how to interpret the values.Reverts if the sale has not started.Reverts if the sale is paused.Reverts if `recipient` is the zero address.Reverts if `token` is the zero address.Reverts if `quantity` is zero.Reverts if `quantity` is greater than the maximum purchase quantity.Reverts if `quantity` is greater than the remaining supply.Reverts if `sku` does not exist.Reverts if `sku` exists but does not have a price set for `token`.\",\"params\":{\"quantity\":\"The quantity used to calculate the total price amount.\",\"recipient\":\"The recipient of the purchase used to calculate the total price amount.\",\"sku\":\"The identifier of the SKU used to calculate the total price amount.\",\"token\":\"The payment token used to calculate the total price amount.\",\"userData\":\"Optional extra user input data.\"},\"returns\":{\"pricingData\":\"Implementation-specific extra pricing data, such as details about discounts applied.  If not empty, the implementer MUST document how to interepret the values.\",\"totalPrice\":\"The computed total price.\"}},\"getSkuInfo(bytes32)\":{\"details\":\"WARNING: it is the responsibility of the implementer to ensure that the number of payment tokens is bounded, so that this function does not run out of gas.Reverts if `sku` does not exist.\",\"params\":{\"sku\":\"The SKU identifier.\"},\"returns\":{\"maxQuantityPerPurchase\":\"The maximum allowed quantity for a single purchase.\",\"notificationsReceiver\":\"The address of a contract on which to call the `onPurchaseNotificationReceived` function.\",\"prices\":\"The list of associated prices for each of the `tokens`.\",\"remainingSupply\":\"The remaining supply for sale.\",\"tokens\":\"The list of supported payment tokens.\",\"totalSupply\":\"The initial total supply for sale.\"}},\"getSkus()\":{\"returns\":{\"skus\":\"the list of created SKU identifiers.\"}},\"pause()\":{\"details\":\"Emits the `Paused` event.Reverts if called by any other than the contract owner.Reverts if the contract has not been started yet.Reverts if the contract is already paused.\"},\"purchaseFor(address,address,bytes32,uint256,bytes)\":{\"details\":\"Reverts if the sale has not started.Reverts if the sale is paused.Reverts if `recipient` is the zero address.Reverts if `token` is the zero address.Reverts if `quantity` is zero.Reverts if `quantity` is greater than the maximum purchase quantity.Reverts if `quantity` is greater than the remaining supply.Reverts if `sku` does not exist.Reverts if `sku` exists but does not have a price set for `token`.Emits the Purchase event.\",\"params\":{\"quantity\":\"The quantity to purchase.\",\"recipient\":\"The recipient of the purchase.\",\"sku\":\"The identifier of the SKU to purchase.\",\"token\":\"The token to use as the payment currency.\",\"userData\":\"Optional extra user input data.\"}},\"start()\":{\"details\":\"Emits the `Started` event.Emits the `Unpaused` event.Reverts if called by any other than the contract owner.Reverts if the contract has already been started.Reverts if the contract is not paused.\"},\"startedAt()\":{\"returns\":{\"_0\":\"The timestamp when the contract entered the started state.\"}},\"transferOwnership(address)\":{\"details\":\"Reverts if the sender is not the current contract owner.\",\"params\":{\"newOwner\":\"the address of the new owner. Use the zero address to renounce the ownership.\"}},\"unpause()\":{\"details\":\"Emits the `Unpaused` event.Reverts if called by any other than the contract owner.Reverts if the contract has not been started yet.Reverts if the contract is not paused.\"},\"updateSkuPricing(bytes32,address[],uint256[])\":{\"details\":\"Reverts if called by any other than the contract owner.Reverts if `tokens` and `prices` have different lengths.Reverts if `sku` does not exist.Reverts if one of the `tokens` is the zero address.Reverts if the update results in too many tokens for the SKU.Emits the `SkuPricingUpdate` event.\",\"params\":{\"prices\":\"The list of prices to apply for each payment token.  Zero price values are used to disable a payment token.\",\"sku\":\"The identifier of the SKU.\",\"tokens\":\"The list of payment tokens to update.  If empty, disable all the existing payment tokens.\"}}},\"version\":1},\"userdoc\":{\"events\":{\"MagicValues(bytes32[],bytes32[])\":{\"notice\":\"Event emitted to notify about the magic values necessary for interfacing with this contract.\"},\"OwnershipTransferred(address,address)\":{\"notice\":\"Event emited when ownership of a contract changes.\"},\"Purchase(address,address,address,bytes32,uint256,bytes,uint256,bytes)\":{\"notice\":\"Event emitted to notify about a purchase.\"},\"SkuCreation(bytes32,uint256,uint256,address)\":{\"notice\":\"Event emitted to notify about the creation of a SKU.\"},\"SkuPricingUpdate(bytes32,address[],uint256[])\":{\"notice\":\"Event emitted to notify about a change in the pricing of a SKU.\"}},\"kind\":\"user\",\"methods\":{\"SUPPLY_UNLIMITED()\":{\"notice\":\"Returns the magic value used to represent an infinite, never-decreasing SKU's supply.\"},\"TOKEN_ETH()\":{\"notice\":\"Returns the magic value used to represent the ETH payment token.\"},\"estimatePurchase(address,address,bytes32,uint256,bytes)\":{\"notice\":\"Estimates the computed final total amount to pay for a purchase, including any potential discount.\"},\"getSkuInfo(bytes32)\":{\"notice\":\"Returns the information relative to a SKU.\"},\"getSkus()\":{\"notice\":\"Returns the list of created SKU identifiers.\"},\"owner()\":{\"notice\":\"Gets the address of the current contract owner.\"},\"pause()\":{\"notice\":\"Pauses the contract.\"},\"purchaseFor(address,address,bytes32,uint256,bytes)\":{\"notice\":\"Performs a purchase.\"},\"start()\":{\"notice\":\"Actvates, or 'starts', the contract.\"},\"startedAt()\":{\"notice\":\"Returns the timestamp when the contract entered the started state.\"},\"transferOwnership(address)\":{\"notice\":\"See {IERC173-transferOwnership(address)}\"},\"unpause()\":{\"notice\":\"Resumes the contract.\"},\"updateSkuPricing(bytes32,address[],uint256[])\":{\"notice\":\"Sets the token prices for the specified product SKU.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/mocks/sale/SaleMock.sol\":\"SaleMock\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":2000},\"remappings\":[]},\"sources\":{\"@animoca/ethereum-contracts-core-1.1.2/contracts/access/IERC173.sol\":{\"keccak256\":\"0xeb8a2c766577e782ad66ce8591a8d206b0f37b657754cc7a43beeb2d9343873b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3b404032cb4e21bae47b5e9af1290e41117040b10f69e3b2f93522b97e329b59\",\"dweb:/ipfs/QmRJHYkkvWcXGuFJdbqV18yh9QUk5g4zETrrxD2HnU3iRw\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/access/Ownable.sol\":{\"keccak256\":\"0xbfd1129669bb7c154ee84b3aa1484e421ca68cb725c1039a897629631fd8b096\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://edc634aeae7272726745b1cbbf116dfdde51833b71a143e94fe7de89e9b14566\",\"dweb:/ipfs/QmXtXckxdFM3VeLvsjMWhqt44WAf7XKVYKt9bUT7pyWbjH\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/algo/EnumMap.sol\":{\"keccak256\":\"0x12716c299c0965f4f87c2792cda2bd6029ba629c1172cdfef08d95cb2d7c283f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8d17c9bcb9bb0b9f399f6366f85b4db981df6e319f90b1b84910d6c44a79d032\",\"dweb:/ipfs/QmcqU3Gj8BP88yRV571GyCcW2UAjxq2xiqRofXFKYzkRXT\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/algo/EnumSet.sol\":{\"keccak256\":\"0x0aaea4634a7c64ef61b1ee8380912084427b45b6b4fc254b76d4b78e39f92d35\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://356a344f770d238dd864e8530d2ee05e350f269346cdf02432bc767e90520ce1\",\"dweb:/ipfs/QmfQfasYUY69X4wnzizPqT8P24YZTAPQGgFQErsSzV5sva\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/lifecycle/Pausable.sol\":{\"keccak256\":\"0xaa32d2e66a8edb68c64ffab1db69925248cf3f774c40b062e1e8ff2f4d5eebed\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://37451b151d862be6413ee1d18e3500a9100128f09926a2260d0ea058c3148d8a\",\"dweb:/ipfs/QmNLsaNioeA4LK8fVpqvSkQrCob1DkENcqQUurqDQbQK3G\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/lifecycle/Startable.sol\":{\"keccak256\":\"0x87e273577d4716cbbb325f03ec91207e1022bb7f56cdcda56593c603d2b4592f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d305d7c885971e1b82a363b4c9237c4201390610621a67605b89694ca9680e35\",\"dweb:/ipfs/QmWZX1cEfsfQSoEjBgBaBn3rKJxfyaJMpJyofpM9LG4tEp\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/metatx/ManagedIdentity.sol\":{\"keccak256\":\"0xe544b34375f19f9d1ad6e309f2fc56849263cc3c3c77009f6b38782f7dea9971\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3eb04bbf1c13ca82971c1cb2fdd96a23e2dfaa5df6a7d3b7e773dd3a760cf4e4\",\"dweb:/ipfs/QmXArzbKQgsMebfYVSQtaCLAs3rp3FYp6MKjSQnZoGDnjf\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/payment/PayoutWallet.sol\":{\"keccak256\":\"0x45ef7f68177cb61463f0ac759782f490821917fac3a71a18263c38193a9c6229\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://67839b4cc5897d723099ebfd8e0593e809b02cf422056efc1497f88dd7abb415\",\"dweb:/ipfs/QmYFRXvggoT8RzWB7SSJmfaBY3xkoVYNaGotTLBxjXqqxx\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/utils/types/AddressIsContract.sol\":{\"keccak256\":\"0x08373f750eedc1226b22b8ab1e156b0689c463590fa7dc40e99329b2da7b5d47\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fac8cdd7be4a83b47b18c8a48c1b1779a2590118049734665a6de91e77f27d35\",\"dweb:/ipfs/QmcAobvMpD5TisPTQSihPhywmVbPv1jDhffJCaZptM7YLv\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0xcc78a17dd88fa5a2edc60c8489e2f405c0913b377216a5b26b35656b2d0dab52\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://526dc85e1f9b9b45830e202568d267d93dde7a4fcccf4ad7798dadcd92304d3c\",\"dweb:/ipfs/QmaoXMB972J3cSDLtBq3xBo4jLwqD2uzXTwujtSPqkYVhR\"]},\"contracts/mocks/sale/SaleMock.sol\":{\"keccak256\":\"0x98abc8a1bd36255f63d34c42687450762a2da7b5781ca4b7db138185d2dd842e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://faa504dcf1808421dfc974ad0eac1b32bb498392301bfd9215b9bd4f7a782f51\",\"dweb:/ipfs/QmYUmqXwbm6L47DyEt5C6m9VMiEBxQVEZikgABmGxFTyaX\"]},\"contracts/sale/abstract/PurchaseLifeCycles.sol\":{\"keccak256\":\"0xaa18c1de5628dbd5ff281f06354b0156cb8bd24a6f5b490a787931c374266f6a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2e0731a0100fc1bda747176f169cacc5d61d89df1c78884d8843a834d58f7dcd\",\"dweb:/ipfs/QmZRDAxcvQ9QySqnmQLVM1i797NCqSJrJjKUneEmTufXBQ\"]},\"contracts/sale/abstract/Sale.sol\":{\"keccak256\":\"0x32dd01f3ca07c26e834f5784b4f2434c9cf309e3e30b2421a26da16ccf5d0e26\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://009418ea08f714b3f536d09e04d65ec39d3a4e9ba33e554ac8a26036cff8335b\",\"dweb:/ipfs/QmQvMXpCaaAwtHE4qxXYn2rxPgPzqzJM6aGuyz4nut5CH5\"]},\"contracts/sale/interfaces/IPurchaseNotificationsReceiver.sol\":{\"keccak256\":\"0xa85dcec80f528757a52dd66f88ae14845477e3ec733cb4d22af6db71d19e90f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://36e14e08666d5fd2af5b78848a84a11c666c65c94ca46f88e896c041da1dc1c7\",\"dweb:/ipfs/QmYiHM2DBVuX4adJfJMSvdrdfmDooHxhwGtmhNP7k2DY9n\"]},\"contracts/sale/interfaces/ISale.sol\":{\"keccak256\":\"0x0d731f242662465b2aa3ea9fe3581d0e77e3f61601390f68e4c9c75fc2103f5f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2a04d527397a7f75bd1d701fa7af263cb0799ef4d2f32dc44bb6c9598cee3625\",\"dweb:/ipfs/QmRnsakvvkU1yJyviEM8eytdCTUvjqsw1aqzdntycoG2aV\"]}},\"version\":1}"}},"contracts/mocks/sale/UniswapOracleSaleMock.sol":{"UniswapOracleSaleMock":{"abi":[{"inputs":[{"internalType":"address payable","name":"payoutWallet_","type":"address"},{"internalType":"uint256","name":"skusCapacity","type":"uint256"},{"internalType":"uint256","name":"tokensPerSkuCapacity","type":"uint256"},{"internalType":"address","name":"referenceToken","type":"address"},{"internalType":"contract IUniswapV2Router","name":"uniswapV2Router","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32[]","name":"names","type":"bytes32[]"},{"indexed":false,"internalType":"bytes32[]","name":"values","type":"bytes32[]"}],"name":"MagicValues","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":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"payoutWallet_","type":"address"}],"name":"PayoutWalletSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"purchaser","type":"address"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"bytes32","name":"sku","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"quantity","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"userData","type":"bytes"},{"indexed":false,"internalType":"uint256","name":"totalPrice","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"extData","type":"bytes"}],"name":"Purchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"sku","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxQuantityPerPurchase","type":"uint256"},{"indexed":false,"internalType":"address","name":"notificationsReceiver","type":"address"}],"name":"SkuCreation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"sku","type":"bytes32"},{"indexed":false,"internalType":"address[]","name":"tokens","type":"address[]"},{"indexed":false,"internalType":"uint256[]","name":"prices","type":"uint256[]"}],"name":"SkuPricingUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Started","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract IUniswapV2Router","name":"uniswapV2Router","type":"address"}],"name":"UniswapV2RouterSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"PRICE_CONVERT_VIA_ORACLE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SUPPLY_UNLIMITED","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOKEN_ETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"fromToken","type":"address"},{"internalType":"address","name":"toToken","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"callUnderscoreConversionRate","outputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"conversionRates","outputs":[{"internalType":"uint256[]","name":"rates","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"uint256","name":"maxQuantityPerPurchase","type":"uint256"},{"internalType":"address","name":"notificationsReceiver","type":"address"}],"name":"createSku","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"estimatePurchase","outputs":[{"internalType":"uint256","name":"totalPrice","type":"uint256"},{"internalType":"bytes32[]","name":"pricingData","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"}],"name":"getReserves","outputs":[{"internalType":"uint256","name":"reserveA","type":"uint256"},{"internalType":"uint256","name":"reserveB","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"sku","type":"bytes32"}],"name":"getSkuInfo","outputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"uint256","name":"remainingSupply","type":"uint256"},{"internalType":"uint256","name":"maxQuantityPerPurchase","type":"uint256"},{"internalType":"address","name":"notificationsReceiver","type":"address"},{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"prices","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSkus","outputs":[{"internalType":"bytes32[]","name":"skus","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payoutWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"purchaseFor","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"referenceToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"payoutWallet_","type":"address"}],"name":"setPayoutWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"start","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"prices","type":"uint256[]"}],"name":"updateSkuPricing","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"60c06040523480156200001157600080fd5b50604051620037db380380620037db833981810160405260a08110156200003757600080fd5b50805160208201516040808401516060850151608090950151600080546001600160a01b031916339081178255935195969495929493919287928792879287928792839288928892889288928692869286928592859285926001929091869183918291907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001600160a01b0381166200011d576040805162461bcd60e51b815260206004820152601460248201527f5061796f75743a207a65726f2061646472657373000000000000000000000000604482015290519081900360640190fd5b600180546001600160a01b0383166001600160a01b0319909116811790915560408051918252517fdd880d24a789958a6398c99c2e54ce31bc10a638cbc42f7dd34285479ae0f8559181900360200190a150506003805460ff1916911515919091179055608082905260a081905260408051600280825260608201835260009260208301908036833750506040805160028082526060820183529394506000939092509060208301908036833750508351919250680a89e968a9cbe8aa8960bb1b9173eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee915084906000906200020257fe5b60200260200101836000815181106200021757fe5b602002602001018281525082815250505060001960001b6f14d55414131657d5539312535255115160821b90836001815181106200025157fe5b60200260200101836001815181106200026657fe5b6020026020010182815250828152505050600080516020620037bb8339815191528282604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015620002cf578181015183820152602001620002b5565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101562000310578181015183820152602001620002f6565b5050505090500194505050505060405180910390a15050600780546001600160a01b0319166001600160a01b03891617905550600094506001935084925062000357915050565b5060405190808252806020026020018201604052801562000382578160200160208202803683370190505b50604080516001808252818301909252919250600091906020808301908036833701905050905060001960001b7f50524943455f434f4e564552545f5649415f4f5241434c4500000000000000009083600081518110620003df57fe5b6020026020010183600081518110620003f457fe5b6020026020010182815250828152505050600080516020620037bb8339815191528282604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156200045d57818101518382015260200162000443565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156200049e57818101518382015260200162000484565b5050505090500194505050505060405180910390a1505050505050620004ca81620004db60201b60201c565b50505050505050505050506200052f565b600880546001600160a01b0383166001600160a01b0319909116811790915560408051918252517ffe70995e26c62b71bbd53a5b9e09215c42e2006fad72ba845051faa8de1510ba9181900360200190a150565b60805160a05161326862000553600039806121fa52508061157d52506132686000f3fe6080604052600436106101805760003560e01c80638456cb59116100d6578063a963b2571161007f578063d52bb6f411610059578063d52bb6f414610892578063f21f537d146108e6578063f2fde38b146108fb57610180565b8063a963b25714610719578063be9a6555146107ae578063c7b778db146107c357610180565b80639865bcc8116100b05780639865bcc81461065c5780639e0495451461065c578063a1e169081461068357610180565b80638456cb591461061d5780638488bb4e146106325780638da5cb5b1461064757610180565b80633f4ba83a116101385780635e6e9f70116101125780635e6e9f701461044a57806361bd3851146105855780636b8f9c43146105ea57610180565b80633f4ba83a146103f75780635c4fafc71461040c5780635c975abb1461042157610180565b80631694505e116101695780631694505e146102b35780632a8a45bc146102c85780632c87927b146103b057610180565b80631265b651146101855780631323b066146101b6575b600080fd5b34801561019157600080fd5b5061019a61092e565b604080516001600160a01b039092168252519081900360200190f35b3480156101c257600080fd5b50610258600480360360a08110156101d957600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a08101608082013564010000000081111561021957600080fd5b82018360208201111561022b57600080fd5b8035906020019184600183028401116401000000008311171561024d57600080fd5b50909250905061093d565b6040518083815260200180602001828103825283818151815260200191508051906020019060200280838360005b8381101561029e578181015183820152602001610286565b50505050905001935050505060405180910390f35b3480156102bf57600080fd5b5061019a610a32565b3480156102d457600080fd5b506102f2600480360360208110156102eb57600080fd5b5035610a41565b60405180878152602001868152602001858152602001846001600160a01b031681526020018060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561035757818101518382015260200161033f565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561039657818101518382015260200161037e565b505050509050019850505050505050505060405180910390f35b3480156103bc57600080fd5b506103f5600480360360808110156103d357600080fd5b50803590602081013590604081013590606001356001600160a01b0316610be6565b005b34801561040357600080fd5b506103f5610bf8565b34801561041857600080fd5b5061019a610c66565b34801561042d57600080fd5b50610436610c7e565b604080519115158252519081900360200190f35b34801561045657600080fd5b506103f56004803603606081101561046d57600080fd5b8135919081019060408101602082013564010000000081111561048f57600080fd5b8201836020820111156104a157600080fd5b803590602001918460208302840111640100000000831117156104c357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561051357600080fd5b82018360208201111561052557600080fd5b8035906020019184602083028401116401000000008311171561054757600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610c87945050505050565b34801561059157600080fd5b5061059a610e64565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156105d65781810151838201526020016105be565b505050509050019250505060405180910390f35b3480156105f657600080fd5b506103f56004803603602081101561060d57600080fd5b50356001600160a01b0316610ebf565b34801561062957600080fd5b506103f5610f8c565b34801561063e57600080fd5b5061019a610ff3565b34801561065357600080fd5b5061019a611002565b34801561066857600080fd5b50610671611011565b60408051918252519081900360200190f35b34801561068f57600080fd5b50610671600480360360608110156106a657600080fd5b6001600160a01b0382358116926020810135909116918101906060810160408201356401000000008111156106da57600080fd5b8201836020820111156106ec57600080fd5b8035906020019184600183028401116401000000008311171561070e57600080fd5b509092509050611017565b6103f5600480360360a081101561072f57600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a08101608082013564010000000081111561076f57600080fd5b82018360208201111561078157600080fd5b803590602001918460018302840111640100000000831117156107a357600080fd5b509092509050611063565b3480156107ba57600080fd5b506103f5611149565b3480156107cf57600080fd5b5061059a600480360360408110156107e657600080fd5b81019060208101813564010000000081111561080157600080fd5b82018360208201111561081357600080fd5b8035906020019184602083028401116401000000008311171561083557600080fd5b91939092909160208101903564010000000081111561085357600080fd5b82018360208201111561086557600080fd5b8035906020019184600183028401116401000000008311171561088757600080fd5b50909250905061115c565b34801561089e57600080fd5b506108cd600480360360408110156108b557600080fd5b506001600160a01b0381358116916020013516611248565b6040805192835260208301919091528051918290030190f35b3480156108f257600080fd5b506106716113a4565b34801561090757600080fd5b506103f56004803603602081101561091e57600080fd5b50356001600160a01b03166113aa565b6007546001600160a01b031681565b6000606060025460001415610999576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b6109a1611410565b6109a96131a0565b6109b1611468565b6001600160a01b03908116825289811660208084019190915290891660408084019190915260608301899052608083018890528051601f870183900483028101830190915285815290869086908190840183828082843760009201919091525050505060a0820152610a228161146c565b9250925050965096945050505050565b6008546001600160a01b031681565b6000818152600660205260408120819081908190606090819083610a6760048301611493565b82549850905087610abf576040805162461bcd60e51b815260206004820152601660248201527f53616c653a206e6f6e2d6578697374656e7420736b7500000000000000000000604482015290519081900360640190fd5b60018201546002830154600384015491985096506001600160a01b031694508067ffffffffffffffff81118015610af557600080fd5b50604051908082528060200260200182016040528015610b1f578160200160208202803683370190505b5093508067ffffffffffffffff81118015610b3957600080fd5b50604051908082528060200260200182016040528015610b63578160200160208202803683370190505b50925060005b81811015610bda57600080610b816004860184611497565b915091508160001c878481518110610b9557fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508060001c868481518110610bc557fe5b60209081029190910101525050600101610b69565b50505091939550919395565b610bf284848484611529565b50505050565b600254610c4c576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b610c5c610c57611468565b611760565b610c64611827565b565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b60035460ff1681565b610c92610c57611468565b815181518114610ce9576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20696e636f6e73697374656e742061727261797300000000000000604482015290519081900360640190fd5b60008481526006602052604090208054610d4a576040805162461bcd60e51b815260206004820152601660248201527f53616c653a206e6f6e2d6578697374656e7420736b7500000000000000000000604482015290519081900360640190fd5b6004810182610d95576000610d5e82611493565b905060005b81811015610d8e576000610d778482611497565b509050610d84848261187f565b5050600101610d63565b5050610da0565b610da081868661195f565b857fcb3fe5489e0cd43d0f4a33d1e09a4a0463a03d0d38f56165530854e5540db1438686604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015610e08578181015183820152602001610df0565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015610e47578181015183820152602001610e2f565b5050505090500194505050505060405180910390a2505050505050565b60606004600001805480602002602001604051908101604052809291908181526020018280548015610eb557602002820191906000526020600020905b815481526020019060010190808311610ea1575b5050505050905090565b610eca610c57611468565b6001600160a01b038116610f25576040805162461bcd60e51b815260206004820152601460248201527f5061796f75743a207a65726f2061646472657373000000000000000000000000604482015290519081900360640190fd5b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03838116919091179182905560408051929091168252517fdd880d24a789958a6398c99c2e54ce31bc10a638cbc42f7dd34285479ae0f855916020908290030190a150565b600254610fe0576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b610feb610c57611468565b610c646119e7565b6001546001600160a01b031681565b6000546001600160a01b031690565b60001981565b600061105a858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a2592505050565b95945050505050565b6002546110b7576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b6110bf611410565b6110c76131a0565b6110cf611468565b6001600160a01b03908116825287811660208084019190915290871660408084019190915260608301879052608083018690528051601f850183900483028101830190915283815290849084908190840183828082843760009201919091525050505060a082015261114081611ba3565b50505050505050565b611154610c57611468565b610c5c611bd0565b6060838067ffffffffffffffff8111801561117657600080fd5b506040519080825280602002602001820160405280156111a0578160200160208202803683370190505b50915060005b8181101561123e5761121f8787838181106111bd57fe5b905060200201356001600160a01b0316600760009054906101000a90046001600160a01b031687878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a2592505050565b83828151811061122b57fe5b60209081029190910101526001016111a6565b5050949350505050565b6000806001600160a01b03841673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14156112ed57600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156112be57600080fd5b505afa1580156112d2573d6000803e3d6000fd5b505050506040513d60208110156112e857600080fd5b505193505b6001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561138f57600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561136057600080fd5b505afa158015611374573d6000803e3d6000fd5b505050506040513d602081101561138a57600080fd5b505192505b6113998484611c52565b909590945092505050565b60025490565b6113b5610c57611468565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383811691821780845560405192939116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b60035460ff1615610c64576040805162461bcd60e51b815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b3390565b6000606061147983611d1e565b61148283611fc8565b505060c081015160e0909101519091565b5490565b8154600090819083106114f1576040805162461bcd60e51b815260206004820152601c60248201527f456e756d4d61703a20696e646578206f7574206f6620626f756e647300000000604482015290519081900360640190fd5b600084600001848154811061150257fe5b906000526020600020906002020190508060000154816001015492509250505b9250929050565b8261157b576040805162461bcd60e51b815260206004820152601160248201527f53616c653a207a65726f20737570706c79000000000000000000000000000000604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006115a66004611493565b106115f8576040805162461bcd60e51b815260206004820152601360248201527f53616c653a20746f6f206d616e7920736b757300000000000000000000000000604482015290519081900360640190fd5b61160360048561206a565b611654576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20736b7520616c7265616479206372656174656400000000000000604482015290519081900360640190fd5b6001600160a01b038116156116c657611675816001600160a01b03166120b4565b6116c6576040805162461bcd60e51b815260206004820152601b60248201527f53616c653a206e6f6e2d636f6e74726163742072656365697665720000000000604482015290519081900360640190fd5b60008481526006602090815260409182902085815560018101869055600281018590556003810180546001600160a01b03861673ffffffffffffffffffffffffffffffffffffffff1990911681179091558351888152928301879052828401869052606083015291517f38bd4aabce684540cd61351b91f2f5facf9d6963934347e25aab93d87ae7ac149181900360800190a15050505050565b306001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561179957600080fd5b505afa1580156117ad573d6000803e3d6000fd5b505050506040513d60208110156117c357600080fd5b50516001600160a01b03828116911614611824576040805162461bcd60e51b815260206004820152601660248201527f4f776e61626c653a206e6f7420746865206f776e657200000000000000000000604482015290519081900360640190fd5b50565b61182f6120ba565b6003805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611862611468565b604080516001600160a01b039092168252519081900360200190a1565b6000818152600183016020526040812054801561195357835460001980830191908101906000908790839081106118b257fe5b90600052602060002090600202019050808760000184815481106118d257fe5b60009182526020808320845460029093020191825560019384015491840191909155835482528983019052604090209084019055865487908061191157fe5b60008281526020808220600260001990940193840201828155600190810183905592909355888152898201909252604082209190915594506119599350505050565b60009150505b92915050565b61196a838383612111565b61197383611493565b158061199157506007546119919084906001600160a01b0316612275565b6119e2576040805162461bcd60e51b815260206004820152601860248201527f53616c653a206e6f207265666572656e636520746f6b656e0000000000000000604482015290519081900360640190fd5b505050565b6119ef611410565b6003805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611862611468565b60006001600160a01b03841673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415611ac957600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611a9a57600080fd5b505afa158015611aae573d6000803e3d6000fd5b505050506040513d6020811015611ac457600080fd5b505193505b6001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415611b6b57600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611b3c57600080fd5b505afa158015611b50573d6000803e3d6000fd5b505050506040513d6020811015611b6657600080fd5b505192505b600080611b788686611c52565b9092509050611b9982611b9383670de0b6b3a764000061228d565b906122ed565b9695505050505050565b611bac81611d1e565b611bb581611fc8565b611bbe81612354565b611bc7816124a3565b611824816124ef565b60025415611c25576040805162461bcd60e51b815260206004820152601260248201527f537461727461626c653a20737461727465640000000000000000000000000000604482015290519081900360640190fd5b426002557f27029695aa5f602a4ee81f4c32dfa86e562f200a17966496f3a7c3f2ec0f9417611862611468565b6000806000611c6185856129d4565b509050600080611c718787612ac1565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015611ca957600080fd5b505afa158015611cbd573d6000803e3d6000fd5b505050506040513d6060811015611cd357600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506001600160a01b0387811690841614611d0d578082611d10565b81815b909890975095505050505050565b60208101516001600160a01b0316611d7d576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a207a65726f206164647265737320726563697069656e7400000000604482015290519081900360640190fd5b60408101516001600160a01b0316611ddc576040805162461bcd60e51b815260206004820152601860248201527f53616c653a207a65726f206164647265737320746f6b656e0000000000000000604482015290519081900360640190fd5b6080810151611e32576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a207a65726f207175616e7469747920707572636861736500000000604482015290519081900360640190fd5b606081015160009081526006602052604090208054611e98576040805162461bcd60e51b815260206004820152601660248201527f53616c653a206e6f6e2d6578697374656e7420736b7500000000000000000000604482015290519081900360640190fd5b816080015181600201541015611ef5576040805162461bcd60e51b815260206004820152601860248201527f53616c653a2061626f7665206d6178207175616e746974790000000000000000604482015290519081900360640190fd5b805460001914611f5c57816080015181600101541015611f5c576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20696e73756666696369656e7420737570706c7900000000000000604482015290519081900360640190fd5b60408201516001600160a01b0316611f776004830182612275565b6119e2576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a206e6f6e2d6578697374656e7420736b7520746f6b656e00000000604482015290519081900360640190fd5b60608101516000908152600660205260409020805461202e576040805162461bcd60e51b815260206004820152601560248201527f53616c653a20756e737570706f7274656420534b550000000000000000000000604482015290519081900360640190fd5b60048101600061203e8483612c24565b905061204b848383612c94565b610bf257608084015161205f90829061228d565b60c085015250505050565b60006120768383612275565b6120ac57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611959565b506000611959565b3b151590565b60035460ff16610c64576040805162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604482015290519081900360640190fd5b60005b82518110156121f757600083828151811061212b57fe5b6020026020010151905060006001600160a01b0316816001600160a01b0316141561219d576040805162461bcd60e51b815260206004820152601860248201527f53616c653a207a65726f206164647265737320746f6b656e0000000000000000604482015290519081900360640190fd5b60008383815181106121ab57fe5b6020026020010151905080600014156121d7576121d1866001600160a01b03841661187f565b506121ed565b6121eb866001600160a01b03841683612d8c565b505b5050600101612114565b507f000000000000000000000000000000000000000000000000000000000000000061222284611493565b11156119e2576040805162461bcd60e51b815260206004820152601560248201527f53616c653a20746f6f206d616e7920746f6b656e730000000000000000000000604482015290519081900360640190fd5b60009081526001919091016020526040902054151590565b60008261229c57506000611959565b828202828482816122a957fe5b04146122e65760405162461bcd60e51b81526004018080602001828103825260218152602001806132126021913960400191505060405180910390fd5b9392505050565b6000808211612343576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161234c57fe5b049392505050565b60408101516001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415612477578060c001513410156123d6576040805162461bcd60e51b815260206004820152601660248201527f53616c653a20696e73756666696369656e742045544800000000000000000000604482015290519081900360640190fd5b60015460c08201516040516001600160a01b039092169181156108fc0291906000818181858888f19350505050158015612414573d6000803e3d6000fd5b50600061242e8260c0015134612e2390919063ffffffff16565b905080156124715781516040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561246f573d6000803e3d6000fd5b505b50611824565b611824612482611468565b60015460c084015160408501516001600160a01b0390811693921690612e80565b606081015160009081526006602052604090208054600019146124eb57608082015160018201546124d391612e23565b60608301516000908152600660205260409020600101555b5050565b806060015181604001516001600160a01b031682600001516001600160a01b03167f29f844483ca6b10b5c0611d039afc15ce8f6380e905307b381c3a8ee4e90e11e846020015185608001518660a001518760c001518860e001518961010001518a610120015160405160200180848051906020019060200280838360005b8381101561258657818101518382015260200161256e565b50505050905001838051906020019060200280838360005b838110156125b657818101518382015260200161259e565b50505050905001828051906020019060200280838360005b838110156125e65781810151838201526020016125ce565b50505050905001935050505060405160208183030381529060405260405180866001600160a01b031681526020018581526020018060200184815260200180602001838103835286818151815260200191508051906020019080838360005b8381101561265d578181015183820152602001612645565b50505050905090810190601f16801561268a5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b838110156126bd5781810151838201526020016126a5565b50505050905090810190601f1680156126ea5780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390a460608101516000908152600660205260409020600301546001600160a01b031680156124eb576361eceae860e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916816001600160a01b03166361eceae8846000015185602001518660400151876060015188608001518960a001518a60c001518b60e001518c61010001518d61012001516040518b63ffffffff1660e01b8152600401808b6001600160a01b031681526020018a6001600160a01b03168152602001896001600160a01b031681526020018881526020018781526020018060200186815260200180602001806020018060200185810385528a818151815260200191508051906020019080838360005b8381101561282357818101518382015260200161280b565b50505050905090810190601f1680156128505780820380516001836020036101000a031916815260200191505b508581038452885181528851602091820191808b01910280838360005b8381101561288557818101518382015260200161286d565b50505050905001858103835287818151815260200191508051906020019060200280838360005b838110156128c45781810151838201526020016128ac565b50505050905001858103825286818151815260200191508051906020019060200280838360005b838110156129035781810151838201526020016128eb565b505050509050019e505050505050505050505050505050602060405180830381600087803b15801561293457600080fd5b505af1158015612948573d6000803e3d6000fd5b505050506040513d602081101561295e57600080fd5b50517fffffffff0000000000000000000000000000000000000000000000000000000016146124eb576040805162461bcd60e51b815260206004820152601a60248201527f53616c653a206e6f74696669636174696f6e2072656675736564000000000000604482015290519081900360640190fd5b600080826001600160a01b0316846001600160a01b03161415612a3e576040805162461bcd60e51b815260206004820152601960248201527f556e697377617056323a2073616d652061646472657373657300000000000000604482015290519081900360640190fd5b826001600160a01b0316846001600160a01b031610612a5e578284612a61565b83835b90925090506001600160a01b038216611522576040805162461bcd60e51b815260206004820152601760248201527f556e697377617056323a207a65726f2061646472657373000000000000000000604482015290519081900360640190fd5b6000806000612ad085856129d4565b91509150600860009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015612b2257600080fd5b505afa158015612b36573d6000803e3d6000fd5b505050506040513d6020811015612b4c57600080fd5b5051604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606095861b811660208381019190915294861b81166034830152825160288184030181526048830184528051908601207fff0000000000000000000000000000000000000000000000000000000000000060688401529390951b9094166069850152607d8401919091527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f609d808501919091528151808503909101815260bd909301905281519101209392505050565b6040820151600090612c409083906001600160a01b0316612f08565b905080611959576040805162461bcd60e51b815260206004820152601f60248201527f53616c653a20756e737570706f72746564207061796d656e7420746f6b656e00604482015290519081900360640190fd5b60006000198214612ca7575060006122e6565b600754600090612cc19085906001600160a01b0316612f08565b604086015160075460a0880151929350600092612ce892916001600160a01b031690611a25565b90506000612d198760800151612d1384611b93670de0b6b3a76400008861228d90919063ffffffff16565b9061228d565b604080516002808252606082018352929350919060208301908036833750505060e088018190528051869190600090612d4e57fe5b6020026020010181815250508160001b8760e00151600181518110612d6f57fe5b602090810291909101015260c08701525060019150509392505050565b600082815260018401602052604081205480612df15750506040805180820182528381526020808201848152865460018181018955600089815284812095516002909302909501918255915190820155865486845281880190925292909120556122e6565b82856000016001830381548110612e0457fe5b90600052602060002090600202016001018190555060009150506122e6565b600082821115612e7a576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052610bf2908590612f98565b600081815260018301602052604081205480612f6b576040805162461bcd60e51b815260206004820152601860248201527f456e756d4d61703a206e6f6e6578697374656e74206b65790000000000000000604482015290519081900360640190fd5b836000016001820381548110612f7d57fe5b90600052602060002090600202016001015491505092915050565b81612fab6001600160a01b0382166120b4565b612ffc576040805162461bcd60e51b815260206004820152601a60248201527f4552433230577261707065723a206e6f6e2d636f6e7472616374000000000000604482015290519081900360640190fd5b600080826001600160a01b0316846040518082805190602001908083835b6020831061305757805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161301a565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146130b9576040519150601f19603f3d011682016040523d82523d6000602084013e6130be565b606091505b5091509150811561313d57805115613138578080602001905160208110156130e557600080fd5b5051613138576040805162461bcd60e51b815260206004820152601e60248201527f4552433230577261707065723a206f7065726174696f6e206661696c65640000604482015290519081900360640190fd5b613199565b8051613190576040805162461bcd60e51b815260206004820152601e60248201527f4552433230577261707065723a206f7065726174696f6e206661696c65640000604482015290519081900360640190fd5b80518082602001fd5b5050505050565b60405180610140016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160008019168152602001600081526020016060815260200160008152602001606081526020016060815260200160608152509056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a26469706673582212207bf162d0d6db3baa2a2e71f061b502ddf28ef9c654d65da6a878e54236364e6464736f6c63430007060033abb92614f53337043b55dc996a83ebb09adce78ec336ca188ea02180b61d1c14","opcodes":"PUSH1 0xC0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x37DB CODESIZE SUB DUP1 PUSH3 0x37DB DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0xA0 DUP2 LT ISZERO PUSH3 0x37 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 DUP1 DUP5 ADD MLOAD PUSH1 0x60 DUP6 ADD MLOAD PUSH1 0x80 SWAP1 SWAP6 ADD MLOAD PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND CALLER SWAP1 DUP2 OR DUP3 SSTORE SWAP4 MLOAD SWAP6 SWAP7 SWAP5 SWAP6 SWAP3 SWAP5 SWAP4 SWAP2 SWAP3 DUP8 SWAP3 DUP8 SWAP3 DUP8 SWAP3 DUP8 SWAP3 DUP8 SWAP3 DUP4 SWAP3 DUP9 SWAP3 DUP9 SWAP3 DUP9 SWAP3 DUP9 SWAP3 DUP7 SWAP3 DUP7 SWAP3 DUP7 SWAP3 DUP6 SWAP3 DUP6 SWAP3 DUP6 SWAP3 PUSH1 0x1 SWAP3 SWAP1 SWAP2 DUP7 SWAP2 DUP4 SWAP2 DUP3 SWAP2 SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP3 SWAP1 LOG3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH3 0x11D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061796F75743A207A65726F2061646472657373000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 SWAP2 AND DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD PUSH32 0xDD880D24A789958A6398C99C2E54CE31BC10A638CBC42F7DD34285479AE0F855 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP POP PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x80 DUP3 SWAP1 MSTORE PUSH1 0xA0 DUP2 SWAP1 MSTORE 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 POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x2 DUP1 DUP3 MSTORE PUSH1 0x60 DUP3 ADD DUP4 MSTORE SWAP4 SWAP5 POP PUSH1 0x0 SWAP4 SWAP1 SWAP3 POP SWAP1 PUSH1 0x20 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP POP DUP4 MLOAD SWAP2 SWAP3 POP PUSH9 0xA89E968A9CBE8AA89 PUSH1 0xBB SHL SWAP2 PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE SWAP2 POP DUP5 SWAP1 PUSH1 0x0 SWAP1 PUSH3 0x202 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP4 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH3 0x217 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP3 DUP2 MSTORE POP DUP3 DUP2 MSTORE POP POP POP PUSH1 0x0 NOT PUSH1 0x0 SHL PUSH16 0x14D55414131657D55393125352551151 PUSH1 0x82 SHL SWAP1 DUP4 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH3 0x251 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP4 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH3 0x266 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP3 DUP2 MSTORE POP DUP3 DUP2 MSTORE POP POP POP PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x37BB DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP3 DUP3 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x2CF JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x2B5 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x310 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x2F6 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP PUSH1 0x7 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND OR SWAP1 SSTORE POP PUSH1 0x0 SWAP5 POP PUSH1 0x1 SWAP4 POP DUP5 SWAP3 POP PUSH3 0x357 SWAP2 POP POP JUMP JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH3 0x382 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 DUP1 DUP3 MSTORE DUP2 DUP4 ADD SWAP1 SWAP3 MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 SWAP1 PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP PUSH1 0x0 NOT PUSH1 0x0 SHL PUSH32 0x50524943455F434F4E564552545F5649415F4F5241434C450000000000000000 SWAP1 DUP4 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH3 0x3DF JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP4 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH3 0x3F4 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP3 DUP2 MSTORE POP DUP3 DUP2 MSTORE POP POP POP PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x37BB DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP3 DUP3 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x45D JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x443 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x49E JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x484 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP POP POP PUSH3 0x4CA DUP2 PUSH3 0x4DB PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP POP PUSH3 0x52F JUMP JUMPDEST PUSH1 0x8 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 SWAP2 AND DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD PUSH32 0xFE70995E26C62B71BBD53A5B9E09215C42E2006FAD72BA845051FAA8DE1510BA SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH2 0x3268 PUSH3 0x553 PUSH1 0x0 CODECOPY DUP1 PUSH2 0x21FA MSTORE POP DUP1 PUSH2 0x157D MSTORE POP PUSH2 0x3268 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x180 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8456CB59 GT PUSH2 0xD6 JUMPI DUP1 PUSH4 0xA963B257 GT PUSH2 0x7F JUMPI DUP1 PUSH4 0xD52BB6F4 GT PUSH2 0x59 JUMPI DUP1 PUSH4 0xD52BB6F4 EQ PUSH2 0x892 JUMPI DUP1 PUSH4 0xF21F537D EQ PUSH2 0x8E6 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x8FB JUMPI PUSH2 0x180 JUMP JUMPDEST DUP1 PUSH4 0xA963B257 EQ PUSH2 0x719 JUMPI DUP1 PUSH4 0xBE9A6555 EQ PUSH2 0x7AE JUMPI DUP1 PUSH4 0xC7B778DB EQ PUSH2 0x7C3 JUMPI PUSH2 0x180 JUMP JUMPDEST DUP1 PUSH4 0x9865BCC8 GT PUSH2 0xB0 JUMPI DUP1 PUSH4 0x9865BCC8 EQ PUSH2 0x65C JUMPI DUP1 PUSH4 0x9E049545 EQ PUSH2 0x65C JUMPI DUP1 PUSH4 0xA1E16908 EQ PUSH2 0x683 JUMPI PUSH2 0x180 JUMP JUMPDEST DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x61D JUMPI DUP1 PUSH4 0x8488BB4E EQ PUSH2 0x632 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x647 JUMPI PUSH2 0x180 JUMP JUMPDEST DUP1 PUSH4 0x3F4BA83A GT PUSH2 0x138 JUMPI DUP1 PUSH4 0x5E6E9F70 GT PUSH2 0x112 JUMPI DUP1 PUSH4 0x5E6E9F70 EQ PUSH2 0x44A JUMPI DUP1 PUSH4 0x61BD3851 EQ PUSH2 0x585 JUMPI DUP1 PUSH4 0x6B8F9C43 EQ PUSH2 0x5EA JUMPI PUSH2 0x180 JUMP JUMPDEST DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x3F7 JUMPI DUP1 PUSH4 0x5C4FAFC7 EQ PUSH2 0x40C JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x421 JUMPI PUSH2 0x180 JUMP JUMPDEST DUP1 PUSH4 0x1694505E GT PUSH2 0x169 JUMPI DUP1 PUSH4 0x1694505E EQ PUSH2 0x2B3 JUMPI DUP1 PUSH4 0x2A8A45BC EQ PUSH2 0x2C8 JUMPI DUP1 PUSH4 0x2C87927B EQ PUSH2 0x3B0 JUMPI PUSH2 0x180 JUMP JUMPDEST DUP1 PUSH4 0x1265B651 EQ PUSH2 0x185 JUMPI DUP1 PUSH4 0x1323B066 EQ PUSH2 0x1B6 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x191 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19A PUSH2 0x92E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x258 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x1D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x219 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x22B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x24D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x93D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x29E JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x286 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP4 POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19A PUSH2 0xA32 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2F2 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0xA41 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x357 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x33F JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x396 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x37E JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP9 POP POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3F5 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x3D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xBE6 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x403 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3F5 PUSH2 0xBF8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x418 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19A PUSH2 0xC66 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x42D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x436 PUSH2 0xC7E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x456 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3F5 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x46D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x48F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x4A1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x4C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 SWAP5 SWAP4 PUSH1 0x20 DUP2 ADD SWAP4 POP CALLDATALOAD SWAP2 POP POP PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x513 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x525 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x547 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0xC87 SWAP5 POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x591 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x59A PUSH2 0xE64 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 DUP2 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x5D6 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x5BE JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3F5 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x60D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xEBF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x629 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3F5 PUSH2 0xF8C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x63E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19A PUSH2 0xFF3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x653 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19A PUSH2 0x1002 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x668 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x671 PUSH2 0x1011 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x68F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x671 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x6A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 DUP2 ADD SWAP1 PUSH1 0x60 DUP2 ADD PUSH1 0x40 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x6DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x6EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x70E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x1017 JUMP JUMPDEST PUSH2 0x3F5 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x72F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x76F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x781 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x7A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x1063 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3F5 PUSH2 0x1149 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x59A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x7E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x801 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x813 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x835 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH1 0x20 DUP2 ADD SWAP1 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x853 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x865 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x887 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x115C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x89E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x8CD PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x8B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x1248 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x671 PUSH2 0x13A4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x907 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3F5 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x91E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x13AA JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x2 SLOAD PUSH1 0x0 EQ ISZERO PUSH2 0x999 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x9A1 PUSH2 0x1410 JUMP JUMPDEST PUSH2 0x9A9 PUSH2 0x31A0 JUMP JUMPDEST PUSH2 0x9B1 PUSH2 0x1468 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP10 DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP10 AND PUSH1 0x40 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD DUP10 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP9 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x1F DUP8 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD SWAP1 SWAP2 MSTORE DUP6 DUP2 MSTORE SWAP1 DUP7 SWAP1 DUP7 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP POP PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0xA22 DUP2 PUSH2 0x146C JUMP JUMPDEST SWAP3 POP SWAP3 POP POP SWAP7 POP SWAP7 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP2 SWAP1 DUP2 SWAP1 DUP2 SWAP1 PUSH1 0x60 SWAP1 DUP2 SWAP1 DUP4 PUSH2 0xA67 PUSH1 0x4 DUP4 ADD PUSH2 0x1493 JUMP JUMPDEST DUP3 SLOAD SWAP9 POP SWAP1 POP DUP8 PUSH2 0xABF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7500000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x3 DUP5 ADD SLOAD SWAP2 SWAP9 POP SWAP7 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP5 POP DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0xAF5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xB1F JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP4 POP DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0xB39 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xB63 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xBDA JUMPI PUSH1 0x0 DUP1 PUSH2 0xB81 PUSH1 0x4 DUP7 ADD DUP5 PUSH2 0x1497 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP2 PUSH1 0x0 SHR DUP8 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0xB95 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP DUP1 PUSH1 0x0 SHR DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0xBC5 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP POP PUSH1 0x1 ADD PUSH2 0xB69 JUMP JUMPDEST POP POP POP SWAP2 SWAP4 SWAP6 POP SWAP2 SWAP4 SWAP6 JUMP JUMPDEST PUSH2 0xBF2 DUP5 DUP5 DUP5 DUP5 PUSH2 0x1529 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0xC4C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0xC5C PUSH2 0xC57 PUSH2 0x1468 JUMP JUMPDEST PUSH2 0x1760 JUMP JUMPDEST PUSH2 0xC64 PUSH2 0x1827 JUMP JUMPDEST JUMP JUMPDEST PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0xC92 PUSH2 0xC57 PUSH2 0x1468 JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD DUP2 EQ PUSH2 0xCE9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E636F6E73697374656E742061727261797300000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0xD4A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7500000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP2 ADD DUP3 PUSH2 0xD95 JUMPI PUSH1 0x0 PUSH2 0xD5E DUP3 PUSH2 0x1493 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xD8E JUMPI PUSH1 0x0 PUSH2 0xD77 DUP5 DUP3 PUSH2 0x1497 JUMP JUMPDEST POP SWAP1 POP PUSH2 0xD84 DUP5 DUP3 PUSH2 0x187F JUMP JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0xD63 JUMP JUMPDEST POP POP PUSH2 0xDA0 JUMP JUMPDEST PUSH2 0xDA0 DUP2 DUP7 DUP7 PUSH2 0x195F JUMP JUMPDEST DUP6 PUSH32 0xCB3FE5489E0CD43D0F4A33D1E09A4A0463A03D0D38F56165530854E5540DB143 DUP7 DUP7 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xE08 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xDF0 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xE47 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xE2F JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x4 PUSH1 0x0 ADD DUP1 SLOAD DUP1 PUSH1 0x20 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 DUP1 ISZERO PUSH2 0xEB5 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0xEA1 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0xECA PUSH2 0xC57 PUSH2 0x1468 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xF25 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061796F75743A207A65726F2061646472657373000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 SWAP1 SWAP2 OR SWAP2 DUP3 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD SWAP3 SWAP1 SWAP2 AND DUP3 MSTORE MLOAD PUSH32 0xDD880D24A789958A6398C99C2E54CE31BC10A638CBC42F7DD34285479AE0F855 SWAP2 PUSH1 0x20 SWAP1 DUP3 SWAP1 SUB ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0xFE0 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0xFEB PUSH2 0xC57 PUSH2 0x1468 JUMP JUMPDEST PUSH2 0xC64 PUSH2 0x19E7 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 NOT DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x105A DUP6 DUP6 DUP6 DUP6 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1A25 SWAP3 POP POP POP JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x10B7 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x10BF PUSH2 0x1410 JUMP JUMPDEST PUSH2 0x10C7 PUSH2 0x31A0 JUMP JUMPDEST PUSH2 0x10CF PUSH2 0x1468 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP8 DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP8 AND PUSH1 0x40 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD DUP8 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP7 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x1F DUP6 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD SWAP1 SWAP2 MSTORE DUP4 DUP2 MSTORE SWAP1 DUP5 SWAP1 DUP5 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP POP PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x1140 DUP2 PUSH2 0x1BA3 JUMP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x1154 PUSH2 0xC57 PUSH2 0x1468 JUMP JUMPDEST PUSH2 0xC5C PUSH2 0x1BD0 JUMP JUMPDEST PUSH1 0x60 DUP4 DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x1176 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x11A0 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x123E JUMPI PUSH2 0x121F DUP8 DUP8 DUP4 DUP2 DUP2 LT PUSH2 0x11BD JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x7 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 DUP8 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1A25 SWAP3 POP POP POP JUMP JUMPDEST DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x122B JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x11A6 JUMP JUMPDEST POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x12ED JUMPI PUSH1 0x8 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND 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 PUSH2 0x12BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x12D2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x12E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP4 POP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x138F JUMPI PUSH1 0x8 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND 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 PUSH2 0x1360 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1374 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x138A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP3 POP JUMPDEST PUSH2 0x1399 DUP5 DUP5 PUSH2 0x1C52 JUMP JUMPDEST SWAP1 SWAP6 SWAP1 SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x13B5 PUSH2 0xC57 PUSH2 0x1468 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 DUP3 OR DUP1 DUP5 SSTORE PUSH1 0x40 MLOAD SWAP3 SWAP4 SWAP2 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xC64 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061757361626C653A2070617573656400000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x1479 DUP4 PUSH2 0x1D1E JUMP JUMPDEST PUSH2 0x1482 DUP4 PUSH2 0x1FC8 JUMP JUMPDEST POP POP PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xE0 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP2 JUMP JUMPDEST SLOAD SWAP1 JUMP JUMPDEST DUP2 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP4 LT PUSH2 0x14F1 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x456E756D4D61703A20696E646578206F7574206F6620626F756E647300000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 PUSH1 0x0 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x1502 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD SWAP1 POP DUP1 PUSH1 0x0 ADD SLOAD DUP2 PUSH1 0x1 ADD SLOAD SWAP3 POP SWAP3 POP POP JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP3 PUSH2 0x157B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F20737570706C79000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH2 0x15A6 PUSH1 0x4 PUSH2 0x1493 JUMP JUMPDEST LT PUSH2 0x15F8 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20746F6F206D616E7920736B757300000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x1603 PUSH1 0x4 DUP6 PUSH2 0x206A JUMP JUMPDEST PUSH2 0x1654 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20736B7520616C7265616479206372656174656400000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO PUSH2 0x16C6 JUMPI PUSH2 0x1675 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x20B4 JUMP JUMPDEST PUSH2 0x16C6 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D636F6E74726163742072656365697665720000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP6 DUP2 SSTORE PUSH1 0x1 DUP2 ADD DUP7 SWAP1 SSTORE PUSH1 0x2 DUP2 ADD DUP6 SWAP1 SSTORE PUSH1 0x3 DUP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT SWAP1 SWAP2 AND DUP2 OR SWAP1 SWAP2 SSTORE DUP4 MLOAD DUP9 DUP2 MSTORE SWAP3 DUP4 ADD DUP8 SWAP1 MSTORE DUP3 DUP5 ADD DUP7 SWAP1 MSTORE PUSH1 0x60 DUP4 ADD MSTORE SWAP2 MLOAD PUSH32 0x38BD4AABCE684540CD61351B91F2F5FACF9D6963934347E25AAB93D87AE7AC14 SWAP2 DUP2 SWAP1 SUB PUSH1 0x80 ADD SWAP1 LOG1 POP POP POP POP POP JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8DA5CB5B 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 PUSH2 0x1799 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x17AD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x17C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ PUSH2 0x1824 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6F7420746865206F776E657200000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0x182F PUSH2 0x20BA JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA PUSH2 0x1862 PUSH2 0x1468 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0x1953 JUMPI DUP4 SLOAD PUSH1 0x0 NOT DUP1 DUP4 ADD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x0 SWAP1 DUP8 SWAP1 DUP4 SWAP1 DUP2 LT PUSH2 0x18B2 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD SWAP1 POP DUP1 DUP8 PUSH1 0x0 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x18D2 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 DUP5 SLOAD PUSH1 0x2 SWAP1 SWAP4 MUL ADD SWAP2 DUP3 SSTORE PUSH1 0x1 SWAP4 DUP5 ADD SLOAD SWAP2 DUP5 ADD SWAP2 SWAP1 SWAP2 SSTORE DUP4 SLOAD DUP3 MSTORE DUP10 DUP4 ADD SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP1 DUP5 ADD SWAP1 SSTORE DUP7 SLOAD DUP8 SWAP1 DUP1 PUSH2 0x1911 JUMPI INVALID JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 PUSH1 0x2 PUSH1 0x0 NOT SWAP1 SWAP5 ADD SWAP4 DUP5 MUL ADD DUP3 DUP2 SSTORE PUSH1 0x1 SWAP1 DUP2 ADD DUP4 SWAP1 SSTORE SWAP3 SWAP1 SWAP4 SSTORE DUP9 DUP2 MSTORE DUP10 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x40 DUP3 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE SWAP5 POP PUSH2 0x1959 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SWAP2 POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x196A DUP4 DUP4 DUP4 PUSH2 0x2111 JUMP JUMPDEST PUSH2 0x1973 DUP4 PUSH2 0x1493 JUMP JUMPDEST ISZERO DUP1 PUSH2 0x1991 JUMPI POP PUSH1 0x7 SLOAD PUSH2 0x1991 SWAP1 DUP5 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2275 JUMP JUMPDEST PUSH2 0x19E2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F207265666572656E636520746F6B656E0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x19EF PUSH2 0x1410 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH2 0x1862 PUSH2 0x1468 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x1AC9 JUMPI PUSH1 0x8 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND 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 PUSH2 0x1A9A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1AAE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1AC4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP4 POP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x1B6B JUMPI PUSH1 0x8 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND 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 PUSH2 0x1B3C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1B50 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1B66 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP3 POP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1B78 DUP7 DUP7 PUSH2 0x1C52 JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x1B99 DUP3 PUSH2 0x1B93 DUP4 PUSH8 0xDE0B6B3A7640000 PUSH2 0x228D JUMP JUMPDEST SWAP1 PUSH2 0x22ED JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x1BAC DUP2 PUSH2 0x1D1E JUMP JUMPDEST PUSH2 0x1BB5 DUP2 PUSH2 0x1FC8 JUMP JUMPDEST PUSH2 0x1BBE DUP2 PUSH2 0x2354 JUMP JUMPDEST PUSH2 0x1BC7 DUP2 PUSH2 0x24A3 JUMP JUMPDEST PUSH2 0x1824 DUP2 PUSH2 0x24EF JUMP JUMPDEST PUSH1 0x2 SLOAD ISZERO PUSH2 0x1C25 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A20737461727465640000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST TIMESTAMP PUSH1 0x2 SSTORE PUSH32 0x27029695AA5F602A4EE81F4C32DFA86E562F200A17966496F3A7C3F2EC0F9417 PUSH2 0x1862 PUSH2 0x1468 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1C61 DUP6 DUP6 PUSH2 0x29D4 JUMP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP1 PUSH2 0x1C71 DUP8 DUP8 PUSH2 0x2AC1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x902F1AC PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1CA9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1CBD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1CD3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND SWAP4 POP AND SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND SWAP1 DUP5 AND EQ PUSH2 0x1D0D JUMPI DUP1 DUP3 PUSH2 0x1D10 JUMP JUMPDEST DUP2 DUP2 JUMPDEST SWAP1 SWAP9 SWAP1 SWAP8 POP SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1D7D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F206164647265737320726563697069656E7400000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1DDC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F206164647265737320746F6B656E0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x80 DUP2 ADD MLOAD PUSH2 0x1E32 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F207175616E7469747920707572636861736500000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0x1E98 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7500000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x80 ADD MLOAD DUP2 PUSH1 0x2 ADD SLOAD LT ISZERO PUSH2 0x1EF5 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A2061626F7665206D6178207175616E746974790000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 SLOAD PUSH1 0x0 NOT EQ PUSH2 0x1F5C JUMPI DUP2 PUSH1 0x80 ADD MLOAD DUP2 PUSH1 0x1 ADD SLOAD LT ISZERO PUSH2 0x1F5C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E73756666696369656E7420737570706C7900000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1F77 PUSH1 0x4 DUP4 ADD DUP3 PUSH2 0x2275 JUMP JUMPDEST PUSH2 0x19E2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7520746F6B656E00000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0x202E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20756E737570706F7274656420534B550000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP2 ADD PUSH1 0x0 PUSH2 0x203E DUP5 DUP4 PUSH2 0x2C24 JUMP JUMPDEST SWAP1 POP PUSH2 0x204B DUP5 DUP4 DUP4 PUSH2 0x2C94 JUMP JUMPDEST PUSH2 0xBF2 JUMPI PUSH1 0x80 DUP5 ADD MLOAD PUSH2 0x205F SWAP1 DUP3 SWAP1 PUSH2 0x228D JUMP JUMPDEST PUSH1 0xC0 DUP6 ADD MSTORE POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2076 DUP4 DUP4 PUSH2 0x2275 JUMP JUMPDEST PUSH2 0x20AC JUMPI POP DUP2 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP5 SSTORE PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 SWAP1 SWAP4 ADD DUP5 SWAP1 SSTORE DUP5 SLOAD DUP5 DUP3 MSTORE DUP3 DUP7 ADD SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0x1959 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x1959 JUMP JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND PUSH2 0xC64 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061757361626C653A206E6F7420706175736564000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x21F7 JUMPI PUSH1 0x0 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x212B JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x219D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F206164647265737320746F6B656E0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x21AB JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP DUP1 PUSH1 0x0 EQ ISZERO PUSH2 0x21D7 JUMPI PUSH2 0x21D1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x187F JUMP JUMPDEST POP PUSH2 0x21ED JUMP JUMPDEST PUSH2 0x21EB DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP4 PUSH2 0x2D8C JUMP JUMPDEST POP JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x2114 JUMP JUMPDEST POP PUSH32 0x0 PUSH2 0x2222 DUP5 PUSH2 0x1493 JUMP JUMPDEST GT ISZERO PUSH2 0x19E2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20746F6F206D616E7920746F6B656E730000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x229C JUMPI POP PUSH1 0x0 PUSH2 0x1959 JUMP JUMPDEST DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 PUSH2 0x22A9 JUMPI INVALID JUMPDEST DIV EQ PUSH2 0x22E6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x3212 PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 GT PUSH2 0x2343 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206469766973696F6E206279207A65726F000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 DUP4 DUP2 PUSH2 0x234C JUMPI INVALID JUMPDEST DIV SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x2477 JUMPI DUP1 PUSH1 0xC0 ADD MLOAD CALLVALUE LT ISZERO PUSH2 0x23D6 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E73756666696369656E742045544800000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xC0 DUP3 ADD MLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 DUP2 ISZERO PUSH2 0x8FC MUL SWAP2 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x2414 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x0 PUSH2 0x242E DUP3 PUSH1 0xC0 ADD MLOAD CALLVALUE PUSH2 0x2E23 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x2471 JUMPI DUP2 MLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 DUP3 ISZERO PUSH2 0x8FC MUL SWAP1 DUP4 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x246F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP JUMPDEST POP PUSH2 0x1824 JUMP JUMPDEST PUSH2 0x1824 PUSH2 0x2482 PUSH2 0x1468 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xC0 DUP5 ADD MLOAD PUSH1 0x40 DUP6 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP4 SWAP3 AND SWAP1 PUSH2 0x2E80 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x0 NOT EQ PUSH2 0x24EB JUMPI PUSH1 0x80 DUP3 ADD MLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH2 0x24D3 SWAP2 PUSH2 0x2E23 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SSTORE JUMPDEST POP POP JUMP JUMPDEST DUP1 PUSH1 0x60 ADD MLOAD DUP2 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x29F844483CA6B10B5C0611D039AFC15CE8F6380E905307B381C3A8EE4E90E11E DUP5 PUSH1 0x20 ADD MLOAD DUP6 PUSH1 0x80 ADD MLOAD DUP7 PUSH1 0xA0 ADD MLOAD DUP8 PUSH1 0xC0 ADD MLOAD DUP9 PUSH1 0xE0 ADD MLOAD DUP10 PUSH2 0x100 ADD MLOAD DUP11 PUSH2 0x120 ADD MLOAD PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP5 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2586 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x256E JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x25B6 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x259E JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x25E6 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x25CE JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP4 POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP7 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x265D JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2645 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x268A JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP DUP4 DUP2 SUB DUP3 MSTORE DUP5 MLOAD DUP2 MSTORE DUP5 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP7 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x26BD JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x26A5 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x26EA JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP8 POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 ISZERO PUSH2 0x24EB JUMPI PUSH4 0x61ECEAE8 PUSH1 0xE0 SHL PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x61ECEAE8 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD DUP7 PUSH1 0x40 ADD MLOAD DUP8 PUSH1 0x60 ADD MLOAD DUP9 PUSH1 0x80 ADD MLOAD DUP10 PUSH1 0xA0 ADD MLOAD DUP11 PUSH1 0xC0 ADD MLOAD DUP12 PUSH1 0xE0 ADD MLOAD DUP13 PUSH2 0x100 ADD MLOAD DUP14 PUSH2 0x120 ADD MLOAD PUSH1 0x40 MLOAD DUP12 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP6 DUP2 SUB DUP6 MSTORE DUP11 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2823 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x280B JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x2850 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP DUP6 DUP2 SUB DUP5 MSTORE DUP9 MLOAD DUP2 MSTORE DUP9 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP1 DUP12 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2885 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x286D JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP6 DUP2 SUB DUP4 MSTORE DUP8 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x28C4 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x28AC JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP6 DUP2 SUB DUP3 MSTORE DUP7 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2903 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x28EB JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP15 POP POP POP POP POP POP POP POP POP POP POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2934 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2948 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x295E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND EQ PUSH2 0x24EB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F74696669636174696F6E2072656675736564000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x2A3E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x556E697377617056323A2073616D652061646472657373657300000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH2 0x2A5E JUMPI DUP3 DUP5 PUSH2 0x2A61 JUMP JUMPDEST DUP4 DUP4 JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x1522 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x556E697377617056323A207A65726F2061646472657373000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x2AD0 DUP6 DUP6 PUSH2 0x29D4 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x8 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND 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 PUSH2 0x2B22 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2B36 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2B4C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 PUSH1 0x60 SWAP6 DUP7 SHL DUP2 AND PUSH1 0x20 DUP4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP5 DUP7 SHL DUP2 AND PUSH1 0x34 DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x28 DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH1 0x48 DUP4 ADD DUP5 MSTORE DUP1 MLOAD SWAP1 DUP7 ADD KECCAK256 PUSH32 0xFF00000000000000000000000000000000000000000000000000000000000000 PUSH1 0x68 DUP5 ADD MSTORE SWAP4 SWAP1 SWAP6 SHL SWAP1 SWAP5 AND PUSH1 0x69 DUP6 ADD MSTORE PUSH1 0x7D DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x96E8AC4277198FF8B6F785478AA9A39F403CB768DD02CBEE326C3E7DA348845F PUSH1 0x9D DUP1 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MLOAD DUP1 DUP6 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xBD SWAP1 SWAP4 ADD SWAP1 MSTORE DUP2 MLOAD SWAP2 ADD KECCAK256 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x0 SWAP1 PUSH2 0x2C40 SWAP1 DUP4 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2F08 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x1959 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20756E737570706F72746564207061796D656E7420746F6B656E00 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x0 NOT DUP3 EQ PUSH2 0x2CA7 JUMPI POP PUSH1 0x0 PUSH2 0x22E6 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x2CC1 SWAP1 DUP6 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2F08 JUMP JUMPDEST PUSH1 0x40 DUP7 ADD MLOAD PUSH1 0x7 SLOAD PUSH1 0xA0 DUP9 ADD MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 PUSH2 0x2CE8 SWAP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH2 0x1A25 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2D19 DUP8 PUSH1 0x80 ADD MLOAD PUSH2 0x2D13 DUP5 PUSH2 0x1B93 PUSH8 0xDE0B6B3A7640000 DUP9 PUSH2 0x228D SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 PUSH2 0x228D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x2 DUP1 DUP3 MSTORE PUSH1 0x60 DUP3 ADD DUP4 MSTORE SWAP3 SWAP4 POP SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP POP POP PUSH1 0xE0 DUP9 ADD DUP2 SWAP1 MSTORE DUP1 MLOAD DUP7 SWAP2 SWAP1 PUSH1 0x0 SWAP1 PUSH2 0x2D4E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP2 PUSH1 0x0 SHL DUP8 PUSH1 0xE0 ADD MLOAD PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x2D6F JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0xC0 DUP8 ADD MSTORE POP PUSH1 0x1 SWAP2 POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x1 DUP5 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 PUSH2 0x2DF1 JUMPI POP POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE DUP4 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD DUP5 DUP2 MSTORE DUP7 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP10 SSTORE PUSH1 0x0 DUP10 DUP2 MSTORE DUP5 DUP2 KECCAK256 SWAP6 MLOAD PUSH1 0x2 SWAP1 SWAP4 MUL SWAP1 SWAP6 ADD SWAP2 DUP3 SSTORE SWAP2 MLOAD SWAP1 DUP3 ADD SSTORE DUP7 SLOAD DUP7 DUP5 MSTORE DUP2 DUP9 ADD SWAP1 SWAP3 MSTORE SWAP3 SWAP1 SWAP2 KECCAK256 SSTORE PUSH2 0x22E6 JUMP JUMPDEST DUP3 DUP6 PUSH1 0x0 ADD PUSH1 0x1 DUP4 SUB DUP2 SLOAD DUP2 LT PUSH2 0x2E04 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD PUSH1 0x1 ADD DUP2 SWAP1 SSTORE POP PUSH1 0x0 SWAP2 POP POP PUSH2 0x22E6 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 GT ISZERO PUSH2 0x2E7A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x24 DUP4 ADD MSTORE DUP5 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x84 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 OR SWAP1 MSTORE PUSH2 0xBF2 SWAP1 DUP6 SWAP1 PUSH2 0x2F98 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 PUSH2 0x2F6B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x456E756D4D61703A206E6F6E6578697374656E74206B65790000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP4 PUSH1 0x0 ADD PUSH1 0x1 DUP3 SUB DUP2 SLOAD DUP2 LT PUSH2 0x2F7D JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD PUSH1 0x1 ADD SLOAD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 PUSH2 0x2FAB PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x20B4 JUMP JUMPDEST PUSH2 0x2FFC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433230577261707065723A206E6F6E2D636F6E7472616374000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x3057 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x301A JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x30B9 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x30BE JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 ISZERO PUSH2 0x313D JUMPI DUP1 MLOAD ISZERO PUSH2 0x3138 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x30E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x3138 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433230577261707065723A206F7065726174696F6E206661696C65640000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x3199 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x3190 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433230577261707065723A206F7065726174696F6E206661696C65640000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 MLOAD DUP1 DUP3 PUSH1 0x20 ADD REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x140 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP1 NOT AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE POP SWAP1 JUMP INVALID MSTORE8 PUSH2 0x6665 0x4D PUSH2 0x7468 GASPRICE KECCAK256 PUSH14 0x756C7469706C69636174696F6E20 PUSH16 0x766572666C6F77A26469706673582212 KECCAK256 PUSH28 0xF162D0D6DB3BAA2A2E71F061B502DDF28EF9C654D65DA6A878E54236 CALLDATASIZE 0x4E PUSH5 0x64736F6C63 NUMBER STOP SMOD MOD STOP CALLER 0xAB 0xB9 0x26 EQ CREATE2 CALLER CALLDATACOPY DIV EXTCODESIZE SSTORE 0xDC SWAP10 PUSH11 0x83EBB09ADCE78EC336CA18 DUP15 LOG0 0x21 DUP1 0xB6 SAR SHR EQ ","sourceMap":"153:1225:16:-:0;;;211:303;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;211:303:16;;;;;;;;;;;;;;;;;;;;960:6:1;:15;;-1:-1:-1;;;;;;960:15:1;2518:10:32;960:15:1;;;;;990:40;;211:303:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2554:4:32;;2518:10;;211:303:16;;2518:10:32;;;;960:6:1;990:40;;960:6;;990:40;-1:-1:-1;;;;;;512:27:8;::::1;504:60;;;::::0;;-1:-1:-1;;;504:60:8;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;574:12;:28:::0;;-1:-1:-1;;;;;574:28:8;::::1;-1:-1:-1::0;;;;;;574:28:8;;::::1;::::0;::::1;::::0;;;617:30:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;-1:-1:-1::0;;543:6:5;:16;;-1:-1:-1;;543:16:5;;;;;;;;;;2570:28:32::2;::::0;;;2608:44:::2;::::0;;;2687:16:::2;::::0;;2701:1:::2;2687:16:::0;;;;;::::2;::::0;;-1:-1:-1;;2687:16:32::2;::::0;::::2;::::0;;::::2;::::0;::::2;-1:-1:-1::0;;2739:16:32::2;::::0;;2753:1:::2;2739:16:::0;;;;;::::2;::::0;;2662:41;;-1:-1:-1;2713:23:32::2;::::0;2739:16;;-1:-1:-1;2753:1:32;2739:16:::2;::::0;::::2;::::0;;::::2;::::0;::::2;-1:-1:-1::0;;2766:8:32;;2713:42;;-1:-1:-1;;;;2765:66:32;1751:44:::2;::::0;-1:-1:-1;2766:5:32;;2803:27:::2;::::0;2766:8:::2;;;;;;;;;2776:6;2783:1;2776:9;;;;;;;;;;;;;2765:66;;;::::0;::::2;;;::::0;::::2;;-1:-1:-1::0;;2886:34:32::2;;-1:-1:-1::0;;;2841:80:32::2;2842:5;2848:1;2842:8;;;;;;;;;;;;;2852:6;2859:1;2852:9;;;;;;;;;;;;;2841:80;;;::::0;::::2;;;::::0;::::2;;-1:-1:-1::0;;;;;;;;;;;2948:5:32::2;2955:6;2936:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::2;::::0;;;::::2;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::2;::::0;;;::::2;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;1605:14:29::1;:32:::0;;-1:-1:-1;;;;;;1605:32:29::1;-1:-1:-1::0;;;;;1605:32:29;::::1;;::::0;;-1:-1:-1;;;;;;;;;;1672:16:29::1;::::0;-1:-1:-1;;1672:16:29;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;1672:16:29::1;-1:-1:-1::0;1724:16:29::1;::::0;;1738:1:::1;1724:16:::0;;;;;::::1;::::0;;;1647:41;;-1:-1:-1;1698:23:29::1;::::0;1724:16;::::1;::::0;;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;1724:16:29::1;1698:42;;-1:-1:-1::0;;1803:33:29::1;;1750:87;;1751:5;1757:1;1751:8;;;;;;;;;;;;;1761:6;1768:1;1761:9;;;;;;;;;;;;;1750:87;;;::::0;::::1;;;::::0;::::1;;-1:-1:-1::0;;;;;;;;;;;1864:5:29::1;1871:6;1852:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;1370:515;;::::0;;;;594:37:22;614:16;594:19;;;:37;;:::i;:::-;537:101;1313:313:27;;;;;211:303:16;;;;;153:1225;;1955:175:22;2038:15;:34;;-1:-1:-1;;;;;2038:34:22;;-1:-1:-1;;;;;;2038:34:22;;;;;;;;2087:36;;;;;;;;;;;;;;;;1955:175;:::o;153:1225:16:-;;;;;;;;;;;;;"},"deployedBytecode":{"generatedSources":[],"immutableReferences":{"5785":[{"length":32,"start":5501}],"5787":[{"length":32,"start":8698}]},"linkReferences":{},"object":"6080604052600436106101805760003560e01c80638456cb59116100d6578063a963b2571161007f578063d52bb6f411610059578063d52bb6f414610892578063f21f537d146108e6578063f2fde38b146108fb57610180565b8063a963b25714610719578063be9a6555146107ae578063c7b778db146107c357610180565b80639865bcc8116100b05780639865bcc81461065c5780639e0495451461065c578063a1e169081461068357610180565b80638456cb591461061d5780638488bb4e146106325780638da5cb5b1461064757610180565b80633f4ba83a116101385780635e6e9f70116101125780635e6e9f701461044a57806361bd3851146105855780636b8f9c43146105ea57610180565b80633f4ba83a146103f75780635c4fafc71461040c5780635c975abb1461042157610180565b80631694505e116101695780631694505e146102b35780632a8a45bc146102c85780632c87927b146103b057610180565b80631265b651146101855780631323b066146101b6575b600080fd5b34801561019157600080fd5b5061019a61092e565b604080516001600160a01b039092168252519081900360200190f35b3480156101c257600080fd5b50610258600480360360a08110156101d957600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a08101608082013564010000000081111561021957600080fd5b82018360208201111561022b57600080fd5b8035906020019184600183028401116401000000008311171561024d57600080fd5b50909250905061093d565b6040518083815260200180602001828103825283818151815260200191508051906020019060200280838360005b8381101561029e578181015183820152602001610286565b50505050905001935050505060405180910390f35b3480156102bf57600080fd5b5061019a610a32565b3480156102d457600080fd5b506102f2600480360360208110156102eb57600080fd5b5035610a41565b60405180878152602001868152602001858152602001846001600160a01b031681526020018060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561035757818101518382015260200161033f565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561039657818101518382015260200161037e565b505050509050019850505050505050505060405180910390f35b3480156103bc57600080fd5b506103f5600480360360808110156103d357600080fd5b50803590602081013590604081013590606001356001600160a01b0316610be6565b005b34801561040357600080fd5b506103f5610bf8565b34801561041857600080fd5b5061019a610c66565b34801561042d57600080fd5b50610436610c7e565b604080519115158252519081900360200190f35b34801561045657600080fd5b506103f56004803603606081101561046d57600080fd5b8135919081019060408101602082013564010000000081111561048f57600080fd5b8201836020820111156104a157600080fd5b803590602001918460208302840111640100000000831117156104c357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561051357600080fd5b82018360208201111561052557600080fd5b8035906020019184602083028401116401000000008311171561054757600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610c87945050505050565b34801561059157600080fd5b5061059a610e64565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156105d65781810151838201526020016105be565b505050509050019250505060405180910390f35b3480156105f657600080fd5b506103f56004803603602081101561060d57600080fd5b50356001600160a01b0316610ebf565b34801561062957600080fd5b506103f5610f8c565b34801561063e57600080fd5b5061019a610ff3565b34801561065357600080fd5b5061019a611002565b34801561066857600080fd5b50610671611011565b60408051918252519081900360200190f35b34801561068f57600080fd5b50610671600480360360608110156106a657600080fd5b6001600160a01b0382358116926020810135909116918101906060810160408201356401000000008111156106da57600080fd5b8201836020820111156106ec57600080fd5b8035906020019184600183028401116401000000008311171561070e57600080fd5b509092509050611017565b6103f5600480360360a081101561072f57600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a08101608082013564010000000081111561076f57600080fd5b82018360208201111561078157600080fd5b803590602001918460018302840111640100000000831117156107a357600080fd5b509092509050611063565b3480156107ba57600080fd5b506103f5611149565b3480156107cf57600080fd5b5061059a600480360360408110156107e657600080fd5b81019060208101813564010000000081111561080157600080fd5b82018360208201111561081357600080fd5b8035906020019184602083028401116401000000008311171561083557600080fd5b91939092909160208101903564010000000081111561085357600080fd5b82018360208201111561086557600080fd5b8035906020019184600183028401116401000000008311171561088757600080fd5b50909250905061115c565b34801561089e57600080fd5b506108cd600480360360408110156108b557600080fd5b506001600160a01b0381358116916020013516611248565b6040805192835260208301919091528051918290030190f35b3480156108f257600080fd5b506106716113a4565b34801561090757600080fd5b506103f56004803603602081101561091e57600080fd5b50356001600160a01b03166113aa565b6007546001600160a01b031681565b6000606060025460001415610999576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b6109a1611410565b6109a96131a0565b6109b1611468565b6001600160a01b03908116825289811660208084019190915290891660408084019190915260608301899052608083018890528051601f870183900483028101830190915285815290869086908190840183828082843760009201919091525050505060a0820152610a228161146c565b9250925050965096945050505050565b6008546001600160a01b031681565b6000818152600660205260408120819081908190606090819083610a6760048301611493565b82549850905087610abf576040805162461bcd60e51b815260206004820152601660248201527f53616c653a206e6f6e2d6578697374656e7420736b7500000000000000000000604482015290519081900360640190fd5b60018201546002830154600384015491985096506001600160a01b031694508067ffffffffffffffff81118015610af557600080fd5b50604051908082528060200260200182016040528015610b1f578160200160208202803683370190505b5093508067ffffffffffffffff81118015610b3957600080fd5b50604051908082528060200260200182016040528015610b63578160200160208202803683370190505b50925060005b81811015610bda57600080610b816004860184611497565b915091508160001c878481518110610b9557fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508060001c868481518110610bc557fe5b60209081029190910101525050600101610b69565b50505091939550919395565b610bf284848484611529565b50505050565b600254610c4c576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b610c5c610c57611468565b611760565b610c64611827565b565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b60035460ff1681565b610c92610c57611468565b815181518114610ce9576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20696e636f6e73697374656e742061727261797300000000000000604482015290519081900360640190fd5b60008481526006602052604090208054610d4a576040805162461bcd60e51b815260206004820152601660248201527f53616c653a206e6f6e2d6578697374656e7420736b7500000000000000000000604482015290519081900360640190fd5b6004810182610d95576000610d5e82611493565b905060005b81811015610d8e576000610d778482611497565b509050610d84848261187f565b5050600101610d63565b5050610da0565b610da081868661195f565b857fcb3fe5489e0cd43d0f4a33d1e09a4a0463a03d0d38f56165530854e5540db1438686604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015610e08578181015183820152602001610df0565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015610e47578181015183820152602001610e2f565b5050505090500194505050505060405180910390a2505050505050565b60606004600001805480602002602001604051908101604052809291908181526020018280548015610eb557602002820191906000526020600020905b815481526020019060010190808311610ea1575b5050505050905090565b610eca610c57611468565b6001600160a01b038116610f25576040805162461bcd60e51b815260206004820152601460248201527f5061796f75743a207a65726f2061646472657373000000000000000000000000604482015290519081900360640190fd5b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03838116919091179182905560408051929091168252517fdd880d24a789958a6398c99c2e54ce31bc10a638cbc42f7dd34285479ae0f855916020908290030190a150565b600254610fe0576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b610feb610c57611468565b610c646119e7565b6001546001600160a01b031681565b6000546001600160a01b031690565b60001981565b600061105a858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a2592505050565b95945050505050565b6002546110b7576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b6110bf611410565b6110c76131a0565b6110cf611468565b6001600160a01b03908116825287811660208084019190915290871660408084019190915260608301879052608083018690528051601f850183900483028101830190915283815290849084908190840183828082843760009201919091525050505060a082015261114081611ba3565b50505050505050565b611154610c57611468565b610c5c611bd0565b6060838067ffffffffffffffff8111801561117657600080fd5b506040519080825280602002602001820160405280156111a0578160200160208202803683370190505b50915060005b8181101561123e5761121f8787838181106111bd57fe5b905060200201356001600160a01b0316600760009054906101000a90046001600160a01b031687878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a2592505050565b83828151811061122b57fe5b60209081029190910101526001016111a6565b5050949350505050565b6000806001600160a01b03841673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14156112ed57600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156112be57600080fd5b505afa1580156112d2573d6000803e3d6000fd5b505050506040513d60208110156112e857600080fd5b505193505b6001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561138f57600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561136057600080fd5b505afa158015611374573d6000803e3d6000fd5b505050506040513d602081101561138a57600080fd5b505192505b6113998484611c52565b909590945092505050565b60025490565b6113b5610c57611468565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383811691821780845560405192939116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b60035460ff1615610c64576040805162461bcd60e51b815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b3390565b6000606061147983611d1e565b61148283611fc8565b505060c081015160e0909101519091565b5490565b8154600090819083106114f1576040805162461bcd60e51b815260206004820152601c60248201527f456e756d4d61703a20696e646578206f7574206f6620626f756e647300000000604482015290519081900360640190fd5b600084600001848154811061150257fe5b906000526020600020906002020190508060000154816001015492509250505b9250929050565b8261157b576040805162461bcd60e51b815260206004820152601160248201527f53616c653a207a65726f20737570706c79000000000000000000000000000000604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006115a66004611493565b106115f8576040805162461bcd60e51b815260206004820152601360248201527f53616c653a20746f6f206d616e7920736b757300000000000000000000000000604482015290519081900360640190fd5b61160360048561206a565b611654576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20736b7520616c7265616479206372656174656400000000000000604482015290519081900360640190fd5b6001600160a01b038116156116c657611675816001600160a01b03166120b4565b6116c6576040805162461bcd60e51b815260206004820152601b60248201527f53616c653a206e6f6e2d636f6e74726163742072656365697665720000000000604482015290519081900360640190fd5b60008481526006602090815260409182902085815560018101869055600281018590556003810180546001600160a01b03861673ffffffffffffffffffffffffffffffffffffffff1990911681179091558351888152928301879052828401869052606083015291517f38bd4aabce684540cd61351b91f2f5facf9d6963934347e25aab93d87ae7ac149181900360800190a15050505050565b306001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561179957600080fd5b505afa1580156117ad573d6000803e3d6000fd5b505050506040513d60208110156117c357600080fd5b50516001600160a01b03828116911614611824576040805162461bcd60e51b815260206004820152601660248201527f4f776e61626c653a206e6f7420746865206f776e657200000000000000000000604482015290519081900360640190fd5b50565b61182f6120ba565b6003805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611862611468565b604080516001600160a01b039092168252519081900360200190a1565b6000818152600183016020526040812054801561195357835460001980830191908101906000908790839081106118b257fe5b90600052602060002090600202019050808760000184815481106118d257fe5b60009182526020808320845460029093020191825560019384015491840191909155835482528983019052604090209084019055865487908061191157fe5b60008281526020808220600260001990940193840201828155600190810183905592909355888152898201909252604082209190915594506119599350505050565b60009150505b92915050565b61196a838383612111565b61197383611493565b158061199157506007546119919084906001600160a01b0316612275565b6119e2576040805162461bcd60e51b815260206004820152601860248201527f53616c653a206e6f207265666572656e636520746f6b656e0000000000000000604482015290519081900360640190fd5b505050565b6119ef611410565b6003805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611862611468565b60006001600160a01b03841673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415611ac957600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611a9a57600080fd5b505afa158015611aae573d6000803e3d6000fd5b505050506040513d6020811015611ac457600080fd5b505193505b6001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415611b6b57600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611b3c57600080fd5b505afa158015611b50573d6000803e3d6000fd5b505050506040513d6020811015611b6657600080fd5b505192505b600080611b788686611c52565b9092509050611b9982611b9383670de0b6b3a764000061228d565b906122ed565b9695505050505050565b611bac81611d1e565b611bb581611fc8565b611bbe81612354565b611bc7816124a3565b611824816124ef565b60025415611c25576040805162461bcd60e51b815260206004820152601260248201527f537461727461626c653a20737461727465640000000000000000000000000000604482015290519081900360640190fd5b426002557f27029695aa5f602a4ee81f4c32dfa86e562f200a17966496f3a7c3f2ec0f9417611862611468565b6000806000611c6185856129d4565b509050600080611c718787612ac1565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015611ca957600080fd5b505afa158015611cbd573d6000803e3d6000fd5b505050506040513d6060811015611cd357600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506001600160a01b0387811690841614611d0d578082611d10565b81815b909890975095505050505050565b60208101516001600160a01b0316611d7d576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a207a65726f206164647265737320726563697069656e7400000000604482015290519081900360640190fd5b60408101516001600160a01b0316611ddc576040805162461bcd60e51b815260206004820152601860248201527f53616c653a207a65726f206164647265737320746f6b656e0000000000000000604482015290519081900360640190fd5b6080810151611e32576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a207a65726f207175616e7469747920707572636861736500000000604482015290519081900360640190fd5b606081015160009081526006602052604090208054611e98576040805162461bcd60e51b815260206004820152601660248201527f53616c653a206e6f6e2d6578697374656e7420736b7500000000000000000000604482015290519081900360640190fd5b816080015181600201541015611ef5576040805162461bcd60e51b815260206004820152601860248201527f53616c653a2061626f7665206d6178207175616e746974790000000000000000604482015290519081900360640190fd5b805460001914611f5c57816080015181600101541015611f5c576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20696e73756666696369656e7420737570706c7900000000000000604482015290519081900360640190fd5b60408201516001600160a01b0316611f776004830182612275565b6119e2576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a206e6f6e2d6578697374656e7420736b7520746f6b656e00000000604482015290519081900360640190fd5b60608101516000908152600660205260409020805461202e576040805162461bcd60e51b815260206004820152601560248201527f53616c653a20756e737570706f7274656420534b550000000000000000000000604482015290519081900360640190fd5b60048101600061203e8483612c24565b905061204b848383612c94565b610bf257608084015161205f90829061228d565b60c085015250505050565b60006120768383612275565b6120ac57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611959565b506000611959565b3b151590565b60035460ff16610c64576040805162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604482015290519081900360640190fd5b60005b82518110156121f757600083828151811061212b57fe5b6020026020010151905060006001600160a01b0316816001600160a01b0316141561219d576040805162461bcd60e51b815260206004820152601860248201527f53616c653a207a65726f206164647265737320746f6b656e0000000000000000604482015290519081900360640190fd5b60008383815181106121ab57fe5b6020026020010151905080600014156121d7576121d1866001600160a01b03841661187f565b506121ed565b6121eb866001600160a01b03841683612d8c565b505b5050600101612114565b507f000000000000000000000000000000000000000000000000000000000000000061222284611493565b11156119e2576040805162461bcd60e51b815260206004820152601560248201527f53616c653a20746f6f206d616e7920746f6b656e730000000000000000000000604482015290519081900360640190fd5b60009081526001919091016020526040902054151590565b60008261229c57506000611959565b828202828482816122a957fe5b04146122e65760405162461bcd60e51b81526004018080602001828103825260218152602001806132126021913960400191505060405180910390fd5b9392505050565b6000808211612343576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161234c57fe5b049392505050565b60408101516001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415612477578060c001513410156123d6576040805162461bcd60e51b815260206004820152601660248201527f53616c653a20696e73756666696369656e742045544800000000000000000000604482015290519081900360640190fd5b60015460c08201516040516001600160a01b039092169181156108fc0291906000818181858888f19350505050158015612414573d6000803e3d6000fd5b50600061242e8260c0015134612e2390919063ffffffff16565b905080156124715781516040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561246f573d6000803e3d6000fd5b505b50611824565b611824612482611468565b60015460c084015160408501516001600160a01b0390811693921690612e80565b606081015160009081526006602052604090208054600019146124eb57608082015160018201546124d391612e23565b60608301516000908152600660205260409020600101555b5050565b806060015181604001516001600160a01b031682600001516001600160a01b03167f29f844483ca6b10b5c0611d039afc15ce8f6380e905307b381c3a8ee4e90e11e846020015185608001518660a001518760c001518860e001518961010001518a610120015160405160200180848051906020019060200280838360005b8381101561258657818101518382015260200161256e565b50505050905001838051906020019060200280838360005b838110156125b657818101518382015260200161259e565b50505050905001828051906020019060200280838360005b838110156125e65781810151838201526020016125ce565b50505050905001935050505060405160208183030381529060405260405180866001600160a01b031681526020018581526020018060200184815260200180602001838103835286818151815260200191508051906020019080838360005b8381101561265d578181015183820152602001612645565b50505050905090810190601f16801561268a5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b838110156126bd5781810151838201526020016126a5565b50505050905090810190601f1680156126ea5780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390a460608101516000908152600660205260409020600301546001600160a01b031680156124eb576361eceae860e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916816001600160a01b03166361eceae8846000015185602001518660400151876060015188608001518960a001518a60c001518b60e001518c61010001518d61012001516040518b63ffffffff1660e01b8152600401808b6001600160a01b031681526020018a6001600160a01b03168152602001896001600160a01b031681526020018881526020018781526020018060200186815260200180602001806020018060200185810385528a818151815260200191508051906020019080838360005b8381101561282357818101518382015260200161280b565b50505050905090810190601f1680156128505780820380516001836020036101000a031916815260200191505b508581038452885181528851602091820191808b01910280838360005b8381101561288557818101518382015260200161286d565b50505050905001858103835287818151815260200191508051906020019060200280838360005b838110156128c45781810151838201526020016128ac565b50505050905001858103825286818151815260200191508051906020019060200280838360005b838110156129035781810151838201526020016128eb565b505050509050019e505050505050505050505050505050602060405180830381600087803b15801561293457600080fd5b505af1158015612948573d6000803e3d6000fd5b505050506040513d602081101561295e57600080fd5b50517fffffffff0000000000000000000000000000000000000000000000000000000016146124eb576040805162461bcd60e51b815260206004820152601a60248201527f53616c653a206e6f74696669636174696f6e2072656675736564000000000000604482015290519081900360640190fd5b600080826001600160a01b0316846001600160a01b03161415612a3e576040805162461bcd60e51b815260206004820152601960248201527f556e697377617056323a2073616d652061646472657373657300000000000000604482015290519081900360640190fd5b826001600160a01b0316846001600160a01b031610612a5e578284612a61565b83835b90925090506001600160a01b038216611522576040805162461bcd60e51b815260206004820152601760248201527f556e697377617056323a207a65726f2061646472657373000000000000000000604482015290519081900360640190fd5b6000806000612ad085856129d4565b91509150600860009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015612b2257600080fd5b505afa158015612b36573d6000803e3d6000fd5b505050506040513d6020811015612b4c57600080fd5b5051604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606095861b811660208381019190915294861b81166034830152825160288184030181526048830184528051908601207fff0000000000000000000000000000000000000000000000000000000000000060688401529390951b9094166069850152607d8401919091527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f609d808501919091528151808503909101815260bd909301905281519101209392505050565b6040820151600090612c409083906001600160a01b0316612f08565b905080611959576040805162461bcd60e51b815260206004820152601f60248201527f53616c653a20756e737570706f72746564207061796d656e7420746f6b656e00604482015290519081900360640190fd5b60006000198214612ca7575060006122e6565b600754600090612cc19085906001600160a01b0316612f08565b604086015160075460a0880151929350600092612ce892916001600160a01b031690611a25565b90506000612d198760800151612d1384611b93670de0b6b3a76400008861228d90919063ffffffff16565b9061228d565b604080516002808252606082018352929350919060208301908036833750505060e088018190528051869190600090612d4e57fe5b6020026020010181815250508160001b8760e00151600181518110612d6f57fe5b602090810291909101015260c08701525060019150509392505050565b600082815260018401602052604081205480612df15750506040805180820182528381526020808201848152865460018181018955600089815284812095516002909302909501918255915190820155865486845281880190925292909120556122e6565b82856000016001830381548110612e0457fe5b90600052602060002090600202016001018190555060009150506122e6565b600082821115612e7a576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052610bf2908590612f98565b600081815260018301602052604081205480612f6b576040805162461bcd60e51b815260206004820152601860248201527f456e756d4d61703a206e6f6e6578697374656e74206b65790000000000000000604482015290519081900360640190fd5b836000016001820381548110612f7d57fe5b90600052602060002090600202016001015491505092915050565b81612fab6001600160a01b0382166120b4565b612ffc576040805162461bcd60e51b815260206004820152601a60248201527f4552433230577261707065723a206e6f6e2d636f6e7472616374000000000000604482015290519081900360640190fd5b600080826001600160a01b0316846040518082805190602001908083835b6020831061305757805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161301a565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146130b9576040519150601f19603f3d011682016040523d82523d6000602084013e6130be565b606091505b5091509150811561313d57805115613138578080602001905160208110156130e557600080fd5b5051613138576040805162461bcd60e51b815260206004820152601e60248201527f4552433230577261707065723a206f7065726174696f6e206661696c65640000604482015290519081900360640190fd5b613199565b8051613190576040805162461bcd60e51b815260206004820152601e60248201527f4552433230577261707065723a206f7065726174696f6e206661696c65640000604482015290519081900360640190fd5b80518082602001fd5b5050505050565b60405180610140016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160008019168152602001600081526020016060815260200160008152602001606081526020016060815260200160608152509056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a26469706673582212207bf162d0d6db3baa2a2e71f061b502ddf28ef9c654d65da6a878e54236364e6464736f6c63430007060033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x180 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8456CB59 GT PUSH2 0xD6 JUMPI DUP1 PUSH4 0xA963B257 GT PUSH2 0x7F JUMPI DUP1 PUSH4 0xD52BB6F4 GT PUSH2 0x59 JUMPI DUP1 PUSH4 0xD52BB6F4 EQ PUSH2 0x892 JUMPI DUP1 PUSH4 0xF21F537D EQ PUSH2 0x8E6 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x8FB JUMPI PUSH2 0x180 JUMP JUMPDEST DUP1 PUSH4 0xA963B257 EQ PUSH2 0x719 JUMPI DUP1 PUSH4 0xBE9A6555 EQ PUSH2 0x7AE JUMPI DUP1 PUSH4 0xC7B778DB EQ PUSH2 0x7C3 JUMPI PUSH2 0x180 JUMP JUMPDEST DUP1 PUSH4 0x9865BCC8 GT PUSH2 0xB0 JUMPI DUP1 PUSH4 0x9865BCC8 EQ PUSH2 0x65C JUMPI DUP1 PUSH4 0x9E049545 EQ PUSH2 0x65C JUMPI DUP1 PUSH4 0xA1E16908 EQ PUSH2 0x683 JUMPI PUSH2 0x180 JUMP JUMPDEST DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x61D JUMPI DUP1 PUSH4 0x8488BB4E EQ PUSH2 0x632 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x647 JUMPI PUSH2 0x180 JUMP JUMPDEST DUP1 PUSH4 0x3F4BA83A GT PUSH2 0x138 JUMPI DUP1 PUSH4 0x5E6E9F70 GT PUSH2 0x112 JUMPI DUP1 PUSH4 0x5E6E9F70 EQ PUSH2 0x44A JUMPI DUP1 PUSH4 0x61BD3851 EQ PUSH2 0x585 JUMPI DUP1 PUSH4 0x6B8F9C43 EQ PUSH2 0x5EA JUMPI PUSH2 0x180 JUMP JUMPDEST DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x3F7 JUMPI DUP1 PUSH4 0x5C4FAFC7 EQ PUSH2 0x40C JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x421 JUMPI PUSH2 0x180 JUMP JUMPDEST DUP1 PUSH4 0x1694505E GT PUSH2 0x169 JUMPI DUP1 PUSH4 0x1694505E EQ PUSH2 0x2B3 JUMPI DUP1 PUSH4 0x2A8A45BC EQ PUSH2 0x2C8 JUMPI DUP1 PUSH4 0x2C87927B EQ PUSH2 0x3B0 JUMPI PUSH2 0x180 JUMP JUMPDEST DUP1 PUSH4 0x1265B651 EQ PUSH2 0x185 JUMPI DUP1 PUSH4 0x1323B066 EQ PUSH2 0x1B6 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x191 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19A PUSH2 0x92E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x258 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x1D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x219 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x22B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x24D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x93D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x29E JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x286 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP4 POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19A PUSH2 0xA32 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2F2 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0xA41 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x357 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x33F JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x396 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x37E JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP9 POP POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3F5 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x3D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xBE6 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x403 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3F5 PUSH2 0xBF8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x418 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19A PUSH2 0xC66 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x42D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x436 PUSH2 0xC7E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x456 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3F5 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x46D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x48F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x4A1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x4C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 SWAP5 SWAP4 PUSH1 0x20 DUP2 ADD SWAP4 POP CALLDATALOAD SWAP2 POP POP PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x513 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x525 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x547 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0xC87 SWAP5 POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x591 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x59A PUSH2 0xE64 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 DUP2 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x5D6 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x5BE JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3F5 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x60D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xEBF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x629 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3F5 PUSH2 0xF8C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x63E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19A PUSH2 0xFF3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x653 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19A PUSH2 0x1002 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x668 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x671 PUSH2 0x1011 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x68F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x671 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x6A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 DUP2 ADD SWAP1 PUSH1 0x60 DUP2 ADD PUSH1 0x40 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x6DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x6EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x70E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x1017 JUMP JUMPDEST PUSH2 0x3F5 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x72F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x76F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x781 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x7A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x1063 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3F5 PUSH2 0x1149 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x59A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x7E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x801 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x813 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x835 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH1 0x20 DUP2 ADD SWAP1 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x853 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x865 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x887 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x115C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x89E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x8CD PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x8B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x1248 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x671 PUSH2 0x13A4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x907 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3F5 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x91E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x13AA JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x2 SLOAD PUSH1 0x0 EQ ISZERO PUSH2 0x999 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x9A1 PUSH2 0x1410 JUMP JUMPDEST PUSH2 0x9A9 PUSH2 0x31A0 JUMP JUMPDEST PUSH2 0x9B1 PUSH2 0x1468 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP10 DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP10 AND PUSH1 0x40 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD DUP10 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP9 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x1F DUP8 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD SWAP1 SWAP2 MSTORE DUP6 DUP2 MSTORE SWAP1 DUP7 SWAP1 DUP7 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP POP PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0xA22 DUP2 PUSH2 0x146C JUMP JUMPDEST SWAP3 POP SWAP3 POP POP SWAP7 POP SWAP7 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP2 SWAP1 DUP2 SWAP1 DUP2 SWAP1 PUSH1 0x60 SWAP1 DUP2 SWAP1 DUP4 PUSH2 0xA67 PUSH1 0x4 DUP4 ADD PUSH2 0x1493 JUMP JUMPDEST DUP3 SLOAD SWAP9 POP SWAP1 POP DUP8 PUSH2 0xABF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7500000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x3 DUP5 ADD SLOAD SWAP2 SWAP9 POP SWAP7 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP5 POP DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0xAF5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xB1F JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP4 POP DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0xB39 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xB63 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xBDA JUMPI PUSH1 0x0 DUP1 PUSH2 0xB81 PUSH1 0x4 DUP7 ADD DUP5 PUSH2 0x1497 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP2 PUSH1 0x0 SHR DUP8 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0xB95 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP DUP1 PUSH1 0x0 SHR DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0xBC5 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP POP PUSH1 0x1 ADD PUSH2 0xB69 JUMP JUMPDEST POP POP POP SWAP2 SWAP4 SWAP6 POP SWAP2 SWAP4 SWAP6 JUMP JUMPDEST PUSH2 0xBF2 DUP5 DUP5 DUP5 DUP5 PUSH2 0x1529 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0xC4C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0xC5C PUSH2 0xC57 PUSH2 0x1468 JUMP JUMPDEST PUSH2 0x1760 JUMP JUMPDEST PUSH2 0xC64 PUSH2 0x1827 JUMP JUMPDEST JUMP JUMPDEST PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0xC92 PUSH2 0xC57 PUSH2 0x1468 JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD DUP2 EQ PUSH2 0xCE9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E636F6E73697374656E742061727261797300000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0xD4A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7500000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP2 ADD DUP3 PUSH2 0xD95 JUMPI PUSH1 0x0 PUSH2 0xD5E DUP3 PUSH2 0x1493 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xD8E JUMPI PUSH1 0x0 PUSH2 0xD77 DUP5 DUP3 PUSH2 0x1497 JUMP JUMPDEST POP SWAP1 POP PUSH2 0xD84 DUP5 DUP3 PUSH2 0x187F JUMP JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0xD63 JUMP JUMPDEST POP POP PUSH2 0xDA0 JUMP JUMPDEST PUSH2 0xDA0 DUP2 DUP7 DUP7 PUSH2 0x195F JUMP JUMPDEST DUP6 PUSH32 0xCB3FE5489E0CD43D0F4A33D1E09A4A0463A03D0D38F56165530854E5540DB143 DUP7 DUP7 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xE08 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xDF0 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xE47 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xE2F JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x4 PUSH1 0x0 ADD DUP1 SLOAD DUP1 PUSH1 0x20 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 DUP1 ISZERO PUSH2 0xEB5 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0xEA1 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0xECA PUSH2 0xC57 PUSH2 0x1468 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xF25 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061796F75743A207A65726F2061646472657373000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 SWAP1 SWAP2 OR SWAP2 DUP3 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD SWAP3 SWAP1 SWAP2 AND DUP3 MSTORE MLOAD PUSH32 0xDD880D24A789958A6398C99C2E54CE31BC10A638CBC42F7DD34285479AE0F855 SWAP2 PUSH1 0x20 SWAP1 DUP3 SWAP1 SUB ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0xFE0 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0xFEB PUSH2 0xC57 PUSH2 0x1468 JUMP JUMPDEST PUSH2 0xC64 PUSH2 0x19E7 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 NOT DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x105A DUP6 DUP6 DUP6 DUP6 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1A25 SWAP3 POP POP POP JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x10B7 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x10BF PUSH2 0x1410 JUMP JUMPDEST PUSH2 0x10C7 PUSH2 0x31A0 JUMP JUMPDEST PUSH2 0x10CF PUSH2 0x1468 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP8 DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP8 AND PUSH1 0x40 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD DUP8 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP7 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x1F DUP6 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD SWAP1 SWAP2 MSTORE DUP4 DUP2 MSTORE SWAP1 DUP5 SWAP1 DUP5 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP POP PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x1140 DUP2 PUSH2 0x1BA3 JUMP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x1154 PUSH2 0xC57 PUSH2 0x1468 JUMP JUMPDEST PUSH2 0xC5C PUSH2 0x1BD0 JUMP JUMPDEST PUSH1 0x60 DUP4 DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x1176 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x11A0 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x123E JUMPI PUSH2 0x121F DUP8 DUP8 DUP4 DUP2 DUP2 LT PUSH2 0x11BD JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x7 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 DUP8 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1A25 SWAP3 POP POP POP JUMP JUMPDEST DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x122B JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x11A6 JUMP JUMPDEST POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x12ED JUMPI PUSH1 0x8 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND 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 PUSH2 0x12BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x12D2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x12E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP4 POP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x138F JUMPI PUSH1 0x8 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND 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 PUSH2 0x1360 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1374 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x138A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP3 POP JUMPDEST PUSH2 0x1399 DUP5 DUP5 PUSH2 0x1C52 JUMP JUMPDEST SWAP1 SWAP6 SWAP1 SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x13B5 PUSH2 0xC57 PUSH2 0x1468 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 DUP3 OR DUP1 DUP5 SSTORE PUSH1 0x40 MLOAD SWAP3 SWAP4 SWAP2 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xC64 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061757361626C653A2070617573656400000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x1479 DUP4 PUSH2 0x1D1E JUMP JUMPDEST PUSH2 0x1482 DUP4 PUSH2 0x1FC8 JUMP JUMPDEST POP POP PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xE0 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP2 JUMP JUMPDEST SLOAD SWAP1 JUMP JUMPDEST DUP2 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP4 LT PUSH2 0x14F1 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x456E756D4D61703A20696E646578206F7574206F6620626F756E647300000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 PUSH1 0x0 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x1502 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD SWAP1 POP DUP1 PUSH1 0x0 ADD SLOAD DUP2 PUSH1 0x1 ADD SLOAD SWAP3 POP SWAP3 POP POP JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP3 PUSH2 0x157B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F20737570706C79000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH2 0x15A6 PUSH1 0x4 PUSH2 0x1493 JUMP JUMPDEST LT PUSH2 0x15F8 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20746F6F206D616E7920736B757300000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x1603 PUSH1 0x4 DUP6 PUSH2 0x206A JUMP JUMPDEST PUSH2 0x1654 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20736B7520616C7265616479206372656174656400000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO PUSH2 0x16C6 JUMPI PUSH2 0x1675 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x20B4 JUMP JUMPDEST PUSH2 0x16C6 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D636F6E74726163742072656365697665720000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP6 DUP2 SSTORE PUSH1 0x1 DUP2 ADD DUP7 SWAP1 SSTORE PUSH1 0x2 DUP2 ADD DUP6 SWAP1 SSTORE PUSH1 0x3 DUP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT SWAP1 SWAP2 AND DUP2 OR SWAP1 SWAP2 SSTORE DUP4 MLOAD DUP9 DUP2 MSTORE SWAP3 DUP4 ADD DUP8 SWAP1 MSTORE DUP3 DUP5 ADD DUP7 SWAP1 MSTORE PUSH1 0x60 DUP4 ADD MSTORE SWAP2 MLOAD PUSH32 0x38BD4AABCE684540CD61351B91F2F5FACF9D6963934347E25AAB93D87AE7AC14 SWAP2 DUP2 SWAP1 SUB PUSH1 0x80 ADD SWAP1 LOG1 POP POP POP POP POP JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8DA5CB5B 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 PUSH2 0x1799 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x17AD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x17C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ PUSH2 0x1824 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6F7420746865206F776E657200000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0x182F PUSH2 0x20BA JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA PUSH2 0x1862 PUSH2 0x1468 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0x1953 JUMPI DUP4 SLOAD PUSH1 0x0 NOT DUP1 DUP4 ADD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x0 SWAP1 DUP8 SWAP1 DUP4 SWAP1 DUP2 LT PUSH2 0x18B2 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD SWAP1 POP DUP1 DUP8 PUSH1 0x0 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x18D2 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 DUP5 SLOAD PUSH1 0x2 SWAP1 SWAP4 MUL ADD SWAP2 DUP3 SSTORE PUSH1 0x1 SWAP4 DUP5 ADD SLOAD SWAP2 DUP5 ADD SWAP2 SWAP1 SWAP2 SSTORE DUP4 SLOAD DUP3 MSTORE DUP10 DUP4 ADD SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP1 DUP5 ADD SWAP1 SSTORE DUP7 SLOAD DUP8 SWAP1 DUP1 PUSH2 0x1911 JUMPI INVALID JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 PUSH1 0x2 PUSH1 0x0 NOT SWAP1 SWAP5 ADD SWAP4 DUP5 MUL ADD DUP3 DUP2 SSTORE PUSH1 0x1 SWAP1 DUP2 ADD DUP4 SWAP1 SSTORE SWAP3 SWAP1 SWAP4 SSTORE DUP9 DUP2 MSTORE DUP10 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x40 DUP3 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE SWAP5 POP PUSH2 0x1959 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SWAP2 POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x196A DUP4 DUP4 DUP4 PUSH2 0x2111 JUMP JUMPDEST PUSH2 0x1973 DUP4 PUSH2 0x1493 JUMP JUMPDEST ISZERO DUP1 PUSH2 0x1991 JUMPI POP PUSH1 0x7 SLOAD PUSH2 0x1991 SWAP1 DUP5 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2275 JUMP JUMPDEST PUSH2 0x19E2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F207265666572656E636520746F6B656E0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x19EF PUSH2 0x1410 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH2 0x1862 PUSH2 0x1468 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x1AC9 JUMPI PUSH1 0x8 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND 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 PUSH2 0x1A9A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1AAE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1AC4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP4 POP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x1B6B JUMPI PUSH1 0x8 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND 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 PUSH2 0x1B3C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1B50 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1B66 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP3 POP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1B78 DUP7 DUP7 PUSH2 0x1C52 JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x1B99 DUP3 PUSH2 0x1B93 DUP4 PUSH8 0xDE0B6B3A7640000 PUSH2 0x228D JUMP JUMPDEST SWAP1 PUSH2 0x22ED JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x1BAC DUP2 PUSH2 0x1D1E JUMP JUMPDEST PUSH2 0x1BB5 DUP2 PUSH2 0x1FC8 JUMP JUMPDEST PUSH2 0x1BBE DUP2 PUSH2 0x2354 JUMP JUMPDEST PUSH2 0x1BC7 DUP2 PUSH2 0x24A3 JUMP JUMPDEST PUSH2 0x1824 DUP2 PUSH2 0x24EF JUMP JUMPDEST PUSH1 0x2 SLOAD ISZERO PUSH2 0x1C25 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A20737461727465640000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST TIMESTAMP PUSH1 0x2 SSTORE PUSH32 0x27029695AA5F602A4EE81F4C32DFA86E562F200A17966496F3A7C3F2EC0F9417 PUSH2 0x1862 PUSH2 0x1468 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1C61 DUP6 DUP6 PUSH2 0x29D4 JUMP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP1 PUSH2 0x1C71 DUP8 DUP8 PUSH2 0x2AC1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x902F1AC PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1CA9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1CBD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1CD3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND SWAP4 POP AND SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND SWAP1 DUP5 AND EQ PUSH2 0x1D0D JUMPI DUP1 DUP3 PUSH2 0x1D10 JUMP JUMPDEST DUP2 DUP2 JUMPDEST SWAP1 SWAP9 SWAP1 SWAP8 POP SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1D7D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F206164647265737320726563697069656E7400000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1DDC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F206164647265737320746F6B656E0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x80 DUP2 ADD MLOAD PUSH2 0x1E32 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F207175616E7469747920707572636861736500000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0x1E98 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7500000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x80 ADD MLOAD DUP2 PUSH1 0x2 ADD SLOAD LT ISZERO PUSH2 0x1EF5 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A2061626F7665206D6178207175616E746974790000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 SLOAD PUSH1 0x0 NOT EQ PUSH2 0x1F5C JUMPI DUP2 PUSH1 0x80 ADD MLOAD DUP2 PUSH1 0x1 ADD SLOAD LT ISZERO PUSH2 0x1F5C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E73756666696369656E7420737570706C7900000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1F77 PUSH1 0x4 DUP4 ADD DUP3 PUSH2 0x2275 JUMP JUMPDEST PUSH2 0x19E2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7520746F6B656E00000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0x202E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20756E737570706F7274656420534B550000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP2 ADD PUSH1 0x0 PUSH2 0x203E DUP5 DUP4 PUSH2 0x2C24 JUMP JUMPDEST SWAP1 POP PUSH2 0x204B DUP5 DUP4 DUP4 PUSH2 0x2C94 JUMP JUMPDEST PUSH2 0xBF2 JUMPI PUSH1 0x80 DUP5 ADD MLOAD PUSH2 0x205F SWAP1 DUP3 SWAP1 PUSH2 0x228D JUMP JUMPDEST PUSH1 0xC0 DUP6 ADD MSTORE POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2076 DUP4 DUP4 PUSH2 0x2275 JUMP JUMPDEST PUSH2 0x20AC JUMPI POP DUP2 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP5 SSTORE PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 SWAP1 SWAP4 ADD DUP5 SWAP1 SSTORE DUP5 SLOAD DUP5 DUP3 MSTORE DUP3 DUP7 ADD SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0x1959 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x1959 JUMP JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND PUSH2 0xC64 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061757361626C653A206E6F7420706175736564000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x21F7 JUMPI PUSH1 0x0 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x212B JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x219D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F206164647265737320746F6B656E0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x21AB JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP DUP1 PUSH1 0x0 EQ ISZERO PUSH2 0x21D7 JUMPI PUSH2 0x21D1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x187F JUMP JUMPDEST POP PUSH2 0x21ED JUMP JUMPDEST PUSH2 0x21EB DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP4 PUSH2 0x2D8C JUMP JUMPDEST POP JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x2114 JUMP JUMPDEST POP PUSH32 0x0 PUSH2 0x2222 DUP5 PUSH2 0x1493 JUMP JUMPDEST GT ISZERO PUSH2 0x19E2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20746F6F206D616E7920746F6B656E730000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x229C JUMPI POP PUSH1 0x0 PUSH2 0x1959 JUMP JUMPDEST DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 PUSH2 0x22A9 JUMPI INVALID JUMPDEST DIV EQ PUSH2 0x22E6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x3212 PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 GT PUSH2 0x2343 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206469766973696F6E206279207A65726F000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 DUP4 DUP2 PUSH2 0x234C JUMPI INVALID JUMPDEST DIV SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x2477 JUMPI DUP1 PUSH1 0xC0 ADD MLOAD CALLVALUE LT ISZERO PUSH2 0x23D6 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E73756666696369656E742045544800000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xC0 DUP3 ADD MLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 DUP2 ISZERO PUSH2 0x8FC MUL SWAP2 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x2414 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x0 PUSH2 0x242E DUP3 PUSH1 0xC0 ADD MLOAD CALLVALUE PUSH2 0x2E23 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x2471 JUMPI DUP2 MLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 DUP3 ISZERO PUSH2 0x8FC MUL SWAP1 DUP4 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x246F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP JUMPDEST POP PUSH2 0x1824 JUMP JUMPDEST PUSH2 0x1824 PUSH2 0x2482 PUSH2 0x1468 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xC0 DUP5 ADD MLOAD PUSH1 0x40 DUP6 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP4 SWAP3 AND SWAP1 PUSH2 0x2E80 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x0 NOT EQ PUSH2 0x24EB JUMPI PUSH1 0x80 DUP3 ADD MLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH2 0x24D3 SWAP2 PUSH2 0x2E23 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SSTORE JUMPDEST POP POP JUMP JUMPDEST DUP1 PUSH1 0x60 ADD MLOAD DUP2 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x29F844483CA6B10B5C0611D039AFC15CE8F6380E905307B381C3A8EE4E90E11E DUP5 PUSH1 0x20 ADD MLOAD DUP6 PUSH1 0x80 ADD MLOAD DUP7 PUSH1 0xA0 ADD MLOAD DUP8 PUSH1 0xC0 ADD MLOAD DUP9 PUSH1 0xE0 ADD MLOAD DUP10 PUSH2 0x100 ADD MLOAD DUP11 PUSH2 0x120 ADD MLOAD PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP5 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2586 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x256E JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x25B6 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x259E JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x25E6 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x25CE JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP4 POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP7 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x265D JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2645 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x268A JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP DUP4 DUP2 SUB DUP3 MSTORE DUP5 MLOAD DUP2 MSTORE DUP5 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP7 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x26BD JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x26A5 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x26EA JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP8 POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 ISZERO PUSH2 0x24EB JUMPI PUSH4 0x61ECEAE8 PUSH1 0xE0 SHL PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x61ECEAE8 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD DUP7 PUSH1 0x40 ADD MLOAD DUP8 PUSH1 0x60 ADD MLOAD DUP9 PUSH1 0x80 ADD MLOAD DUP10 PUSH1 0xA0 ADD MLOAD DUP11 PUSH1 0xC0 ADD MLOAD DUP12 PUSH1 0xE0 ADD MLOAD DUP13 PUSH2 0x100 ADD MLOAD DUP14 PUSH2 0x120 ADD MLOAD PUSH1 0x40 MLOAD DUP12 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP6 DUP2 SUB DUP6 MSTORE DUP11 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2823 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x280B JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x2850 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP DUP6 DUP2 SUB DUP5 MSTORE DUP9 MLOAD DUP2 MSTORE DUP9 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP1 DUP12 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2885 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x286D JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP6 DUP2 SUB DUP4 MSTORE DUP8 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x28C4 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x28AC JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP6 DUP2 SUB DUP3 MSTORE DUP7 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2903 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x28EB JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP15 POP POP POP POP POP POP POP POP POP POP POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2934 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2948 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x295E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND EQ PUSH2 0x24EB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F74696669636174696F6E2072656675736564000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x2A3E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x556E697377617056323A2073616D652061646472657373657300000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH2 0x2A5E JUMPI DUP3 DUP5 PUSH2 0x2A61 JUMP JUMPDEST DUP4 DUP4 JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x1522 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x556E697377617056323A207A65726F2061646472657373000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x2AD0 DUP6 DUP6 PUSH2 0x29D4 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x8 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND 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 PUSH2 0x2B22 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2B36 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2B4C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 PUSH1 0x60 SWAP6 DUP7 SHL DUP2 AND PUSH1 0x20 DUP4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP5 DUP7 SHL DUP2 AND PUSH1 0x34 DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x28 DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH1 0x48 DUP4 ADD DUP5 MSTORE DUP1 MLOAD SWAP1 DUP7 ADD KECCAK256 PUSH32 0xFF00000000000000000000000000000000000000000000000000000000000000 PUSH1 0x68 DUP5 ADD MSTORE SWAP4 SWAP1 SWAP6 SHL SWAP1 SWAP5 AND PUSH1 0x69 DUP6 ADD MSTORE PUSH1 0x7D DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x96E8AC4277198FF8B6F785478AA9A39F403CB768DD02CBEE326C3E7DA348845F PUSH1 0x9D DUP1 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MLOAD DUP1 DUP6 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xBD SWAP1 SWAP4 ADD SWAP1 MSTORE DUP2 MLOAD SWAP2 ADD KECCAK256 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x0 SWAP1 PUSH2 0x2C40 SWAP1 DUP4 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2F08 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x1959 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20756E737570706F72746564207061796D656E7420746F6B656E00 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x0 NOT DUP3 EQ PUSH2 0x2CA7 JUMPI POP PUSH1 0x0 PUSH2 0x22E6 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x2CC1 SWAP1 DUP6 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2F08 JUMP JUMPDEST PUSH1 0x40 DUP7 ADD MLOAD PUSH1 0x7 SLOAD PUSH1 0xA0 DUP9 ADD MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 PUSH2 0x2CE8 SWAP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH2 0x1A25 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2D19 DUP8 PUSH1 0x80 ADD MLOAD PUSH2 0x2D13 DUP5 PUSH2 0x1B93 PUSH8 0xDE0B6B3A7640000 DUP9 PUSH2 0x228D SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 PUSH2 0x228D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x2 DUP1 DUP3 MSTORE PUSH1 0x60 DUP3 ADD DUP4 MSTORE SWAP3 SWAP4 POP SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP POP POP PUSH1 0xE0 DUP9 ADD DUP2 SWAP1 MSTORE DUP1 MLOAD DUP7 SWAP2 SWAP1 PUSH1 0x0 SWAP1 PUSH2 0x2D4E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP2 PUSH1 0x0 SHL DUP8 PUSH1 0xE0 ADD MLOAD PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x2D6F JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0xC0 DUP8 ADD MSTORE POP PUSH1 0x1 SWAP2 POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x1 DUP5 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 PUSH2 0x2DF1 JUMPI POP POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE DUP4 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD DUP5 DUP2 MSTORE DUP7 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP10 SSTORE PUSH1 0x0 DUP10 DUP2 MSTORE DUP5 DUP2 KECCAK256 SWAP6 MLOAD PUSH1 0x2 SWAP1 SWAP4 MUL SWAP1 SWAP6 ADD SWAP2 DUP3 SSTORE SWAP2 MLOAD SWAP1 DUP3 ADD SSTORE DUP7 SLOAD DUP7 DUP5 MSTORE DUP2 DUP9 ADD SWAP1 SWAP3 MSTORE SWAP3 SWAP1 SWAP2 KECCAK256 SSTORE PUSH2 0x22E6 JUMP JUMPDEST DUP3 DUP6 PUSH1 0x0 ADD PUSH1 0x1 DUP4 SUB DUP2 SLOAD DUP2 LT PUSH2 0x2E04 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD PUSH1 0x1 ADD DUP2 SWAP1 SSTORE POP PUSH1 0x0 SWAP2 POP POP PUSH2 0x22E6 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 GT ISZERO PUSH2 0x2E7A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x24 DUP4 ADD MSTORE DUP5 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x84 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 OR SWAP1 MSTORE PUSH2 0xBF2 SWAP1 DUP6 SWAP1 PUSH2 0x2F98 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 PUSH2 0x2F6B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x456E756D4D61703A206E6F6E6578697374656E74206B65790000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP4 PUSH1 0x0 ADD PUSH1 0x1 DUP3 SUB DUP2 SLOAD DUP2 LT PUSH2 0x2F7D JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD PUSH1 0x1 ADD SLOAD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 PUSH2 0x2FAB PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x20B4 JUMP JUMPDEST PUSH2 0x2FFC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433230577261707065723A206E6F6E2D636F6E7472616374000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x3057 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x301A JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x30B9 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x30BE JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 ISZERO PUSH2 0x313D JUMPI DUP1 MLOAD ISZERO PUSH2 0x3138 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x30E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x3138 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433230577261707065723A206F7065726174696F6E206661696C65640000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x3199 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x3190 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433230577261707065723A206F7065726174696F6E206661696C65640000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 MLOAD DUP1 DUP3 PUSH1 0x20 ADD REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x140 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP1 NOT AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE POP SWAP1 JUMP INVALID MSTORE8 PUSH2 0x6665 0x4D PUSH2 0x7468 GASPRICE KECCAK256 PUSH14 0x756C7469706C69636174696F6E20 PUSH16 0x766572666C6F77A26469706673582212 KECCAK256 PUSH28 0xF162D0D6DB3BAA2A2E71F061B502DDF28EF9C654D65DA6A878E54236 CALLDATASIZE 0x4E PUSH5 0x64736F6C63 NUMBER STOP SMOD MOD STOP CALLER ","sourceMap":"153:1225:16:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;941:29:29;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;941:29:29;;;;;;;;;;;;;;9044:610:32;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9044:610:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9044:610:32;;-1:-1:-1;9044:610:32;-1:-1:-1;9044:610:32;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;491:39:22;;;;;;;;;;;;;:::i;10463:1027:32:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10463:1027:32;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10463:1027:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;520:255:16;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;520:255:16;;;;;;;;;;;;;;;;-1:-1:-1;;;;;520:255:16;;:::i;:::-;;4169:114:32;;;;;;;;;;;;;:::i;1698:98::-;;;;;;;;;;;;;:::i;482:18:5:-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;5032:943:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5032:943:32;;;;;;;;-1:-1:-1;5032:943:32;;-1:-1:-1;;5032:943:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5032:943:32;;-1:-1:-1;5032:943:32;;-1:-1:-1;;;;;5032:943:32:i;11621:110::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;660:263:8;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;660:263:8;-1:-1:-1;;;;;660:263:8;;:::i;3787:110:32:-;;;;;;;;;;;;;:::i;379:35:8:-;;;;;;;;;;;;;:::i;1114:94:1:-;;;;;;;;;;;;;:::i;857:77:29:-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;781:227:16;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;781:227:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;781:227:16;;-1:-1:-1;781:227:16;-1:-1:-1;781:227:16;:::i;6962:537:32:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6962:537:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6962:537:32;;-1:-1:-1;6962:537:32;-1:-1:-1;6962:537:32;:::i;3396:118::-;;;;;;;;;;;;;:::i;3632:353:29:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3632:353:29;;-1:-1:-1;3632:353:29;-1:-1:-1;3632:353:29;:::i;1014:362:16:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1014:362:16;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1276:85:6;;;;;;;;;;;;;:::i;1448:197:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1448:197:1;-1:-1:-1;;;;;1448:197:1;;:::i;941:29:29:-;;;-1:-1:-1;;;;;941:29:29;;:::o;9044:610:32:-;9266:18;9286:28;988:10:6;;1002:1;988:15;;980:50;;;;;-1:-1:-1;;;980:50:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;9326:19:32::1;:17;:19::i;:::-;9355:28;;:::i;:::-;9414:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;9393:33:32;;::::1;::::0;;9436:30;;::::1;:18;::::0;;::::1;:30:::0;;;;9476:22;;::::1;:14;::::0;;::::1;:22:::0;;;;9508:12:::1;::::0;::::1;:18:::0;;;9536:17:::1;::::0;::::1;:28:::0;;;9574;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;;;9594:8;;;;;;9574:28;::::1;9594:8:::0;;;;9574:28;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;;;;9574:17:32::1;::::0;::::1;:28:::0;9620:27:::1;9574:8:::0;9620:17:::1;:27::i;:::-;9613:34;;;;;9044:610:::0;;;;;;;;;:::o;491:39:22:-;;;-1:-1:-1;;;;;491:39:22;;:::o;10463:1027:32:-;10573:19;10841:14;;;:9;:14;;;;;10573:19;;;;;;10730:23;;;;10573:19;10882:23;:14;;;:21;:23::i;:::-;10930:19;;;-1:-1:-1;10865:40:32;-1:-1:-1;10967:16:32;10959:51;;;;;-1:-1:-1;;;10959:51:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;11038:23;;;;11096:30;;;;11160:29;;;;11038:23;;-1:-1:-1;11096:30:32;-1:-1:-1;;;;;;11160:29:32;;-1:-1:-1;11223:6:32;11209:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11209:21:32;;11200:30;;11263:6;11249:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11249:21:32;;11240:30;;11285:9;11280:204;11304:6;11300:1;:10;11280:204;;;11332:13;;11364:20;:14;;;11382:1;11364:17;:20::i;:::-;11331:53;;;;11426:5;11418:14;;11398:6;11405:1;11398:9;;;;;;;;;;;;;:35;-1:-1:-1;;;;;11398:35:32;;;-1:-1:-1;;;;;11398:35:32;;;;;11467:5;11459:14;;11447:6;11454:1;11447:9;;;;;;;;;;;;;;;;;:26;-1:-1:-1;;11312:3:32;;11280:204;;;;10463:1027;;;;;;;;;:::o;520:255:16:-;693:75;704:3;709:11;722:22;746:21;693:10;:75::i;:::-;520:255;;;;:::o;4169:114:32:-;988:10:6;;980:50;;;;;-1:-1:-1;;;980:50:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;4225:31:32::1;4243:12;:10;:12::i;:::-;4225:17;:31::i;:::-;4266:10;:8;:10::i;:::-;4169:114::o:0;1698:98::-;1751:44;1698:98;:::o;482:18:5:-;;;;;;:::o;5032:943:32:-;5176:31;5194:12;:10;:12::i;5176:31::-;5234:13;;5275;;5265:23;;5257:61;;;;;-1:-1:-1;;;5257:61:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;5328:23;5354:14;;;:9;:14;;;;;5386:19;;5378:59;;;;;-1:-1:-1;;;5378:59:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;5482:14;;;5510:11;5506:410;;5537:21;5561:20;:11;:18;:20::i;:::-;5537:44;;5600:9;5595:236;5619:13;5615:1;:17;5595:236;;;5737:13;5756:17;:11;5737:13;5756:14;:17::i;:::-;-1:-1:-1;5736:37:32;-1:-1:-1;5791:25:32;:11;5736:37;5791:18;:25::i;:::-;-1:-1:-1;;5634:3:32;;5595:236;;;;5506:410;;;;5861:44;5877:11;5890:6;5898;5861:15;:44::i;:::-;5948:3;5931:37;5953:6;5961;5931:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5032:943;;;;;;:::o;11621:110::-;11672:21;11712:5;:12;;11705:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11621:110;:::o;660:263:8:-;733:31;751:12;:10;:12::i;733:31::-;-1:-1:-1;;;;;782:27:8;;774:60;;;;;-1:-1:-1;;;774:60:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;844:12;:28;;-1:-1:-1;;844:28:8;-1:-1:-1;;;;;844:28:8;;;;;;;;;;;887:29;;;903:12;;;;887:29;;;;;;;;;;;;;660:263;:::o;3787:110:32:-;988:10:6;;980:50;;;;;-1:-1:-1;;;980:50:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;3841:31:32::1;3859:12;:10;:12::i;3841:31::-;3882:8;:6;:8::i;379:35:8:-:0;;;-1:-1:-1;;;;;379:35:8;;:::o;1114:94:1:-;1169:7;1195:6;-1:-1:-1;;;;;1195:6:1;1114:94;:::o;857:77:29:-;-1:-1:-1;;857:77:29;:::o;781:227:16:-;929:12;960:41;976:9;987:7;996:4;;960:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;960:15:16;;-1:-1:-1;;;960:41:16:i;:::-;953:48;781:227;-1:-1:-1;;;;;781:227:16:o;6962:537:32:-;988:10:6;;980:50;;;;;-1:-1:-1;;;980:50:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;7183:19:32::1;:17;:19::i;:::-;7212:28;;:::i;:::-;7271:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;7250:33:32;;::::1;::::0;;7293:30;;::::1;:18;::::0;;::::1;:30:::0;;;;7333:22;;::::1;:14;::::0;;::::1;:22:::0;;;;7365:12:::1;::::0;::::1;:18:::0;;;7393:17:::1;::::0;::::1;:28:::0;;;7431;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;;;7451:8;;;;;;7431:28;::::1;7451:8:::0;;;;7431:28;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;;;;7431:17:32::1;::::0;::::1;:28:::0;7470:22:::1;7431:8:::0;7470:12:::1;:22::i;:::-;1040:1:6;6962:537:32::0;;;;;;:::o;3396:118::-;3438:31;3456:12;:10;:12::i;3438:31::-;3479:8;:6;:8::i;3632:353:29:-;3745:22;3796:6;;3827:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3827:21:29;;3819:29;;3863:9;3858:121;3882:6;3878:1;:10;3858:121;;;3920:48;3936:6;;3943:1;3936:9;;;;;;;;;;;;;-1:-1:-1;;;;;3936:9:29;3947:14;;;;;;;;;-1:-1:-1;;;;;3947:14:29;3963:4;;3920:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3920:15:29;;-1:-1:-1;;;3920:48:29:i;:::-;3909:5;3915:1;3909:8;;;;;;;;;;;;;;;;;:59;3890:3;;3858:121;;;;3632:353;;;;;;;:::o;1014:362:16:-;1090:16;;-1:-1:-1;;;;;1140:19:16;;1751:44:32;1140:19:16;1136:81;;;1184:15;;;;;;;;;-1:-1:-1;;;;;1184:15:16;-1:-1:-1;;;;;1184:20:16;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1184:22:16;;-1:-1:-1;1136:81:16;-1:-1:-1;;;;;1231:19:16;;1751:44:32;1231:19:16;1227:81;;;1275:15;;;;;;;;;-1:-1:-1;;;;;1275:15:16;-1:-1:-1;;;;;1275:20:16;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1275:22:16;;-1:-1:-1;1227:81:16;1341:28;1354:6;1362;1341:12;:28::i;:::-;1318:51;;;;-1:-1:-1;1014:362:16;-1:-1:-1;;;1014:362:16:o;1276:85:6:-;1344:10;;1276:85;:::o;1448:197:1:-;1527:31;1545:12;:10;:12::i;1527:31::-;1568:6;:17;;-1:-1:-1;;1568:17:1;-1:-1:-1;;;;;1568:17:1;;;;;;;;;1600:38;;1568:17;;1621:6;;;1600:38;;1568:6;1600:38;1448:197;:::o;572:96:5:-;634:6;;;;633:7;625:36;;;;;-1:-1:-1;;;625:36:5;;;;;;;;;;;;;;;;;;;;;;;;;;;355:104:7;442:10;355:104;:::o;882:291:30:-;970:18;990:28;1030:21;1042:8;1030:11;:21::i;:::-;1061:18;1070:8;1061;:18::i;:::-;-1:-1:-1;;1103:19:30;;;;1146:20;;;;;1103:19;;882:291::o;4367:107:2:-;4449:18;;4367:107::o;4827:264::-;4930:18;;4894:7;;;;4930:26;-1:-1:-1;4922:67:2;;;;;-1:-1:-1;;;4922:67:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;5000:22;5025:3;:11;;5037:5;5025:18;;;;;;;;;;;;;;;;;;5000:43;;5061:5;:9;;;5072:5;:11;;;5053:31;;;;;4827:264;;;;;;:::o;12511:877:32:-;12701:16;12693:46;;;;;-1:-1:-1;;;12693:46:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;12774:13;12757:14;:5;:12;:14::i;:::-;:30;12749:62;;;;;-1:-1:-1;;;12749:62:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;12829:14;:5;12839:3;12829:9;:14::i;:::-;12821:52;;;;;-1:-1:-1;;;12821:52:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12887:35:32;;;12883:140;;12946:34;:21;-1:-1:-1;;;;;12946:32:32;;:34::i;:::-;12938:74;;;;;-1:-1:-1;;;12938:74:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;13032:23;13058:14;;;:9;:14;;;;;;;;;13082:33;;;13125:23;;;:37;;;13172:30;;;:55;;;13237:29;;;:53;;-1:-1:-1;;;;;13237:53:32;;-1:-1:-1;;13237:53:32;;;;;;;;13305:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12511:877;;;;;:::o;1770:136:1:-;1860:4;-1:-1:-1;;;;;1860:10:1;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1860:12:1;-1:-1:-1;;;;;1849:23:1;;;;;;1841:58;;;;;-1:-1:-1;;;1841:58:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;1770:136;:::o;1166:131:5:-;1213:16;:14;:16::i;:::-;1239:6;:14;;-1:-1:-1;;1239:14:5;;;1268:22;1277:12;:10;:12::i;:::-;1268:22;;;-1:-1:-1;;;;;1268:22:5;;;;;;;;;;;;;;1166:131::o;2556:1520:2:-;2620:4;2753:16;;;:11;;;:16;;;;;;2784:13;;2780:1290;;3221:18;;-1:-1:-1;;3175:12:2;;;;3221:22;;;;3151:21;;3221:3;;:22;;3512;;;;;;;;;;;;;;;;3483:51;;3655:9;3626:3;:11;;3638:13;3626:26;;;;;;;;;;;;;;;;:38;;:26;;;;;:38;;;;;;;;;;;;;;;3742:13;;3730:26;;:11;;;:26;;;;;3759:17;;;3730:46;;3882:17;;3730:3;;3882:17;;;;;;;;;;;;;;-1:-1:-1;;3882:17:2;;;;;;;;;;;;;;;;;;;;;3974:16;;;:11;;;:16;;;;;;3967:23;;;;3882:17;-1:-1:-1;4005:11:2;;-1:-1:-1;;;;4005:11:2;2780:1290;4054:5;4047:12;;;2556:1520;;;;;:::o;4676:361:29:-;4850:50;4872:11;4885:6;4893;4850:21;:50::i;:::-;4918:20;:11;:18;:20::i;:::-;:25;;:83;;-1:-1:-1;4984:14:29;;4947:54;;:11;;-1:-1:-1;;;;;4984:14:29;4947:20;:54::i;:::-;4910:120;;;;;-1:-1:-1;;;4910:120:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;4676:361;;;:::o;905:129:5:-;950:19;:17;:19::i;:::-;979:6;:13;;-1:-1:-1;;979:13:5;988:4;979:13;;;1007:20;1014:12;:10;:12::i;2299:505:27:-;2453:12;-1:-1:-1;;;;;2481:22:27;;1751:44:32;2481:22:27;2477:87;;;2531:15;;;;;;;;;-1:-1:-1;;;;;2531:15:27;-1:-1:-1;;;;;2531:20:27;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2531:22:27;;-1:-1:-1;2477:87:27;-1:-1:-1;;;;;2578:20:27;;1751:44:32;2578:20:27;2574:83;;;2624:15;;;;;;;;;-1:-1:-1;;;;;2624:15:27;-1:-1:-1;;;;;2624:20:27;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2624:22:27;;-1:-1:-1;2574:83:27;2668:19;2689:17;2710:32;2723:9;2734:7;2710:12;:32::i;:::-;2667:75;;-1:-1:-1;2667:75:27;-1:-1:-1;2759:38:27;2667:75;2759:21;2667:75;2773:6;2759:13;:21::i;:::-;:25;;:38::i;:::-;2752:45;2299:505;-1:-1:-1;;;;;;2299:505:27:o;1275:225:30:-;1354:21;1366:8;1354:11;:21::i;:::-;1385:18;1394:8;1385;:18::i;:::-;1413;1422:8;1413;:18::i;:::-;1441:19;1451:8;1441:9;:19::i;:::-;1470:23;1484:8;1470:13;:23::i;1496:131:6:-;789:10;;:15;781:46;;;;;-1:-1:-1;;;781:46:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;1569:15:::1;1556:10;:28:::0;1599:21:::1;1607:12;:10;:12::i;1571:378:22:-:0;1648:16;1666;1695:14;1715:27;1727:6;1735;1715:11;:27::i;:::-;1694:48;;;1753:16;1771;1808:24;1817:6;1825;1808:8;:24::i;:::-;-1:-1:-1;;;;;1793:52:22;;:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1793:54:22;;;;;;;1752:95;;;;;-1:-1:-1;1752:95:22;;-1:-1:-1;;;;;;1880:16:22;;;;;;;:62;;1923:8;1933;1880:62;;;1900:8;1910;1880:62;1857:85;;;;-1:-1:-1;1571:378:22;-1:-1:-1;;;;;;1571:378:22:o;15465:852:32:-;15565:18;;;;-1:-1:-1;;;;;15565:32:32;15557:73;;;;;-1:-1:-1;;;15557:73:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;15648:14;;;;-1:-1:-1;;;;;15648:28:32;15640:65;;;;;-1:-1:-1;;;15640:65:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;15723:17;;;;15715:63;;;;;-1:-1:-1;;;15715:63:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;15824:12;;;;15788:23;15814;;;:9;:23;;;;;15855:19;;15847:59;;;;;-1:-1:-1;;;15847:59:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;15958:8;:17;;;15924:7;:30;;;:51;;15916:88;;;;;-1:-1:-1;;;15916:88:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;16018:19;;-1:-1:-1;;16018:39:32;16014:152;;16108:8;:17;;;16081:7;:23;;;:44;;16073:82;;;;;-1:-1:-1;;;16073:82:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;16210:14;;;;-1:-1:-1;;;;;16202:23:32;16244:33;:14;;;16202:23;16244;:33::i;:::-;16236:74;;;;;-1:-1:-1;;;16236:74:32;;;;;;;;;;;;;;;;;;;;;;;;;;;2571:463:29;2696:12;;;;2660:23;2686;;;:9;:23;;;;;2727:19;;2719:58;;;;;-1:-1:-1;;;2719:58:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;2816:14;;;2787:26;2860:28;2871:8;2816:14;2860:10;:28::i;:::-;2840:48;;2904:43;2919:8;2929:6;2937:9;2904:14;:43::i;:::-;2899:129;;2999:17;;;;2985:32;;:9;;:13;:32::i;:::-;2963:19;;;:54;2571:463;;;;:::o;1481:400:3:-;1544:4;1565:20;1574:3;1579:5;1565:8;:20::i;:::-;1560:315;;-1:-1:-1;1601:22:3;;;;;;;;:10;:22;;;;;;;;;;;;;1779:17;;1758:18;;;:11;;;:18;;;;;;:38;;;;1810:11;;1560:315;-1:-1:-1;1859:5:3;1852:12;;913:377:10;1229:20;1275:8;;;913:377::o;674:96:5:-;732:6;;;;724:39;;;;;-1:-1:-1;;;724:39:5;;;;;;;;;;;;;;;;;;;;;;;;;;;13862:663:32;14032:9;14027:403;14051:6;:13;14047:1;:17;14027:403;;;14085:13;14101:6;14108:1;14101:9;;;;;;;;;;;;;;14085:25;;14149:1;-1:-1:-1;;;;;14132:19:32;:5;-1:-1:-1;;;;;14132:19:32;;;14124:56;;;;;-1:-1:-1;;;14124:56:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;14194:13;14210:6;14217:1;14210:9;;;;;;;;;;;;;;14194:25;;14237:5;14246:1;14237:10;14233:187;;;14267:43;:11;-1:-1:-1;;;;;14294:14:32;;14267:18;:43::i;:::-;;14233:187;;;14349:56;:11;-1:-1:-1;;;;;14373:14:32;;14398:5;14349:15;:56::i;:::-;;14233:187;-1:-1:-1;;14066:3:32;;14027:403;;;;14471:21;14447:20;:11;:18;:20::i;:::-;:45;;14439:79;;;;;-1:-1:-1;;;14439:79:32;;;;;;;;;;;;;;;;;;;;;;;;;;;4155:122:2;4226:4;4249:16;;;:11;;;;;:16;;;;;;:21;;;4155:122::o;3538:215:11:-;3596:7;3619:6;3615:20;;-1:-1:-1;3634:1:11;3627:8;;3615:20;3657:5;;;3661:1;3657;:5;:1;3680:5;;;;;:10;3672:56;;;;-1:-1:-1;;;3672:56:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3745:1;3538:215;-1:-1:-1;;;3538:215:11:o;4217:150::-;4275:7;4306:1;4302;:5;4294:44;;;;;-1:-1:-1;;;4294:44:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;4359:1;4355;:5;;;;;;;4217:150;-1:-1:-1;;;4217:150:11:o;2637:566:26:-;2725:14;;;;-1:-1:-1;;;;;2725:27:26;1751:44:32;2725:27:26;2721:476;;;2789:8;:19;;;2776:9;:32;;2768:67;;;;;-1:-1:-1;;;2768:67:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;2850:12;;2872:19;;;;2850:42;;-1:-1:-1;;;;;2850:12:26;;;;:42;;;;;2872:19;2850:12;:42;:12;:42;2872:19;2850:12;:42;;;;;;;;;;;;;;;;;;;;;2907:14;2924:34;2938:8;:19;;;2924:9;:13;;:34;;;;:::i;:::-;2907:51;-1:-1:-1;2977:11:26;;2973:85;;3008:18;;:35;;-1:-1:-1;;;;;3008:27:26;;;;:35;;;;;3036:6;;3008:18;:35;:18;:35;3036:6;3008:27;:35;;;;;;;;;;;;;;;;;;;;;2973:85;2721:476;;;;3088:98;3138:12;:10;:12::i;:::-;3152;;3166:19;;;;3102:14;;;;-1:-1:-1;;;;;3088:49:26;;;;:98;3152:12;;3088:49;:98::i;16954:308:32:-;17075:12;;;;17039:23;17065;;;:9;:23;;;;;17102:19;;-1:-1:-1;;17102:39:32;17098:158;;17227:17;;;;17199:23;;;;:46;;:27;:46::i;:::-;17167:12;;;;17157:23;;;;:9;:23;;;;;:39;;:88;17098:158;16954:308;;:::o;17993:1293::-;18201:8;:12;;;18173:8;:14;;;-1:-1:-1;;;;;18087:328:32;18109:8;:18;;;-1:-1:-1;;;;;18087:328:32;;18141:8;:18;;;18227:8;:17;;;18258:8;:17;;;18289:8;:19;;;18339:8;:20;;;18361:8;:20;;;18383:8;:21;;;18322:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18087:328;;;;-1:-1:-1;;;;;18087:328:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18087:328:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18468:12;;;;18426:29;18458:23;;;:9;:23;;;;;:45;;;-1:-1:-1;;;;;18458:45:32;18517:35;;18513:767;;19095:82;;;18593:584;;;18624:21;-1:-1:-1;;;;;18593:84:32;;18699:8;:18;;;18739:8;:18;;;18779:8;:14;;;18815:8;:12;;;18849:8;:17;;;18888:8;:17;;;18927:8;:19;;;18968:8;:20;;;19010:8;:20;;;19052:8;:21;;;18593:498;;;;;;;;;;;;;-1:-1:-1;;;;;18593:498:32;;;;;;-1:-1:-1;;;;;18593:498:32;;;;;;-1:-1:-1;;;;;18593:498:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18593:498:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18593:498:32;:584;;;18568:701;;;;;-1:-1:-1;;;18568:701:32;;;;;;;;;;;;;;;;;;;;;;;;;;;644:327:22;720:14;736;780:6;-1:-1:-1;;;;;770:16:22;:6;-1:-1:-1;;;;;770:16:22;;;762:54;;;;;-1:-1:-1;;;762:54:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;854:6;-1:-1:-1;;;;;845:15:22;:6;-1:-1:-1;;;;;845:15:22;;:53;;883:6;891;845:53;;;864:6;872;845:53;826:72;;-1:-1:-1;826:72:22;-1:-1:-1;;;;;;916:20:22;;908:56;;;;;-1:-1:-1;;;908:56:22;;;;;;;;;;;;;;;;;;;;;;;;;;;977:588;1050:12;1075:14;1091;1109:27;1121:6;1129;1109:11;:27::i;:::-;1074:62;;;;1305:15;;;;;;;;;-1:-1:-1;;;;;1305:15:22;-1:-1:-1;;;;;1305:23:22;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1305:25:22;1366:32;;;;;;;;;;1305:25;1366:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1356:43;;;;;;1230:286;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1199:335;;;;;;977:588;-1:-1:-1;;;977:588:22:o;3773:278:26:-;3958:14;;;;3882:17;;3931:44;;:6;;-1:-1:-1;;;;;3950:23:26;3931:10;:44::i;:::-;3923:53;-1:-1:-1;3994:14:26;3986:58;;;;;-1:-1:-1;;;3986:58:26;;;;;;;;;;;;;;;;;;;;;;;;;;;5729:802:29;5896:4;-1:-1:-1;;5916:9:29;:37;5912:80;;-1:-1:-1;5976:5:29;5969:12;;5912:80;6071:14;;6002:26;;6039:49;;:11;;-1:-1:-1;;;;;6071:14:29;6039:15;:49::i;:::-;6141:14;;;;6157;;6173:17;;;;6031:58;;-1:-1:-1;6031:58:29;;6125:66;;6141:14;-1:-1:-1;;;;;6157:14:29;;6125:15;:66::i;:::-;6100:91;;6202:18;6223:73;6278:8;:17;;;6223:50;6258:14;6223:30;6246:6;6223:18;:22;;:30;;;;:::i;:50::-;:54;;:73::i;:::-;6330:16;;;6344:1;6330:16;;;;;;;;6202:94;;-1:-1:-1;6330:16:29;6344:1;6330:16;;;;;;;;-1:-1:-1;;;6307:20:29;;;:39;;;6356:23;;6390:9;;6307:39;6382:18;;6356:23;;;;;;;;;:44;;;;;6444:14;6436:23;;6410:8;:20;;;6431:1;6410:23;;;;;;;;;;;;;;;;;:49;6470:19;;;:32;-1:-1:-1;6520:4:29;;-1:-1:-1;;5729:802:29;;;;;:::o;1678:710:2:-;1784:4;1917:16;;;:11;;;:16;;;;;;1948:13;1944:438;;-1:-1:-1;;2043:34:2;;;;;;;;;;;;;;;;;;2026:52;;;;;;;;:11;:52;;;;;;;;;;;;;;;;;;;;;;;;2232:18;;2213:16;;;:11;;;:16;;;;;;;:37;2264:11;;1944:438;2340:5;2306:3;:11;;2329:1;2318:8;:12;2306:25;;;;;;;;;;;;;;;;;;:31;;:39;;;;2366:5;2359:12;;;;;3136:155:11;3194:7;3226:1;3221;:6;;3213:49;;;;;-1:-1:-1;;;3213:49:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3279:5:11;;;3136:155::o;645:259:9:-;828:68;;;-1:-1:-1;;;;;828:68:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;851:27;828:68;;;793:104;;821:5;;793:27;:104::i;5243:298:2:-;5309:7;5347:16;;;:11;;;:16;;;;;;5381:13;5373:50;;;;;-1:-1:-1;;;5373:50:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;5476:3;:11;;5499:1;5488:8;:12;5476:25;;;;;;;;;;;;;;;;;;:31;;;5469:38;;;5243:298;;;;:::o;1147:870:9:-;1272:5;1296:19;-1:-1:-1;;;;;1296:17:9;;;:19::i;:::-;1288:58;;;;;-1:-1:-1;;;1288:58:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;1417:12;1431:17;1452:6;-1:-1:-1;;;;;1452:11:9;1464:8;1452:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1416:57;;;;1487:7;1483:528;;;1514:11;;:16;1510:122;;1569:4;1558:24;;;;;;;;;;;;;;;-1:-1:-1;1558:24:9;1550:67;;;;;-1:-1:-1;;;1550:67:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;1483:528;;;1720:11;;1716:95;;1756:40;;;-1:-1:-1;;;1756:40:9;;;;;;;;;;;;;;;;;;;;;;;;;;;1716:95;1938:4;1932:11;1982:4;1975;1971:2;1967:13;1960:27;1902:99;1147:870;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o"},"methodIdentifiers":{"PRICE_CONVERT_VIA_ORACLE()":"9865bcc8","SUPPLY_UNLIMITED()":"9e049545","TOKEN_ETH()":"5c4fafc7","callUnderscoreConversionRate(address,address,bytes)":"a1e16908","conversionRates(address[],bytes)":"c7b778db","createSku(bytes32,uint256,uint256,address)":"2c87927b","estimatePurchase(address,address,bytes32,uint256,bytes)":"1323b066","getReserves(address,address)":"d52bb6f4","getSkuInfo(bytes32)":"2a8a45bc","getSkus()":"61bd3851","owner()":"8da5cb5b","pause()":"8456cb59","paused()":"5c975abb","payoutWallet()":"8488bb4e","purchaseFor(address,address,bytes32,uint256,bytes)":"a963b257","referenceToken()":"1265b651","setPayoutWallet(address)":"6b8f9c43","start()":"be9a6555","startedAt()":"f21f537d","transferOwnership(address)":"f2fde38b","uniswapV2Router()":"1694505e","unpause()":"3f4ba83a","updateSkuPricing(bytes32,address[],uint256[])":"5e6e9f70"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"payoutWallet_\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"skusCapacity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensPerSkuCapacity\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"referenceToken\",\"type\":\"address\"},{\"internalType\":\"contract IUniswapV2Router\",\"name\":\"uniswapV2Router\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32[]\",\"name\":\"names\",\"type\":\"bytes32[]\"},{\"indexed\":false,\"internalType\":\"bytes32[]\",\"name\":\"values\",\"type\":\"bytes32[]\"}],\"name\":\"MagicValues\",\"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\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"payoutWallet_\",\"type\":\"address\"}],\"name\":\"PayoutWalletSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"purchaser\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalPrice\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extData\",\"type\":\"bytes\"}],\"name\":\"Purchase\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"maxQuantityPerPurchase\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"notificationsReceiver\",\"type\":\"address\"}],\"name\":\"SkuCreation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"prices\",\"type\":\"uint256[]\"}],\"name\":\"SkuPricingUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Started\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contract IUniswapV2Router\",\"name\":\"uniswapV2Router\",\"type\":\"address\"}],\"name\":\"UniswapV2RouterSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"PRICE_CONVERT_VIA_ORACLE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SUPPLY_UNLIMITED\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TOKEN_ETH\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"fromToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"toToken\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"callUnderscoreConversionRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"conversionRates\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"rates\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxQuantityPerPurchase\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"notificationsReceiver\",\"type\":\"address\"}],\"name\":\"createSku\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"estimatePurchase\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalPrice\",\"type\":\"uint256\"},{\"internalType\":\"bytes32[]\",\"name\":\"pricingData\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenA\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenB\",\"type\":\"address\"}],\"name\":\"getReserves\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"reserveA\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reserveB\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"}],\"name\":\"getSkuInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"remainingSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxQuantityPerPurchase\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"notificationsReceiver\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"prices\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSkus\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"skus\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"payoutWallet\",\"outputs\":[{\"internalType\":\"address payable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"purchaseFor\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"referenceToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"payoutWallet_\",\"type\":\"address\"}],\"name\":\"setPayoutWallet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"start\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"uniswapV2Router\",\"outputs\":[{\"internalType\":\"contract IUniswapV2Router\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"prices\",\"type\":\"uint256[]\"}],\"name\":\"updateSkuPricing\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"conversionRates(address[],bytes)\":{\"details\":\"Reverts if the oracle does not provide a conversion rate for one of the token pairs.\",\"params\":{\"data\":\"Additional data with no specified format for deriving the conversion rates.\",\"tokens\":\"The list of tokens to retrieve the conversion rates for.\"},\"returns\":{\"rates\":\"The conversion rates for the `tokens`/`referenceToken` pairs, retrieved via the oracle.\"}},\"estimatePurchase(address,address,bytes32,uint256,bytes)\":{\"details\":\"This function MUST compute the same price as `purchaseFor` would in identical conditions (same arguments, same point in time).If an implementer contract uses the `pricingData` field, it SHOULD document how to interpret the values.Reverts if the sale has not started.Reverts if the sale is paused.Reverts if `recipient` is the zero address.Reverts if `token` is the zero address.Reverts if `quantity` is zero.Reverts if `quantity` is greater than the maximum purchase quantity.Reverts if `quantity` is greater than the remaining supply.Reverts if `sku` does not exist.Reverts if `sku` exists but does not have a price set for `token`.\",\"params\":{\"quantity\":\"The quantity used to calculate the total price amount.\",\"recipient\":\"The recipient of the purchase used to calculate the total price amount.\",\"sku\":\"The identifier of the SKU used to calculate the total price amount.\",\"token\":\"The payment token used to calculate the total price amount.\",\"userData\":\"Optional extra user input data.\"},\"returns\":{\"pricingData\":\"Implementation-specific extra pricing data, such as details about discounts applied.  If not empty, the implementer MUST document how to interepret the values.\",\"totalPrice\":\"The computed total price.\"}},\"getSkuInfo(bytes32)\":{\"details\":\"WARNING: it is the responsibility of the implementer to ensure that the number of payment tokens is bounded, so that this function does not run out of gas.Reverts if `sku` does not exist.\",\"params\":{\"sku\":\"The SKU identifier.\"},\"returns\":{\"maxQuantityPerPurchase\":\"The maximum allowed quantity for a single purchase.\",\"notificationsReceiver\":\"The address of a contract on which to call the `onPurchaseNotificationReceived` function.\",\"prices\":\"The list of associated prices for each of the `tokens`.\",\"remainingSupply\":\"The remaining supply for sale.\",\"tokens\":\"The list of supported payment tokens.\",\"totalSupply\":\"The initial total supply for sale.\"}},\"getSkus()\":{\"returns\":{\"skus\":\"the list of created SKU identifiers.\"}},\"pause()\":{\"details\":\"Emits the `Paused` event.Reverts if called by any other than the contract owner.Reverts if the contract has not been started yet.Reverts if the contract is already paused.\"},\"purchaseFor(address,address,bytes32,uint256,bytes)\":{\"details\":\"Reverts if the sale has not started.Reverts if the sale is paused.Reverts if `recipient` is the zero address.Reverts if `token` is the zero address.Reverts if `quantity` is zero.Reverts if `quantity` is greater than the maximum purchase quantity.Reverts if `quantity` is greater than the remaining supply.Reverts if `sku` does not exist.Reverts if `sku` exists but does not have a price set for `token`.Emits the Purchase event.\",\"params\":{\"quantity\":\"The quantity to purchase.\",\"recipient\":\"The recipient of the purchase.\",\"sku\":\"The identifier of the SKU to purchase.\",\"token\":\"The token to use as the payment currency.\",\"userData\":\"Optional extra user input data.\"}},\"start()\":{\"details\":\"Emits the `Started` event.Emits the `Unpaused` event.Reverts if called by any other than the contract owner.Reverts if the contract has already been started.Reverts if the contract is not paused.\"},\"startedAt()\":{\"returns\":{\"_0\":\"The timestamp when the contract entered the started state.\"}},\"transferOwnership(address)\":{\"details\":\"Reverts if the sender is not the current contract owner.\",\"params\":{\"newOwner\":\"the address of the new owner. Use the zero address to renounce the ownership.\"}},\"unpause()\":{\"details\":\"Emits the `Unpaused` event.Reverts if called by any other than the contract owner.Reverts if the contract has not been started yet.Reverts if the contract is not paused.\"},\"updateSkuPricing(bytes32,address[],uint256[])\":{\"details\":\"Reverts if called by any other than the contract owner.Reverts if `tokens` and `prices` have different lengths.Reverts if `sku` does not exist.Reverts if one of the `tokens` is the zero address.Reverts if the update results in too many tokens for the SKU.Emits the `SkuPricingUpdate` event.\",\"params\":{\"prices\":\"The list of prices to apply for each payment token.  Zero price values are used to disable a payment token.\",\"sku\":\"The identifier of the SKU.\",\"tokens\":\"The list of payment tokens to update.  If empty, disable all the existing payment tokens.\"}}},\"version\":1},\"userdoc\":{\"events\":{\"MagicValues(bytes32[],bytes32[])\":{\"notice\":\"Event emitted to notify about the magic values necessary for interfacing with this contract.\"},\"OwnershipTransferred(address,address)\":{\"notice\":\"Event emited when ownership of a contract changes.\"},\"Purchase(address,address,address,bytes32,uint256,bytes,uint256,bytes)\":{\"notice\":\"Event emitted to notify about a purchase.\"},\"SkuCreation(bytes32,uint256,uint256,address)\":{\"notice\":\"Event emitted to notify about the creation of a SKU.\"},\"SkuPricingUpdate(bytes32,address[],uint256[])\":{\"notice\":\"Event emitted to notify about a change in the pricing of a SKU.\"}},\"kind\":\"user\",\"methods\":{\"PRICE_CONVERT_VIA_ORACLE()\":{\"notice\":\"Returns the price magic value used to represent an oracle-based token conversion pricing.\"},\"SUPPLY_UNLIMITED()\":{\"notice\":\"Returns the magic value used to represent an infinite, never-decreasing SKU's supply.\"},\"TOKEN_ETH()\":{\"notice\":\"Returns the magic value used to represent the ETH payment token.\"},\"conversionRates(address[],bytes)\":{\"notice\":\"Retrieves the token conversion rates for the `tokens`/`referenceToken` pairs via the oracle.\"},\"estimatePurchase(address,address,bytes32,uint256,bytes)\":{\"notice\":\"Estimates the computed final total amount to pay for a purchase, including any potential discount.\"},\"getSkuInfo(bytes32)\":{\"notice\":\"Returns the information relative to a SKU.\"},\"getSkus()\":{\"notice\":\"Returns the list of created SKU identifiers.\"},\"owner()\":{\"notice\":\"Gets the address of the current contract owner.\"},\"pause()\":{\"notice\":\"Pauses the contract.\"},\"purchaseFor(address,address,bytes32,uint256,bytes)\":{\"notice\":\"Performs a purchase.\"},\"start()\":{\"notice\":\"Actvates, or 'starts', the contract.\"},\"startedAt()\":{\"notice\":\"Returns the timestamp when the contract entered the started state.\"},\"transferOwnership(address)\":{\"notice\":\"See {IERC173-transferOwnership(address)}\"},\"unpause()\":{\"notice\":\"Resumes the contract.\"},\"updateSkuPricing(bytes32,address[],uint256[])\":{\"notice\":\"Sets the token prices for the specified product SKU.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/mocks/sale/UniswapOracleSaleMock.sol\":\"UniswapOracleSaleMock\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":2000},\"remappings\":[]},\"sources\":{\"@animoca/ethereum-contracts-core-1.1.2/contracts/access/IERC173.sol\":{\"keccak256\":\"0xeb8a2c766577e782ad66ce8591a8d206b0f37b657754cc7a43beeb2d9343873b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3b404032cb4e21bae47b5e9af1290e41117040b10f69e3b2f93522b97e329b59\",\"dweb:/ipfs/QmRJHYkkvWcXGuFJdbqV18yh9QUk5g4zETrrxD2HnU3iRw\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/access/Ownable.sol\":{\"keccak256\":\"0xbfd1129669bb7c154ee84b3aa1484e421ca68cb725c1039a897629631fd8b096\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://edc634aeae7272726745b1cbbf116dfdde51833b71a143e94fe7de89e9b14566\",\"dweb:/ipfs/QmXtXckxdFM3VeLvsjMWhqt44WAf7XKVYKt9bUT7pyWbjH\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/algo/EnumMap.sol\":{\"keccak256\":\"0x12716c299c0965f4f87c2792cda2bd6029ba629c1172cdfef08d95cb2d7c283f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8d17c9bcb9bb0b9f399f6366f85b4db981df6e319f90b1b84910d6c44a79d032\",\"dweb:/ipfs/QmcqU3Gj8BP88yRV571GyCcW2UAjxq2xiqRofXFKYzkRXT\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/algo/EnumSet.sol\":{\"keccak256\":\"0x0aaea4634a7c64ef61b1ee8380912084427b45b6b4fc254b76d4b78e39f92d35\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://356a344f770d238dd864e8530d2ee05e350f269346cdf02432bc767e90520ce1\",\"dweb:/ipfs/QmfQfasYUY69X4wnzizPqT8P24YZTAPQGgFQErsSzV5sva\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/lifecycle/Pausable.sol\":{\"keccak256\":\"0xaa32d2e66a8edb68c64ffab1db69925248cf3f774c40b062e1e8ff2f4d5eebed\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://37451b151d862be6413ee1d18e3500a9100128f09926a2260d0ea058c3148d8a\",\"dweb:/ipfs/QmNLsaNioeA4LK8fVpqvSkQrCob1DkENcqQUurqDQbQK3G\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/lifecycle/Startable.sol\":{\"keccak256\":\"0x87e273577d4716cbbb325f03ec91207e1022bb7f56cdcda56593c603d2b4592f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d305d7c885971e1b82a363b4c9237c4201390610621a67605b89694ca9680e35\",\"dweb:/ipfs/QmWZX1cEfsfQSoEjBgBaBn3rKJxfyaJMpJyofpM9LG4tEp\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/metatx/ManagedIdentity.sol\":{\"keccak256\":\"0xe544b34375f19f9d1ad6e309f2fc56849263cc3c3c77009f6b38782f7dea9971\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3eb04bbf1c13ca82971c1cb2fdd96a23e2dfaa5df6a7d3b7e773dd3a760cf4e4\",\"dweb:/ipfs/QmXArzbKQgsMebfYVSQtaCLAs3rp3FYp6MKjSQnZoGDnjf\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/payment/PayoutWallet.sol\":{\"keccak256\":\"0x45ef7f68177cb61463f0ac759782f490821917fac3a71a18263c38193a9c6229\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://67839b4cc5897d723099ebfd8e0593e809b02cf422056efc1497f88dd7abb415\",\"dweb:/ipfs/QmYFRXvggoT8RzWB7SSJmfaBY3xkoVYNaGotTLBxjXqqxx\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/utils/ERC20Wrapper.sol\":{\"keccak256\":\"0x57922168ce32d2260022c0c7075137940e7d3cf0bb0d2213e62194050fbcf392\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b2dbba2defa32aa9edb54797f9b3f4ec1c1e5f71193deb99289136fa2f02ad79\",\"dweb:/ipfs/QmbUbzdwyWwjw3VW1o5oBKyuG9cFN7n8j55P8MDAg3sCuK\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/utils/types/AddressIsContract.sol\":{\"keccak256\":\"0x08373f750eedc1226b22b8ab1e156b0689c463590fa7dc40e99329b2da7b5d47\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fac8cdd7be4a83b47b18c8a48c1b1779a2590118049734665a6de91e77f27d35\",\"dweb:/ipfs/QmcAobvMpD5TisPTQSihPhywmVbPv1jDhffJCaZptM7YLv\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0xcc78a17dd88fa5a2edc60c8489e2f405c0913b377216a5b26b35656b2d0dab52\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://526dc85e1f9b9b45830e202568d267d93dde7a4fcccf4ad7798dadcd92304d3c\",\"dweb:/ipfs/QmaoXMB972J3cSDLtBq3xBo4jLwqD2uzXTwujtSPqkYVhR\"]},\"contracts/mocks/sale/UniswapOracleSaleMock.sol\":{\"keccak256\":\"0xdc7d984c5f06da9b27c4632f5cec97af596fefafa1a0ce9008f9f1b9dd6cb0fb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af6e6ac6e4ad9ee36c3402a4197d7f67facc753c9d68df5ea244da1c04a58f0f\",\"dweb:/ipfs/QmT6UGxS5iGGhYYyFKsWmKgLnbUnjk6eeLh5Rs3Q8p4gXY\"]},\"contracts/oracle/UniswapV2Adapter.sol\":{\"keccak256\":\"0x1b347929faf3ddee2568b011fe50bc921bdfe23bceea7022d47259d195860a99\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://364cd66a80a90ec5ac4f1688ffb40825d5ae31197a9104d0271783f9e892f5e5\",\"dweb:/ipfs/QmaAL7GUBRRYc6U96uX7E91AFo9vz9xDqRBYX8SvZGmMg4\"]},\"contracts/oracle/interfaces/IUniswapV2Pair.sol\":{\"keccak256\":\"0xd0762fd9035a7ffa6f70623a464aee4d5c85e9e2bb07e24021af45f738a493af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3ce4fc6e82b116ca7fda0e83df93a4de8adb13e2c72f24390b63b326f01ccc3d\",\"dweb:/ipfs/QmVAZFgd7cEGdxUFTsoz7MUQvCrkqjaFtBB2oZmGd3LA1H\"]},\"contracts/oracle/interfaces/IUniswapV2Router.sol\":{\"keccak256\":\"0x0f8cb0c1e71543770defc0f19a08b62e64b7e19101b8e45643bf7ceb8416c149\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://b14aedff9a94b564366790c1720d1c55472e5d13106c1b89a0d479715dc3c3bd\",\"dweb:/ipfs/QmQQyrKigBpar2uJGLVXFY799e5cNxTX6dFQW3myFAs8Kn\"]},\"contracts/sale/FixedPricesSale.sol\":{\"keccak256\":\"0xad902ccee0e2a42eea07b4c1e011202096daff92b43158a1569d139caf93b3f0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a702cc102db63b18e0581da5d6c01ee9320cec4b690c3117b4f77316fce45185\",\"dweb:/ipfs/QmWL7kh3kBSxDYjVoq9gN79UpKLrRBgJCHqquyaCE8UWhe\"]},\"contracts/sale/UniswapOracleSale.sol\":{\"keccak256\":\"0xe2b1578d62ac17539575ec80ae3835336698f7e381a4f3c4441f3981e343c73e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://00c35b230aa4027c46aeafc11746e4fd9085a7704aa1d1602ef138abedf19c57\",\"dweb:/ipfs/QmcbfPEq4s7NP2swt56cAey41pVRxGYcLmQQtkeNAD9E7J\"]},\"contracts/sale/abstract/OracleSale.sol\":{\"keccak256\":\"0x7a5dae50fe750564347bfcd4eef33b552b901d7c688db6fae8c8e2dd442cce54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e3388afb44cf6b074cf58820e142b43ce4614bed6a004c4275f6ab05da984449\",\"dweb:/ipfs/QmbucAD5Q7cSh4Ryz8cFt7Yx4KdsXMhqcHofR75oLBuMW2\"]},\"contracts/sale/abstract/PurchaseLifeCycles.sol\":{\"keccak256\":\"0xaa18c1de5628dbd5ff281f06354b0156cb8bd24a6f5b490a787931c374266f6a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2e0731a0100fc1bda747176f169cacc5d61d89df1c78884d8843a834d58f7dcd\",\"dweb:/ipfs/QmZRDAxcvQ9QySqnmQLVM1i797NCqSJrJjKUneEmTufXBQ\"]},\"contracts/sale/abstract/Sale.sol\":{\"keccak256\":\"0x32dd01f3ca07c26e834f5784b4f2434c9cf309e3e30b2421a26da16ccf5d0e26\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://009418ea08f714b3f536d09e04d65ec39d3a4e9ba33e554ac8a26036cff8335b\",\"dweb:/ipfs/QmQvMXpCaaAwtHE4qxXYn2rxPgPzqzJM6aGuyz4nut5CH5\"]},\"contracts/sale/interfaces/IOracleSale.sol\":{\"keccak256\":\"0x754fdf88f73519515a9d3748ea136b0e1137095969e91bf7e7b4cf9afb78d164\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://04a0f5ae476580e9a4011d7b6f6e00940498de2be550da0df88fc35ca3b5241c\",\"dweb:/ipfs/QmSjaAFzMbR38ofQtgvyxYKN8N4b7nY4hZAfXkNxe3HSyq\"]},\"contracts/sale/interfaces/IPurchaseNotificationsReceiver.sol\":{\"keccak256\":\"0xa85dcec80f528757a52dd66f88ae14845477e3ec733cb4d22af6db71d19e90f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://36e14e08666d5fd2af5b78848a84a11c666c65c94ca46f88e896c041da1dc1c7\",\"dweb:/ipfs/QmYiHM2DBVuX4adJfJMSvdrdfmDooHxhwGtmhNP7k2DY9n\"]},\"contracts/sale/interfaces/ISale.sol\":{\"keccak256\":\"0x0d731f242662465b2aa3ea9fe3581d0e77e3f61601390f68e4c9c75fc2103f5f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2a04d527397a7f75bd1d701fa7af263cb0799ef4d2f32dc44bb6c9598cee3625\",\"dweb:/ipfs/QmRnsakvvkU1yJyviEM8eytdCTUvjqsw1aqzdntycoG2aV\"]}},\"version\":1}"}},"contracts/mocks/sale/UniswapSwapSaleMock.sol":{"UniswapSwapSaleMock":{"abi":[{"inputs":[{"internalType":"address payable","name":"payoutWallet_","type":"address"},{"internalType":"uint256","name":"skusCapacity","type":"uint256"},{"internalType":"uint256","name":"tokensPerSkuCapacity","type":"uint256"},{"internalType":"address","name":"referenceToken","type":"address"},{"internalType":"contract IUniswapV2Router","name":"uniswapV2Router","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32[]","name":"names","type":"bytes32[]"},{"indexed":false,"internalType":"bytes32[]","name":"values","type":"bytes32[]"}],"name":"MagicValues","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":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"payoutWallet_","type":"address"}],"name":"PayoutWalletSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"purchaser","type":"address"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"bytes32","name":"sku","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"quantity","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"userData","type":"bytes"},{"indexed":false,"internalType":"uint256","name":"totalPrice","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"extData","type":"bytes"}],"name":"Purchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"sku","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxQuantityPerPurchase","type":"uint256"},{"indexed":false,"internalType":"address","name":"notificationsReceiver","type":"address"}],"name":"SkuCreation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"sku","type":"bytes32"},{"indexed":false,"internalType":"address[]","name":"tokens","type":"address[]"},{"indexed":false,"internalType":"uint256[]","name":"prices","type":"uint256[]"}],"name":"SkuPricingUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Started","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"fromAmount","type":"uint256"}],"name":"UnderscoreSwapResult","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract IUniswapV2Router","name":"uniswapV2Router","type":"address"}],"name":"UniswapV2RouterSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"PRICE_CONVERT_VIA_ORACLE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE_SWAP_VIA_ORACLE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SUPPLY_UNLIMITED","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOKEN_ETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"addEth","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"fromToken","type":"address"},{"internalType":"address","name":"toToken","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"callUnderscoreConversionRate","outputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"fromToken","type":"address"},{"internalType":"address","name":"toToken","type":"address"},{"internalType":"uint256","name":"toAmount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"callUnderscoreEstimateSwap","outputs":[{"internalType":"uint256","name":"fromAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"},{"internalType":"uint256","name":"totalPrice","type":"uint256"},{"internalType":"bytes32[]","name":"pricingData","type":"bytes32[]"}],"name":"callUnderscorePayment","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"callUnderscorePricing","outputs":[{"internalType":"uint256","name":"totalPrice","type":"uint256"},{"internalType":"bytes32[]","name":"pricingData","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"fromToken","type":"address"},{"internalType":"uint256","name":"fromAmount","type":"uint256"},{"internalType":"address","name":"toToken","type":"address"},{"internalType":"uint256","name":"toAmount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"callUnderscoreSwap","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"callUnderscoreValidation","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"conversionRates","outputs":[{"internalType":"uint256[]","name":"rates","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"uint256","name":"maxQuantityPerPurchase","type":"uint256"},{"internalType":"address","name":"notificationsReceiver","type":"address"}],"name":"createSku","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"estimatePurchase","outputs":[{"internalType":"uint256","name":"totalPrice","type":"uint256"},{"internalType":"bytes32[]","name":"pricingData","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"}],"name":"getReserves","outputs":[{"internalType":"uint256","name":"reserveA","type":"uint256"},{"internalType":"uint256","name":"reserveB","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"sku","type":"bytes32"}],"name":"getSkuInfo","outputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"uint256","name":"remainingSupply","type":"uint256"},{"internalType":"uint256","name":"maxQuantityPerPurchase","type":"uint256"},{"internalType":"address","name":"notificationsReceiver","type":"address"},{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"prices","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSkus","outputs":[{"internalType":"bytes32[]","name":"skus","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payoutWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"purchaseFor","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"referenceToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"payoutWallet_","type":"address"}],"name":"setPayoutWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"start","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256","name":"referenceAmount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"swapRates","outputs":[{"internalType":"uint256[]","name":"rates","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"prices","type":"uint256[]"}],"name":"updateSkuPricing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}],"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"60c06040523480156200001157600080fd5b506040516200539b3803806200539b833981810160405260a08110156200003757600080fd5b50805160208201516040808401516060850151608090950151600080546001600160a01b031916339081178255935195969495929493919287928792879287928792839288928892889288928692869286928692869286928692859285928592600192869183918291907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001600160a01b03811662000123576040805162461bcd60e51b815260206004820152601460248201527f5061796f75743a207a65726f2061646472657373000000000000000000000000604482015290519081900360640190fd5b600180546001600160a01b0383166001600160a01b0319909116811790915560408051918252517fdd880d24a789958a6398c99c2e54ce31bc10a638cbc42f7dd34285479ae0f8559181900360200190a150506003805460ff1916911515919091179055608082905260a081905260408051600280825260608201835260009260208301908036833750506040805160028082526060820183529394506000939092509060208301908036833750508351919250680a89e968a9cbe8aa8960bb1b9173eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee915084906000906200020857fe5b60200260200101836000815181106200021d57fe5b602002602001018281525082815250505060001960001b6f14d55414131657d5539312535255115160821b90836001815181106200025757fe5b60200260200101836001815181106200026c57fe5b60200260200101828152508281525050506000805160206200537b8339815191528282604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015620002d5578181015183820152602001620002bb565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101562000316578181015183820152602001620002fc565b5050505090500194505050505060405180910390a15050600780546001600160a01b0319166001600160a01b0389161790555060009450600193508492506200035d915050565b5060405190808252806020026020018201604052801562000388578160200160208202803683370190505b50604080516001808252818301909252919250600091906020808301908036833701905050905060001960001b7f50524943455f434f4e564552545f5649415f4f5241434c4500000000000000009083600081518110620003e557fe5b6020026020010183600081518110620003fa57fe5b60200260200101828152508281525050506000805160206200537b8339815191528282604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156200046357818101518382015260200162000449565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015620004a45781810151838201526020016200048a565b5050505090500194505050505060405180910390a1505050505050600060016001600160401b0381118015620004d957600080fd5b5060405190808252806020026020018201604052801562000504578160200160208202803683370190505b506040805160018082528183019092529192506000919060208083019080368337505083519192507f50524943455f535741505f5649415f4f5241434c45000000000000000000000091600119915084906000906200055f57fe5b60200260200101836000815181106200057457fe5b60200260200101828152508281525050506000805160206200537b8339815191528282604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015620005dd578181015183820152602001620005c3565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156200061e57818101518382015260200162000604565b5050505090500194505050505060405180910390a15050505050506200064a816200065b60201b60201c565b5050505050505050505050620006af565b600880546001600160a01b0383166001600160a01b0319909116811790915560408051918252517ffe70995e26c62b71bbd53a5b9e09215c42e2006fad72ba845051faa8de1510ba9181900360200190a150565b60805160a051614ca8620006d3600039806132de5250806120115250614ca86000f3fe6080604052600436106101dc5760003560e01c80638488bb4e11610102578063a963b25711610095578063c7b778db11610064578063c7b778db14610ce5578063d52bb6f414610db4578063f21f537d14610e08578063f2fde38b14610e1d57610252565b8063a963b25714610b60578063bda4c5ab14610bf5578063be9a655514610cc8578063c2ac3aff14610cdd57610252565b80639865bcc8116100d15780639865bcc814610a1f5780639e04954514610a1f578063a1e1690814610a34578063a541f89c14610aca57610252565b80638488bb4e146108685780638ce507eb1461087d5780638da5cb5b1461096857806397309b441461097d57610252565b806356c1476e1161017a5780635e6e9f70116101495780635e6e9f701461068057806361bd3851146107bb5780636b8f9c43146108205780638456cb591461085357610252565b806356c1476e1461058b578063579f2c771461062d5780635c4fafc7146106425780635c975abb1461065757610252565b80631694505e116101b65780631694505e146104345780632a8a45bc146104495780632c87927b146105315780633f4ba83a1461057657610252565b80631265b651146102575780631323b06614610288578063151229f71461038557610252565b36610252576008546001600160a01b03166101f5610e50565b6001600160a01b031614610250576040805162461bcd60e51b815260206004820152601860248201527f53616c653a20496e76616c6964204554482073656e6465720000000000000000604482015290519081900360640190fd5b005b600080fd5b34801561026357600080fd5b5061026c610e54565b604080516001600160a01b039092168252519081900360200190f35b34801561029457600080fd5b5061032a600480360360a08110156102ab57600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a0810160808201356401000000008111156102eb57600080fd5b8201836020820111156102fd57600080fd5b8035906020019184600183028401116401000000008311171561031f57600080fd5b509092509050610e63565b6040518083815260200180602001828103825283818151815260200191508051906020019060200280838360005b83811015610370578181015183820152602001610358565b50505050905001935050505060405180910390f35b34801561039157600080fd5b50610422600480360360808110156103a857600080fd5b6001600160a01b038235811692602081013590911691604082013591908101906080810160608201356401000000008111156103e357600080fd5b8201836020820111156103f557600080fd5b8035906020019184600183028401116401000000008311171561041757600080fd5b509092509050610f58565b60408051918252519081900360200190f35b34801561044057600080fd5b5061026c610fa6565b34801561045557600080fd5b506104736004803603602081101561046c57600080fd5b5035610fb5565b60405180878152602001868152602001858152602001846001600160a01b031681526020018060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156104d85781810151838201526020016104c0565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156105175781810151838201526020016104ff565b505050509050019850505050505050505060405180910390f35b34801561053d57600080fd5b506102506004803603608081101561055457600080fd5b50803590602081013590604081013590606001356001600160a01b031661115a565b34801561058257600080fd5b5061025061116c565b34801561059757600080fd5b50610250600480360360a08110156105ae57600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a0810160808201356401000000008111156105ee57600080fd5b82018360208201111561060057600080fd5b8035906020019184600183028401116401000000008311171561062257600080fd5b5090925090506111da565b34801561063957600080fd5b50610422611264565b34801561064e57600080fd5b5061026c61126a565b34801561066357600080fd5b5061066c611282565b604080519115158252519081900360200190f35b34801561068c57600080fd5b50610250600480360360608110156106a357600080fd5b813591908101906040810160208201356401000000008111156106c557600080fd5b8201836020820111156106d757600080fd5b803590602001918460208302840111640100000000831117156106f957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561074957600080fd5b82018360208201111561075b57600080fd5b8035906020019184602083028401116401000000008311171561077d57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061128b945050505050565b3480156107c757600080fd5b506107d0611468565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561080c5781810151838201526020016107f4565b505050509050019250505060405180910390f35b34801561082c57600080fd5b506102506004803603602081101561084357600080fd5b50356001600160a01b03166114c3565b34801561085f57600080fd5b50610250611590565b34801561087457600080fd5b5061026c6115f7565b610250600480360360e081101561089357600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a0810160808201356401000000008111156108d357600080fd5b8201836020820111156108e557600080fd5b8035906020019184600183028401116401000000008311171561090757600080fd5b9193909282359260408101906020013564010000000081111561092957600080fd5b82018360208201111561093b57600080fd5b8035906020019184602083028401116401000000008311171561095d57600080fd5b509092509050611606565b34801561097457600080fd5b5061026c6116d0565b34801561098957600080fd5b5061032a600480360360a08110156109a057600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a0810160808201356401000000008111156109e057600080fd5b8201836020820111156109f257600080fd5b80359060200191846001830284011164010000000083111715610a1457600080fd5b5090925090506116df565b348015610a2b57600080fd5b5061042261177e565b348015610a4057600080fd5b5061042260048036036060811015610a5757600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135640100000000811115610a8b57600080fd5b820183602082011115610a9d57600080fd5b80359060200191846001830284011164010000000083111715610abf57600080fd5b509092509050611784565b610250600480360360a0811015610ae057600080fd5b6001600160a01b0382358116926020810135926040820135909216916060820135919081019060a081016080820135640100000000811115610b2157600080fd5b820183602082011115610b3357600080fd5b80359060200191846001830284011164010000000083111715610b5557600080fd5b5090925090506117d0565b610250600480360360a0811015610b7657600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135640100000000811115610bb657600080fd5b820183602082011115610bc857600080fd5b80359060200191846001830284011164010000000083111715610bea57600080fd5b5090925090506118a4565b348015610c0157600080fd5b506107d060048036036060811015610c1857600080fd5b810190602081018135640100000000811115610c3357600080fd5b820183602082011115610c4557600080fd5b80359060200191846020830284011164010000000083111715610c6757600080fd5b91939092823592604081019060200135640100000000811115610c8957600080fd5b820183602082011115610c9b57600080fd5b80359060200191846001830284011164010000000083111715610cbd57600080fd5b509092509050611981565b348015610cd457600080fd5b50610250611a90565b6102506111d8565b348015610cf157600080fd5b506107d060048036036040811015610d0857600080fd5b810190602081018135640100000000811115610d2357600080fd5b820183602082011115610d3557600080fd5b80359060200191846020830284011164010000000083111715610d5757600080fd5b919390929091602081019035640100000000811115610d7557600080fd5b820183602082011115610d8757600080fd5b80359060200191846001830284011164010000000083111715610da957600080fd5b509092509050611aa3565b348015610dc057600080fd5b50610def60048036036040811015610dd757600080fd5b506001600160a01b0381358116916020013516611b8f565b6040805192835260208301919091528051918290030190f35b348015610e1457600080fd5b50610422611ceb565b348015610e2957600080fd5b5061025060048036036020811015610e4057600080fd5b50356001600160a01b0316611cf1565b3390565b6007546001600160a01b031681565b6000606060025460001415610ebf576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b610ec7611d57565b610ecf614be0565b610ed7610e50565b6001600160a01b03908116825289811660208084019190915290891660408084019190915260608301899052608083018890528051601f870183900483028101830190915285815290869086908190840183828082843760009201919091525050505060a0820152610f4881611daf565b9250925050965096945050505050565b6000610f9c86868686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611dd692505050565b9695505050505050565b6008546001600160a01b031681565b6000818152600660205260408120819081908190606090819083610fdb60048301611f27565b82549850905087611033576040805162461bcd60e51b815260206004820152601660248201527f53616c653a206e6f6e2d6578697374656e7420736b7500000000000000000000604482015290519081900360640190fd5b60018201546002830154600384015491985096506001600160a01b031694508067ffffffffffffffff8111801561106957600080fd5b50604051908082528060200260200182016040528015611093578160200160208202803683370190505b5093508067ffffffffffffffff811180156110ad57600080fd5b506040519080825280602002602001820160405280156110d7578160200160208202803683370190505b50925060005b8181101561114e576000806110f56004860184611f2b565b915091508160001c87848151811061110957fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508060001c86848151811061113957fe5b602090810291909101015250506001016110dd565b50505091939550919395565b61116684848484611fbd565b50505050565b6002546111c0576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b6111d06111cb610e50565b6121f4565b6111d86122bb565b565b6111e2614be0565b6111ea610e50565b6001600160a01b03908116825287811660208084019190915290871660408084019190915260608301879052608083018690528051601f850183900483028101830190915283815290849084908190840183828082843760009201919091525050505060a082015261125b81612313565b50505050505050565b60011981565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b60035460ff1681565b6112966111cb610e50565b8151815181146112ed576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20696e636f6e73697374656e742061727261797300000000000000604482015290519081900360640190fd5b6000848152600660205260409020805461134e576040805162461bcd60e51b815260206004820152601660248201527f53616c653a206e6f6e2d6578697374656e7420736b7500000000000000000000604482015290519081900360640190fd5b600481018261139957600061136282611f27565b905060005b8181101561139257600061137b8482611f2b565b5090506113888482612377565b5050600101611367565b50506113a4565b6113a4818686612457565b857fcb3fe5489e0cd43d0f4a33d1e09a4a0463a03d0d38f56165530854e5540db1438686604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561140c5781810151838201526020016113f4565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561144b578181015183820152602001611433565b5050505090500194505050505060405180910390a2505050505050565b606060046000018054806020026020016040519081016040528092919081815260200182805480156114b957602002820191906000526020600020905b8154815260200190600101908083116114a5575b5050505050905090565b6114ce6111cb610e50565b6001600160a01b038116611529576040805162461bcd60e51b815260206004820152601460248201527f5061796f75743a207a65726f2061646472657373000000000000000000000000604482015290519081900360640190fd5b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03838116919091179182905560408051929091168252517fdd880d24a789958a6398c99c2e54ce31bc10a638cbc42f7dd34285479ae0f855916020908290030190a150565b6002546115e4576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b6115ef6111cb610e50565b6111d86124df565b6001546001600160a01b031681565b61160e614be0565b611616610e50565b6001600160a01b0390811682528a8116602080840191909152908a16604080840191909152606083018a9052608083018990528051601f880183900483028101830190915286815290879087908190840183828082843760009201919091525050505060a082015260c081018490526040805160208085028281018201909352848252909185918591829185019084908082843760009201919091525050505060e08201526116c48161251d565b50505050505050505050565b6000546001600160a01b031690565b600060606116eb614be0565b6116f3610e50565b6001600160a01b03908116825289811660208084019190915290891660408084019190915260608301899052608083018890528051601f870183900483028101830190915285815290869086908190840183828082843760009201919091525050505060a082015261176481612596565b8060c0015192508060e00151915050965096945050505050565b60001981565b60006117c7858585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061263892505050565b95945050505050565b6001600160a01b03861673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee146118235760085461180e906001600160a01b038881169116876127a6565b6118236001600160a01b038716333088612826565b61186586858585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506128ae92505050565b6040805182815290519196507fe16fb73e6e5415265887cee6412691a8b3cd94e24c6528ed966dc06ffb799b78919081900360200190a1505050505050565b6002546118f8576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b611900611d57565b611908614be0565b611910610e50565b6001600160a01b03908116825287811660208084019190915290871660408084019190915260608301879052608083018690528051601f850183900483028101830190915283815290849084908190840183828082843760009201919091525050505060a082015261125b81612a5b565b6060848067ffffffffffffffff8111801561199b57600080fd5b506040519080825280602002602001820160405280156119c5578160200160208202803683370190505b50915060005b81811015611a85576000611a478989848181106119e457fe5b905060200201356001600160a01b0316600760009054906101000a90046001600160a01b03168989898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611dd692505050565b9050611a6581611a5f89670de0b6b3a7640000612a88565b90612ae8565b848381518110611a7157fe5b6020908102919091010152506001016119cb565b505095945050505050565b611a9b6111cb610e50565b6111d0612b4f565b6060838067ffffffffffffffff81118015611abd57600080fd5b50604051908082528060200260200182016040528015611ae7578160200160208202803683370190505b50915060005b81811015611b8557611b66878783818110611b0457fe5b905060200201356001600160a01b0316600760009054906101000a90046001600160a01b031687878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061263892505050565b838281518110611b7257fe5b6020908102919091010152600101611aed565b5050949350505050565b6000806001600160a01b03841673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415611c3457600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611c0557600080fd5b505afa158015611c19573d6000803e3d6000fd5b505050506040513d6020811015611c2f57600080fd5b505193505b6001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415611cd657600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611ca757600080fd5b505afa158015611cbb573d6000803e3d6000fd5b505050506040513d6020811015611cd157600080fd5b505192505b611ce08484612bd1565b909590945092505050565b60025490565b611cfc6111cb610e50565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383811691821780845560405192939116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b60035460ff16156111d8576040805162461bcd60e51b815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b60006060611dbc83612313565b611dc583612596565b505060c081015160e0909101519091565b60006001600160a01b03851673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415611e7a57600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611e4b57600080fd5b505afa158015611e5f573d6000803e3d6000fd5b505050506040513d6020811015611e7557600080fd5b505194505b6001600160a01b03841673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415611f1c57600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611eed57600080fd5b505afa158015611f01573d6000803e3d6000fd5b505050506040513d6020811015611f1757600080fd5b505193505b6117c7858585612c9d565b5490565b815460009081908310611f85576040805162461bcd60e51b815260206004820152601c60248201527f456e756d4d61703a20696e646578206f7574206f6620626f756e647300000000604482015290519081900360640190fd5b6000846000018481548110611f9657fe5b906000526020600020906002020190508060000154816001015492509250505b9250929050565b8261200f576040805162461bcd60e51b815260206004820152601160248201527f53616c653a207a65726f20737570706c79000000000000000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000061203a6004611f27565b1061208c576040805162461bcd60e51b815260206004820152601360248201527f53616c653a20746f6f206d616e7920736b757300000000000000000000000000604482015290519081900360640190fd5b612097600485612ea4565b6120e8576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20736b7520616c7265616479206372656174656400000000000000604482015290519081900360640190fd5b6001600160a01b0381161561215a57612109816001600160a01b0316612eee565b61215a576040805162461bcd60e51b815260206004820152601b60248201527f53616c653a206e6f6e2d636f6e74726163742072656365697665720000000000604482015290519081900360640190fd5b60008481526006602090815260409182902085815560018101869055600281018590556003810180546001600160a01b03861673ffffffffffffffffffffffffffffffffffffffff1990911681179091558351888152928301879052828401869052606083015291517f38bd4aabce684540cd61351b91f2f5facf9d6963934347e25aab93d87ae7ac149181900360800190a15050505050565b306001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561222d57600080fd5b505afa158015612241573d6000803e3d6000fd5b505050506040513d602081101561225757600080fd5b50516001600160a01b038281169116146122b8576040805162461bcd60e51b815260206004820152601660248201527f4f776e61626c653a206e6f7420746865206f776e657200000000000000000000604482015290519081900360640190fd5b50565b6122c3612ef4565b6003805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6122f6610e50565b604080516001600160a01b039092168252519081900360200190a1565b61231c81612f4b565b60408160a001515110156122b8576040805162461bcd60e51b815260206004820152601760248201527f53616c653a206d697373696e6720757365722064617461000000000000000000604482015290519081900360640190fd5b6000818152600183016020526040812054801561244b57835460001980830191908101906000908790839081106123aa57fe5b90600052602060002090600202019050808760000184815481106123ca57fe5b60009182526020808320845460029093020191825560019384015491840191909155835482528983019052604090209084019055865487908061240957fe5b60008281526020808220600260001990940193840201828155600190810183905592909355888152898201909252604082209190915594506124519350505050565b60009150505b92915050565b6124628383836131f5565b61246b83611f27565b158061248957506007546124899084906001600160a01b0316613359565b6124da576040805162461bcd60e51b815260206004820152601860248201527f53616c653a206e6f207265666572656e636520746f6b656e0000000000000000604482015290519081900360640190fd5b505050565b6124e7611d57565b6003805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586122f6610e50565b60e08101515115801590612552575060408101516001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14155b1561258d5760a081015160208101518061256b57506000195b600854604084015161258a916001600160a01b039182169116836127a6565b50505b6122b881613371565b6060810151600090815260066020526040902080546125fc576040805162461bcd60e51b815260206004820152601560248201527f53616c653a20756e737570706f7274656420534b550000000000000000000000604482015290519081900360640190fd5b60048101600061260c8483613610565b9050612619848383613680565b61116657608084015161262d908290612a88565b60c085015250505050565b60006001600160a01b03841673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14156126dc57600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156126ad57600080fd5b505afa1580156126c1573d6000803e3d6000fd5b505050506040513d60208110156126d757600080fd5b505193505b6001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561277e57600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561274f57600080fd5b505afa158015612763573d6000803e3d6000fd5b505050506040513d602081101561277957600080fd5b505192505b60008061278b8686612bd1565b9092509050610f9c82611a5f83670de0b6b3a7640000612a88565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b3000000000000000000000000000000000000000000000000000000001790526124da908490613784565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052611166908590613784565b6020810151604082015160009190816128f4576001600160a01b03871673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14156128ee573491506128f4565b60001991505b806128fe57506000195b6001600160a01b03871673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14156129a057600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561297157600080fd5b505afa158015612985573d6000803e3d6000fd5b505050506040513d602081101561299b57600080fd5b505196505b6001600160a01b03861673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415612a4257600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612a1357600080fd5b505afa158015612a27573d6000803e3d6000fd5b505050506040513d6020811015612a3d57600080fd5b505195505b612a5087878785308661396e565b979650505050505050565b612a6481612313565b612a6d81612596565b612a768161251d565b612a7f81614014565b6122b881614060565b600082612a9757506000612451565b82820282848281612aa457fe5b0414612ae15760405162461bcd60e51b8152600401808060200182810382526021815260200180614c526021913960400191505060405180910390fd5b9392505050565b6000808211612b3e576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381612b4757fe5b049392505050565b60025415612ba4576040805162461bcd60e51b815260206004820152601260248201527f537461727461626c653a20737461727465640000000000000000000000000000604482015290519081900360640190fd5b426002557f27029695aa5f602a4ee81f4c32dfa86e562f200a17966496f3a7c3f2ec0f94176122f6610e50565b6000806000612be08585614545565b509050600080612bf08787614632565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015612c2857600080fd5b505afa158015612c3c573d6000803e3d6000fd5b505050506040513d6060811015612c5257600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506001600160a01b0387811690841614612c8c578082612c8f565b81815b909890975095505050505050565b604080516002808252606082018352600092839291906020830190803683370190505090508481600081518110612cd057fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508381600181518110612cfe57fe5b6001600160a01b03928316602091820292909201810191909152600854604080517f1f00ca7400000000000000000000000000000000000000000000000000000000815260048101888152602482019283528651604483015286516000969490941694631f00ca74948a948994909260649091019185820191028083838c5b83811015612d95578181015183820152602001612d7d565b50505050905001935050505060006040518083038186803b158015612db957600080fd5b505afa158015612dcd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015612df657600080fd5b8101908080516040519392919084640100000000821115612e1657600080fd5b908301906020820185811115612e2b57600080fd5b8251866020820283011164010000000082111715612e4857600080fd5b82525081516020918201928201910280838360005b83811015612e75578181015183820152602001612e5d565b50505050905001604052505050905080600081518110612e9157fe5b6020026020010151925050509392505050565b6000612eb08383613359565b612ee657508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155612451565b506000612451565b3b151590565b60035460ff166111d8576040805162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604482015290519081900360640190fd5b60208101516001600160a01b0316612faa576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a207a65726f206164647265737320726563697069656e7400000000604482015290519081900360640190fd5b60408101516001600160a01b0316613009576040805162461bcd60e51b815260206004820152601860248201527f53616c653a207a65726f206164647265737320746f6b656e0000000000000000604482015290519081900360640190fd5b608081015161305f576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a207a65726f207175616e7469747920707572636861736500000000604482015290519081900360640190fd5b6060810151600090815260066020526040902080546130c5576040805162461bcd60e51b815260206004820152601660248201527f53616c653a206e6f6e2d6578697374656e7420736b7500000000000000000000604482015290519081900360640190fd5b816080015181600201541015613122576040805162461bcd60e51b815260206004820152601860248201527f53616c653a2061626f7665206d6178207175616e746974790000000000000000604482015290519081900360640190fd5b80546000191461318957816080015181600101541015613189576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20696e73756666696369656e7420737570706c7900000000000000604482015290519081900360640190fd5b60408201516001600160a01b03166131a46004830182613359565b6124da576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a206e6f6e2d6578697374656e7420736b7520746f6b656e00000000604482015290519081900360640190fd5b60005b82518110156132db57600083828151811061320f57fe5b6020026020010151905060006001600160a01b0316816001600160a01b03161415613281576040805162461bcd60e51b815260206004820152601860248201527f53616c653a207a65726f206164647265737320746f6b656e0000000000000000604482015290519081900360640190fd5b600083838151811061328f57fe5b6020026020010151905080600014156132bb576132b5866001600160a01b038416612377565b506132d1565b6132cf866001600160a01b03841683614795565b505b50506001016131f8565b507f000000000000000000000000000000000000000000000000000000000000000061330684611f27565b11156124da576040805162461bcd60e51b815260206004820152601560248201527f53616c653a20746f6f206d616e7920746f6b656e730000000000000000000000604482015290519081900360640190fd5b60009081526001919091016020526040902054151590565b60e08101515115806133a357506001600019038160e0015160008151811061339557fe5b602002602001015160001c14155b156133b6576133b18161482c565b6122b8565b60408101516001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561343d578060c00151341015613438576040805162461bcd60e51b815260206004820152601660248201527f53616c653a20696e73756666696369656e742045544800000000000000000000604482015290519081900360640190fd5b613464565b613464613448610e50565b60c083015160408401516001600160a01b031691903090612826565b60008160e0015160018151811061347757fe5b602002602001015160001c905060006134a9670de0b6b3a7640000611a5f8560c0015185612a8890919063ffffffff16565b604084015160075460a08601519293506000926134d292916001600160a01b03169085906128ae565b60408501519091506001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561355357600061350a348361497b565b9050801561354d5784516040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561354b573d6000803e3d6000fd5b505b5061358c565b60c0840151600090613565908361497b565b9050801561358a578451604086015161358a916001600160a01b0390911690836149d8565b505b6007546001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14156135f3576001546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156135ed573d6000803e3d6000fd5b50611166565b600154600754611166916001600160a01b039182169116836149d8565b604082015160009061362c9083906001600160a01b0316614a58565b905080612451576040805162461bcd60e51b815260206004820152601f60248201527f53616c653a20756e737570706f72746564207061796d656e7420746f6b656e00604482015290519081900360640190fd5b6000600119821461369d57613696848484614ae8565b9050612ae1565b6007546000906136b79085906001600160a01b0316614a58565b60808601519091506000906136cd908390612a88565b604087015160075460a08901519293506000926136f692916001600160a01b0316908590611dd6565b9050600061371082611a5f85670de0b6b3a7640000612a88565b604080516002808252606082018352929350919060208301908036833750505060e08901819052805187919060009061374557fe5b6020026020010181815250508060001b8860e0015160018151811061376657fe5b60209081029190910101525060c08701525060019150509392505050565b816137976001600160a01b038216612eee565b6137e8576040805162461bcd60e51b815260206004820152601a60248201527f4552433230577261707065723a206e6f6e2d636f6e7472616374000000000000604482015290519081900360640190fd5b600080826001600160a01b0316846040518082805190602001908083835b602083106138255780518252601f199092019160209182019101613806565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613887576040519150601f19603f3d011682016040523d82523d6000602084013e61388c565b606091505b5091509150811561390b57805115613906578080602001905160208110156138b357600080fd5b5051613906576040805162461bcd60e51b815260206004820152601e60248201527f4552433230577261707065723a206f7065726174696f6e206661696c65640000604482015290519081900360640190fd5b613967565b805161395e576040805162461bcd60e51b815260206004820152601e60248201527f4552433230577261707065723a206f7065726174696f6e206661696c65640000604482015290519081900360640190fd5b80518082602001fd5b5050505050565b6000856001600160a01b0316876001600160a01b031614156139d7576040805162461bcd60e51b815260206004820152601960248201527f556e697377617056323a2073616d652061646472657373657300000000000000604482015290519081900360640190fd5b6040805160028082526060820183526000926020830190803683370190505090508781600081518110613a0657fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508681600181518110613a3457fe5b6001600160a01b03928316602091820292909201810191909152600854604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051606094929092169263ad5c464892600480840193829003018186803b158015613aa257600080fd5b505afa158015613ab6573d6000803e3d6000fd5b505050506040513d6020811015613acc57600080fd5b50516001600160a01b038a811691161415613cc757348614613b35576040805162461bcd60e51b815260206004820152601e60248201527f556e697377617056323a20696e76616c6964206d6178416d6f756e74496e0000604482015290519081900360640190fd5b6008546040517ffb3bdb41000000000000000000000000000000000000000000000000000000008152600481018981526001600160a01b03888116604484015260648301889052608060248401908152865160848501528651919094169363fb3bdb419334938d9389938d938d939260a4909101906020808801910280838360005b83811015613bcf578181015183820152602001613bb7565b50505050905001955050505050506000604051808303818588803b158015613bf657600080fd5b505af1158015613c0a573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526020811015613c3457600080fd5b8101908080516040519392919084640100000000821115613c5457600080fd5b908301906020820185811115613c6957600080fd5b8251866020820283011164010000000082111715613c8657600080fd5b82525081516020918201928201910280838360005b83811015613cb3578181015183820152602001613c9b565b505050509050016040525050509050613ff1565b600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613d1557600080fd5b505afa158015613d29573d6000803e3d6000fd5b505050506040513d6020811015613d3f57600080fd5b50516001600160a01b0389811691161415613e5b576008546040517f4a25d94a00000000000000000000000000000000000000000000000000000000815260048101898152602482018990526001600160a01b0388811660648401526084830188905260a060448401908152865160a485015286519190941693634a25d94a938c938c9389938d938d939260c4909101906020808801910280838360005b83811015613df5578181015183820152602001613ddd565b505050509050019650505050505050600060405180830381600087803b158015613e1e57600080fd5b505af1158015613e32573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015613c3457600080fd5b6008546040517f8803dbee00000000000000000000000000000000000000000000000000000000815260048101898152602482018990526001600160a01b0388811660648401526084830188905260a060448401908152865160a485015286519190941693638803dbee938c938c9389938d938d939260c4909101906020808801910280838360005b83811015613efc578181015183820152602001613ee4565b505050509050019650505050505050600060405180830381600087803b158015613f2557600080fd5b505af1158015613f39573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015613f6257600080fd5b8101908080516040519392919084640100000000821115613f8257600080fd5b908301906020820185811115613f9757600080fd5b8251866020820283011164010000000082111715613fb457600080fd5b82525081516020918201928201910280838360005b83811015613fe1578181015183820152602001613fc9565b5050505090500160405250505090505b80600081518110613ffe57fe5b6020026020010151925050509695505050505050565b6060810151600090815260066020526040902080546000191461405c57608082015160018201546140449161497b565b60608301516000908152600660205260409020600101555b5050565b806060015181604001516001600160a01b031682600001516001600160a01b03167f29f844483ca6b10b5c0611d039afc15ce8f6380e905307b381c3a8ee4e90e11e846020015185608001518660a001518760c001518860e001518961010001518a610120015160405160200180848051906020019060200280838360005b838110156140f75781810151838201526020016140df565b50505050905001838051906020019060200280838360005b8381101561412757818101518382015260200161410f565b50505050905001828051906020019060200280838360005b8381101561415757818101518382015260200161413f565b50505050905001935050505060405160208183030381529060405260405180866001600160a01b031681526020018581526020018060200184815260200180602001838103835286818151815260200191508051906020019080838360005b838110156141ce5781810151838201526020016141b6565b50505050905090810190601f1680156141fb5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b8381101561422e578181015183820152602001614216565b50505050905090810190601f16801561425b5780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390a460608101516000908152600660205260409020600301546001600160a01b0316801561405c576361eceae860e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916816001600160a01b03166361eceae8846000015185602001518660400151876060015188608001518960a001518a60c001518b60e001518c61010001518d61012001516040518b63ffffffff1660e01b8152600401808b6001600160a01b031681526020018a6001600160a01b03168152602001896001600160a01b031681526020018881526020018781526020018060200186815260200180602001806020018060200185810385528a818151815260200191508051906020019080838360005b8381101561439457818101518382015260200161437c565b50505050905090810190601f1680156143c15780820380516001836020036101000a031916815260200191505b508581038452885181528851602091820191808b01910280838360005b838110156143f65781810151838201526020016143de565b50505050905001858103835287818151815260200191508051906020019060200280838360005b8381101561443557818101518382015260200161441d565b50505050905001858103825286818151815260200191508051906020019060200280838360005b8381101561447457818101518382015260200161445c565b505050509050019e505050505050505050505050505050602060405180830381600087803b1580156144a557600080fd5b505af11580156144b9573d6000803e3d6000fd5b505050506040513d60208110156144cf57600080fd5b50517fffffffff00000000000000000000000000000000000000000000000000000000161461405c576040805162461bcd60e51b815260206004820152601a60248201527f53616c653a206e6f74696669636174696f6e2072656675736564000000000000604482015290519081900360640190fd5b600080826001600160a01b0316846001600160a01b031614156145af576040805162461bcd60e51b815260206004820152601960248201527f556e697377617056323a2073616d652061646472657373657300000000000000604482015290519081900360640190fd5b826001600160a01b0316846001600160a01b0316106145cf5782846145d2565b83835b90925090506001600160a01b038216611fb6576040805162461bcd60e51b815260206004820152601760248201527f556e697377617056323a207a65726f2061646472657373000000000000000000604482015290519081900360640190fd5b60008060006146418585614545565b91509150600860009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561469357600080fd5b505afa1580156146a7573d6000803e3d6000fd5b505050506040513d60208110156146bd57600080fd5b5051604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606095861b811660208381019190915294861b81166034830152825160288184030181526048830184528051908601207fff0000000000000000000000000000000000000000000000000000000000000060688401529390951b9094166069850152607d8401919091527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f609d808501919091528151808503909101815260bd909301905281519101209392505050565b6000828152600184016020526040812054806147fa575050604080518082018252838152602080820184815286546001818101895560008981528481209551600290930290950191825591519082015586548684528188019092529290912055612ae1565b8285600001600183038154811061480d57fe5b9060005260206000209060020201600101819055506000915050612ae1565b60408101516001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561494f578060c001513410156148ae576040805162461bcd60e51b815260206004820152601660248201527f53616c653a20696e73756666696369656e742045544800000000000000000000604482015290519081900360640190fd5b60015460c08201516040516001600160a01b039092169181156108fc0291906000818181858888f193505050501580156148ec573d6000803e3d6000fd5b5060006149068260c001513461497b90919063ffffffff16565b905080156149495781516040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015614947573d6000803e3d6000fd5b505b506122b8565b6122b861495a610e50565b60015460c084015160408501516001600160a01b0390811693921690612826565b6000828211156149d2576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526124da908490613784565b600081815260018301602052604081205480614abb576040805162461bcd60e51b815260206004820152601860248201527f456e756d4d61703a206e6f6e6578697374656e74206b65790000000000000000604482015290519081900360640190fd5b836000016001820381548110614acd57fe5b90600052602060002090600202016001015491505092915050565b60006000198214614afb57506000612ae1565b600754600090614b159085906001600160a01b0316614a58565b604086015160075460a0880151929350600092614b3c92916001600160a01b031690612638565b90506000614b6d8760800151614b6784611a5f670de0b6b3a764000088612a8890919063ffffffff16565b90612a88565b604080516002808252606082018352929350919060208301908036833750505060e088018190528051869190600090614ba257fe5b6020026020010181815250508160001b8760e00151600181518110614bc357fe5b602090810291909101015260c08701525060019150509392505050565b60405180610140016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160008019168152602001600081526020016060815260200160008152602001606081526020016060815260200160608152509056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220137e37c66b04e815a20493ec609a66e1beb395702fc79e0266ae7431cb4b3f7164736f6c63430007060033abb92614f53337043b55dc996a83ebb09adce78ec336ca188ea02180b61d1c14","opcodes":"PUSH1 0xC0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x539B CODESIZE SUB DUP1 PUSH3 0x539B DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0xA0 DUP2 LT ISZERO PUSH3 0x37 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 DUP1 DUP5 ADD MLOAD PUSH1 0x60 DUP6 ADD MLOAD PUSH1 0x80 SWAP1 SWAP6 ADD MLOAD PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND CALLER SWAP1 DUP2 OR DUP3 SSTORE SWAP4 MLOAD SWAP6 SWAP7 SWAP5 SWAP6 SWAP3 SWAP5 SWAP4 SWAP2 SWAP3 DUP8 SWAP3 DUP8 SWAP3 DUP8 SWAP3 DUP8 SWAP3 DUP8 SWAP3 DUP4 SWAP3 DUP9 SWAP3 DUP9 SWAP3 DUP9 SWAP3 DUP9 SWAP3 DUP7 SWAP3 DUP7 SWAP3 DUP7 SWAP3 DUP7 SWAP3 DUP7 SWAP3 DUP7 SWAP3 DUP7 SWAP3 DUP6 SWAP3 DUP6 SWAP3 DUP6 SWAP3 PUSH1 0x1 SWAP3 DUP7 SWAP2 DUP4 SWAP2 DUP3 SWAP2 SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP3 SWAP1 LOG3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH3 0x123 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061796F75743A207A65726F2061646472657373000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 SWAP2 AND DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD PUSH32 0xDD880D24A789958A6398C99C2E54CE31BC10A638CBC42F7DD34285479AE0F855 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP POP PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x80 DUP3 SWAP1 MSTORE PUSH1 0xA0 DUP2 SWAP1 MSTORE 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 POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x2 DUP1 DUP3 MSTORE PUSH1 0x60 DUP3 ADD DUP4 MSTORE SWAP4 SWAP5 POP PUSH1 0x0 SWAP4 SWAP1 SWAP3 POP SWAP1 PUSH1 0x20 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP POP DUP4 MLOAD SWAP2 SWAP3 POP PUSH9 0xA89E968A9CBE8AA89 PUSH1 0xBB SHL SWAP2 PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE SWAP2 POP DUP5 SWAP1 PUSH1 0x0 SWAP1 PUSH3 0x208 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP4 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH3 0x21D JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP3 DUP2 MSTORE POP DUP3 DUP2 MSTORE POP POP POP PUSH1 0x0 NOT PUSH1 0x0 SHL PUSH16 0x14D55414131657D55393125352551151 PUSH1 0x82 SHL SWAP1 DUP4 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH3 0x257 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP4 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH3 0x26C JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP3 DUP2 MSTORE POP DUP3 DUP2 MSTORE POP POP POP PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x537B DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP3 DUP3 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x2D5 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x2BB JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x316 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x2FC JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP PUSH1 0x7 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND OR SWAP1 SSTORE POP PUSH1 0x0 SWAP5 POP PUSH1 0x1 SWAP4 POP DUP5 SWAP3 POP PUSH3 0x35D SWAP2 POP POP JUMP JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH3 0x388 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 DUP1 DUP3 MSTORE DUP2 DUP4 ADD SWAP1 SWAP3 MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 SWAP1 PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP PUSH1 0x0 NOT PUSH1 0x0 SHL PUSH32 0x50524943455F434F4E564552545F5649415F4F5241434C450000000000000000 SWAP1 DUP4 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH3 0x3E5 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP4 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH3 0x3FA JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP3 DUP2 MSTORE POP DUP3 DUP2 MSTORE POP POP POP PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x537B DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP3 DUP3 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x463 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x449 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x4A4 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x48A JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP POP POP PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP1 ISZERO PUSH3 0x4D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH3 0x504 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 DUP1 DUP3 MSTORE DUP2 DUP4 ADD SWAP1 SWAP3 MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 SWAP1 PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP POP DUP4 MLOAD SWAP2 SWAP3 POP PUSH32 0x50524943455F535741505F5649415F4F5241434C450000000000000000000000 SWAP2 PUSH1 0x1 NOT SWAP2 POP DUP5 SWAP1 PUSH1 0x0 SWAP1 PUSH3 0x55F JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP4 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH3 0x574 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP3 DUP2 MSTORE POP DUP3 DUP2 MSTORE POP POP POP PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x537B DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP3 DUP3 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x5DD JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x5C3 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x61E JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x604 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP POP POP PUSH3 0x64A DUP2 PUSH3 0x65B PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP POP PUSH3 0x6AF JUMP JUMPDEST PUSH1 0x8 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 SWAP2 AND DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD PUSH32 0xFE70995E26C62B71BBD53A5B9E09215C42E2006FAD72BA845051FAA8DE1510BA SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH2 0x4CA8 PUSH3 0x6D3 PUSH1 0x0 CODECOPY DUP1 PUSH2 0x32DE MSTORE POP DUP1 PUSH2 0x2011 MSTORE POP PUSH2 0x4CA8 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1DC JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8488BB4E GT PUSH2 0x102 JUMPI DUP1 PUSH4 0xA963B257 GT PUSH2 0x95 JUMPI DUP1 PUSH4 0xC7B778DB GT PUSH2 0x64 JUMPI DUP1 PUSH4 0xC7B778DB EQ PUSH2 0xCE5 JUMPI DUP1 PUSH4 0xD52BB6F4 EQ PUSH2 0xDB4 JUMPI DUP1 PUSH4 0xF21F537D EQ PUSH2 0xE08 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0xE1D JUMPI PUSH2 0x252 JUMP JUMPDEST DUP1 PUSH4 0xA963B257 EQ PUSH2 0xB60 JUMPI DUP1 PUSH4 0xBDA4C5AB EQ PUSH2 0xBF5 JUMPI DUP1 PUSH4 0xBE9A6555 EQ PUSH2 0xCC8 JUMPI DUP1 PUSH4 0xC2AC3AFF EQ PUSH2 0xCDD JUMPI PUSH2 0x252 JUMP JUMPDEST DUP1 PUSH4 0x9865BCC8 GT PUSH2 0xD1 JUMPI DUP1 PUSH4 0x9865BCC8 EQ PUSH2 0xA1F JUMPI DUP1 PUSH4 0x9E049545 EQ PUSH2 0xA1F JUMPI DUP1 PUSH4 0xA1E16908 EQ PUSH2 0xA34 JUMPI DUP1 PUSH4 0xA541F89C EQ PUSH2 0xACA JUMPI PUSH2 0x252 JUMP JUMPDEST DUP1 PUSH4 0x8488BB4E EQ PUSH2 0x868 JUMPI DUP1 PUSH4 0x8CE507EB EQ PUSH2 0x87D JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x968 JUMPI DUP1 PUSH4 0x97309B44 EQ PUSH2 0x97D JUMPI PUSH2 0x252 JUMP JUMPDEST DUP1 PUSH4 0x56C1476E GT PUSH2 0x17A JUMPI DUP1 PUSH4 0x5E6E9F70 GT PUSH2 0x149 JUMPI DUP1 PUSH4 0x5E6E9F70 EQ PUSH2 0x680 JUMPI DUP1 PUSH4 0x61BD3851 EQ PUSH2 0x7BB JUMPI DUP1 PUSH4 0x6B8F9C43 EQ PUSH2 0x820 JUMPI DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x853 JUMPI PUSH2 0x252 JUMP JUMPDEST DUP1 PUSH4 0x56C1476E EQ PUSH2 0x58B JUMPI DUP1 PUSH4 0x579F2C77 EQ PUSH2 0x62D JUMPI DUP1 PUSH4 0x5C4FAFC7 EQ PUSH2 0x642 JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x657 JUMPI PUSH2 0x252 JUMP JUMPDEST DUP1 PUSH4 0x1694505E GT PUSH2 0x1B6 JUMPI DUP1 PUSH4 0x1694505E EQ PUSH2 0x434 JUMPI DUP1 PUSH4 0x2A8A45BC EQ PUSH2 0x449 JUMPI DUP1 PUSH4 0x2C87927B EQ PUSH2 0x531 JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x576 JUMPI PUSH2 0x252 JUMP JUMPDEST DUP1 PUSH4 0x1265B651 EQ PUSH2 0x257 JUMPI DUP1 PUSH4 0x1323B066 EQ PUSH2 0x288 JUMPI DUP1 PUSH4 0x151229F7 EQ PUSH2 0x385 JUMPI PUSH2 0x252 JUMP JUMPDEST CALLDATASIZE PUSH2 0x252 JUMPI PUSH1 0x8 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1F5 PUSH2 0xE50 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x250 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20496E76616C6964204554482073656E6465720000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x263 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x26C PUSH2 0xE54 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x294 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x2AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x2EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x2FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x31F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0xE63 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x370 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x358 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP4 POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x391 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x422 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x3A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x80 DUP2 ADD PUSH1 0x60 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x3E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x3F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x417 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0xF58 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x440 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x26C PUSH2 0xFA6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x455 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x473 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x46C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0xFB5 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4D8 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x4C0 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x517 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x4FF JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP9 POP POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x53D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x250 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x554 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x115A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x582 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x250 PUSH2 0x116C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x597 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x250 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x5AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x5EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x600 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x622 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x11DA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x639 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x422 PUSH2 0x1264 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x64E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x26C PUSH2 0x126A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x663 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x66C PUSH2 0x1282 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x68C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x250 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x6A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x6C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x6D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x6F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 SWAP5 SWAP4 PUSH1 0x20 DUP2 ADD SWAP4 POP CALLDATALOAD SWAP2 POP POP PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x749 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x75B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x77D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0x128B SWAP5 POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7D0 PUSH2 0x1468 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 DUP2 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x80C JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x7F4 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x82C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x250 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x843 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x14C3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x85F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x250 PUSH2 0x1590 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x874 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x26C PUSH2 0x15F7 JUMP JUMPDEST PUSH2 0x250 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x893 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x8D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x8E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x907 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 DUP3 CALLDATALOAD SWAP3 PUSH1 0x40 DUP2 ADD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x929 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x93B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x95D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x1606 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x974 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x26C PUSH2 0x16D0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x989 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x9A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x9E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x9F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xA14 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x16DF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA2B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x422 PUSH2 0x177E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA40 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x422 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0xA57 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 DUP2 ADD SWAP1 PUSH1 0x60 DUP2 ADD PUSH1 0x40 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xA8B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xA9D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xABF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x1784 JUMP JUMPDEST PUSH2 0x250 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0xAE0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP3 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP1 SWAP3 AND SWAP2 PUSH1 0x60 DUP3 ADD CALLDATALOAD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xB21 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xB33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xB55 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x17D0 JUMP JUMPDEST PUSH2 0x250 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0xB76 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xBB6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xBC8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xBEA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x18A4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xC01 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7D0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0xC18 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xC33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xC45 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xC67 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 DUP3 CALLDATALOAD SWAP3 PUSH1 0x40 DUP2 ADD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xC89 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xC9B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xCBD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x1981 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xCD4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x250 PUSH2 0x1A90 JUMP JUMPDEST PUSH2 0x250 PUSH2 0x11D8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xCF1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7D0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xD08 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xD23 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xD35 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xD57 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH1 0x20 DUP2 ADD SWAP1 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xD75 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xD87 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xDA9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x1AA3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xDC0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xDEF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xDD7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x1B8F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xE14 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x422 PUSH2 0x1CEB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xE29 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x250 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xE40 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1CF1 JUMP JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x2 SLOAD PUSH1 0x0 EQ ISZERO PUSH2 0xEBF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0xEC7 PUSH2 0x1D57 JUMP JUMPDEST PUSH2 0xECF PUSH2 0x4BE0 JUMP JUMPDEST PUSH2 0xED7 PUSH2 0xE50 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP10 DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP10 AND PUSH1 0x40 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD DUP10 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP9 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x1F DUP8 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD SWAP1 SWAP2 MSTORE DUP6 DUP2 MSTORE SWAP1 DUP7 SWAP1 DUP7 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP POP PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0xF48 DUP2 PUSH2 0x1DAF JUMP JUMPDEST SWAP3 POP SWAP3 POP POP SWAP7 POP SWAP7 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF9C DUP7 DUP7 DUP7 DUP7 DUP7 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1DD6 SWAP3 POP POP POP JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP2 SWAP1 DUP2 SWAP1 DUP2 SWAP1 PUSH1 0x60 SWAP1 DUP2 SWAP1 DUP4 PUSH2 0xFDB PUSH1 0x4 DUP4 ADD PUSH2 0x1F27 JUMP JUMPDEST DUP3 SLOAD SWAP9 POP SWAP1 POP DUP8 PUSH2 0x1033 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7500000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x3 DUP5 ADD SLOAD SWAP2 SWAP9 POP SWAP7 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP5 POP DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x1069 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1093 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP4 POP DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x10AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x10D7 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x114E JUMPI PUSH1 0x0 DUP1 PUSH2 0x10F5 PUSH1 0x4 DUP7 ADD DUP5 PUSH2 0x1F2B JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP2 PUSH1 0x0 SHR DUP8 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x1109 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP DUP1 PUSH1 0x0 SHR DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x1139 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP POP PUSH1 0x1 ADD PUSH2 0x10DD JUMP JUMPDEST POP POP POP SWAP2 SWAP4 SWAP6 POP SWAP2 SWAP4 SWAP6 JUMP JUMPDEST PUSH2 0x1166 DUP5 DUP5 DUP5 DUP5 PUSH2 0x1FBD JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x11C0 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x11D0 PUSH2 0x11CB PUSH2 0xE50 JUMP JUMPDEST PUSH2 0x21F4 JUMP JUMPDEST PUSH2 0x11D8 PUSH2 0x22BB JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x11E2 PUSH2 0x4BE0 JUMP JUMPDEST PUSH2 0x11EA PUSH2 0xE50 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP8 DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP8 AND PUSH1 0x40 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD DUP8 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP7 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x1F DUP6 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD SWAP1 SWAP2 MSTORE DUP4 DUP2 MSTORE SWAP1 DUP5 SWAP1 DUP5 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP POP PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x125B DUP2 PUSH2 0x2313 JUMP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 NOT DUP2 JUMP JUMPDEST PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x1296 PUSH2 0x11CB PUSH2 0xE50 JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD DUP2 EQ PUSH2 0x12ED JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E636F6E73697374656E742061727261797300000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0x134E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7500000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP2 ADD DUP3 PUSH2 0x1399 JUMPI PUSH1 0x0 PUSH2 0x1362 DUP3 PUSH2 0x1F27 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1392 JUMPI PUSH1 0x0 PUSH2 0x137B DUP5 DUP3 PUSH2 0x1F2B JUMP JUMPDEST POP SWAP1 POP PUSH2 0x1388 DUP5 DUP3 PUSH2 0x2377 JUMP JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x1367 JUMP JUMPDEST POP POP PUSH2 0x13A4 JUMP JUMPDEST PUSH2 0x13A4 DUP2 DUP7 DUP7 PUSH2 0x2457 JUMP JUMPDEST DUP6 PUSH32 0xCB3FE5489E0CD43D0F4A33D1E09A4A0463A03D0D38F56165530854E5540DB143 DUP7 DUP7 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x140C JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x13F4 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x144B JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1433 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x4 PUSH1 0x0 ADD DUP1 SLOAD DUP1 PUSH1 0x20 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 DUP1 ISZERO PUSH2 0x14B9 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x14A5 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x14CE PUSH2 0x11CB PUSH2 0xE50 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1529 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061796F75743A207A65726F2061646472657373000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 SWAP1 SWAP2 OR SWAP2 DUP3 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD SWAP3 SWAP1 SWAP2 AND DUP3 MSTORE MLOAD PUSH32 0xDD880D24A789958A6398C99C2E54CE31BC10A638CBC42F7DD34285479AE0F855 SWAP2 PUSH1 0x20 SWAP1 DUP3 SWAP1 SUB ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x15E4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x15EF PUSH2 0x11CB PUSH2 0xE50 JUMP JUMPDEST PUSH2 0x11D8 PUSH2 0x24DF JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x160E PUSH2 0x4BE0 JUMP JUMPDEST PUSH2 0x1616 PUSH2 0xE50 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP11 DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP11 AND PUSH1 0x40 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD DUP11 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP10 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x1F DUP9 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD SWAP1 SWAP2 MSTORE DUP7 DUP2 MSTORE SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP POP PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP6 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP5 DUP3 MSTORE SWAP1 SWAP2 DUP6 SWAP2 DUP6 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP POP PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x16C4 DUP2 PUSH2 0x251D JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x16EB PUSH2 0x4BE0 JUMP JUMPDEST PUSH2 0x16F3 PUSH2 0xE50 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP10 DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP10 AND PUSH1 0x40 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD DUP10 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP9 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x1F DUP8 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD SWAP1 SWAP2 MSTORE DUP6 DUP2 MSTORE SWAP1 DUP7 SWAP1 DUP7 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP POP PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x1764 DUP2 PUSH2 0x2596 JUMP JUMPDEST DUP1 PUSH1 0xC0 ADD MLOAD SWAP3 POP DUP1 PUSH1 0xE0 ADD MLOAD SWAP2 POP POP SWAP7 POP SWAP7 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 NOT DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x17C7 DUP6 DUP6 DUP6 DUP6 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x2638 SWAP3 POP POP POP JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ PUSH2 0x1823 JUMPI PUSH1 0x8 SLOAD PUSH2 0x180E SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND SWAP2 AND DUP8 PUSH2 0x27A6 JUMP JUMPDEST PUSH2 0x1823 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND CALLER ADDRESS DUP9 PUSH2 0x2826 JUMP JUMPDEST PUSH2 0x1865 DUP7 DUP6 DUP6 DUP6 DUP6 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x28AE SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP7 POP PUSH32 0xE16FB73E6E5415265887CEE6412691A8B3CD94E24C6528ED966DC06FFB799B78 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x18F8 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x1900 PUSH2 0x1D57 JUMP JUMPDEST PUSH2 0x1908 PUSH2 0x4BE0 JUMP JUMPDEST PUSH2 0x1910 PUSH2 0xE50 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP8 DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP8 AND PUSH1 0x40 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD DUP8 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP7 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x1F DUP6 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD SWAP1 SWAP2 MSTORE DUP4 DUP2 MSTORE SWAP1 DUP5 SWAP1 DUP5 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP POP PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x125B DUP2 PUSH2 0x2A5B JUMP JUMPDEST PUSH1 0x60 DUP5 DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x199B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x19C5 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1A85 JUMPI PUSH1 0x0 PUSH2 0x1A47 DUP10 DUP10 DUP5 DUP2 DUP2 LT PUSH2 0x19E4 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x7 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP10 DUP10 DUP10 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1DD6 SWAP3 POP POP POP JUMP JUMPDEST SWAP1 POP PUSH2 0x1A65 DUP2 PUSH2 0x1A5F DUP10 PUSH8 0xDE0B6B3A7640000 PUSH2 0x2A88 JUMP JUMPDEST SWAP1 PUSH2 0x2AE8 JUMP JUMPDEST DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1A71 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP PUSH1 0x1 ADD PUSH2 0x19CB JUMP JUMPDEST POP POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x1A9B PUSH2 0x11CB PUSH2 0xE50 JUMP JUMPDEST PUSH2 0x11D0 PUSH2 0x2B4F JUMP JUMPDEST PUSH1 0x60 DUP4 DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x1ABD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1AE7 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1B85 JUMPI PUSH2 0x1B66 DUP8 DUP8 DUP4 DUP2 DUP2 LT PUSH2 0x1B04 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x7 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 DUP8 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x2638 SWAP3 POP POP POP JUMP JUMPDEST DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1B72 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x1AED JUMP JUMPDEST POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x1C34 JUMPI PUSH1 0x8 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND 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 PUSH2 0x1C05 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1C19 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1C2F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP4 POP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x1CD6 JUMPI PUSH1 0x8 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND 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 PUSH2 0x1CA7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1CBB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1CD1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP3 POP JUMPDEST PUSH2 0x1CE0 DUP5 DUP5 PUSH2 0x2BD1 JUMP JUMPDEST SWAP1 SWAP6 SWAP1 SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x1CFC PUSH2 0x11CB PUSH2 0xE50 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 DUP3 OR DUP1 DUP5 SSTORE PUSH1 0x40 MLOAD SWAP3 SWAP4 SWAP2 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x11D8 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061757361626C653A2070617573656400000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x1DBC DUP4 PUSH2 0x2313 JUMP JUMPDEST PUSH2 0x1DC5 DUP4 PUSH2 0x2596 JUMP JUMPDEST POP POP PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xE0 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x1E7A JUMPI PUSH1 0x8 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND 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 PUSH2 0x1E4B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1E5F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1E75 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP5 POP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x1F1C JUMPI PUSH1 0x8 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND 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 PUSH2 0x1EED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1F01 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1F17 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP4 POP JUMPDEST PUSH2 0x17C7 DUP6 DUP6 DUP6 PUSH2 0x2C9D JUMP JUMPDEST SLOAD SWAP1 JUMP JUMPDEST DUP2 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP4 LT PUSH2 0x1F85 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x456E756D4D61703A20696E646578206F7574206F6620626F756E647300000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 PUSH1 0x0 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x1F96 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD SWAP1 POP DUP1 PUSH1 0x0 ADD SLOAD DUP2 PUSH1 0x1 ADD SLOAD SWAP3 POP SWAP3 POP POP JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP3 PUSH2 0x200F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F20737570706C79000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH2 0x203A PUSH1 0x4 PUSH2 0x1F27 JUMP JUMPDEST LT PUSH2 0x208C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20746F6F206D616E7920736B757300000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x2097 PUSH1 0x4 DUP6 PUSH2 0x2EA4 JUMP JUMPDEST PUSH2 0x20E8 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20736B7520616C7265616479206372656174656400000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO PUSH2 0x215A JUMPI PUSH2 0x2109 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2EEE JUMP JUMPDEST PUSH2 0x215A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D636F6E74726163742072656365697665720000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP6 DUP2 SSTORE PUSH1 0x1 DUP2 ADD DUP7 SWAP1 SSTORE PUSH1 0x2 DUP2 ADD DUP6 SWAP1 SSTORE PUSH1 0x3 DUP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT SWAP1 SWAP2 AND DUP2 OR SWAP1 SWAP2 SSTORE DUP4 MLOAD DUP9 DUP2 MSTORE SWAP3 DUP4 ADD DUP8 SWAP1 MSTORE DUP3 DUP5 ADD DUP7 SWAP1 MSTORE PUSH1 0x60 DUP4 ADD MSTORE SWAP2 MLOAD PUSH32 0x38BD4AABCE684540CD61351B91F2F5FACF9D6963934347E25AAB93D87AE7AC14 SWAP2 DUP2 SWAP1 SUB PUSH1 0x80 ADD SWAP1 LOG1 POP POP POP POP POP JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8DA5CB5B 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 PUSH2 0x222D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2241 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2257 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ PUSH2 0x22B8 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6F7420746865206F776E657200000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0x22C3 PUSH2 0x2EF4 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA PUSH2 0x22F6 PUSH2 0xE50 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 JUMP JUMPDEST PUSH2 0x231C DUP2 PUSH2 0x2F4B JUMP JUMPDEST PUSH1 0x40 DUP2 PUSH1 0xA0 ADD MLOAD MLOAD LT ISZERO PUSH2 0x22B8 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206D697373696E6720757365722064617461000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0x244B JUMPI DUP4 SLOAD PUSH1 0x0 NOT DUP1 DUP4 ADD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x0 SWAP1 DUP8 SWAP1 DUP4 SWAP1 DUP2 LT PUSH2 0x23AA JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD SWAP1 POP DUP1 DUP8 PUSH1 0x0 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x23CA JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 DUP5 SLOAD PUSH1 0x2 SWAP1 SWAP4 MUL ADD SWAP2 DUP3 SSTORE PUSH1 0x1 SWAP4 DUP5 ADD SLOAD SWAP2 DUP5 ADD SWAP2 SWAP1 SWAP2 SSTORE DUP4 SLOAD DUP3 MSTORE DUP10 DUP4 ADD SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP1 DUP5 ADD SWAP1 SSTORE DUP7 SLOAD DUP8 SWAP1 DUP1 PUSH2 0x2409 JUMPI INVALID JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 PUSH1 0x2 PUSH1 0x0 NOT SWAP1 SWAP5 ADD SWAP4 DUP5 MUL ADD DUP3 DUP2 SSTORE PUSH1 0x1 SWAP1 DUP2 ADD DUP4 SWAP1 SSTORE SWAP3 SWAP1 SWAP4 SSTORE DUP9 DUP2 MSTORE DUP10 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x40 DUP3 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE SWAP5 POP PUSH2 0x2451 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SWAP2 POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x2462 DUP4 DUP4 DUP4 PUSH2 0x31F5 JUMP JUMPDEST PUSH2 0x246B DUP4 PUSH2 0x1F27 JUMP JUMPDEST ISZERO DUP1 PUSH2 0x2489 JUMPI POP PUSH1 0x7 SLOAD PUSH2 0x2489 SWAP1 DUP5 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x3359 JUMP JUMPDEST PUSH2 0x24DA JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F207265666572656E636520746F6B656E0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x24E7 PUSH2 0x1D57 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH2 0x22F6 PUSH2 0xE50 JUMP JUMPDEST PUSH1 0xE0 DUP2 ADD MLOAD MLOAD ISZERO DUP1 ISZERO SWAP1 PUSH2 0x2552 JUMPI POP PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO JUMPDEST ISZERO PUSH2 0x258D JUMPI PUSH1 0xA0 DUP2 ADD MLOAD PUSH1 0x20 DUP2 ADD MLOAD DUP1 PUSH2 0x256B JUMPI POP PUSH1 0x0 NOT JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x40 DUP5 ADD MLOAD PUSH2 0x258A SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND SWAP2 AND DUP4 PUSH2 0x27A6 JUMP JUMPDEST POP POP JUMPDEST PUSH2 0x22B8 DUP2 PUSH2 0x3371 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0x25FC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20756E737570706F7274656420534B550000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP2 ADD PUSH1 0x0 PUSH2 0x260C DUP5 DUP4 PUSH2 0x3610 JUMP JUMPDEST SWAP1 POP PUSH2 0x2619 DUP5 DUP4 DUP4 PUSH2 0x3680 JUMP JUMPDEST PUSH2 0x1166 JUMPI PUSH1 0x80 DUP5 ADD MLOAD PUSH2 0x262D SWAP1 DUP3 SWAP1 PUSH2 0x2A88 JUMP JUMPDEST PUSH1 0xC0 DUP6 ADD MSTORE POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x26DC JUMPI PUSH1 0x8 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND 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 PUSH2 0x26AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x26C1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x26D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP4 POP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x277E JUMPI PUSH1 0x8 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND 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 PUSH2 0x274F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2763 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2779 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP3 POP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x278B DUP7 DUP7 PUSH2 0x2BD1 JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH2 0xF9C DUP3 PUSH2 0x1A5F DUP4 PUSH8 0xDE0B6B3A7640000 PUSH2 0x2A88 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 OR SWAP1 MSTORE PUSH2 0x24DA SWAP1 DUP5 SWAP1 PUSH2 0x3784 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x24 DUP4 ADD MSTORE DUP5 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x84 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 OR SWAP1 MSTORE PUSH2 0x1166 SWAP1 DUP6 SWAP1 PUSH2 0x3784 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x0 SWAP2 SWAP1 DUP2 PUSH2 0x28F4 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x28EE JUMPI CALLVALUE SWAP2 POP PUSH2 0x28F4 JUMP JUMPDEST PUSH1 0x0 NOT SWAP2 POP JUMPDEST DUP1 PUSH2 0x28FE JUMPI POP PUSH1 0x0 NOT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x29A0 JUMPI PUSH1 0x8 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND 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 PUSH2 0x2971 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2985 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x299B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP7 POP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x2A42 JUMPI PUSH1 0x8 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND 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 PUSH2 0x2A13 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2A27 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2A3D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP6 POP JUMPDEST PUSH2 0x2A50 DUP8 DUP8 DUP8 DUP6 ADDRESS DUP7 PUSH2 0x396E JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x2A64 DUP2 PUSH2 0x2313 JUMP JUMPDEST PUSH2 0x2A6D DUP2 PUSH2 0x2596 JUMP JUMPDEST PUSH2 0x2A76 DUP2 PUSH2 0x251D JUMP JUMPDEST PUSH2 0x2A7F DUP2 PUSH2 0x4014 JUMP JUMPDEST PUSH2 0x22B8 DUP2 PUSH2 0x4060 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x2A97 JUMPI POP PUSH1 0x0 PUSH2 0x2451 JUMP JUMPDEST DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 PUSH2 0x2AA4 JUMPI INVALID JUMPDEST DIV EQ PUSH2 0x2AE1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x4C52 PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 GT PUSH2 0x2B3E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206469766973696F6E206279207A65726F000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 DUP4 DUP2 PUSH2 0x2B47 JUMPI INVALID JUMPDEST DIV SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD ISZERO PUSH2 0x2BA4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A20737461727465640000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST TIMESTAMP PUSH1 0x2 SSTORE PUSH32 0x27029695AA5F602A4EE81F4C32DFA86E562F200A17966496F3A7C3F2EC0F9417 PUSH2 0x22F6 PUSH2 0xE50 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x2BE0 DUP6 DUP6 PUSH2 0x4545 JUMP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP1 PUSH2 0x2BF0 DUP8 DUP8 PUSH2 0x4632 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x902F1AC PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2C28 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2C3C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x2C52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND SWAP4 POP AND SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND SWAP1 DUP5 AND EQ PUSH2 0x2C8C JUMPI DUP1 DUP3 PUSH2 0x2C8F JUMP JUMPDEST DUP2 DUP2 JUMPDEST SWAP1 SWAP9 SWAP1 SWAP8 POP SWAP6 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 DUP4 SWAP3 SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP DUP5 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x2CD0 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP DUP4 DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x2CFE JUMPI INVALID 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 0x8 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x1F00CA7400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP9 DUP2 MSTORE PUSH1 0x24 DUP3 ADD SWAP3 DUP4 MSTORE DUP7 MLOAD PUSH1 0x44 DUP4 ADD MSTORE DUP7 MLOAD PUSH1 0x0 SWAP7 SWAP5 SWAP1 SWAP5 AND SWAP5 PUSH4 0x1F00CA74 SWAP5 DUP11 SWAP5 DUP10 SWAP5 SWAP1 SWAP3 PUSH1 0x64 SWAP1 SWAP2 ADD SWAP2 DUP6 DUP3 ADD SWAP2 MUL DUP1 DUP4 DUP4 DUP13 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2D95 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2D7D JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP4 POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2DB9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2DCD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2DF6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH2 0x2E16 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x2E2B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD DUP7 PUSH1 0x20 DUP3 MUL DUP4 ADD GT PUSH5 0x100000000 DUP3 GT OR ISZERO PUSH2 0x2E48 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 DUP3 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2E75 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2E5D JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD PUSH1 0x40 MSTORE POP POP POP SWAP1 POP DUP1 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x2E91 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP3 POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2EB0 DUP4 DUP4 PUSH2 0x3359 JUMP JUMPDEST PUSH2 0x2EE6 JUMPI POP DUP2 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP5 SSTORE PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 SWAP1 SWAP4 ADD DUP5 SWAP1 SSTORE DUP5 SLOAD DUP5 DUP3 MSTORE DUP3 DUP7 ADD SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0x2451 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x2451 JUMP JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND PUSH2 0x11D8 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061757361626C653A206E6F7420706175736564000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2FAA JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F206164647265737320726563697069656E7400000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x3009 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F206164647265737320746F6B656E0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x80 DUP2 ADD MLOAD PUSH2 0x305F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F207175616E7469747920707572636861736500000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0x30C5 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7500000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x80 ADD MLOAD DUP2 PUSH1 0x2 ADD SLOAD LT ISZERO PUSH2 0x3122 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A2061626F7665206D6178207175616E746974790000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 SLOAD PUSH1 0x0 NOT EQ PUSH2 0x3189 JUMPI DUP2 PUSH1 0x80 ADD MLOAD DUP2 PUSH1 0x1 ADD SLOAD LT ISZERO PUSH2 0x3189 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E73756666696369656E7420737570706C7900000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x31A4 PUSH1 0x4 DUP4 ADD DUP3 PUSH2 0x3359 JUMP JUMPDEST PUSH2 0x24DA JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7520746F6B656E00000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x32DB JUMPI PUSH1 0x0 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x320F JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x3281 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F206164647265737320746F6B656E0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x328F JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP DUP1 PUSH1 0x0 EQ ISZERO PUSH2 0x32BB JUMPI PUSH2 0x32B5 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x2377 JUMP JUMPDEST POP PUSH2 0x32D1 JUMP JUMPDEST PUSH2 0x32CF DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP4 PUSH2 0x4795 JUMP JUMPDEST POP JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x31F8 JUMP JUMPDEST POP PUSH32 0x0 PUSH2 0x3306 DUP5 PUSH2 0x1F27 JUMP JUMPDEST GT ISZERO PUSH2 0x24DA JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20746F6F206D616E7920746F6B656E730000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0xE0 DUP2 ADD MLOAD MLOAD ISZERO DUP1 PUSH2 0x33A3 JUMPI POP PUSH1 0x1 PUSH1 0x0 NOT SUB DUP2 PUSH1 0xE0 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x3395 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 SHR EQ ISZERO JUMPDEST ISZERO PUSH2 0x33B6 JUMPI PUSH2 0x33B1 DUP2 PUSH2 0x482C JUMP JUMPDEST PUSH2 0x22B8 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x343D JUMPI DUP1 PUSH1 0xC0 ADD MLOAD CALLVALUE LT ISZERO PUSH2 0x3438 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E73756666696369656E742045544800000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x3464 JUMP JUMPDEST PUSH2 0x3464 PUSH2 0x3448 PUSH2 0xE50 JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD MLOAD PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 SWAP1 ADDRESS SWAP1 PUSH2 0x2826 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0xE0 ADD MLOAD PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x3477 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 SHR SWAP1 POP PUSH1 0x0 PUSH2 0x34A9 PUSH8 0xDE0B6B3A7640000 PUSH2 0x1A5F DUP6 PUSH1 0xC0 ADD MLOAD DUP6 PUSH2 0x2A88 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0x7 SLOAD PUSH1 0xA0 DUP7 ADD MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 PUSH2 0x34D2 SWAP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP6 SWAP1 PUSH2 0x28AE JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MLOAD SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x3553 JUMPI PUSH1 0x0 PUSH2 0x350A CALLVALUE DUP4 PUSH2 0x497B JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x354D JUMPI DUP5 MLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 DUP3 ISZERO PUSH2 0x8FC MUL SWAP1 DUP4 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x354B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP JUMPDEST POP PUSH2 0x358C JUMP JUMPDEST PUSH1 0xC0 DUP5 ADD MLOAD PUSH1 0x0 SWAP1 PUSH2 0x3565 SWAP1 DUP4 PUSH2 0x497B JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x358A JUMPI DUP5 MLOAD PUSH1 0x40 DUP7 ADD MLOAD PUSH2 0x358A SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 DUP4 PUSH2 0x49D8 JUMP JUMPDEST POP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x35F3 JUMPI PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 DUP3 ISZERO PUSH2 0x8FC MUL SWAP1 DUP4 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x35ED JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x1166 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x7 SLOAD PUSH2 0x1166 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND SWAP2 AND DUP4 PUSH2 0x49D8 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x0 SWAP1 PUSH2 0x362C SWAP1 DUP4 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x4A58 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x2451 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20756E737570706F72746564207061796D656E7420746F6B656E00 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 NOT DUP3 EQ PUSH2 0x369D JUMPI PUSH2 0x3696 DUP5 DUP5 DUP5 PUSH2 0x4AE8 JUMP JUMPDEST SWAP1 POP PUSH2 0x2AE1 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x36B7 SWAP1 DUP6 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x4A58 JUMP JUMPDEST PUSH1 0x80 DUP7 ADD MLOAD SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH2 0x36CD SWAP1 DUP4 SWAP1 PUSH2 0x2A88 JUMP JUMPDEST PUSH1 0x40 DUP8 ADD MLOAD PUSH1 0x7 SLOAD PUSH1 0xA0 DUP10 ADD MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 PUSH2 0x36F6 SWAP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP6 SWAP1 PUSH2 0x1DD6 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x3710 DUP3 PUSH2 0x1A5F DUP6 PUSH8 0xDE0B6B3A7640000 PUSH2 0x2A88 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x2 DUP1 DUP3 MSTORE PUSH1 0x60 DUP3 ADD DUP4 MSTORE SWAP3 SWAP4 POP SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP POP POP PUSH1 0xE0 DUP10 ADD DUP2 SWAP1 MSTORE DUP1 MLOAD DUP8 SWAP2 SWAP1 PUSH1 0x0 SWAP1 PUSH2 0x3745 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x0 SHL DUP9 PUSH1 0xE0 ADD MLOAD PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x3766 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP PUSH1 0xC0 DUP8 ADD MSTORE POP PUSH1 0x1 SWAP2 POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP2 PUSH2 0x3797 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x2EEE JUMP JUMPDEST PUSH2 0x37E8 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433230577261707065723A206E6F6E2D636F6E7472616374000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x3825 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x3806 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x3887 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x388C JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 ISZERO PUSH2 0x390B JUMPI DUP1 MLOAD ISZERO PUSH2 0x3906 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x38B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x3906 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433230577261707065723A206F7065726174696F6E206661696C65640000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x3967 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x395E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433230577261707065723A206F7065726174696F6E206661696C65640000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 MLOAD DUP1 DUP3 PUSH1 0x20 ADD REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x39D7 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x556E697377617056323A2073616D652061646472657373657300000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT 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 DUP8 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x3A06 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP DUP7 DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x3A34 JUMPI INVALID 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 0x8 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0xAD5C464800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x60 SWAP5 SWAP3 SWAP1 SWAP3 AND SWAP3 PUSH4 0xAD5C4648 SWAP3 PUSH1 0x4 DUP1 DUP5 ADD SWAP4 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3AA2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3AB6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3ACC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0x3CC7 JUMPI CALLVALUE DUP7 EQ PUSH2 0x3B35 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x556E697377617056323A20696E76616C6964206D6178416D6F756E74496E0000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x40 MLOAD PUSH32 0xFB3BDB4100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP10 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND PUSH1 0x44 DUP5 ADD MSTORE PUSH1 0x64 DUP4 ADD DUP9 SWAP1 MSTORE PUSH1 0x80 PUSH1 0x24 DUP5 ADD SWAP1 DUP2 MSTORE DUP7 MLOAD PUSH1 0x84 DUP6 ADD MSTORE DUP7 MLOAD SWAP2 SWAP1 SWAP5 AND SWAP4 PUSH4 0xFB3BDB41 SWAP4 CALLVALUE SWAP4 DUP14 SWAP4 DUP10 SWAP4 DUP14 SWAP4 DUP14 SWAP4 SWAP3 PUSH1 0xA4 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 DUP1 DUP9 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3BCF JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3BB7 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP6 POP POP POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3BF6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3C0A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3C34 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH2 0x3C54 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x3C69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD DUP7 PUSH1 0x20 DUP3 MUL DUP4 ADD GT PUSH5 0x100000000 DUP3 GT OR ISZERO PUSH2 0x3C86 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 DUP3 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3CB3 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3C9B JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD PUSH1 0x40 MSTORE POP POP POP SWAP1 POP PUSH2 0x3FF1 JUMP JUMPDEST PUSH1 0x8 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND 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 PUSH2 0x3D15 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3D29 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3D3F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0x3E5B JUMPI PUSH1 0x8 SLOAD PUSH1 0x40 MLOAD PUSH32 0x4A25D94A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP10 DUP2 MSTORE PUSH1 0x24 DUP3 ADD DUP10 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND PUSH1 0x64 DUP5 ADD MSTORE PUSH1 0x84 DUP4 ADD DUP9 SWAP1 MSTORE PUSH1 0xA0 PUSH1 0x44 DUP5 ADD SWAP1 DUP2 MSTORE DUP7 MLOAD PUSH1 0xA4 DUP6 ADD MSTORE DUP7 MLOAD SWAP2 SWAP1 SWAP5 AND SWAP4 PUSH4 0x4A25D94A SWAP4 DUP13 SWAP4 DUP13 SWAP4 DUP10 SWAP4 DUP14 SWAP4 DUP14 SWAP4 SWAP3 PUSH1 0xC4 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 DUP1 DUP9 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3DF5 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3DDD JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP7 POP POP POP POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3E1E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3E32 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3C34 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x40 MLOAD PUSH32 0x8803DBEE00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP10 DUP2 MSTORE PUSH1 0x24 DUP3 ADD DUP10 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND PUSH1 0x64 DUP5 ADD MSTORE PUSH1 0x84 DUP4 ADD DUP9 SWAP1 MSTORE PUSH1 0xA0 PUSH1 0x44 DUP5 ADD SWAP1 DUP2 MSTORE DUP7 MLOAD PUSH1 0xA4 DUP6 ADD MSTORE DUP7 MLOAD SWAP2 SWAP1 SWAP5 AND SWAP4 PUSH4 0x8803DBEE SWAP4 DUP13 SWAP4 DUP13 SWAP4 DUP10 SWAP4 DUP14 SWAP4 DUP14 SWAP4 SWAP3 PUSH1 0xC4 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 DUP1 DUP9 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3EFC JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3EE4 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP7 POP POP POP POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3F25 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3F39 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3F62 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH2 0x3F82 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x3F97 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD DUP7 PUSH1 0x20 DUP3 MUL DUP4 ADD GT PUSH5 0x100000000 DUP3 GT OR ISZERO PUSH2 0x3FB4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 DUP3 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3FE1 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3FC9 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD PUSH1 0x40 MSTORE POP POP POP SWAP1 POP JUMPDEST DUP1 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x3FFE JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP3 POP POP POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x0 NOT EQ PUSH2 0x405C JUMPI PUSH1 0x80 DUP3 ADD MLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH2 0x4044 SWAP2 PUSH2 0x497B JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SSTORE JUMPDEST POP POP JUMP JUMPDEST DUP1 PUSH1 0x60 ADD MLOAD DUP2 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x29F844483CA6B10B5C0611D039AFC15CE8F6380E905307B381C3A8EE4E90E11E DUP5 PUSH1 0x20 ADD MLOAD DUP6 PUSH1 0x80 ADD MLOAD DUP7 PUSH1 0xA0 ADD MLOAD DUP8 PUSH1 0xC0 ADD MLOAD DUP9 PUSH1 0xE0 ADD MLOAD DUP10 PUSH2 0x100 ADD MLOAD DUP11 PUSH2 0x120 ADD MLOAD PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP5 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x40F7 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x40DF JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4127 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x410F JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4157 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x413F JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP4 POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP7 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x41CE JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x41B6 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x41FB JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP DUP4 DUP2 SUB DUP3 MSTORE DUP5 MLOAD DUP2 MSTORE DUP5 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP7 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x422E JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x4216 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x425B JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP8 POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 ISZERO PUSH2 0x405C JUMPI PUSH4 0x61ECEAE8 PUSH1 0xE0 SHL PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x61ECEAE8 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD DUP7 PUSH1 0x40 ADD MLOAD DUP8 PUSH1 0x60 ADD MLOAD DUP9 PUSH1 0x80 ADD MLOAD DUP10 PUSH1 0xA0 ADD MLOAD DUP11 PUSH1 0xC0 ADD MLOAD DUP12 PUSH1 0xE0 ADD MLOAD DUP13 PUSH2 0x100 ADD MLOAD DUP14 PUSH2 0x120 ADD MLOAD PUSH1 0x40 MLOAD DUP12 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP6 DUP2 SUB DUP6 MSTORE DUP11 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4394 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x437C JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x43C1 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP DUP6 DUP2 SUB DUP5 MSTORE DUP9 MLOAD DUP2 MSTORE DUP9 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP1 DUP12 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x43F6 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x43DE JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP6 DUP2 SUB DUP4 MSTORE DUP8 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4435 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x441D JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP6 DUP2 SUB DUP3 MSTORE DUP7 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4474 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x445C JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP15 POP POP POP POP POP POP POP POP POP POP POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x44A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x44B9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x44CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND EQ PUSH2 0x405C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F74696669636174696F6E2072656675736564000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x45AF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x556E697377617056323A2073616D652061646472657373657300000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH2 0x45CF JUMPI DUP3 DUP5 PUSH2 0x45D2 JUMP JUMPDEST DUP4 DUP4 JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x1FB6 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x556E697377617056323A207A65726F2061646472657373000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x4641 DUP6 DUP6 PUSH2 0x4545 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x8 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND 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 PUSH2 0x4693 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x46A7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x46BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 PUSH1 0x60 SWAP6 DUP7 SHL DUP2 AND PUSH1 0x20 DUP4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP5 DUP7 SHL DUP2 AND PUSH1 0x34 DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x28 DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH1 0x48 DUP4 ADD DUP5 MSTORE DUP1 MLOAD SWAP1 DUP7 ADD KECCAK256 PUSH32 0xFF00000000000000000000000000000000000000000000000000000000000000 PUSH1 0x68 DUP5 ADD MSTORE SWAP4 SWAP1 SWAP6 SHL SWAP1 SWAP5 AND PUSH1 0x69 DUP6 ADD MSTORE PUSH1 0x7D DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x96E8AC4277198FF8B6F785478AA9A39F403CB768DD02CBEE326C3E7DA348845F PUSH1 0x9D DUP1 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MLOAD DUP1 DUP6 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xBD SWAP1 SWAP4 ADD SWAP1 MSTORE DUP2 MLOAD SWAP2 ADD KECCAK256 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x1 DUP5 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 PUSH2 0x47FA JUMPI POP POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE DUP4 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD DUP5 DUP2 MSTORE DUP7 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP10 SSTORE PUSH1 0x0 DUP10 DUP2 MSTORE DUP5 DUP2 KECCAK256 SWAP6 MLOAD PUSH1 0x2 SWAP1 SWAP4 MUL SWAP1 SWAP6 ADD SWAP2 DUP3 SSTORE SWAP2 MLOAD SWAP1 DUP3 ADD SSTORE DUP7 SLOAD DUP7 DUP5 MSTORE DUP2 DUP9 ADD SWAP1 SWAP3 MSTORE SWAP3 SWAP1 SWAP2 KECCAK256 SSTORE PUSH2 0x2AE1 JUMP JUMPDEST DUP3 DUP6 PUSH1 0x0 ADD PUSH1 0x1 DUP4 SUB DUP2 SLOAD DUP2 LT PUSH2 0x480D JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD PUSH1 0x1 ADD DUP2 SWAP1 SSTORE POP PUSH1 0x0 SWAP2 POP POP PUSH2 0x2AE1 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x494F JUMPI DUP1 PUSH1 0xC0 ADD MLOAD CALLVALUE LT ISZERO PUSH2 0x48AE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E73756666696369656E742045544800000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xC0 DUP3 ADD MLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 DUP2 ISZERO PUSH2 0x8FC MUL SWAP2 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x48EC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x0 PUSH2 0x4906 DUP3 PUSH1 0xC0 ADD MLOAD CALLVALUE PUSH2 0x497B SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x4949 JUMPI DUP2 MLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 DUP3 ISZERO PUSH2 0x8FC MUL SWAP1 DUP4 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x4947 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP JUMPDEST POP PUSH2 0x22B8 JUMP JUMPDEST PUSH2 0x22B8 PUSH2 0x495A PUSH2 0xE50 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xC0 DUP5 ADD MLOAD PUSH1 0x40 DUP6 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP4 SWAP3 AND SWAP1 PUSH2 0x2826 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 GT ISZERO PUSH2 0x49D2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 OR SWAP1 MSTORE PUSH2 0x24DA SWAP1 DUP5 SWAP1 PUSH2 0x3784 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 PUSH2 0x4ABB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x456E756D4D61703A206E6F6E6578697374656E74206B65790000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP4 PUSH1 0x0 ADD PUSH1 0x1 DUP3 SUB DUP2 SLOAD DUP2 LT PUSH2 0x4ACD JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD PUSH1 0x1 ADD SLOAD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x0 NOT DUP3 EQ PUSH2 0x4AFB JUMPI POP PUSH1 0x0 PUSH2 0x2AE1 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x4B15 SWAP1 DUP6 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x4A58 JUMP JUMPDEST PUSH1 0x40 DUP7 ADD MLOAD PUSH1 0x7 SLOAD PUSH1 0xA0 DUP9 ADD MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 PUSH2 0x4B3C SWAP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH2 0x2638 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4B6D DUP8 PUSH1 0x80 ADD MLOAD PUSH2 0x4B67 DUP5 PUSH2 0x1A5F PUSH8 0xDE0B6B3A7640000 DUP9 PUSH2 0x2A88 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 PUSH2 0x2A88 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x2 DUP1 DUP3 MSTORE PUSH1 0x60 DUP3 ADD DUP4 MSTORE SWAP3 SWAP4 POP SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP POP POP PUSH1 0xE0 DUP9 ADD DUP2 SWAP1 MSTORE DUP1 MLOAD DUP7 SWAP2 SWAP1 PUSH1 0x0 SWAP1 PUSH2 0x4BA2 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP2 PUSH1 0x0 SHL DUP8 PUSH1 0xE0 ADD MLOAD PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x4BC3 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0xC0 DUP8 ADD MSTORE POP PUSH1 0x1 SWAP2 POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x140 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP1 NOT AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE POP SWAP1 JUMP INVALID MSTORE8 PUSH2 0x6665 0x4D PUSH2 0x7468 GASPRICE KECCAK256 PUSH14 0x756C7469706C69636174696F6E20 PUSH16 0x766572666C6F77A26469706673582212 KECCAK256 SGT PUSH31 0x37C66B04E815A20493EC609A66E1BEB395702FC79E0266AE7431CB4B3F7164 PUSH20 0x6F6C63430007060033ABB92614F53337043B55DC SWAP10 PUSH11 0x83EBB09ADCE78EC336CA18 DUP15 LOG0 0x21 DUP1 0xB6 SAR SHR EQ ","sourceMap":"243:4222:17:-:0;;;392:301;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;392:301:17;;;;;;;;;;;;;;;;;;;;960:6:1;:15;;-1:-1:-1;;;;;;960:15:1;2518:10:32;960:15:1;;;;;990:40;;392:301:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2554:4:32;;392:301:17;;2518:10:32;;;;960:6:1;990:40;;960:6;;990:40;-1:-1:-1;;;;;;512:27:8;::::1;504:60;;;::::0;;-1:-1:-1;;;504:60:8;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;574:12;:28:::0;;-1:-1:-1;;;;;574:28:8;::::1;-1:-1:-1::0;;;;;;574:28:8;;::::1;::::0;::::1;::::0;;;617:30:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;-1:-1:-1::0;;543:6:5;:16;;-1:-1:-1;;543:16:5;;;;;;;;;;2570:28:32::2;::::0;;;2608:44:::2;::::0;;;2687:16:::2;::::0;;2701:1:::2;2687:16:::0;;;;;::::2;::::0;;-1:-1:-1;;2687:16:32::2;::::0;::::2;::::0;;::::2;::::0;::::2;-1:-1:-1::0;;2739:16:32::2;::::0;;2753:1:::2;2739:16:::0;;;;;::::2;::::0;;2662:41;;-1:-1:-1;2713:23:32::2;::::0;2739:16;;-1:-1:-1;2753:1:32;2739:16:::2;::::0;::::2;::::0;;::::2;::::0;::::2;-1:-1:-1::0;;2766:8:32;;2713:42;;-1:-1:-1;;;;2765:66:32;1751:44:::2;::::0;-1:-1:-1;2766:5:32;;2803:27:::2;::::0;2766:8:::2;;;;;;;;;2776:6;2783:1;2776:9;;;;;;;;;;;;;2765:66;;;::::0;::::2;;;::::0;::::2;;-1:-1:-1::0;;2886:34:32::2;;-1:-1:-1::0;;;2841:80:32::2;2842:5;2848:1;2842:8;;;;;;;;;;;;;2852:6;2859:1;2852:9;;;;;;;;;;;;;2841:80;;;::::0;::::2;;;::::0;::::2;;-1:-1:-1::0;;;;;;;;;;;2948:5:32::2;2955:6;2936:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::2;::::0;;;::::2;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::2;::::0;;;::::2;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;1605:14:29::1;:32:::0;;-1:-1:-1;;;;;;1605:32:29::1;-1:-1:-1::0;;;;;1605:32:29;::::1;;::::0;;-1:-1:-1;;;;;;;;;;1672:16:29::1;::::0;-1:-1:-1;;1672:16:29;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;1672:16:29::1;-1:-1:-1::0;1724:16:29::1;::::0;;1738:1:::1;1724:16:::0;;;;;::::1;::::0;;;1647:41;;-1:-1:-1;1698:23:29::1;::::0;1724:16;::::1;::::0;;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;1724:16:29::1;1698:42;;-1:-1:-1::0;;1803:33:29::1;;1750:87;;1751:5;1757:1;1751:8;;;;;;;;;;;;;1761:6;1768:1;1761:9;;;;;;;;;;;;;1750:87;;;::::0;::::1;;;::::0;::::1;;-1:-1:-1::0;;;;;;;;;;;1864:5:29::1;1871:6;1852:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;1370:515;;::::0;;;;1800:22:33::1;1839:1;-1:-1:-1::0;;;;;1825:16:33::1;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;1825:16:33::1;-1:-1:-1::0;1877:16:33::1;::::0;;1891:1:::1;1877:16:::0;;;;;::::1;::::0;;;1800:41;;-1:-1:-1;1851:23:33::1;::::0;1877:16;::::1;::::0;;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;1904:8:33;;1851:42;;-1:-1:-1;1903:81:33::1;::::0;-1:-1:-1;;1128:28:33;-1:-1:-1;1904:5:33;;1953:30:::1;::::0;1904:8:::1;;;;;;;;;1914:6;1921:1;1914:9;;;;;;;;;;;;;1903:81;;;::::0;::::1;;;::::0;::::1;;-1:-1:-1::0;;;;;;;;;;;2011:5:33::1;2018:6;1999:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;1555:477;;::::0;;;;594:37:22;614:16;594:19;;;:37;;:::i;:::-;537:101;1907:311:28;;;;;392:301:17;;;;;243:4222;;1955:175:22;2038:15;:34;;-1:-1:-1;;;;;2038:34:22;;-1:-1:-1;;;;;;2038:34:22;;;;;;;;2087:36;;;;;;;;;;;;;;;;1955:175;:::o;243:4222:17:-;;;;;;;;;;;;;"},"deployedBytecode":{"generatedSources":[],"immutableReferences":{"5785":[{"length":32,"start":8209}],"5787":[{"length":32,"start":13022}]},"linkReferences":{},"object":"6080604052600436106101dc5760003560e01c80638488bb4e11610102578063a963b25711610095578063c7b778db11610064578063c7b778db14610ce5578063d52bb6f414610db4578063f21f537d14610e08578063f2fde38b14610e1d57610252565b8063a963b25714610b60578063bda4c5ab14610bf5578063be9a655514610cc8578063c2ac3aff14610cdd57610252565b80639865bcc8116100d15780639865bcc814610a1f5780639e04954514610a1f578063a1e1690814610a34578063a541f89c14610aca57610252565b80638488bb4e146108685780638ce507eb1461087d5780638da5cb5b1461096857806397309b441461097d57610252565b806356c1476e1161017a5780635e6e9f70116101495780635e6e9f701461068057806361bd3851146107bb5780636b8f9c43146108205780638456cb591461085357610252565b806356c1476e1461058b578063579f2c771461062d5780635c4fafc7146106425780635c975abb1461065757610252565b80631694505e116101b65780631694505e146104345780632a8a45bc146104495780632c87927b146105315780633f4ba83a1461057657610252565b80631265b651146102575780631323b06614610288578063151229f71461038557610252565b36610252576008546001600160a01b03166101f5610e50565b6001600160a01b031614610250576040805162461bcd60e51b815260206004820152601860248201527f53616c653a20496e76616c6964204554482073656e6465720000000000000000604482015290519081900360640190fd5b005b600080fd5b34801561026357600080fd5b5061026c610e54565b604080516001600160a01b039092168252519081900360200190f35b34801561029457600080fd5b5061032a600480360360a08110156102ab57600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a0810160808201356401000000008111156102eb57600080fd5b8201836020820111156102fd57600080fd5b8035906020019184600183028401116401000000008311171561031f57600080fd5b509092509050610e63565b6040518083815260200180602001828103825283818151815260200191508051906020019060200280838360005b83811015610370578181015183820152602001610358565b50505050905001935050505060405180910390f35b34801561039157600080fd5b50610422600480360360808110156103a857600080fd5b6001600160a01b038235811692602081013590911691604082013591908101906080810160608201356401000000008111156103e357600080fd5b8201836020820111156103f557600080fd5b8035906020019184600183028401116401000000008311171561041757600080fd5b509092509050610f58565b60408051918252519081900360200190f35b34801561044057600080fd5b5061026c610fa6565b34801561045557600080fd5b506104736004803603602081101561046c57600080fd5b5035610fb5565b60405180878152602001868152602001858152602001846001600160a01b031681526020018060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156104d85781810151838201526020016104c0565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156105175781810151838201526020016104ff565b505050509050019850505050505050505060405180910390f35b34801561053d57600080fd5b506102506004803603608081101561055457600080fd5b50803590602081013590604081013590606001356001600160a01b031661115a565b34801561058257600080fd5b5061025061116c565b34801561059757600080fd5b50610250600480360360a08110156105ae57600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a0810160808201356401000000008111156105ee57600080fd5b82018360208201111561060057600080fd5b8035906020019184600183028401116401000000008311171561062257600080fd5b5090925090506111da565b34801561063957600080fd5b50610422611264565b34801561064e57600080fd5b5061026c61126a565b34801561066357600080fd5b5061066c611282565b604080519115158252519081900360200190f35b34801561068c57600080fd5b50610250600480360360608110156106a357600080fd5b813591908101906040810160208201356401000000008111156106c557600080fd5b8201836020820111156106d757600080fd5b803590602001918460208302840111640100000000831117156106f957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561074957600080fd5b82018360208201111561075b57600080fd5b8035906020019184602083028401116401000000008311171561077d57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061128b945050505050565b3480156107c757600080fd5b506107d0611468565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561080c5781810151838201526020016107f4565b505050509050019250505060405180910390f35b34801561082c57600080fd5b506102506004803603602081101561084357600080fd5b50356001600160a01b03166114c3565b34801561085f57600080fd5b50610250611590565b34801561087457600080fd5b5061026c6115f7565b610250600480360360e081101561089357600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a0810160808201356401000000008111156108d357600080fd5b8201836020820111156108e557600080fd5b8035906020019184600183028401116401000000008311171561090757600080fd5b9193909282359260408101906020013564010000000081111561092957600080fd5b82018360208201111561093b57600080fd5b8035906020019184602083028401116401000000008311171561095d57600080fd5b509092509050611606565b34801561097457600080fd5b5061026c6116d0565b34801561098957600080fd5b5061032a600480360360a08110156109a057600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a0810160808201356401000000008111156109e057600080fd5b8201836020820111156109f257600080fd5b80359060200191846001830284011164010000000083111715610a1457600080fd5b5090925090506116df565b348015610a2b57600080fd5b5061042261177e565b348015610a4057600080fd5b5061042260048036036060811015610a5757600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135640100000000811115610a8b57600080fd5b820183602082011115610a9d57600080fd5b80359060200191846001830284011164010000000083111715610abf57600080fd5b509092509050611784565b610250600480360360a0811015610ae057600080fd5b6001600160a01b0382358116926020810135926040820135909216916060820135919081019060a081016080820135640100000000811115610b2157600080fd5b820183602082011115610b3357600080fd5b80359060200191846001830284011164010000000083111715610b5557600080fd5b5090925090506117d0565b610250600480360360a0811015610b7657600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135640100000000811115610bb657600080fd5b820183602082011115610bc857600080fd5b80359060200191846001830284011164010000000083111715610bea57600080fd5b5090925090506118a4565b348015610c0157600080fd5b506107d060048036036060811015610c1857600080fd5b810190602081018135640100000000811115610c3357600080fd5b820183602082011115610c4557600080fd5b80359060200191846020830284011164010000000083111715610c6757600080fd5b91939092823592604081019060200135640100000000811115610c8957600080fd5b820183602082011115610c9b57600080fd5b80359060200191846001830284011164010000000083111715610cbd57600080fd5b509092509050611981565b348015610cd457600080fd5b50610250611a90565b6102506111d8565b348015610cf157600080fd5b506107d060048036036040811015610d0857600080fd5b810190602081018135640100000000811115610d2357600080fd5b820183602082011115610d3557600080fd5b80359060200191846020830284011164010000000083111715610d5757600080fd5b919390929091602081019035640100000000811115610d7557600080fd5b820183602082011115610d8757600080fd5b80359060200191846001830284011164010000000083111715610da957600080fd5b509092509050611aa3565b348015610dc057600080fd5b50610def60048036036040811015610dd757600080fd5b506001600160a01b0381358116916020013516611b8f565b6040805192835260208301919091528051918290030190f35b348015610e1457600080fd5b50610422611ceb565b348015610e2957600080fd5b5061025060048036036020811015610e4057600080fd5b50356001600160a01b0316611cf1565b3390565b6007546001600160a01b031681565b6000606060025460001415610ebf576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b610ec7611d57565b610ecf614be0565b610ed7610e50565b6001600160a01b03908116825289811660208084019190915290891660408084019190915260608301899052608083018890528051601f870183900483028101830190915285815290869086908190840183828082843760009201919091525050505060a0820152610f4881611daf565b9250925050965096945050505050565b6000610f9c86868686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611dd692505050565b9695505050505050565b6008546001600160a01b031681565b6000818152600660205260408120819081908190606090819083610fdb60048301611f27565b82549850905087611033576040805162461bcd60e51b815260206004820152601660248201527f53616c653a206e6f6e2d6578697374656e7420736b7500000000000000000000604482015290519081900360640190fd5b60018201546002830154600384015491985096506001600160a01b031694508067ffffffffffffffff8111801561106957600080fd5b50604051908082528060200260200182016040528015611093578160200160208202803683370190505b5093508067ffffffffffffffff811180156110ad57600080fd5b506040519080825280602002602001820160405280156110d7578160200160208202803683370190505b50925060005b8181101561114e576000806110f56004860184611f2b565b915091508160001c87848151811061110957fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508060001c86848151811061113957fe5b602090810291909101015250506001016110dd565b50505091939550919395565b61116684848484611fbd565b50505050565b6002546111c0576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b6111d06111cb610e50565b6121f4565b6111d86122bb565b565b6111e2614be0565b6111ea610e50565b6001600160a01b03908116825287811660208084019190915290871660408084019190915260608301879052608083018690528051601f850183900483028101830190915283815290849084908190840183828082843760009201919091525050505060a082015261125b81612313565b50505050505050565b60011981565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b60035460ff1681565b6112966111cb610e50565b8151815181146112ed576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20696e636f6e73697374656e742061727261797300000000000000604482015290519081900360640190fd5b6000848152600660205260409020805461134e576040805162461bcd60e51b815260206004820152601660248201527f53616c653a206e6f6e2d6578697374656e7420736b7500000000000000000000604482015290519081900360640190fd5b600481018261139957600061136282611f27565b905060005b8181101561139257600061137b8482611f2b565b5090506113888482612377565b5050600101611367565b50506113a4565b6113a4818686612457565b857fcb3fe5489e0cd43d0f4a33d1e09a4a0463a03d0d38f56165530854e5540db1438686604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561140c5781810151838201526020016113f4565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561144b578181015183820152602001611433565b5050505090500194505050505060405180910390a2505050505050565b606060046000018054806020026020016040519081016040528092919081815260200182805480156114b957602002820191906000526020600020905b8154815260200190600101908083116114a5575b5050505050905090565b6114ce6111cb610e50565b6001600160a01b038116611529576040805162461bcd60e51b815260206004820152601460248201527f5061796f75743a207a65726f2061646472657373000000000000000000000000604482015290519081900360640190fd5b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03838116919091179182905560408051929091168252517fdd880d24a789958a6398c99c2e54ce31bc10a638cbc42f7dd34285479ae0f855916020908290030190a150565b6002546115e4576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b6115ef6111cb610e50565b6111d86124df565b6001546001600160a01b031681565b61160e614be0565b611616610e50565b6001600160a01b0390811682528a8116602080840191909152908a16604080840191909152606083018a9052608083018990528051601f880183900483028101830190915286815290879087908190840183828082843760009201919091525050505060a082015260c081018490526040805160208085028281018201909352848252909185918591829185019084908082843760009201919091525050505060e08201526116c48161251d565b50505050505050505050565b6000546001600160a01b031690565b600060606116eb614be0565b6116f3610e50565b6001600160a01b03908116825289811660208084019190915290891660408084019190915260608301899052608083018890528051601f870183900483028101830190915285815290869086908190840183828082843760009201919091525050505060a082015261176481612596565b8060c0015192508060e00151915050965096945050505050565b60001981565b60006117c7858585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061263892505050565b95945050505050565b6001600160a01b03861673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee146118235760085461180e906001600160a01b038881169116876127a6565b6118236001600160a01b038716333088612826565b61186586858585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506128ae92505050565b6040805182815290519196507fe16fb73e6e5415265887cee6412691a8b3cd94e24c6528ed966dc06ffb799b78919081900360200190a1505050505050565b6002546118f8576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b611900611d57565b611908614be0565b611910610e50565b6001600160a01b03908116825287811660208084019190915290871660408084019190915260608301879052608083018690528051601f850183900483028101830190915283815290849084908190840183828082843760009201919091525050505060a082015261125b81612a5b565b6060848067ffffffffffffffff8111801561199b57600080fd5b506040519080825280602002602001820160405280156119c5578160200160208202803683370190505b50915060005b81811015611a85576000611a478989848181106119e457fe5b905060200201356001600160a01b0316600760009054906101000a90046001600160a01b03168989898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611dd692505050565b9050611a6581611a5f89670de0b6b3a7640000612a88565b90612ae8565b848381518110611a7157fe5b6020908102919091010152506001016119cb565b505095945050505050565b611a9b6111cb610e50565b6111d0612b4f565b6060838067ffffffffffffffff81118015611abd57600080fd5b50604051908082528060200260200182016040528015611ae7578160200160208202803683370190505b50915060005b81811015611b8557611b66878783818110611b0457fe5b905060200201356001600160a01b0316600760009054906101000a90046001600160a01b031687878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061263892505050565b838281518110611b7257fe5b6020908102919091010152600101611aed565b5050949350505050565b6000806001600160a01b03841673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415611c3457600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611c0557600080fd5b505afa158015611c19573d6000803e3d6000fd5b505050506040513d6020811015611c2f57600080fd5b505193505b6001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415611cd657600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611ca757600080fd5b505afa158015611cbb573d6000803e3d6000fd5b505050506040513d6020811015611cd157600080fd5b505192505b611ce08484612bd1565b909590945092505050565b60025490565b611cfc6111cb610e50565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383811691821780845560405192939116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b60035460ff16156111d8576040805162461bcd60e51b815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b60006060611dbc83612313565b611dc583612596565b505060c081015160e0909101519091565b60006001600160a01b03851673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415611e7a57600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611e4b57600080fd5b505afa158015611e5f573d6000803e3d6000fd5b505050506040513d6020811015611e7557600080fd5b505194505b6001600160a01b03841673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415611f1c57600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611eed57600080fd5b505afa158015611f01573d6000803e3d6000fd5b505050506040513d6020811015611f1757600080fd5b505193505b6117c7858585612c9d565b5490565b815460009081908310611f85576040805162461bcd60e51b815260206004820152601c60248201527f456e756d4d61703a20696e646578206f7574206f6620626f756e647300000000604482015290519081900360640190fd5b6000846000018481548110611f9657fe5b906000526020600020906002020190508060000154816001015492509250505b9250929050565b8261200f576040805162461bcd60e51b815260206004820152601160248201527f53616c653a207a65726f20737570706c79000000000000000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000061203a6004611f27565b1061208c576040805162461bcd60e51b815260206004820152601360248201527f53616c653a20746f6f206d616e7920736b757300000000000000000000000000604482015290519081900360640190fd5b612097600485612ea4565b6120e8576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20736b7520616c7265616479206372656174656400000000000000604482015290519081900360640190fd5b6001600160a01b0381161561215a57612109816001600160a01b0316612eee565b61215a576040805162461bcd60e51b815260206004820152601b60248201527f53616c653a206e6f6e2d636f6e74726163742072656365697665720000000000604482015290519081900360640190fd5b60008481526006602090815260409182902085815560018101869055600281018590556003810180546001600160a01b03861673ffffffffffffffffffffffffffffffffffffffff1990911681179091558351888152928301879052828401869052606083015291517f38bd4aabce684540cd61351b91f2f5facf9d6963934347e25aab93d87ae7ac149181900360800190a15050505050565b306001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561222d57600080fd5b505afa158015612241573d6000803e3d6000fd5b505050506040513d602081101561225757600080fd5b50516001600160a01b038281169116146122b8576040805162461bcd60e51b815260206004820152601660248201527f4f776e61626c653a206e6f7420746865206f776e657200000000000000000000604482015290519081900360640190fd5b50565b6122c3612ef4565b6003805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6122f6610e50565b604080516001600160a01b039092168252519081900360200190a1565b61231c81612f4b565b60408160a001515110156122b8576040805162461bcd60e51b815260206004820152601760248201527f53616c653a206d697373696e6720757365722064617461000000000000000000604482015290519081900360640190fd5b6000818152600183016020526040812054801561244b57835460001980830191908101906000908790839081106123aa57fe5b90600052602060002090600202019050808760000184815481106123ca57fe5b60009182526020808320845460029093020191825560019384015491840191909155835482528983019052604090209084019055865487908061240957fe5b60008281526020808220600260001990940193840201828155600190810183905592909355888152898201909252604082209190915594506124519350505050565b60009150505b92915050565b6124628383836131f5565b61246b83611f27565b158061248957506007546124899084906001600160a01b0316613359565b6124da576040805162461bcd60e51b815260206004820152601860248201527f53616c653a206e6f207265666572656e636520746f6b656e0000000000000000604482015290519081900360640190fd5b505050565b6124e7611d57565b6003805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586122f6610e50565b60e08101515115801590612552575060408101516001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14155b1561258d5760a081015160208101518061256b57506000195b600854604084015161258a916001600160a01b039182169116836127a6565b50505b6122b881613371565b6060810151600090815260066020526040902080546125fc576040805162461bcd60e51b815260206004820152601560248201527f53616c653a20756e737570706f7274656420534b550000000000000000000000604482015290519081900360640190fd5b60048101600061260c8483613610565b9050612619848383613680565b61116657608084015161262d908290612a88565b60c085015250505050565b60006001600160a01b03841673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14156126dc57600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156126ad57600080fd5b505afa1580156126c1573d6000803e3d6000fd5b505050506040513d60208110156126d757600080fd5b505193505b6001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561277e57600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561274f57600080fd5b505afa158015612763573d6000803e3d6000fd5b505050506040513d602081101561277957600080fd5b505192505b60008061278b8686612bd1565b9092509050610f9c82611a5f83670de0b6b3a7640000612a88565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b3000000000000000000000000000000000000000000000000000000001790526124da908490613784565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052611166908590613784565b6020810151604082015160009190816128f4576001600160a01b03871673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14156128ee573491506128f4565b60001991505b806128fe57506000195b6001600160a01b03871673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14156129a057600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561297157600080fd5b505afa158015612985573d6000803e3d6000fd5b505050506040513d602081101561299b57600080fd5b505196505b6001600160a01b03861673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415612a4257600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612a1357600080fd5b505afa158015612a27573d6000803e3d6000fd5b505050506040513d6020811015612a3d57600080fd5b505195505b612a5087878785308661396e565b979650505050505050565b612a6481612313565b612a6d81612596565b612a768161251d565b612a7f81614014565b6122b881614060565b600082612a9757506000612451565b82820282848281612aa457fe5b0414612ae15760405162461bcd60e51b8152600401808060200182810382526021815260200180614c526021913960400191505060405180910390fd5b9392505050565b6000808211612b3e576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381612b4757fe5b049392505050565b60025415612ba4576040805162461bcd60e51b815260206004820152601260248201527f537461727461626c653a20737461727465640000000000000000000000000000604482015290519081900360640190fd5b426002557f27029695aa5f602a4ee81f4c32dfa86e562f200a17966496f3a7c3f2ec0f94176122f6610e50565b6000806000612be08585614545565b509050600080612bf08787614632565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015612c2857600080fd5b505afa158015612c3c573d6000803e3d6000fd5b505050506040513d6060811015612c5257600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506001600160a01b0387811690841614612c8c578082612c8f565b81815b909890975095505050505050565b604080516002808252606082018352600092839291906020830190803683370190505090508481600081518110612cd057fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508381600181518110612cfe57fe5b6001600160a01b03928316602091820292909201810191909152600854604080517f1f00ca7400000000000000000000000000000000000000000000000000000000815260048101888152602482019283528651604483015286516000969490941694631f00ca74948a948994909260649091019185820191028083838c5b83811015612d95578181015183820152602001612d7d565b50505050905001935050505060006040518083038186803b158015612db957600080fd5b505afa158015612dcd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015612df657600080fd5b8101908080516040519392919084640100000000821115612e1657600080fd5b908301906020820185811115612e2b57600080fd5b8251866020820283011164010000000082111715612e4857600080fd5b82525081516020918201928201910280838360005b83811015612e75578181015183820152602001612e5d565b50505050905001604052505050905080600081518110612e9157fe5b6020026020010151925050509392505050565b6000612eb08383613359565b612ee657508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155612451565b506000612451565b3b151590565b60035460ff166111d8576040805162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604482015290519081900360640190fd5b60208101516001600160a01b0316612faa576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a207a65726f206164647265737320726563697069656e7400000000604482015290519081900360640190fd5b60408101516001600160a01b0316613009576040805162461bcd60e51b815260206004820152601860248201527f53616c653a207a65726f206164647265737320746f6b656e0000000000000000604482015290519081900360640190fd5b608081015161305f576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a207a65726f207175616e7469747920707572636861736500000000604482015290519081900360640190fd5b6060810151600090815260066020526040902080546130c5576040805162461bcd60e51b815260206004820152601660248201527f53616c653a206e6f6e2d6578697374656e7420736b7500000000000000000000604482015290519081900360640190fd5b816080015181600201541015613122576040805162461bcd60e51b815260206004820152601860248201527f53616c653a2061626f7665206d6178207175616e746974790000000000000000604482015290519081900360640190fd5b80546000191461318957816080015181600101541015613189576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20696e73756666696369656e7420737570706c7900000000000000604482015290519081900360640190fd5b60408201516001600160a01b03166131a46004830182613359565b6124da576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a206e6f6e2d6578697374656e7420736b7520746f6b656e00000000604482015290519081900360640190fd5b60005b82518110156132db57600083828151811061320f57fe5b6020026020010151905060006001600160a01b0316816001600160a01b03161415613281576040805162461bcd60e51b815260206004820152601860248201527f53616c653a207a65726f206164647265737320746f6b656e0000000000000000604482015290519081900360640190fd5b600083838151811061328f57fe5b6020026020010151905080600014156132bb576132b5866001600160a01b038416612377565b506132d1565b6132cf866001600160a01b03841683614795565b505b50506001016131f8565b507f000000000000000000000000000000000000000000000000000000000000000061330684611f27565b11156124da576040805162461bcd60e51b815260206004820152601560248201527f53616c653a20746f6f206d616e7920746f6b656e730000000000000000000000604482015290519081900360640190fd5b60009081526001919091016020526040902054151590565b60e08101515115806133a357506001600019038160e0015160008151811061339557fe5b602002602001015160001c14155b156133b6576133b18161482c565b6122b8565b60408101516001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561343d578060c00151341015613438576040805162461bcd60e51b815260206004820152601660248201527f53616c653a20696e73756666696369656e742045544800000000000000000000604482015290519081900360640190fd5b613464565b613464613448610e50565b60c083015160408401516001600160a01b031691903090612826565b60008160e0015160018151811061347757fe5b602002602001015160001c905060006134a9670de0b6b3a7640000611a5f8560c0015185612a8890919063ffffffff16565b604084015160075460a08601519293506000926134d292916001600160a01b03169085906128ae565b60408501519091506001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561355357600061350a348361497b565b9050801561354d5784516040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561354b573d6000803e3d6000fd5b505b5061358c565b60c0840151600090613565908361497b565b9050801561358a578451604086015161358a916001600160a01b0390911690836149d8565b505b6007546001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14156135f3576001546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156135ed573d6000803e3d6000fd5b50611166565b600154600754611166916001600160a01b039182169116836149d8565b604082015160009061362c9083906001600160a01b0316614a58565b905080612451576040805162461bcd60e51b815260206004820152601f60248201527f53616c653a20756e737570706f72746564207061796d656e7420746f6b656e00604482015290519081900360640190fd5b6000600119821461369d57613696848484614ae8565b9050612ae1565b6007546000906136b79085906001600160a01b0316614a58565b60808601519091506000906136cd908390612a88565b604087015160075460a08901519293506000926136f692916001600160a01b0316908590611dd6565b9050600061371082611a5f85670de0b6b3a7640000612a88565b604080516002808252606082018352929350919060208301908036833750505060e08901819052805187919060009061374557fe5b6020026020010181815250508060001b8860e0015160018151811061376657fe5b60209081029190910101525060c08701525060019150509392505050565b816137976001600160a01b038216612eee565b6137e8576040805162461bcd60e51b815260206004820152601a60248201527f4552433230577261707065723a206e6f6e2d636f6e7472616374000000000000604482015290519081900360640190fd5b600080826001600160a01b0316846040518082805190602001908083835b602083106138255780518252601f199092019160209182019101613806565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613887576040519150601f19603f3d011682016040523d82523d6000602084013e61388c565b606091505b5091509150811561390b57805115613906578080602001905160208110156138b357600080fd5b5051613906576040805162461bcd60e51b815260206004820152601e60248201527f4552433230577261707065723a206f7065726174696f6e206661696c65640000604482015290519081900360640190fd5b613967565b805161395e576040805162461bcd60e51b815260206004820152601e60248201527f4552433230577261707065723a206f7065726174696f6e206661696c65640000604482015290519081900360640190fd5b80518082602001fd5b5050505050565b6000856001600160a01b0316876001600160a01b031614156139d7576040805162461bcd60e51b815260206004820152601960248201527f556e697377617056323a2073616d652061646472657373657300000000000000604482015290519081900360640190fd5b6040805160028082526060820183526000926020830190803683370190505090508781600081518110613a0657fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508681600181518110613a3457fe5b6001600160a01b03928316602091820292909201810191909152600854604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051606094929092169263ad5c464892600480840193829003018186803b158015613aa257600080fd5b505afa158015613ab6573d6000803e3d6000fd5b505050506040513d6020811015613acc57600080fd5b50516001600160a01b038a811691161415613cc757348614613b35576040805162461bcd60e51b815260206004820152601e60248201527f556e697377617056323a20696e76616c6964206d6178416d6f756e74496e0000604482015290519081900360640190fd5b6008546040517ffb3bdb41000000000000000000000000000000000000000000000000000000008152600481018981526001600160a01b03888116604484015260648301889052608060248401908152865160848501528651919094169363fb3bdb419334938d9389938d938d939260a4909101906020808801910280838360005b83811015613bcf578181015183820152602001613bb7565b50505050905001955050505050506000604051808303818588803b158015613bf657600080fd5b505af1158015613c0a573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526020811015613c3457600080fd5b8101908080516040519392919084640100000000821115613c5457600080fd5b908301906020820185811115613c6957600080fd5b8251866020820283011164010000000082111715613c8657600080fd5b82525081516020918201928201910280838360005b83811015613cb3578181015183820152602001613c9b565b505050509050016040525050509050613ff1565b600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613d1557600080fd5b505afa158015613d29573d6000803e3d6000fd5b505050506040513d6020811015613d3f57600080fd5b50516001600160a01b0389811691161415613e5b576008546040517f4a25d94a00000000000000000000000000000000000000000000000000000000815260048101898152602482018990526001600160a01b0388811660648401526084830188905260a060448401908152865160a485015286519190941693634a25d94a938c938c9389938d938d939260c4909101906020808801910280838360005b83811015613df5578181015183820152602001613ddd565b505050509050019650505050505050600060405180830381600087803b158015613e1e57600080fd5b505af1158015613e32573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015613c3457600080fd5b6008546040517f8803dbee00000000000000000000000000000000000000000000000000000000815260048101898152602482018990526001600160a01b0388811660648401526084830188905260a060448401908152865160a485015286519190941693638803dbee938c938c9389938d938d939260c4909101906020808801910280838360005b83811015613efc578181015183820152602001613ee4565b505050509050019650505050505050600060405180830381600087803b158015613f2557600080fd5b505af1158015613f39573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015613f6257600080fd5b8101908080516040519392919084640100000000821115613f8257600080fd5b908301906020820185811115613f9757600080fd5b8251866020820283011164010000000082111715613fb457600080fd5b82525081516020918201928201910280838360005b83811015613fe1578181015183820152602001613fc9565b5050505090500160405250505090505b80600081518110613ffe57fe5b6020026020010151925050509695505050505050565b6060810151600090815260066020526040902080546000191461405c57608082015160018201546140449161497b565b60608301516000908152600660205260409020600101555b5050565b806060015181604001516001600160a01b031682600001516001600160a01b03167f29f844483ca6b10b5c0611d039afc15ce8f6380e905307b381c3a8ee4e90e11e846020015185608001518660a001518760c001518860e001518961010001518a610120015160405160200180848051906020019060200280838360005b838110156140f75781810151838201526020016140df565b50505050905001838051906020019060200280838360005b8381101561412757818101518382015260200161410f565b50505050905001828051906020019060200280838360005b8381101561415757818101518382015260200161413f565b50505050905001935050505060405160208183030381529060405260405180866001600160a01b031681526020018581526020018060200184815260200180602001838103835286818151815260200191508051906020019080838360005b838110156141ce5781810151838201526020016141b6565b50505050905090810190601f1680156141fb5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b8381101561422e578181015183820152602001614216565b50505050905090810190601f16801561425b5780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390a460608101516000908152600660205260409020600301546001600160a01b0316801561405c576361eceae860e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916816001600160a01b03166361eceae8846000015185602001518660400151876060015188608001518960a001518a60c001518b60e001518c61010001518d61012001516040518b63ffffffff1660e01b8152600401808b6001600160a01b031681526020018a6001600160a01b03168152602001896001600160a01b031681526020018881526020018781526020018060200186815260200180602001806020018060200185810385528a818151815260200191508051906020019080838360005b8381101561439457818101518382015260200161437c565b50505050905090810190601f1680156143c15780820380516001836020036101000a031916815260200191505b508581038452885181528851602091820191808b01910280838360005b838110156143f65781810151838201526020016143de565b50505050905001858103835287818151815260200191508051906020019060200280838360005b8381101561443557818101518382015260200161441d565b50505050905001858103825286818151815260200191508051906020019060200280838360005b8381101561447457818101518382015260200161445c565b505050509050019e505050505050505050505050505050602060405180830381600087803b1580156144a557600080fd5b505af11580156144b9573d6000803e3d6000fd5b505050506040513d60208110156144cf57600080fd5b50517fffffffff00000000000000000000000000000000000000000000000000000000161461405c576040805162461bcd60e51b815260206004820152601a60248201527f53616c653a206e6f74696669636174696f6e2072656675736564000000000000604482015290519081900360640190fd5b600080826001600160a01b0316846001600160a01b031614156145af576040805162461bcd60e51b815260206004820152601960248201527f556e697377617056323a2073616d652061646472657373657300000000000000604482015290519081900360640190fd5b826001600160a01b0316846001600160a01b0316106145cf5782846145d2565b83835b90925090506001600160a01b038216611fb6576040805162461bcd60e51b815260206004820152601760248201527f556e697377617056323a207a65726f2061646472657373000000000000000000604482015290519081900360640190fd5b60008060006146418585614545565b91509150600860009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561469357600080fd5b505afa1580156146a7573d6000803e3d6000fd5b505050506040513d60208110156146bd57600080fd5b5051604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606095861b811660208381019190915294861b81166034830152825160288184030181526048830184528051908601207fff0000000000000000000000000000000000000000000000000000000000000060688401529390951b9094166069850152607d8401919091527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f609d808501919091528151808503909101815260bd909301905281519101209392505050565b6000828152600184016020526040812054806147fa575050604080518082018252838152602080820184815286546001818101895560008981528481209551600290930290950191825591519082015586548684528188019092529290912055612ae1565b8285600001600183038154811061480d57fe5b9060005260206000209060020201600101819055506000915050612ae1565b60408101516001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561494f578060c001513410156148ae576040805162461bcd60e51b815260206004820152601660248201527f53616c653a20696e73756666696369656e742045544800000000000000000000604482015290519081900360640190fd5b60015460c08201516040516001600160a01b039092169181156108fc0291906000818181858888f193505050501580156148ec573d6000803e3d6000fd5b5060006149068260c001513461497b90919063ffffffff16565b905080156149495781516040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015614947573d6000803e3d6000fd5b505b506122b8565b6122b861495a610e50565b60015460c084015160408501516001600160a01b0390811693921690612826565b6000828211156149d2576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526124da908490613784565b600081815260018301602052604081205480614abb576040805162461bcd60e51b815260206004820152601860248201527f456e756d4d61703a206e6f6e6578697374656e74206b65790000000000000000604482015290519081900360640190fd5b836000016001820381548110614acd57fe5b90600052602060002090600202016001015491505092915050565b60006000198214614afb57506000612ae1565b600754600090614b159085906001600160a01b0316614a58565b604086015160075460a0880151929350600092614b3c92916001600160a01b031690612638565b90506000614b6d8760800151614b6784611a5f670de0b6b3a764000088612a8890919063ffffffff16565b90612a88565b604080516002808252606082018352929350919060208301908036833750505060e088018190528051869190600090614ba257fe5b6020026020010181815250508160001b8760e00151600181518110614bc357fe5b602090810291909101015260c08701525060019150509392505050565b60405180610140016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160008019168152602001600081526020016060815260200160008152602001606081526020016060815260200160608152509056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220137e37c66b04e815a20493ec609a66e1beb395702fc79e0266ae7431cb4b3f7164736f6c63430007060033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1DC JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8488BB4E GT PUSH2 0x102 JUMPI DUP1 PUSH4 0xA963B257 GT PUSH2 0x95 JUMPI DUP1 PUSH4 0xC7B778DB GT PUSH2 0x64 JUMPI DUP1 PUSH4 0xC7B778DB EQ PUSH2 0xCE5 JUMPI DUP1 PUSH4 0xD52BB6F4 EQ PUSH2 0xDB4 JUMPI DUP1 PUSH4 0xF21F537D EQ PUSH2 0xE08 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0xE1D JUMPI PUSH2 0x252 JUMP JUMPDEST DUP1 PUSH4 0xA963B257 EQ PUSH2 0xB60 JUMPI DUP1 PUSH4 0xBDA4C5AB EQ PUSH2 0xBF5 JUMPI DUP1 PUSH4 0xBE9A6555 EQ PUSH2 0xCC8 JUMPI DUP1 PUSH4 0xC2AC3AFF EQ PUSH2 0xCDD JUMPI PUSH2 0x252 JUMP JUMPDEST DUP1 PUSH4 0x9865BCC8 GT PUSH2 0xD1 JUMPI DUP1 PUSH4 0x9865BCC8 EQ PUSH2 0xA1F JUMPI DUP1 PUSH4 0x9E049545 EQ PUSH2 0xA1F JUMPI DUP1 PUSH4 0xA1E16908 EQ PUSH2 0xA34 JUMPI DUP1 PUSH4 0xA541F89C EQ PUSH2 0xACA JUMPI PUSH2 0x252 JUMP JUMPDEST DUP1 PUSH4 0x8488BB4E EQ PUSH2 0x868 JUMPI DUP1 PUSH4 0x8CE507EB EQ PUSH2 0x87D JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x968 JUMPI DUP1 PUSH4 0x97309B44 EQ PUSH2 0x97D JUMPI PUSH2 0x252 JUMP JUMPDEST DUP1 PUSH4 0x56C1476E GT PUSH2 0x17A JUMPI DUP1 PUSH4 0x5E6E9F70 GT PUSH2 0x149 JUMPI DUP1 PUSH4 0x5E6E9F70 EQ PUSH2 0x680 JUMPI DUP1 PUSH4 0x61BD3851 EQ PUSH2 0x7BB JUMPI DUP1 PUSH4 0x6B8F9C43 EQ PUSH2 0x820 JUMPI DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x853 JUMPI PUSH2 0x252 JUMP JUMPDEST DUP1 PUSH4 0x56C1476E EQ PUSH2 0x58B JUMPI DUP1 PUSH4 0x579F2C77 EQ PUSH2 0x62D JUMPI DUP1 PUSH4 0x5C4FAFC7 EQ PUSH2 0x642 JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x657 JUMPI PUSH2 0x252 JUMP JUMPDEST DUP1 PUSH4 0x1694505E GT PUSH2 0x1B6 JUMPI DUP1 PUSH4 0x1694505E EQ PUSH2 0x434 JUMPI DUP1 PUSH4 0x2A8A45BC EQ PUSH2 0x449 JUMPI DUP1 PUSH4 0x2C87927B EQ PUSH2 0x531 JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x576 JUMPI PUSH2 0x252 JUMP JUMPDEST DUP1 PUSH4 0x1265B651 EQ PUSH2 0x257 JUMPI DUP1 PUSH4 0x1323B066 EQ PUSH2 0x288 JUMPI DUP1 PUSH4 0x151229F7 EQ PUSH2 0x385 JUMPI PUSH2 0x252 JUMP JUMPDEST CALLDATASIZE PUSH2 0x252 JUMPI PUSH1 0x8 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1F5 PUSH2 0xE50 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x250 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20496E76616C6964204554482073656E6465720000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x263 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x26C PUSH2 0xE54 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x294 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x2AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x2EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x2FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x31F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0xE63 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x370 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x358 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP4 POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x391 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x422 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x3A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x80 DUP2 ADD PUSH1 0x60 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x3E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x3F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x417 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0xF58 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x440 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x26C PUSH2 0xFA6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x455 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x473 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x46C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0xFB5 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4D8 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x4C0 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x517 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x4FF JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP9 POP POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x53D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x250 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x554 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x115A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x582 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x250 PUSH2 0x116C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x597 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x250 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x5AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x5EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x600 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x622 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x11DA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x639 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x422 PUSH2 0x1264 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x64E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x26C PUSH2 0x126A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x663 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x66C PUSH2 0x1282 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x68C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x250 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x6A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x6C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x6D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x6F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 SWAP5 SWAP4 PUSH1 0x20 DUP2 ADD SWAP4 POP CALLDATALOAD SWAP2 POP POP PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x749 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x75B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x77D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0x128B SWAP5 POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7D0 PUSH2 0x1468 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 DUP2 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x80C JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x7F4 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x82C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x250 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x843 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x14C3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x85F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x250 PUSH2 0x1590 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x874 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x26C PUSH2 0x15F7 JUMP JUMPDEST PUSH2 0x250 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x893 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x8D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x8E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x907 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 DUP3 CALLDATALOAD SWAP3 PUSH1 0x40 DUP2 ADD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x929 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x93B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x95D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x1606 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x974 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x26C PUSH2 0x16D0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x989 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x9A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x9E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x9F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xA14 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x16DF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA2B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x422 PUSH2 0x177E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA40 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x422 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0xA57 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 DUP2 ADD SWAP1 PUSH1 0x60 DUP2 ADD PUSH1 0x40 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xA8B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xA9D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xABF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x1784 JUMP JUMPDEST PUSH2 0x250 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0xAE0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP3 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP1 SWAP3 AND SWAP2 PUSH1 0x60 DUP3 ADD CALLDATALOAD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xB21 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xB33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xB55 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x17D0 JUMP JUMPDEST PUSH2 0x250 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0xB76 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xBB6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xBC8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xBEA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x18A4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xC01 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7D0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0xC18 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xC33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xC45 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xC67 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 DUP3 CALLDATALOAD SWAP3 PUSH1 0x40 DUP2 ADD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xC89 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xC9B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xCBD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x1981 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xCD4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x250 PUSH2 0x1A90 JUMP JUMPDEST PUSH2 0x250 PUSH2 0x11D8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xCF1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7D0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xD08 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xD23 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xD35 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xD57 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH1 0x20 DUP2 ADD SWAP1 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xD75 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xD87 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xDA9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x1AA3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xDC0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xDEF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xDD7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x1B8F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xE14 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x422 PUSH2 0x1CEB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xE29 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x250 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xE40 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1CF1 JUMP JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x2 SLOAD PUSH1 0x0 EQ ISZERO PUSH2 0xEBF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0xEC7 PUSH2 0x1D57 JUMP JUMPDEST PUSH2 0xECF PUSH2 0x4BE0 JUMP JUMPDEST PUSH2 0xED7 PUSH2 0xE50 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP10 DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP10 AND PUSH1 0x40 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD DUP10 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP9 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x1F DUP8 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD SWAP1 SWAP2 MSTORE DUP6 DUP2 MSTORE SWAP1 DUP7 SWAP1 DUP7 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP POP PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0xF48 DUP2 PUSH2 0x1DAF JUMP JUMPDEST SWAP3 POP SWAP3 POP POP SWAP7 POP SWAP7 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF9C DUP7 DUP7 DUP7 DUP7 DUP7 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1DD6 SWAP3 POP POP POP JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP2 SWAP1 DUP2 SWAP1 DUP2 SWAP1 PUSH1 0x60 SWAP1 DUP2 SWAP1 DUP4 PUSH2 0xFDB PUSH1 0x4 DUP4 ADD PUSH2 0x1F27 JUMP JUMPDEST DUP3 SLOAD SWAP9 POP SWAP1 POP DUP8 PUSH2 0x1033 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7500000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x3 DUP5 ADD SLOAD SWAP2 SWAP9 POP SWAP7 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP5 POP DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x1069 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1093 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP4 POP DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x10AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x10D7 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x114E JUMPI PUSH1 0x0 DUP1 PUSH2 0x10F5 PUSH1 0x4 DUP7 ADD DUP5 PUSH2 0x1F2B JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP2 PUSH1 0x0 SHR DUP8 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x1109 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP DUP1 PUSH1 0x0 SHR DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x1139 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP POP PUSH1 0x1 ADD PUSH2 0x10DD JUMP JUMPDEST POP POP POP SWAP2 SWAP4 SWAP6 POP SWAP2 SWAP4 SWAP6 JUMP JUMPDEST PUSH2 0x1166 DUP5 DUP5 DUP5 DUP5 PUSH2 0x1FBD JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x11C0 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x11D0 PUSH2 0x11CB PUSH2 0xE50 JUMP JUMPDEST PUSH2 0x21F4 JUMP JUMPDEST PUSH2 0x11D8 PUSH2 0x22BB JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x11E2 PUSH2 0x4BE0 JUMP JUMPDEST PUSH2 0x11EA PUSH2 0xE50 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP8 DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP8 AND PUSH1 0x40 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD DUP8 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP7 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x1F DUP6 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD SWAP1 SWAP2 MSTORE DUP4 DUP2 MSTORE SWAP1 DUP5 SWAP1 DUP5 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP POP PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x125B DUP2 PUSH2 0x2313 JUMP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 NOT DUP2 JUMP JUMPDEST PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x1296 PUSH2 0x11CB PUSH2 0xE50 JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD DUP2 EQ PUSH2 0x12ED JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E636F6E73697374656E742061727261797300000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0x134E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7500000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP2 ADD DUP3 PUSH2 0x1399 JUMPI PUSH1 0x0 PUSH2 0x1362 DUP3 PUSH2 0x1F27 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1392 JUMPI PUSH1 0x0 PUSH2 0x137B DUP5 DUP3 PUSH2 0x1F2B JUMP JUMPDEST POP SWAP1 POP PUSH2 0x1388 DUP5 DUP3 PUSH2 0x2377 JUMP JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x1367 JUMP JUMPDEST POP POP PUSH2 0x13A4 JUMP JUMPDEST PUSH2 0x13A4 DUP2 DUP7 DUP7 PUSH2 0x2457 JUMP JUMPDEST DUP6 PUSH32 0xCB3FE5489E0CD43D0F4A33D1E09A4A0463A03D0D38F56165530854E5540DB143 DUP7 DUP7 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x140C JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x13F4 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x144B JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1433 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x4 PUSH1 0x0 ADD DUP1 SLOAD DUP1 PUSH1 0x20 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 DUP1 ISZERO PUSH2 0x14B9 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x14A5 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x14CE PUSH2 0x11CB PUSH2 0xE50 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1529 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061796F75743A207A65726F2061646472657373000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 SWAP1 SWAP2 OR SWAP2 DUP3 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD SWAP3 SWAP1 SWAP2 AND DUP3 MSTORE MLOAD PUSH32 0xDD880D24A789958A6398C99C2E54CE31BC10A638CBC42F7DD34285479AE0F855 SWAP2 PUSH1 0x20 SWAP1 DUP3 SWAP1 SUB ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x15E4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x15EF PUSH2 0x11CB PUSH2 0xE50 JUMP JUMPDEST PUSH2 0x11D8 PUSH2 0x24DF JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x160E PUSH2 0x4BE0 JUMP JUMPDEST PUSH2 0x1616 PUSH2 0xE50 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP11 DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP11 AND PUSH1 0x40 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD DUP11 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP10 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x1F DUP9 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD SWAP1 SWAP2 MSTORE DUP7 DUP2 MSTORE SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP POP PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP6 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP5 DUP3 MSTORE SWAP1 SWAP2 DUP6 SWAP2 DUP6 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP POP PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x16C4 DUP2 PUSH2 0x251D JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x16EB PUSH2 0x4BE0 JUMP JUMPDEST PUSH2 0x16F3 PUSH2 0xE50 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP10 DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP10 AND PUSH1 0x40 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD DUP10 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP9 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x1F DUP8 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD SWAP1 SWAP2 MSTORE DUP6 DUP2 MSTORE SWAP1 DUP7 SWAP1 DUP7 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP POP PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x1764 DUP2 PUSH2 0x2596 JUMP JUMPDEST DUP1 PUSH1 0xC0 ADD MLOAD SWAP3 POP DUP1 PUSH1 0xE0 ADD MLOAD SWAP2 POP POP SWAP7 POP SWAP7 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 NOT DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x17C7 DUP6 DUP6 DUP6 DUP6 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x2638 SWAP3 POP POP POP JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ PUSH2 0x1823 JUMPI PUSH1 0x8 SLOAD PUSH2 0x180E SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND SWAP2 AND DUP8 PUSH2 0x27A6 JUMP JUMPDEST PUSH2 0x1823 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND CALLER ADDRESS DUP9 PUSH2 0x2826 JUMP JUMPDEST PUSH2 0x1865 DUP7 DUP6 DUP6 DUP6 DUP6 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x28AE SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP7 POP PUSH32 0xE16FB73E6E5415265887CEE6412691A8B3CD94E24C6528ED966DC06FFB799B78 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x18F8 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x1900 PUSH2 0x1D57 JUMP JUMPDEST PUSH2 0x1908 PUSH2 0x4BE0 JUMP JUMPDEST PUSH2 0x1910 PUSH2 0xE50 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP8 DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP8 AND PUSH1 0x40 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD DUP8 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP7 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x1F DUP6 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD SWAP1 SWAP2 MSTORE DUP4 DUP2 MSTORE SWAP1 DUP5 SWAP1 DUP5 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP POP PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x125B DUP2 PUSH2 0x2A5B JUMP JUMPDEST PUSH1 0x60 DUP5 DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x199B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x19C5 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1A85 JUMPI PUSH1 0x0 PUSH2 0x1A47 DUP10 DUP10 DUP5 DUP2 DUP2 LT PUSH2 0x19E4 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x7 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP10 DUP10 DUP10 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1DD6 SWAP3 POP POP POP JUMP JUMPDEST SWAP1 POP PUSH2 0x1A65 DUP2 PUSH2 0x1A5F DUP10 PUSH8 0xDE0B6B3A7640000 PUSH2 0x2A88 JUMP JUMPDEST SWAP1 PUSH2 0x2AE8 JUMP JUMPDEST DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1A71 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP PUSH1 0x1 ADD PUSH2 0x19CB JUMP JUMPDEST POP POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x1A9B PUSH2 0x11CB PUSH2 0xE50 JUMP JUMPDEST PUSH2 0x11D0 PUSH2 0x2B4F JUMP JUMPDEST PUSH1 0x60 DUP4 DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x1ABD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1AE7 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1B85 JUMPI PUSH2 0x1B66 DUP8 DUP8 DUP4 DUP2 DUP2 LT PUSH2 0x1B04 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x7 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 DUP8 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x2638 SWAP3 POP POP POP JUMP JUMPDEST DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1B72 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x1AED JUMP JUMPDEST POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x1C34 JUMPI PUSH1 0x8 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND 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 PUSH2 0x1C05 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1C19 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1C2F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP4 POP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x1CD6 JUMPI PUSH1 0x8 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND 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 PUSH2 0x1CA7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1CBB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1CD1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP3 POP JUMPDEST PUSH2 0x1CE0 DUP5 DUP5 PUSH2 0x2BD1 JUMP JUMPDEST SWAP1 SWAP6 SWAP1 SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x1CFC PUSH2 0x11CB PUSH2 0xE50 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 DUP3 OR DUP1 DUP5 SSTORE PUSH1 0x40 MLOAD SWAP3 SWAP4 SWAP2 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x11D8 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061757361626C653A2070617573656400000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x1DBC DUP4 PUSH2 0x2313 JUMP JUMPDEST PUSH2 0x1DC5 DUP4 PUSH2 0x2596 JUMP JUMPDEST POP POP PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xE0 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x1E7A JUMPI PUSH1 0x8 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND 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 PUSH2 0x1E4B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1E5F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1E75 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP5 POP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x1F1C JUMPI PUSH1 0x8 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND 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 PUSH2 0x1EED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1F01 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1F17 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP4 POP JUMPDEST PUSH2 0x17C7 DUP6 DUP6 DUP6 PUSH2 0x2C9D JUMP JUMPDEST SLOAD SWAP1 JUMP JUMPDEST DUP2 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP4 LT PUSH2 0x1F85 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x456E756D4D61703A20696E646578206F7574206F6620626F756E647300000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 PUSH1 0x0 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x1F96 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD SWAP1 POP DUP1 PUSH1 0x0 ADD SLOAD DUP2 PUSH1 0x1 ADD SLOAD SWAP3 POP SWAP3 POP POP JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP3 PUSH2 0x200F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F20737570706C79000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH2 0x203A PUSH1 0x4 PUSH2 0x1F27 JUMP JUMPDEST LT PUSH2 0x208C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20746F6F206D616E7920736B757300000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x2097 PUSH1 0x4 DUP6 PUSH2 0x2EA4 JUMP JUMPDEST PUSH2 0x20E8 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20736B7520616C7265616479206372656174656400000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO PUSH2 0x215A JUMPI PUSH2 0x2109 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2EEE JUMP JUMPDEST PUSH2 0x215A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D636F6E74726163742072656365697665720000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP6 DUP2 SSTORE PUSH1 0x1 DUP2 ADD DUP7 SWAP1 SSTORE PUSH1 0x2 DUP2 ADD DUP6 SWAP1 SSTORE PUSH1 0x3 DUP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT SWAP1 SWAP2 AND DUP2 OR SWAP1 SWAP2 SSTORE DUP4 MLOAD DUP9 DUP2 MSTORE SWAP3 DUP4 ADD DUP8 SWAP1 MSTORE DUP3 DUP5 ADD DUP7 SWAP1 MSTORE PUSH1 0x60 DUP4 ADD MSTORE SWAP2 MLOAD PUSH32 0x38BD4AABCE684540CD61351B91F2F5FACF9D6963934347E25AAB93D87AE7AC14 SWAP2 DUP2 SWAP1 SUB PUSH1 0x80 ADD SWAP1 LOG1 POP POP POP POP POP JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8DA5CB5B 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 PUSH2 0x222D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2241 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2257 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ PUSH2 0x22B8 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6F7420746865206F776E657200000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0x22C3 PUSH2 0x2EF4 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA PUSH2 0x22F6 PUSH2 0xE50 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 JUMP JUMPDEST PUSH2 0x231C DUP2 PUSH2 0x2F4B JUMP JUMPDEST PUSH1 0x40 DUP2 PUSH1 0xA0 ADD MLOAD MLOAD LT ISZERO PUSH2 0x22B8 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206D697373696E6720757365722064617461000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0x244B JUMPI DUP4 SLOAD PUSH1 0x0 NOT DUP1 DUP4 ADD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x0 SWAP1 DUP8 SWAP1 DUP4 SWAP1 DUP2 LT PUSH2 0x23AA JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD SWAP1 POP DUP1 DUP8 PUSH1 0x0 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x23CA JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 DUP5 SLOAD PUSH1 0x2 SWAP1 SWAP4 MUL ADD SWAP2 DUP3 SSTORE PUSH1 0x1 SWAP4 DUP5 ADD SLOAD SWAP2 DUP5 ADD SWAP2 SWAP1 SWAP2 SSTORE DUP4 SLOAD DUP3 MSTORE DUP10 DUP4 ADD SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP1 DUP5 ADD SWAP1 SSTORE DUP7 SLOAD DUP8 SWAP1 DUP1 PUSH2 0x2409 JUMPI INVALID JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 PUSH1 0x2 PUSH1 0x0 NOT SWAP1 SWAP5 ADD SWAP4 DUP5 MUL ADD DUP3 DUP2 SSTORE PUSH1 0x1 SWAP1 DUP2 ADD DUP4 SWAP1 SSTORE SWAP3 SWAP1 SWAP4 SSTORE DUP9 DUP2 MSTORE DUP10 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x40 DUP3 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE SWAP5 POP PUSH2 0x2451 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SWAP2 POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x2462 DUP4 DUP4 DUP4 PUSH2 0x31F5 JUMP JUMPDEST PUSH2 0x246B DUP4 PUSH2 0x1F27 JUMP JUMPDEST ISZERO DUP1 PUSH2 0x2489 JUMPI POP PUSH1 0x7 SLOAD PUSH2 0x2489 SWAP1 DUP5 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x3359 JUMP JUMPDEST PUSH2 0x24DA JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F207265666572656E636520746F6B656E0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x24E7 PUSH2 0x1D57 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH2 0x22F6 PUSH2 0xE50 JUMP JUMPDEST PUSH1 0xE0 DUP2 ADD MLOAD MLOAD ISZERO DUP1 ISZERO SWAP1 PUSH2 0x2552 JUMPI POP PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO JUMPDEST ISZERO PUSH2 0x258D JUMPI PUSH1 0xA0 DUP2 ADD MLOAD PUSH1 0x20 DUP2 ADD MLOAD DUP1 PUSH2 0x256B JUMPI POP PUSH1 0x0 NOT JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x40 DUP5 ADD MLOAD PUSH2 0x258A SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND SWAP2 AND DUP4 PUSH2 0x27A6 JUMP JUMPDEST POP POP JUMPDEST PUSH2 0x22B8 DUP2 PUSH2 0x3371 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0x25FC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20756E737570706F7274656420534B550000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP2 ADD PUSH1 0x0 PUSH2 0x260C DUP5 DUP4 PUSH2 0x3610 JUMP JUMPDEST SWAP1 POP PUSH2 0x2619 DUP5 DUP4 DUP4 PUSH2 0x3680 JUMP JUMPDEST PUSH2 0x1166 JUMPI PUSH1 0x80 DUP5 ADD MLOAD PUSH2 0x262D SWAP1 DUP3 SWAP1 PUSH2 0x2A88 JUMP JUMPDEST PUSH1 0xC0 DUP6 ADD MSTORE POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x26DC JUMPI PUSH1 0x8 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND 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 PUSH2 0x26AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x26C1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x26D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP4 POP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x277E JUMPI PUSH1 0x8 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND 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 PUSH2 0x274F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2763 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2779 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP3 POP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x278B DUP7 DUP7 PUSH2 0x2BD1 JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH2 0xF9C DUP3 PUSH2 0x1A5F DUP4 PUSH8 0xDE0B6B3A7640000 PUSH2 0x2A88 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 OR SWAP1 MSTORE PUSH2 0x24DA SWAP1 DUP5 SWAP1 PUSH2 0x3784 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x24 DUP4 ADD MSTORE DUP5 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x84 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 OR SWAP1 MSTORE PUSH2 0x1166 SWAP1 DUP6 SWAP1 PUSH2 0x3784 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x0 SWAP2 SWAP1 DUP2 PUSH2 0x28F4 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x28EE JUMPI CALLVALUE SWAP2 POP PUSH2 0x28F4 JUMP JUMPDEST PUSH1 0x0 NOT SWAP2 POP JUMPDEST DUP1 PUSH2 0x28FE JUMPI POP PUSH1 0x0 NOT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x29A0 JUMPI PUSH1 0x8 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND 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 PUSH2 0x2971 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2985 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x299B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP7 POP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x2A42 JUMPI PUSH1 0x8 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND 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 PUSH2 0x2A13 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2A27 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2A3D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP6 POP JUMPDEST PUSH2 0x2A50 DUP8 DUP8 DUP8 DUP6 ADDRESS DUP7 PUSH2 0x396E JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x2A64 DUP2 PUSH2 0x2313 JUMP JUMPDEST PUSH2 0x2A6D DUP2 PUSH2 0x2596 JUMP JUMPDEST PUSH2 0x2A76 DUP2 PUSH2 0x251D JUMP JUMPDEST PUSH2 0x2A7F DUP2 PUSH2 0x4014 JUMP JUMPDEST PUSH2 0x22B8 DUP2 PUSH2 0x4060 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x2A97 JUMPI POP PUSH1 0x0 PUSH2 0x2451 JUMP JUMPDEST DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 PUSH2 0x2AA4 JUMPI INVALID JUMPDEST DIV EQ PUSH2 0x2AE1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x4C52 PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 GT PUSH2 0x2B3E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206469766973696F6E206279207A65726F000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 DUP4 DUP2 PUSH2 0x2B47 JUMPI INVALID JUMPDEST DIV SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD ISZERO PUSH2 0x2BA4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A20737461727465640000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST TIMESTAMP PUSH1 0x2 SSTORE PUSH32 0x27029695AA5F602A4EE81F4C32DFA86E562F200A17966496F3A7C3F2EC0F9417 PUSH2 0x22F6 PUSH2 0xE50 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x2BE0 DUP6 DUP6 PUSH2 0x4545 JUMP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP1 PUSH2 0x2BF0 DUP8 DUP8 PUSH2 0x4632 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x902F1AC PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2C28 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2C3C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x2C52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND SWAP4 POP AND SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND SWAP1 DUP5 AND EQ PUSH2 0x2C8C JUMPI DUP1 DUP3 PUSH2 0x2C8F JUMP JUMPDEST DUP2 DUP2 JUMPDEST SWAP1 SWAP9 SWAP1 SWAP8 POP SWAP6 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 DUP4 SWAP3 SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP DUP5 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x2CD0 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP DUP4 DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x2CFE JUMPI INVALID 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 0x8 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x1F00CA7400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP9 DUP2 MSTORE PUSH1 0x24 DUP3 ADD SWAP3 DUP4 MSTORE DUP7 MLOAD PUSH1 0x44 DUP4 ADD MSTORE DUP7 MLOAD PUSH1 0x0 SWAP7 SWAP5 SWAP1 SWAP5 AND SWAP5 PUSH4 0x1F00CA74 SWAP5 DUP11 SWAP5 DUP10 SWAP5 SWAP1 SWAP3 PUSH1 0x64 SWAP1 SWAP2 ADD SWAP2 DUP6 DUP3 ADD SWAP2 MUL DUP1 DUP4 DUP4 DUP13 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2D95 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2D7D JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP4 POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2DB9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2DCD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2DF6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH2 0x2E16 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x2E2B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD DUP7 PUSH1 0x20 DUP3 MUL DUP4 ADD GT PUSH5 0x100000000 DUP3 GT OR ISZERO PUSH2 0x2E48 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 DUP3 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2E75 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2E5D JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD PUSH1 0x40 MSTORE POP POP POP SWAP1 POP DUP1 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x2E91 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP3 POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2EB0 DUP4 DUP4 PUSH2 0x3359 JUMP JUMPDEST PUSH2 0x2EE6 JUMPI POP DUP2 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP5 SSTORE PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 SWAP1 SWAP4 ADD DUP5 SWAP1 SSTORE DUP5 SLOAD DUP5 DUP3 MSTORE DUP3 DUP7 ADD SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0x2451 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x2451 JUMP JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND PUSH2 0x11D8 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061757361626C653A206E6F7420706175736564000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2FAA JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F206164647265737320726563697069656E7400000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x3009 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F206164647265737320746F6B656E0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x80 DUP2 ADD MLOAD PUSH2 0x305F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F207175616E7469747920707572636861736500000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0x30C5 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7500000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x80 ADD MLOAD DUP2 PUSH1 0x2 ADD SLOAD LT ISZERO PUSH2 0x3122 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A2061626F7665206D6178207175616E746974790000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 SLOAD PUSH1 0x0 NOT EQ PUSH2 0x3189 JUMPI DUP2 PUSH1 0x80 ADD MLOAD DUP2 PUSH1 0x1 ADD SLOAD LT ISZERO PUSH2 0x3189 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E73756666696369656E7420737570706C7900000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x31A4 PUSH1 0x4 DUP4 ADD DUP3 PUSH2 0x3359 JUMP JUMPDEST PUSH2 0x24DA JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7520746F6B656E00000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x32DB JUMPI PUSH1 0x0 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x320F JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x3281 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F206164647265737320746F6B656E0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x328F JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP DUP1 PUSH1 0x0 EQ ISZERO PUSH2 0x32BB JUMPI PUSH2 0x32B5 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x2377 JUMP JUMPDEST POP PUSH2 0x32D1 JUMP JUMPDEST PUSH2 0x32CF DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP4 PUSH2 0x4795 JUMP JUMPDEST POP JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x31F8 JUMP JUMPDEST POP PUSH32 0x0 PUSH2 0x3306 DUP5 PUSH2 0x1F27 JUMP JUMPDEST GT ISZERO PUSH2 0x24DA JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20746F6F206D616E7920746F6B656E730000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0xE0 DUP2 ADD MLOAD MLOAD ISZERO DUP1 PUSH2 0x33A3 JUMPI POP PUSH1 0x1 PUSH1 0x0 NOT SUB DUP2 PUSH1 0xE0 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x3395 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 SHR EQ ISZERO JUMPDEST ISZERO PUSH2 0x33B6 JUMPI PUSH2 0x33B1 DUP2 PUSH2 0x482C JUMP JUMPDEST PUSH2 0x22B8 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x343D JUMPI DUP1 PUSH1 0xC0 ADD MLOAD CALLVALUE LT ISZERO PUSH2 0x3438 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E73756666696369656E742045544800000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x3464 JUMP JUMPDEST PUSH2 0x3464 PUSH2 0x3448 PUSH2 0xE50 JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD MLOAD PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 SWAP1 ADDRESS SWAP1 PUSH2 0x2826 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0xE0 ADD MLOAD PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x3477 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 SHR SWAP1 POP PUSH1 0x0 PUSH2 0x34A9 PUSH8 0xDE0B6B3A7640000 PUSH2 0x1A5F DUP6 PUSH1 0xC0 ADD MLOAD DUP6 PUSH2 0x2A88 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0x7 SLOAD PUSH1 0xA0 DUP7 ADD MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 PUSH2 0x34D2 SWAP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP6 SWAP1 PUSH2 0x28AE JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MLOAD SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x3553 JUMPI PUSH1 0x0 PUSH2 0x350A CALLVALUE DUP4 PUSH2 0x497B JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x354D JUMPI DUP5 MLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 DUP3 ISZERO PUSH2 0x8FC MUL SWAP1 DUP4 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x354B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP JUMPDEST POP PUSH2 0x358C JUMP JUMPDEST PUSH1 0xC0 DUP5 ADD MLOAD PUSH1 0x0 SWAP1 PUSH2 0x3565 SWAP1 DUP4 PUSH2 0x497B JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x358A JUMPI DUP5 MLOAD PUSH1 0x40 DUP7 ADD MLOAD PUSH2 0x358A SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 DUP4 PUSH2 0x49D8 JUMP JUMPDEST POP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x35F3 JUMPI PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 DUP3 ISZERO PUSH2 0x8FC MUL SWAP1 DUP4 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x35ED JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x1166 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x7 SLOAD PUSH2 0x1166 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND SWAP2 AND DUP4 PUSH2 0x49D8 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x0 SWAP1 PUSH2 0x362C SWAP1 DUP4 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x4A58 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x2451 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20756E737570706F72746564207061796D656E7420746F6B656E00 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 NOT DUP3 EQ PUSH2 0x369D JUMPI PUSH2 0x3696 DUP5 DUP5 DUP5 PUSH2 0x4AE8 JUMP JUMPDEST SWAP1 POP PUSH2 0x2AE1 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x36B7 SWAP1 DUP6 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x4A58 JUMP JUMPDEST PUSH1 0x80 DUP7 ADD MLOAD SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH2 0x36CD SWAP1 DUP4 SWAP1 PUSH2 0x2A88 JUMP JUMPDEST PUSH1 0x40 DUP8 ADD MLOAD PUSH1 0x7 SLOAD PUSH1 0xA0 DUP10 ADD MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 PUSH2 0x36F6 SWAP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP6 SWAP1 PUSH2 0x1DD6 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x3710 DUP3 PUSH2 0x1A5F DUP6 PUSH8 0xDE0B6B3A7640000 PUSH2 0x2A88 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x2 DUP1 DUP3 MSTORE PUSH1 0x60 DUP3 ADD DUP4 MSTORE SWAP3 SWAP4 POP SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP POP POP PUSH1 0xE0 DUP10 ADD DUP2 SWAP1 MSTORE DUP1 MLOAD DUP8 SWAP2 SWAP1 PUSH1 0x0 SWAP1 PUSH2 0x3745 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x0 SHL DUP9 PUSH1 0xE0 ADD MLOAD PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x3766 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP PUSH1 0xC0 DUP8 ADD MSTORE POP PUSH1 0x1 SWAP2 POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP2 PUSH2 0x3797 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x2EEE JUMP JUMPDEST PUSH2 0x37E8 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433230577261707065723A206E6F6E2D636F6E7472616374000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x3825 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x3806 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x3887 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x388C JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 ISZERO PUSH2 0x390B JUMPI DUP1 MLOAD ISZERO PUSH2 0x3906 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x38B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x3906 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433230577261707065723A206F7065726174696F6E206661696C65640000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x3967 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x395E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433230577261707065723A206F7065726174696F6E206661696C65640000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 MLOAD DUP1 DUP3 PUSH1 0x20 ADD REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x39D7 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x556E697377617056323A2073616D652061646472657373657300000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT 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 DUP8 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x3A06 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP DUP7 DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x3A34 JUMPI INVALID 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 0x8 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0xAD5C464800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x60 SWAP5 SWAP3 SWAP1 SWAP3 AND SWAP3 PUSH4 0xAD5C4648 SWAP3 PUSH1 0x4 DUP1 DUP5 ADD SWAP4 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3AA2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3AB6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3ACC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0x3CC7 JUMPI CALLVALUE DUP7 EQ PUSH2 0x3B35 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x556E697377617056323A20696E76616C6964206D6178416D6F756E74496E0000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x40 MLOAD PUSH32 0xFB3BDB4100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP10 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND PUSH1 0x44 DUP5 ADD MSTORE PUSH1 0x64 DUP4 ADD DUP9 SWAP1 MSTORE PUSH1 0x80 PUSH1 0x24 DUP5 ADD SWAP1 DUP2 MSTORE DUP7 MLOAD PUSH1 0x84 DUP6 ADD MSTORE DUP7 MLOAD SWAP2 SWAP1 SWAP5 AND SWAP4 PUSH4 0xFB3BDB41 SWAP4 CALLVALUE SWAP4 DUP14 SWAP4 DUP10 SWAP4 DUP14 SWAP4 DUP14 SWAP4 SWAP3 PUSH1 0xA4 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 DUP1 DUP9 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3BCF JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3BB7 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP6 POP POP POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3BF6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3C0A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3C34 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH2 0x3C54 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x3C69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD DUP7 PUSH1 0x20 DUP3 MUL DUP4 ADD GT PUSH5 0x100000000 DUP3 GT OR ISZERO PUSH2 0x3C86 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 DUP3 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3CB3 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3C9B JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD PUSH1 0x40 MSTORE POP POP POP SWAP1 POP PUSH2 0x3FF1 JUMP JUMPDEST PUSH1 0x8 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND 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 PUSH2 0x3D15 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3D29 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3D3F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0x3E5B JUMPI PUSH1 0x8 SLOAD PUSH1 0x40 MLOAD PUSH32 0x4A25D94A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP10 DUP2 MSTORE PUSH1 0x24 DUP3 ADD DUP10 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND PUSH1 0x64 DUP5 ADD MSTORE PUSH1 0x84 DUP4 ADD DUP9 SWAP1 MSTORE PUSH1 0xA0 PUSH1 0x44 DUP5 ADD SWAP1 DUP2 MSTORE DUP7 MLOAD PUSH1 0xA4 DUP6 ADD MSTORE DUP7 MLOAD SWAP2 SWAP1 SWAP5 AND SWAP4 PUSH4 0x4A25D94A SWAP4 DUP13 SWAP4 DUP13 SWAP4 DUP10 SWAP4 DUP14 SWAP4 DUP14 SWAP4 SWAP3 PUSH1 0xC4 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 DUP1 DUP9 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3DF5 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3DDD JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP7 POP POP POP POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3E1E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3E32 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3C34 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x40 MLOAD PUSH32 0x8803DBEE00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP10 DUP2 MSTORE PUSH1 0x24 DUP3 ADD DUP10 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND PUSH1 0x64 DUP5 ADD MSTORE PUSH1 0x84 DUP4 ADD DUP9 SWAP1 MSTORE PUSH1 0xA0 PUSH1 0x44 DUP5 ADD SWAP1 DUP2 MSTORE DUP7 MLOAD PUSH1 0xA4 DUP6 ADD MSTORE DUP7 MLOAD SWAP2 SWAP1 SWAP5 AND SWAP4 PUSH4 0x8803DBEE SWAP4 DUP13 SWAP4 DUP13 SWAP4 DUP10 SWAP4 DUP14 SWAP4 DUP14 SWAP4 SWAP3 PUSH1 0xC4 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 DUP1 DUP9 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3EFC JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3EE4 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP7 POP POP POP POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3F25 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3F39 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3F62 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH2 0x3F82 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x3F97 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD DUP7 PUSH1 0x20 DUP3 MUL DUP4 ADD GT PUSH5 0x100000000 DUP3 GT OR ISZERO PUSH2 0x3FB4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 DUP3 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3FE1 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3FC9 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD PUSH1 0x40 MSTORE POP POP POP SWAP1 POP JUMPDEST DUP1 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x3FFE JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP3 POP POP POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x0 NOT EQ PUSH2 0x405C JUMPI PUSH1 0x80 DUP3 ADD MLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH2 0x4044 SWAP2 PUSH2 0x497B JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SSTORE JUMPDEST POP POP JUMP JUMPDEST DUP1 PUSH1 0x60 ADD MLOAD DUP2 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x29F844483CA6B10B5C0611D039AFC15CE8F6380E905307B381C3A8EE4E90E11E DUP5 PUSH1 0x20 ADD MLOAD DUP6 PUSH1 0x80 ADD MLOAD DUP7 PUSH1 0xA0 ADD MLOAD DUP8 PUSH1 0xC0 ADD MLOAD DUP9 PUSH1 0xE0 ADD MLOAD DUP10 PUSH2 0x100 ADD MLOAD DUP11 PUSH2 0x120 ADD MLOAD PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP5 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x40F7 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x40DF JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4127 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x410F JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4157 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x413F JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP4 POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP7 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x41CE JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x41B6 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x41FB JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP DUP4 DUP2 SUB DUP3 MSTORE DUP5 MLOAD DUP2 MSTORE DUP5 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP7 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x422E JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x4216 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x425B JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP8 POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 ISZERO PUSH2 0x405C JUMPI PUSH4 0x61ECEAE8 PUSH1 0xE0 SHL PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x61ECEAE8 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD DUP7 PUSH1 0x40 ADD MLOAD DUP8 PUSH1 0x60 ADD MLOAD DUP9 PUSH1 0x80 ADD MLOAD DUP10 PUSH1 0xA0 ADD MLOAD DUP11 PUSH1 0xC0 ADD MLOAD DUP12 PUSH1 0xE0 ADD MLOAD DUP13 PUSH2 0x100 ADD MLOAD DUP14 PUSH2 0x120 ADD MLOAD PUSH1 0x40 MLOAD DUP12 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP6 DUP2 SUB DUP6 MSTORE DUP11 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4394 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x437C JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x43C1 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP DUP6 DUP2 SUB DUP5 MSTORE DUP9 MLOAD DUP2 MSTORE DUP9 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP1 DUP12 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x43F6 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x43DE JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP6 DUP2 SUB DUP4 MSTORE DUP8 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4435 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x441D JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP6 DUP2 SUB DUP3 MSTORE DUP7 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4474 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x445C JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP15 POP POP POP POP POP POP POP POP POP POP POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x44A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x44B9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x44CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND EQ PUSH2 0x405C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F74696669636174696F6E2072656675736564000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x45AF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x556E697377617056323A2073616D652061646472657373657300000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH2 0x45CF JUMPI DUP3 DUP5 PUSH2 0x45D2 JUMP JUMPDEST DUP4 DUP4 JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x1FB6 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x556E697377617056323A207A65726F2061646472657373000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x4641 DUP6 DUP6 PUSH2 0x4545 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x8 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND 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 PUSH2 0x4693 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x46A7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x46BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 PUSH1 0x60 SWAP6 DUP7 SHL DUP2 AND PUSH1 0x20 DUP4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP5 DUP7 SHL DUP2 AND PUSH1 0x34 DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x28 DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH1 0x48 DUP4 ADD DUP5 MSTORE DUP1 MLOAD SWAP1 DUP7 ADD KECCAK256 PUSH32 0xFF00000000000000000000000000000000000000000000000000000000000000 PUSH1 0x68 DUP5 ADD MSTORE SWAP4 SWAP1 SWAP6 SHL SWAP1 SWAP5 AND PUSH1 0x69 DUP6 ADD MSTORE PUSH1 0x7D DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x96E8AC4277198FF8B6F785478AA9A39F403CB768DD02CBEE326C3E7DA348845F PUSH1 0x9D DUP1 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MLOAD DUP1 DUP6 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xBD SWAP1 SWAP4 ADD SWAP1 MSTORE DUP2 MLOAD SWAP2 ADD KECCAK256 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x1 DUP5 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 PUSH2 0x47FA JUMPI POP POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE DUP4 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD DUP5 DUP2 MSTORE DUP7 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP10 SSTORE PUSH1 0x0 DUP10 DUP2 MSTORE DUP5 DUP2 KECCAK256 SWAP6 MLOAD PUSH1 0x2 SWAP1 SWAP4 MUL SWAP1 SWAP6 ADD SWAP2 DUP3 SSTORE SWAP2 MLOAD SWAP1 DUP3 ADD SSTORE DUP7 SLOAD DUP7 DUP5 MSTORE DUP2 DUP9 ADD SWAP1 SWAP3 MSTORE SWAP3 SWAP1 SWAP2 KECCAK256 SSTORE PUSH2 0x2AE1 JUMP JUMPDEST DUP3 DUP6 PUSH1 0x0 ADD PUSH1 0x1 DUP4 SUB DUP2 SLOAD DUP2 LT PUSH2 0x480D JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD PUSH1 0x1 ADD DUP2 SWAP1 SSTORE POP PUSH1 0x0 SWAP2 POP POP PUSH2 0x2AE1 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x494F JUMPI DUP1 PUSH1 0xC0 ADD MLOAD CALLVALUE LT ISZERO PUSH2 0x48AE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E73756666696369656E742045544800000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xC0 DUP3 ADD MLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 DUP2 ISZERO PUSH2 0x8FC MUL SWAP2 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x48EC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x0 PUSH2 0x4906 DUP3 PUSH1 0xC0 ADD MLOAD CALLVALUE PUSH2 0x497B SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x4949 JUMPI DUP2 MLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 DUP3 ISZERO PUSH2 0x8FC MUL SWAP1 DUP4 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x4947 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP JUMPDEST POP PUSH2 0x22B8 JUMP JUMPDEST PUSH2 0x22B8 PUSH2 0x495A PUSH2 0xE50 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xC0 DUP5 ADD MLOAD PUSH1 0x40 DUP6 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP4 SWAP3 AND SWAP1 PUSH2 0x2826 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 GT ISZERO PUSH2 0x49D2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 OR SWAP1 MSTORE PUSH2 0x24DA SWAP1 DUP5 SWAP1 PUSH2 0x3784 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 PUSH2 0x4ABB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x456E756D4D61703A206E6F6E6578697374656E74206B65790000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP4 PUSH1 0x0 ADD PUSH1 0x1 DUP3 SUB DUP2 SLOAD DUP2 LT PUSH2 0x4ACD JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD PUSH1 0x1 ADD SLOAD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x0 NOT DUP3 EQ PUSH2 0x4AFB JUMPI POP PUSH1 0x0 PUSH2 0x2AE1 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x4B15 SWAP1 DUP6 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x4A58 JUMP JUMPDEST PUSH1 0x40 DUP7 ADD MLOAD PUSH1 0x7 SLOAD PUSH1 0xA0 DUP9 ADD MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 PUSH2 0x4B3C SWAP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH2 0x2638 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4B6D DUP8 PUSH1 0x80 ADD MLOAD PUSH2 0x4B67 DUP5 PUSH2 0x1A5F PUSH8 0xDE0B6B3A7640000 DUP9 PUSH2 0x2A88 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 PUSH2 0x2A88 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x2 DUP1 DUP3 MSTORE PUSH1 0x60 DUP3 ADD DUP4 MSTORE SWAP3 SWAP4 POP SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP POP POP PUSH1 0xE0 DUP9 ADD DUP2 SWAP1 MSTORE DUP1 MLOAD DUP7 SWAP2 SWAP1 PUSH1 0x0 SWAP1 PUSH2 0x4BA2 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP2 PUSH1 0x0 SHL DUP8 PUSH1 0xE0 ADD MLOAD PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x4BC3 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0xC0 DUP8 ADD MSTORE POP PUSH1 0x1 SWAP2 POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x140 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP1 NOT AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE POP SWAP1 JUMP INVALID MSTORE8 PUSH2 0x6665 0x4D PUSH2 0x7468 GASPRICE KECCAK256 PUSH14 0x756C7469706C69636174696F6E20 PUSH16 0x766572666C6F77A26469706673582212 KECCAK256 SGT PUSH31 0x37C66B04E815A20493EC609A66E1BEB395702FC79E0266AE7431CB4B3F7164 PUSH20 0x6F6C634300070600330000000000000000000000 ","sourceMap":"243:4222:17:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2451:15:28;;-1:-1:-1;;;;;2451:15:28;2427:12;:10;:12::i;:::-;-1:-1:-1;;;;;2427:40:28;;2419:77;;;;;-1:-1:-1;;;2419:77:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;243:4222:17;;;;;941:29:29;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;941:29:29;;;;;;;;;;;;;;9044:610:32;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9044:610:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9044:610:32;;-1:-1:-1;9044:610:32;-1:-1:-1;9044:610:32;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3121:271:17;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3121:271:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3121:271:17;;-1:-1:-1;3121:271:17;-1:-1:-1;3121:271:17;:::i;:::-;;;;;;;;;;;;;;;;491:39:22;;;;;;;;;;;;;:::i;10463:1027:32:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10463:1027:32;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10463:1027:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;699:255:17;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;699:255:17;;;;;;;;;;;;;;;;-1:-1:-1;;;;;699:255:17;;:::i;4169:114:32:-;;;;;;;;;;;;;:::i;1003:520:17:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1003:520:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1003:520:17;;-1:-1:-1;1003:520:17;-1:-1:-1;1003:520:17;:::i;1071:85:33:-;;;;;;;;;;;;;:::i;1698:98:32:-;;;;;;;;;;;;;:::i;482:18:5:-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;5032:943:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5032:943:32;;;;;;;;-1:-1:-1;5032:943:32;;-1:-1:-1;;5032:943:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5032:943:32;;-1:-1:-1;5032:943:32;;-1:-1:-1;;;;;5032:943:32:i;11621:110::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;660:263:8;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;660:263:8;-1:-1:-1;;;;;660:263:8;;:::i;3787:110:32:-;;;;;;;;;;;;;:::i;379:35:8:-;;;;;;;;;;;;;:::i;2203:679:17:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2203:679:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2203:679:17;;-1:-1:-1;2203:679:17;-1:-1:-1;2203:679:17;:::i;1114:94:1:-;;;;;;;;;;;;;:::i;1529:668:17:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1529:668:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1529:668:17;;-1:-1:-1;1529:668:17;-1:-1:-1;1529:668:17;:::i;857:77:29:-;;;;;;;;;;;;;:::i;2888:227:17:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2888:227:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2888:227:17;;-1:-1:-1;2888:227:17;-1:-1:-1;2888:227:17;:::i;3398:697::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3398:697:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3398:697:17;;-1:-1:-1;3398:697:17;-1:-1:-1;3398:697:17;:::i;6962:537:32:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6962:537:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6962:537:32;;-1:-1:-1;6962:537:32;-1:-1:-1;6962:537:32;:::i;2691:497:33:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2691:497:33;;-1:-1:-1;2691:497:33;-1:-1:-1;2691:497:33;:::i;3396:118:32:-;;;;;;;;;;;;;:::i;960:37:17:-;;;:::i;3632:353:29:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3632:353:29;;-1:-1:-1;3632:353:29;-1:-1:-1;3632:353:29;:::i;4101:362:17:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4101:362:17;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1276:85:6;;;;;;;;;;;;;:::i;1448:197:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1448:197:1;-1:-1:-1;;;;;1448:197:1;;:::i;355:104:7:-;442:10;355:104;:::o;941:29:29:-;;;-1:-1:-1;;;;;941:29:29;;:::o;9044:610:32:-;9266:18;9286:28;988:10:6;;1002:1;988:15;;980:50;;;;;-1:-1:-1;;;980:50:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;9326:19:32::1;:17;:19::i;:::-;9355:28;;:::i;:::-;9414:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;9393:33:32;;::::1;::::0;;9436:30;;::::1;:18;::::0;;::::1;:30:::0;;;;9476:22;;::::1;:14;::::0;;::::1;:22:::0;;;;9508:12:::1;::::0;::::1;:18:::0;;;9536:17:::1;::::0;::::1;:28:::0;;;9574;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;;;9594:8;;;;;;9574:28;::::1;9594:8:::0;;;;9574:28;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;;;;9574:17:32::1;::::0;::::1;:28:::0;9620:27:::1;9574:8:::0;9620:17:::1;:27::i;:::-;9613:34;;;;;9044:610:::0;;;;;;;;;:::o;3121:271:17:-;3293:18;3336:49;3350:9;3361:7;3370:8;3380:4;;3336:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3336:13:17;;-1:-1:-1;;;3336:49:17:i;:::-;3323:62;3121:271;-1:-1:-1;;;;;;3121:271:17:o;491:39:22:-;;;-1:-1:-1;;;;;491:39:22;;:::o;10463:1027:32:-;10573:19;10841:14;;;:9;:14;;;;;10573:19;;;;;;10730:23;;;;10573:19;10882:23;:14;;;:21;:23::i;:::-;10930:19;;;-1:-1:-1;10865:40:32;-1:-1:-1;10967:16:32;10959:51;;;;;-1:-1:-1;;;10959:51:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;11038:23;;;;11096:30;;;;11160:29;;;;11038:23;;-1:-1:-1;11096:30:32;-1:-1:-1;;;;;;11160:29:32;;-1:-1:-1;11223:6:32;11209:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11209:21:32;;11200:30;;11263:6;11249:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11249:21:32;;11240:30;;11285:9;11280:204;11304:6;11300:1;:10;11280:204;;;11332:13;;11364:20;:14;;;11382:1;11364:17;:20::i;:::-;11331:53;;;;11426:5;11418:14;;11398:6;11405:1;11398:9;;;;;;;;;;;;;:35;-1:-1:-1;;;;;11398:35:32;;;-1:-1:-1;;;;;11398:35:32;;;;;11467:5;11459:14;;11447:6;11454:1;11447:9;;;;;;;;;;;;;;;;;:26;-1:-1:-1;;11312:3:32;;11280:204;;;;10463:1027;;;;;;;;;:::o;699:255:17:-;872:75;883:3;888:11;901:22;925:21;872:10;:75::i;:::-;699:255;;;;:::o;4169:114:32:-;988:10:6;;980:50;;;;;-1:-1:-1;;;980:50:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;4225:31:32::1;4243:12;:10;:12::i;:::-;4225:17;:31::i;:::-;4266:10;:8;:10::i;:::-;4169:114::o:0;1003:520:17:-;1205:32;;:::i;:::-;1272:12;:10;:12::i;:::-;-1:-1:-1;;;;;1247:37:17;;;;;1294:34;;;:22;;;;:34;;;;1338:26;;;:18;;;;:26;;;;1374:16;;;:22;;;1406:21;;;:32;;;1448;;;;;;;;;;;;;;;;;;;;;1472:8;;;;;;1448:32;;1472:8;;;;1448:32;;;;;;;;;-1:-1:-1;;;;1448:21:17;;;:32;1491:25;1448:12;1491:11;:25::i;:::-;1003:520;;;;;;;:::o;1071:85:33:-;-1:-1:-1;;1071:85:33;:::o;1698:98:32:-;1751:44;1698:98;:::o;482:18:5:-;;;;;;:::o;5032:943:32:-;5176:31;5194:12;:10;:12::i;5176:31::-;5234:13;;5275;;5265:23;;5257:61;;;;;-1:-1:-1;;;5257:61:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;5328:23;5354:14;;;:9;:14;;;;;5386:19;;5378:59;;;;;-1:-1:-1;;;5378:59:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;5482:14;;;5510:11;5506:410;;5537:21;5561:20;:11;:18;:20::i;:::-;5537:44;;5600:9;5595:236;5619:13;5615:1;:17;5595:236;;;5737:13;5756:17;:11;5737:13;5756:14;:17::i;:::-;-1:-1:-1;5736:37:32;-1:-1:-1;5791:25:32;:11;5736:37;5791:18;:25::i;:::-;-1:-1:-1;;5634:3:32;;5595:236;;;;5506:410;;;;5861:44;5877:11;5890:6;5898;5861:15;:44::i;:::-;5948:3;5931:37;5953:6;5961;5931:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5032:943;;;;;;:::o;11621:110::-;11672:21;11712:5;:12;;11705:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11621:110;:::o;660:263:8:-;733:31;751:12;:10;:12::i;733:31::-;-1:-1:-1;;;;;782:27:8;;774:60;;;;;-1:-1:-1;;;774:60:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;844:12;:28;;-1:-1:-1;;844:28:8;-1:-1:-1;;;;;844:28:8;;;;;;;;;;;887:29;;;903:12;;;;887:29;;;;;;;;;;;;;660:263;:::o;3787:110:32:-;988:10:6;;980:50;;;;;-1:-1:-1;;;980:50:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;3841:31:32::1;3859:12;:10;:12::i;3841:31::-;3882:8;:6;:8::i;379:35:8:-:0;;;-1:-1:-1;;;;;379:35:8;;:::o;2203:679:17:-;2473:32;;:::i;:::-;2540:12;:10;:12::i;:::-;-1:-1:-1;;;;;2515:37:17;;;;;2562:34;;;:22;;;;:34;;;;2606:26;;;:18;;;;:26;;;;2642:16;;;:22;;;2674:21;;;:32;;;2716;;;;;;;;;;;;;;;;;;;;;2740:8;;;;;;2716:32;;2740:8;;;;2716:32;;;;;;;;;-1:-1:-1;;;;2716:21:17;;;:32;2758:23;;;:36;;;2804:38;;;;;;;;;;;;;;;;;;;;2831:11;;;;;;2804:38;;;2831:11;;2804:38;2831:11;2804:38;;;;;;;;;-1:-1:-1;;;;2804:24:17;;;:38;2853:22;2804:12;2853:8;:22::i;:::-;2203:679;;;;;;;;;;:::o;1114:94:1:-;1169:7;1195:6;-1:-1:-1;;;;;1195:6:1;1114:94;:::o;1529:668:17:-;1727:18;1747:28;1787:32;;:::i;:::-;1854:12;:10;:12::i;:::-;-1:-1:-1;;;;;1829:37:17;;;;;1876:34;;;:22;;;;:34;;;;1920:26;;;:18;;;;:26;;;;1956:16;;;:22;;;1988:21;;;:32;;;2030;;;;;;;;;;;;;;;;;;;;;2054:8;;;;;;2030:32;;2054:8;;;;2030:32;;;;;;;;;-1:-1:-1;;;;2030:21:17;;;:32;2073:22;2030:12;2073:8;:22::i;:::-;2119:12;:23;;;2106:36;;2166:12;:24;;;2152:38;;1529:668;;;;;;;;;;:::o;857:77:29:-;-1:-1:-1;;857:77:29;:::o;2888:227:17:-;3036:12;3067:41;3083:9;3094:7;3103:4;;3067:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3067:15:17;;-1:-1:-1;;;3067:41:17:i;:::-;3060:48;2888:227;-1:-1:-1;;;;;2888:227:17:o;3398:697::-;-1:-1:-1;;;;;3598:22:17;;1751:44:32;3598:22:17;3594:384;;3684:15;;3636:77;;-1:-1:-1;;;;;3636:39:17;;;;3684:15;3702:10;3636:39;:77::i;:::-;3884:83;-1:-1:-1;;;;;3884:44:17;;3929:10;3949:4;3956:10;3884:44;:83::i;:::-;4000:41;4006:9;4017:7;4026:8;4036:4;;4000:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4000:5:17;;-1:-1:-1;;;4000:41:17:i;:::-;4056:32;;;;;;;;3987:54;;-1:-1:-1;4056:32:17;;;;;;;;;;3398:697;;;;;;:::o;6962:537:32:-;988:10:6;;980:50;;;;;-1:-1:-1;;;980:50:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;7183:19:32::1;:17;:19::i;:::-;7212:28;;:::i;:::-;7271:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;7250:33:32;;::::1;::::0;;7293:30;;::::1;:18;::::0;;::::1;:30:::0;;;;7333:22;;::::1;:14;::::0;;::::1;:22:::0;;;;7365:12:::1;::::0;::::1;:18:::0;;;7393:17:::1;::::0;::::1;:28:::0;;;7431;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;;;7451:8;;;;;;7431:28;::::1;7451:8:::0;;;;7431:28;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;;;;7431:17:32::1;::::0;::::1;:28:::0;7470:22:::1;7431:8:::0;7470:12:::1;:22::i;2691:497:33:-:0;2853:22;2904:6;;2935:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2935:21:33;;2927:29;;2971:9;2966:216;2990:6;2986:1;:10;2966:216;;;3017:19;3039:63;3053:6;;3060:1;3053:9;;;;;;;;;;;;;-1:-1:-1;;;;;3053:9:33;3064:14;;;;;;;;;-1:-1:-1;;;;;3064:14:33;3080:15;3097:4;;3039:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3039:13:33;;-1:-1:-1;;;3039:63:33:i;:::-;3017:85;-1:-1:-1;3127:44:33;3017:85;3127:27;:15;3147:6;3127:19;:27::i;:::-;:31;;:44::i;:::-;3116:5;3122:1;3116:8;;;;;;;;;;;;;;;;;:55;-1:-1:-1;2998:3:33;;2966:216;;;;2691:497;;;;;;;;:::o;3396:118:32:-;3438:31;3456:12;:10;:12::i;3438:31::-;3479:8;:6;:8::i;3632:353:29:-;3745:22;3796:6;;3827:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3827:21:29;;3819:29;;3863:9;3858:121;3882:6;3878:1;:10;3858:121;;;3920:48;3936:6;;3943:1;3936:9;;;;;;;;;;;;;-1:-1:-1;;;;;3936:9:29;3947:14;;;;;;;;;-1:-1:-1;;;;;3947:14:29;3963:4;;3920:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3920:15:29;;-1:-1:-1;;;3920:48:29:i;:::-;3909:5;3915:1;3909:8;;;;;;;;;;;;;;;;;:59;3890:3;;3858:121;;;;3632:353;;;;;;;:::o;4101:362:17:-;4177:16;;-1:-1:-1;;;;;4227:19:17;;1751:44:32;4227:19:17;4223:81;;;4271:15;;;;;;;;;-1:-1:-1;;;;;4271:15:17;-1:-1:-1;;;;;4271:20:17;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4271:22:17;;-1:-1:-1;4223:81:17;-1:-1:-1;;;;;4318:19:17;;1751:44:32;4318:19:17;4314:81;;;4362:15;;;;;;;;;-1:-1:-1;;;;;4362:15:17;-1:-1:-1;;;;;4362:20:17;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4362:22:17;;-1:-1:-1;4314:81:17;4428:28;4441:6;4449;4428:12;:28::i;:::-;4405:51;;;;-1:-1:-1;4101:362:17;-1:-1:-1;;;4101:362:17:o;1276:85:6:-;1344:10;;1276:85;:::o;1448:197:1:-;1527:31;1545:12;:10;:12::i;1527:31::-;1568:6;:17;;-1:-1:-1;;1568:17:1;-1:-1:-1;;;;;1568:17:1;;;;;;;;;1600:38;;1568:17;;1621:6;;;1600:38;;1568:6;1600:38;1448:197;:::o;572:96:5:-;634:6;;;;633:7;625:36;;;;;-1:-1:-1;;;625:36:5;;;;;;;;;;;;;;;;;;;;;;;;;;;882:291:30;970:18;990:28;1030:21;1042:8;1030:11;:21::i;:::-;1061:18;1070:8;1061;:18::i;:::-;-1:-1:-1;;1103:19:30;;;;1146:20;;;;;1103:19;;882:291::o;5946:461:28:-;6124:18;-1:-1:-1;;;;;6158:22:28;;1751:44:32;6158:22:28;6154:87;;;6208:15;;;;;;;;;-1:-1:-1;;;;;6208:15:28;-1:-1:-1;;;;;6208:20:28;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6208:22:28;;-1:-1:-1;6154:87:28;-1:-1:-1;;;;;6255:20:28;;1751:44:32;6255:20:28;6251:83;;;6301:15;;;;;;;;;-1:-1:-1;;;;;6301:15:28;-1:-1:-1;;;;;6301:20:28;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6301:22:28;;-1:-1:-1;6251:83:28;6357:43;6371:9;6382:7;6391:8;6357:13;:43::i;4367:107:2:-;4449:18;;4367:107::o;4827:264::-;4930:18;;4894:7;;;;4930:26;-1:-1:-1;4922:67:2;;;;;-1:-1:-1;;;4922:67:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;5000:22;5025:3;:11;;5037:5;5025:18;;;;;;;;;;;;;;;;;;5000:43;;5061:5;:9;;;5072:5;:11;;;5053:31;;;;;4827:264;;;;;;:::o;12511:877:32:-;12701:16;12693:46;;;;;-1:-1:-1;;;12693:46:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;12774:13;12757:14;:5;:12;:14::i;:::-;:30;12749:62;;;;;-1:-1:-1;;;12749:62:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;12829:14;:5;12839:3;12829:9;:14::i;:::-;12821:52;;;;;-1:-1:-1;;;12821:52:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12887:35:32;;;12883:140;;12946:34;:21;-1:-1:-1;;;;;12946:32:32;;:34::i;:::-;12938:74;;;;;-1:-1:-1;;;12938:74:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;13032:23;13058:14;;;:9;:14;;;;;;;;;13082:33;;;13125:23;;;:37;;;13172:30;;;:55;;;13237:29;;;:53;;-1:-1:-1;;;;;13237:53:32;;-1:-1:-1;;13237:53:32;;;;;;;;13305:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12511:877;;;;;:::o;1770:136:1:-;1860:4;-1:-1:-1;;;;;1860:10:1;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1860:12:1;-1:-1:-1;;;;;1849:23:1;;;;;;1841:58;;;;;-1:-1:-1;;;1841:58:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;1770:136;:::o;1166:131:5:-;1213:16;:14;:16::i;:::-;1239:6;:14;;-1:-1:-1;;1239:14:5;;;1268:22;1277:12;:10;:12::i;:::-;1268:22;;;-1:-1:-1;;;;;1268:22:5;;;;;;;;;;;;;;1166:131::o;2848:202:28:-;2940:27;2958:8;2940:17;:27::i;:::-;3013:2;2985:8;:17;;;:24;:30;;2977:66;;;;;-1:-1:-1;;;2977:66:28;;;;;;;;;;;;;;;;;;;;;;;;;;;2556:1520:2;2620:4;2753:16;;;:11;;;:16;;;;;;2784:13;;2780:1290;;3221:18;;-1:-1:-1;;3175:12:2;;;;3221:22;;;;3151:21;;3221:3;;:22;;3512;;;;;;;;;;;;;;;;3483:51;;3655:9;3626:3;:11;;3638:13;3626:26;;;;;;;;;;;;;;;;:38;;:26;;;;;:38;;;;;;;;;;;;;;;3742:13;;3730:26;;:11;;;:26;;;;;3759:17;;;3730:46;;3882:17;;3730:3;;3882:17;;;;;;;;;;;;;;-1:-1:-1;;3882:17:2;;;;;;;;;;;;;;;;;;;;;3974:16;;;:11;;;:16;;;;;;3967:23;;;;3882:17;-1:-1:-1;4005:11:2;;-1:-1:-1;;;;4005:11:2;2780:1290;4054:5;4047:12;;;2556:1520;;;;;:::o;4676:361:29:-;4850:50;4872:11;4885:6;4893;4850:21;:50::i;:::-;4918:20;:11;:18;:20::i;:::-;:25;;:83;;-1:-1:-1;4984:14:29;;4947:54;;:11;;-1:-1:-1;;;;;4984:14:29;4947:20;:54::i;:::-;4910:120;;;;;-1:-1:-1;;;4910:120:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;4676:361;;;:::o;905:129:5:-;950:19;:17;:19::i;:::-;979:6;:13;;-1:-1:-1;;979:13:5;988:4;979:13;;;1007:20;1014:12;:10;:12::i;3511:590:28:-;3600:20;;;;:27;:32;;;;3599:67;;-1:-1:-1;3638:14:28;;;;-1:-1:-1;;;;;3638:27:28;1751:44:32;3638:27:28;;3599:67;3595:466;;;3702:17;;;;3829:2;3819:13;;3813:20;3865:18;3861:90;;-1:-1:-1;;;3861:90:28;4018:15;;3979:14;;;;3965:85;;-1:-1:-1;;;;;3965:44:28;;;;4018:15;4036:13;3965:44;:85::i;:::-;3595:466;;;4070:24;4085:8;4070:14;:24::i;2571:463:29:-;2696:12;;;;2660:23;2686;;;:9;:23;;;;;2727:19;;2719:58;;;;;-1:-1:-1;;;2719:58:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;2816:14;;;2787:26;2860:28;2871:8;2816:14;2860:10;:28::i;:::-;2840:48;;2904:43;2919:8;2929:6;2937:9;2904:14;:43::i;:::-;2899:129;;2999:17;;;;2985:32;;:9;;:13;:32::i;:::-;2963:19;;;:54;2571:463;;;;:::o;4774:505:28:-;4928:12;-1:-1:-1;;;;;4956:22:28;;1751:44:32;4956:22:28;4952:87;;;5006:15;;;;;;;;;-1:-1:-1;;;;;5006:15:28;-1:-1:-1;;;;;5006:20:28;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5006:22:28;;-1:-1:-1;4952:87:28;-1:-1:-1;;;;;5053:20:28;;1751:44:32;5053:20:28;5049:83;;;5099:15;;;;;;;;;-1:-1:-1;;;;;5099:15:28;-1:-1:-1;;;;;5099:20:28;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5099:22:28;;-1:-1:-1;5049:83:28;5143:19;5164:17;5185:32;5198:9;5209:7;5185:12;:32::i;:::-;5142:75;;-1:-1:-1;5142:75:28;-1:-1:-1;5234:38:28;5142:75;5234:21;5142:75;5248:6;5234:13;:21::i;910:231:9:-;1071:62;;;-1:-1:-1;;;;;1071:62:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1094:22;1071:62;;;1036:98;;1064:5;;1036:27;:98::i;645:259::-;828:68;;;-1:-1:-1;;;;;828:68:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;851:27;828:68;;;793:104;;821:5;;793:27;:104::i;6979:977:28:-;7284:2;7274:13;;7268:20;7329:2;7319:13;;7313:20;7140:18;;7268:20;7357:18;7353:206;;-1:-1:-1;;;;;7395:22:28;;1751:44:32;7395:22:28;7391:158;;;7453:9;7437:25;;7391:158;;;-1:-1:-1;;7501:33:28;;7391:158;7573:13;7569:72;;-1:-1:-1;;;7569:72:28;-1:-1:-1;;;;;7655:22:28;;1751:44:32;7655:22:28;7651:87;;;7705:15;;;;;;;;;-1:-1:-1;;;;;7705:15:28;-1:-1:-1;;;;;7705:20:28;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7705:22:28;;-1:-1:-1;7651:87:28;-1:-1:-1;;;;;7752:20:28;;1751:44:32;7752:20:28;7748:83;;;7798:15;;;;;;;;;-1:-1:-1;;;;;7798:15:28;-1:-1:-1;;;;;7798:20:28;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7798:22:28;;-1:-1:-1;7748:83:28;7854:95;7880:9;7891:7;7900:8;7910:13;7933:4;7940:8;7854:25;:95::i;:::-;7841:108;6979:977;-1:-1:-1;;;;;;;6979:977:28:o;1275:225:30:-;1354:21;1366:8;1354:11;:21::i;:::-;1385:18;1394:8;1385;:18::i;:::-;1413;1422:8;1413;:18::i;:::-;1441:19;1451:8;1441:9;:19::i;:::-;1470:23;1484:8;1470:13;:23::i;3538:215:11:-;3596:7;3619:6;3615:20;;-1:-1:-1;3634:1:11;3627:8;;3615:20;3657:5;;;3661:1;3657;:5;:1;3680:5;;;;;:10;3672:56;;;;-1:-1:-1;;;3672:56:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3745:1;3538:215;-1:-1:-1;;;3538:215:11:o;4217:150::-;4275:7;4306:1;4302;:5;4294:44;;;;;-1:-1:-1;;;4294:44:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;4359:1;4355;:5;;;;;;;4217:150;-1:-1:-1;;;4217:150:11:o;1496:131:6:-;789:10;;:15;781:46;;;;;-1:-1:-1;;;781:46:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;1569:15:::1;1556:10;:28:::0;1599:21:::1;1607:12;:10;:12::i;1571:378:22:-:0;1648:16;1666;1695:14;1715:27;1727:6;1735;1715:11;:27::i;:::-;1694:48;;;1753:16;1771;1808:24;1817:6;1825;1808:8;:24::i;:::-;-1:-1:-1;;;;;1793:52:22;;:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1793:54:22;;;;;;;1752:95;;;;;-1:-1:-1;1752:95:22;;-1:-1:-1;;;;;;1880:16:22;;;;;;;:62;;1923:8;1933;1880:62;;;1900:8;1910;1880:62;1857:85;;;;-1:-1:-1;1571:378:22;-1:-1:-1;;;;;;1571:378:22:o;2136:359::-;2311:16;;;2325:1;2311:16;;;;;;;;2261:14;;;;2311:16;2325:1;2311:16;;;;;;;;;;-1:-1:-1;2311:16:22;2287:40;;2347:6;2337:4;2342:1;2337:7;;;;;;;;;;;;;:16;-1:-1:-1;;;;;2337:16:22;;;-1:-1:-1;;;;;2337:16:22;;;;;2373:6;2363:4;2368:1;2363:7;;;;;;;;-1:-1:-1;;;;;2363:16:22;;;:7;;;;;;;;;;:16;;;;2416:15;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;2389:24;;2416:15;;;;;:28;;2445:7;;2454:4;;2416:43;;;;;;;;;;;;;;;2389:24;2416:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2416:43:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2416:43:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2389:70;;2478:7;2486:1;2478:10;;;;;;;;;;;;;;2469:19;;2136:359;;;;;;;:::o;1481:400:3:-;1544:4;1565:20;1574:3;1579:5;1565:8;:20::i;:::-;1560:315;;-1:-1:-1;1601:22:3;;;;;;;;:10;:22;;;;;;;;;;;;;1779:17;;1758:18;;;:11;;;:18;;;;;;:38;;;;1810:11;;1560:315;-1:-1:-1;1859:5:3;1852:12;;913:377:10;1229:20;1275:8;;;913:377::o;674:96:5:-;732:6;;;;724:39;;;;;-1:-1:-1;;;724:39:5;;;;;;;;;;;;;;;;;;;;;;;;;;;15465:852:32;15565:18;;;;-1:-1:-1;;;;;15565:32:32;15557:73;;;;;-1:-1:-1;;;15557:73:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;15648:14;;;;-1:-1:-1;;;;;15648:28:32;15640:65;;;;;-1:-1:-1;;;15640:65:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;15723:17;;;;15715:63;;;;;-1:-1:-1;;;15715:63:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;15824:12;;;;15788:23;15814;;;:9;:23;;;;;15855:19;;15847:59;;;;;-1:-1:-1;;;15847:59:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;15958:8;:17;;;15924:7;:30;;;:51;;15916:88;;;;;-1:-1:-1;;;15916:88:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;16018:19;;-1:-1:-1;;16018:39:32;16014:152;;16108:8;:17;;;16081:7;:23;;;:44;;16073:82;;;;;-1:-1:-1;;;16073:82:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;16210:14;;;;-1:-1:-1;;;;;16202:23:32;16244:33;:14;;;16202:23;16244;:33::i;:::-;16236:74;;;;;-1:-1:-1;;;16236:74:32;;;;;;;;;;;;;;;;;;;;;;;;;;;13862:663;14032:9;14027:403;14051:6;:13;14047:1;:17;14027:403;;;14085:13;14101:6;14108:1;14101:9;;;;;;;;;;;;;;14085:25;;14149:1;-1:-1:-1;;;;;14132:19:32;:5;-1:-1:-1;;;;;14132:19:32;;;14124:56;;;;;-1:-1:-1;;;14124:56:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;14194:13;14210:6;14217:1;14210:9;;;;;;;;;;;;;;14194:25;;14237:5;14246:1;14237:10;14233:187;;;14267:43;:11;-1:-1:-1;;;;;14294:14:32;;14267:18;:43::i;:::-;;14233:187;;;14349:56;:11;-1:-1:-1;;;;;14373:14:32;;14398:5;14349:15;:56::i;:::-;;14233:187;-1:-1:-1;;14066:3:32;;14027:403;;;;14471:21;14447:20;:11;:18;:20::i;:::-;:45;;14439:79;;;;;-1:-1:-1;;;14439:79:32;;;;;;;;;;;;;;;;;;;;;;;;;;;4155:122:2;4226:4;4249:16;;;:11;;;;;:16;;;;;;:21;;;4155:122::o;3750:1456:33:-;3839:20;;;;:27;:32;;3838:97;;;1155:1;-1:-1:-1;;1128:28:33;3885:8;:20;;;3906:1;3885:23;;;;;;;;;;;;;;3877:32;;:57;;3838:97;3834:172;;;3951:24;3966:8;3951:14;:24::i;:::-;3989:7;;3834:172;4020:14;;;;-1:-1:-1;;;;;4020:27:33;1751:44:32;4020:27:33;4016:296;;;4084:8;:19;;;4071:9;:32;;4063:67;;;;;-1:-1:-1;;;4063:67:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;4016:296;;;4202:99;4252:12;:10;:12::i;:::-;4281:19;;;;4216:14;;;;-1:-1:-1;;;;;4202:49:33;;:99;4274:4;;4202:49;:99::i;:::-;4322:16;4349:8;:20;;;4370:1;4349:23;;;;;;;;;;;;;;4341:32;;4322:51;;4383:27;4413:45;4451:6;4413:33;4426:8;:19;;;4413:8;:12;;:33;;;;:::i;:45::-;4496:14;;;;4512;;4549:17;;;;4383:75;;-1:-1:-1;4469:18:33;;4490:77;;4496:14;-1:-1:-1;;;;;4512:14:33;;4383:75;;4490:5;:77::i;:::-;4582:14;;;;4469:98;;-1:-1:-1;;;;;;4582:27:33;1751:44:32;4582:27:33;4578:419;;;4625:14;4642:25;:9;4656:10;4642:13;:25::i;:::-;4625:42;-1:-1:-1;4686:11:33;;4682:85;;4717:18;;:35;;-1:-1:-1;;;;;4717:27:33;;;;:35;;;;;4745:6;;4717:18;:35;:18;:35;4745:6;4717:27;:35;;;;;;;;;;;;;;;;;;;;;4682:85;4578:419;;;;4814:19;;;;4797:14;;4814:35;;4838:10;4814:23;:35::i;:::-;4797:52;-1:-1:-1;4868:11:33;;4864:123;;4945:18;;4913:14;;;;4899:73;;-1:-1:-1;;;;;4899:45:33;;;;4965:6;4899:45;:73::i;:::-;4578:419;;5011:14;;-1:-1:-1;;;;;5011:14:33;1751:44:32;5011:27:33;5007:193;;;5054:12;;:33;;-1:-1:-1;;;;;5054:12:33;;;;:33;;;;;5076:10;;5054:12;:33;:12;:33;5076:10;5054:12;:33;;;;;;;;;;;;;;;;;;;;;5007:193;;;5164:12;;5132:14;;5118:71;;-1:-1:-1;;;;;5132:14:33;;;;5164:12;5178:10;5118:45;:71::i;3773:278:26:-;3958:14;;;;3882:17;;3931:44;;:6;;-1:-1:-1;;;;;3950:23:26;3931:10;:44::i;:::-;3923:53;-1:-1:-1;3994:14:26;3986:58;;;;;-1:-1:-1;;;3986:58:26;;;;;;;;;;;;;;;;;;;;;;;;;;;7581:919:33;7757:4;-1:-1:-1;;7777:34:33;;7773:126;;7834:54;7855:8;7865:11;7878:9;7834:20;:54::i;:::-;7827:61;;;;7773:126;7978:14;;7909:26;;7946:49;;:11;;-1:-1:-1;;;;;7978:14:33;7946:15;:49::i;:::-;8059:17;;;;7938:58;;-1:-1:-1;7938:58:33;;8036:41;;7938:58;;8036:22;:41::i;:::-;8123:14;;;;8139;;8176:17;;;;8006:71;;-1:-1:-1;8088:18:33;;8109:85;;8123:14;-1:-1:-1;;;;;8139:14:33;;8006:71;;8109:13;:85::i;:::-;8088:106;-1:-1:-1;8205:16:33;8224:47;8088:106;8224:31;:19;8248:6;8224:23;:31::i;:47::-;8305:16;;;8319:1;8305:16;;;;;;;;8205:66;;-1:-1:-1;8305:16:33;8319:1;8305:16;;;;;;;;-1:-1:-1;;;8282:20:33;;;:39;;;8331:23;;8365:9;;8282:39;8357:18;;8331:23;;;;;;;;;:44;;;;;8419:8;8411:17;;8385:8;:20;;;8406:1;8385:23;;;;;;;;;;;;;;;;;:43;-1:-1:-1;8439:19:33;;;:32;-1:-1:-1;8489:4:33;;-1:-1:-1;;7581:919:33;;;;;:::o;1147:870:9:-;1272:5;1296:19;-1:-1:-1;;;;;1296:17:9;;;:19::i;:::-;1288:58;;;;;-1:-1:-1;;;1288:58:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;1417:12;1431:17;1452:6;-1:-1:-1;;;;;1452:11:9;1464:8;1452:21;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1452:21:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1416:57;;;;1487:7;1483:528;;;1514:11;;:16;1510:122;;1569:4;1558:24;;;;;;;;;;;;;;;-1:-1:-1;1558:24:9;1550:67;;;;;-1:-1:-1;;;1550:67:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;1483:528;;;1720:11;;1716:95;;1756:40;;;-1:-1:-1;;;1756:40:9;;;;;;;;;;;;;;;;;;;;;;;;;;;1716:95;1938:4;1932:11;1982:4;1975;1971:2;1967:13;1960:27;1902:99;1147:870;;;;;:::o;2501:987:22:-;2707:14;2751:6;-1:-1:-1;;;;;2741:16:22;:6;-1:-1:-1;;;;;2741:16:22;;;2733:54;;;;;-1:-1:-1;;;2733:54:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;2822:16;;;2836:1;2822:16;;;;;;;;2798:21;;2822:16;;;;;;;;;;-1:-1:-1;2822:16:22;2798:40;;2858:6;2848:4;2853:1;2848:7;;;;;;;;;;;;;:16;-1:-1:-1;;;;;2848:16:22;;;-1:-1:-1;;;;;2848:16:22;;;;;2884:6;2874:4;2879:1;2874:7;;;;;;;;-1:-1:-1;;;;;2874:16:22;;;:7;;;;;;;;;;:16;;;;2950:15;;:22;;;;;;;;2901:24;;2950:15;;;;;:20;;:22;;;;;;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2950:22:22;-1:-1:-1;;;;;2940:32:22;;;;;;2936:516;;;3010:9;2996:10;:23;2988:66;;;;;-1:-1:-1;;;2988:66:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;3078:15;;:84;;;;;;;;;;;-1:-1:-1;;;;;3078:84:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;:15;;;;;:37;;3123:9;;3134:7;;3143:4;;3149:2;;3153:8;;3078:84;;;;;;;;;;;;;;;:15;:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3078:84:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3078:84:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3068:94;;2936:516;;;3193:15;;;;;;;;;-1:-1:-1;;;;;3193:15:22;-1:-1:-1;;;;;3193:20:22;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3193:22:22;-1:-1:-1;;;;;3183:32:22;;;;;;3179:273;;;3241:15;;:78;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3241:78:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;:15;;;;;:37;;3279:7;;3288:10;;3300:4;;3306:2;;3310:8;;3241:78;;;;;;;;;;;;;;;:15;:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3241:78:22;;;;;;;;;;;;;;3179:273;3360:15;;:81;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3360:81:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;:15;;;;;:40;;3401:7;;3410:10;;3422:4;;3428:2;;3432:8;;3360:81;;;;;;;;;;;;;;;:15;:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3360:81:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3360:81:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3350:91;;3179:273;3471:7;3479:1;3471:10;;;;;;;;;;;;;;3462:19;;2501:987;;;;;;;;;;:::o;16954:308:32:-;17075:12;;;;17039:23;17065;;;:9;:23;;;;;17102:19;;-1:-1:-1;;17102:39:32;17098:158;;17227:17;;;;17199:23;;;;:46;;:27;:46::i;:::-;17167:12;;;;17157:23;;;;:9;:23;;;;;:39;;:88;17098:158;16954:308;;:::o;17993:1293::-;18201:8;:12;;;18173:8;:14;;;-1:-1:-1;;;;;18087:328:32;18109:8;:18;;;-1:-1:-1;;;;;18087:328:32;;18141:8;:18;;;18227:8;:17;;;18258:8;:17;;;18289:8;:19;;;18339:8;:20;;;18361:8;:20;;;18383:8;:21;;;18322:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18087:328;;;;-1:-1:-1;;;;;18087:328:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18087:328:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18468:12;;;;18426:29;18458:23;;;:9;:23;;;;;:45;;;-1:-1:-1;;;;;18458:45:32;18517:35;;18513:767;;19095:82;;;18593:584;;;18624:21;-1:-1:-1;;;;;18593:84:32;;18699:8;:18;;;18739:8;:18;;;18779:8;:14;;;18815:8;:12;;;18849:8;:17;;;18888:8;:17;;;18927:8;:19;;;18968:8;:20;;;19010:8;:20;;;19052:8;:21;;;18593:498;;;;;;;;;;;;;-1:-1:-1;;;;;18593:498:32;;;;;;-1:-1:-1;;;;;18593:498:32;;;;;;-1:-1:-1;;;;;18593:498:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18593:498:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18593:498:32;:584;;;18568:701;;;;;-1:-1:-1;;;18568:701:32;;;;;;;;;;;;;;;;;;;;;;;;;;;644:327:22;720:14;736;780:6;-1:-1:-1;;;;;770:16:22;:6;-1:-1:-1;;;;;770:16:22;;;762:54;;;;;-1:-1:-1;;;762:54:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;854:6;-1:-1:-1;;;;;845:15:22;:6;-1:-1:-1;;;;;845:15:22;;:53;;883:6;891;845:53;;;864:6;872;845:53;826:72;;-1:-1:-1;826:72:22;-1:-1:-1;;;;;;916:20:22;;908:56;;;;;-1:-1:-1;;;908:56:22;;;;;;;;;;;;;;;;;;;;;;;;;;;977:588;1050:12;1075:14;1091;1109:27;1121:6;1129;1109:11;:27::i;:::-;1074:62;;;;1305:15;;;;;;;;;-1:-1:-1;;;;;1305:15:22;-1:-1:-1;;;;;1305:23:22;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1305:25:22;1366:32;;;;;;;;;;1305:25;1366:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1356:43;;;;;;1230:286;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1199:335;;;;;;977:588;-1:-1:-1;;;977:588:22:o;1678:710:2:-;1784:4;1917:16;;;:11;;;:16;;;;;;1948:13;1944:438;;-1:-1:-1;;2043:34:2;;;;;;;;;;;;;;;;;;2026:52;;;;;;;;:11;:52;;;;;;;;;;;;;;;;;;;;;;;;2232:18;;2213:16;;;:11;;;:16;;;;;;;:37;2264:11;;1944:438;2340:5;2306:3;:11;;2329:1;2318:8;:12;2306:25;;;;;;;;;;;;;;;;;;:31;;:39;;;;2366:5;2359:12;;;;;2637:566:26;2725:14;;;;-1:-1:-1;;;;;2725:27:26;1751:44:32;2725:27:26;2721:476;;;2789:8;:19;;;2776:9;:32;;2768:67;;;;;-1:-1:-1;;;2768:67:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;2850:12;;2872:19;;;;2850:42;;-1:-1:-1;;;;;2850:12:26;;;;:42;;;;;2872:19;2850:12;:42;:12;:42;2872:19;2850:12;:42;;;;;;;;;;;;;;;;;;;;;2907:14;2924:34;2938:8;:19;;;2924:9;:13;;:34;;;;:::i;:::-;2907:51;-1:-1:-1;2977:11:26;;2973:85;;3008:18;;:35;;-1:-1:-1;;;;;3008:27:26;;;;:35;;;;;3036:6;;3008:18;:35;:18;:35;3036:6;3008:27;:35;;;;;;;;;;;;;;;;;;;;;2973:85;2721:476;;;;3088:98;3138:12;:10;:12::i;:::-;3152;;3166:19;;;;3102:14;;;;-1:-1:-1;;;;;3088:49:26;;;;:98;3152:12;;3088:49;:98::i;3136:155:11:-;3194:7;3226:1;3221;:6;;3213:49;;;;;-1:-1:-1;;;3213:49:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3279:5:11;;;3136:155::o;416:223:9:-;573:58;;;-1:-1:-1;;;;;573:58:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;596:23;573:58;;;538:94;;566:5;;538:27;:94::i;5243:298:2:-;5309:7;5347:16;;;:11;;;:16;;;;;;5381:13;5373:50;;;;;-1:-1:-1;;;5373:50:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;5476:3;:11;;5499:1;5488:8;:12;5476:25;;;;;;;;;;;;;;;;;;:31;;;5469:38;;;5243:298;;;;:::o;5729:802:29:-;5896:4;-1:-1:-1;;5916:9:29;:37;5912:80;;-1:-1:-1;5976:5:29;5969:12;;5912:80;6071:14;;6002:26;;6039:49;;:11;;-1:-1:-1;;;;;6071:14:29;6039:15;:49::i;:::-;6141:14;;;;6157;;6173:17;;;;6031:58;;-1:-1:-1;6031:58:29;;6125:66;;6141:14;-1:-1:-1;;;;;6157:14:29;;6125:15;:66::i;:::-;6100:91;;6202:18;6223:73;6278:8;:17;;;6223:50;6258:14;6223:30;6246:6;6223:18;:22;;:30;;;;:::i;:50::-;:54;;:73::i;:::-;6330:16;;;6344:1;6330:16;;;;;;;;6202:94;;-1:-1:-1;6330:16:29;6344:1;6330:16;;;;;;;;-1:-1:-1;;;6307:20:29;;;:39;;;6356:23;;6390:9;;6307:39;6382:18;;6356:23;;;;;;;;;:44;;;;;6444:14;6436:23;;6410:8;:20;;;6431:1;6410:23;;;;;;;;;;;;;;;;;:49;6470:19;;;:32;-1:-1:-1;6520:4:29;;-1:-1:-1;;5729:802:29;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o"},"methodIdentifiers":{"PRICE_CONVERT_VIA_ORACLE()":"9865bcc8","PRICE_SWAP_VIA_ORACLE()":"579f2c77","SUPPLY_UNLIMITED()":"9e049545","TOKEN_ETH()":"5c4fafc7","addEth()":"c2ac3aff","callUnderscoreConversionRate(address,address,bytes)":"a1e16908","callUnderscoreEstimateSwap(address,address,uint256,bytes)":"151229f7","callUnderscorePayment(address,address,bytes32,uint256,bytes,uint256,bytes32[])":"8ce507eb","callUnderscorePricing(address,address,bytes32,uint256,bytes)":"97309b44","callUnderscoreSwap(address,uint256,address,uint256,bytes)":"a541f89c","callUnderscoreValidation(address,address,bytes32,uint256,bytes)":"56c1476e","conversionRates(address[],bytes)":"c7b778db","createSku(bytes32,uint256,uint256,address)":"2c87927b","estimatePurchase(address,address,bytes32,uint256,bytes)":"1323b066","getReserves(address,address)":"d52bb6f4","getSkuInfo(bytes32)":"2a8a45bc","getSkus()":"61bd3851","owner()":"8da5cb5b","pause()":"8456cb59","paused()":"5c975abb","payoutWallet()":"8488bb4e","purchaseFor(address,address,bytes32,uint256,bytes)":"a963b257","referenceToken()":"1265b651","setPayoutWallet(address)":"6b8f9c43","start()":"be9a6555","startedAt()":"f21f537d","swapRates(address[],uint256,bytes)":"bda4c5ab","transferOwnership(address)":"f2fde38b","uniswapV2Router()":"1694505e","unpause()":"3f4ba83a","updateSkuPricing(bytes32,address[],uint256[])":"5e6e9f70"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"payoutWallet_\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"skusCapacity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensPerSkuCapacity\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"referenceToken\",\"type\":\"address\"},{\"internalType\":\"contract IUniswapV2Router\",\"name\":\"uniswapV2Router\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32[]\",\"name\":\"names\",\"type\":\"bytes32[]\"},{\"indexed\":false,\"internalType\":\"bytes32[]\",\"name\":\"values\",\"type\":\"bytes32[]\"}],\"name\":\"MagicValues\",\"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\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"payoutWallet_\",\"type\":\"address\"}],\"name\":\"PayoutWalletSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"purchaser\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalPrice\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extData\",\"type\":\"bytes\"}],\"name\":\"Purchase\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"maxQuantityPerPurchase\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"notificationsReceiver\",\"type\":\"address\"}],\"name\":\"SkuCreation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"prices\",\"type\":\"uint256[]\"}],\"name\":\"SkuPricingUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Started\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fromAmount\",\"type\":\"uint256\"}],\"name\":\"UnderscoreSwapResult\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contract IUniswapV2Router\",\"name\":\"uniswapV2Router\",\"type\":\"address\"}],\"name\":\"UniswapV2RouterSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"PRICE_CONVERT_VIA_ORACLE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PRICE_SWAP_VIA_ORACLE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SUPPLY_UNLIMITED\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TOKEN_ETH\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"addEth\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"fromToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"toToken\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"callUnderscoreConversionRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"fromToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"toToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"toAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"callUnderscoreEstimateSwap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"fromAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"totalPrice\",\"type\":\"uint256\"},{\"internalType\":\"bytes32[]\",\"name\":\"pricingData\",\"type\":\"bytes32[]\"}],\"name\":\"callUnderscorePayment\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"callUnderscorePricing\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalPrice\",\"type\":\"uint256\"},{\"internalType\":\"bytes32[]\",\"name\":\"pricingData\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"fromToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"fromAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"toToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"toAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"callUnderscoreSwap\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"callUnderscoreValidation\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"conversionRates\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"rates\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxQuantityPerPurchase\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"notificationsReceiver\",\"type\":\"address\"}],\"name\":\"createSku\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"estimatePurchase\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalPrice\",\"type\":\"uint256\"},{\"internalType\":\"bytes32[]\",\"name\":\"pricingData\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenA\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenB\",\"type\":\"address\"}],\"name\":\"getReserves\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"reserveA\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reserveB\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"}],\"name\":\"getSkuInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"remainingSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxQuantityPerPurchase\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"notificationsReceiver\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"prices\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSkus\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"skus\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"payoutWallet\",\"outputs\":[{\"internalType\":\"address payable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"purchaseFor\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"referenceToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"payoutWallet_\",\"type\":\"address\"}],\"name\":\"setPayoutWallet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"start\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"referenceAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"swapRates\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"rates\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"uniswapV2Router\",\"outputs\":[{\"internalType\":\"contract IUniswapV2Router\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"prices\",\"type\":\"uint256[]\"}],\"name\":\"updateSkuPricing\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"conversionRates(address[],bytes)\":{\"details\":\"Reverts if the oracle does not provide a conversion rate for one of the token pairs.\",\"params\":{\"data\":\"Additional data with no specified format for deriving the conversion rates.\",\"tokens\":\"The list of tokens to retrieve the conversion rates for.\"},\"returns\":{\"rates\":\"The conversion rates for the `tokens`/`referenceToken` pairs, retrieved via the oracle.\"}},\"estimatePurchase(address,address,bytes32,uint256,bytes)\":{\"details\":\"This function MUST compute the same price as `purchaseFor` would in identical conditions (same arguments, same point in time).If an implementer contract uses the `pricingData` field, it SHOULD document how to interpret the values.Reverts if the sale has not started.Reverts if the sale is paused.Reverts if `recipient` is the zero address.Reverts if `token` is the zero address.Reverts if `quantity` is zero.Reverts if `quantity` is greater than the maximum purchase quantity.Reverts if `quantity` is greater than the remaining supply.Reverts if `sku` does not exist.Reverts if `sku` exists but does not have a price set for `token`.\",\"params\":{\"quantity\":\"The quantity used to calculate the total price amount.\",\"recipient\":\"The recipient of the purchase used to calculate the total price amount.\",\"sku\":\"The identifier of the SKU used to calculate the total price amount.\",\"token\":\"The payment token used to calculate the total price amount.\",\"userData\":\"Optional extra user input data.\"},\"returns\":{\"pricingData\":\"Implementation-specific extra pricing data, such as details about discounts applied.  If not empty, the implementer MUST document how to interepret the values.\",\"totalPrice\":\"The computed total price.\"}},\"getSkuInfo(bytes32)\":{\"details\":\"WARNING: it is the responsibility of the implementer to ensure that the number of payment tokens is bounded, so that this function does not run out of gas.Reverts if `sku` does not exist.\",\"params\":{\"sku\":\"The SKU identifier.\"},\"returns\":{\"maxQuantityPerPurchase\":\"The maximum allowed quantity for a single purchase.\",\"notificationsReceiver\":\"The address of a contract on which to call the `onPurchaseNotificationReceived` function.\",\"prices\":\"The list of associated prices for each of the `tokens`.\",\"remainingSupply\":\"The remaining supply for sale.\",\"tokens\":\"The list of supported payment tokens.\",\"totalSupply\":\"The initial total supply for sale.\"}},\"getSkus()\":{\"returns\":{\"skus\":\"the list of created SKU identifiers.\"}},\"pause()\":{\"details\":\"Emits the `Paused` event.Reverts if called by any other than the contract owner.Reverts if the contract has not been started yet.Reverts if the contract is already paused.\"},\"purchaseFor(address,address,bytes32,uint256,bytes)\":{\"details\":\"Reverts if the sale has not started.Reverts if the sale is paused.Reverts if `recipient` is the zero address.Reverts if `token` is the zero address.Reverts if `quantity` is zero.Reverts if `quantity` is greater than the maximum purchase quantity.Reverts if `quantity` is greater than the remaining supply.Reverts if `sku` does not exist.Reverts if `sku` exists but does not have a price set for `token`.Emits the Purchase event.\",\"params\":{\"quantity\":\"The quantity to purchase.\",\"recipient\":\"The recipient of the purchase.\",\"sku\":\"The identifier of the SKU to purchase.\",\"token\":\"The token to use as the payment currency.\",\"userData\":\"Optional extra user input data.\"}},\"start()\":{\"details\":\"Emits the `Started` event.Emits the `Unpaused` event.Reverts if called by any other than the contract owner.Reverts if the contract has already been started.Reverts if the contract is not paused.\"},\"startedAt()\":{\"returns\":{\"_0\":\"The timestamp when the contract entered the started state.\"}},\"swapRates(address[],uint256,bytes)\":{\"details\":\"Reverts if the oracle does not provide a swap rate for one of the token pairs.\",\"params\":{\"data\":\"Additional data with no specified format for deriving the swap rates.\",\"referenceAmount\":\"The amount of `referenceToken` to retrieve the swap rates for.\",\"tokens\":\"The list of tokens to retrieve the swap rates for.\"},\"returns\":{\"rates\":\"The swap rates for the `tokens`/`referenceToken` pairs, retrieved via the oracle.\"}},\"transferOwnership(address)\":{\"details\":\"Reverts if the sender is not the current contract owner.\",\"params\":{\"newOwner\":\"the address of the new owner. Use the zero address to renounce the ownership.\"}},\"unpause()\":{\"details\":\"Emits the `Unpaused` event.Reverts if called by any other than the contract owner.Reverts if the contract has not been started yet.Reverts if the contract is not paused.\"},\"updateSkuPricing(bytes32,address[],uint256[])\":{\"details\":\"Reverts if called by any other than the contract owner.Reverts if `tokens` and `prices` have different lengths.Reverts if `sku` does not exist.Reverts if one of the `tokens` is the zero address.Reverts if the update results in too many tokens for the SKU.Emits the `SkuPricingUpdate` event.\",\"params\":{\"prices\":\"The list of prices to apply for each payment token.  Zero price values are used to disable a payment token.\",\"sku\":\"The identifier of the SKU.\",\"tokens\":\"The list of payment tokens to update.  If empty, disable all the existing payment tokens.\"}}},\"version\":1},\"userdoc\":{\"events\":{\"MagicValues(bytes32[],bytes32[])\":{\"notice\":\"Event emitted to notify about the magic values necessary for interfacing with this contract.\"},\"OwnershipTransferred(address,address)\":{\"notice\":\"Event emited when ownership of a contract changes.\"},\"Purchase(address,address,address,bytes32,uint256,bytes,uint256,bytes)\":{\"notice\":\"Event emitted to notify about a purchase.\"},\"SkuCreation(bytes32,uint256,uint256,address)\":{\"notice\":\"Event emitted to notify about the creation of a SKU.\"},\"SkuPricingUpdate(bytes32,address[],uint256[])\":{\"notice\":\"Event emitted to notify about a change in the pricing of a SKU.\"}},\"kind\":\"user\",\"methods\":{\"PRICE_CONVERT_VIA_ORACLE()\":{\"notice\":\"Returns the price magic value used to represent an oracle-based token conversion pricing.\"},\"PRICE_SWAP_VIA_ORACLE()\":{\"notice\":\"Returns the price magic value used to represent an oracle-based token swap pricing.\"},\"SUPPLY_UNLIMITED()\":{\"notice\":\"Returns the magic value used to represent an infinite, never-decreasing SKU's supply.\"},\"TOKEN_ETH()\":{\"notice\":\"Returns the magic value used to represent the ETH payment token.\"},\"conversionRates(address[],bytes)\":{\"notice\":\"Retrieves the token conversion rates for the `tokens`/`referenceToken` pairs via the oracle.\"},\"estimatePurchase(address,address,bytes32,uint256,bytes)\":{\"notice\":\"Estimates the computed final total amount to pay for a purchase, including any potential discount.\"},\"getSkuInfo(bytes32)\":{\"notice\":\"Returns the information relative to a SKU.\"},\"getSkus()\":{\"notice\":\"Returns the list of created SKU identifiers.\"},\"owner()\":{\"notice\":\"Gets the address of the current contract owner.\"},\"pause()\":{\"notice\":\"Pauses the contract.\"},\"purchaseFor(address,address,bytes32,uint256,bytes)\":{\"notice\":\"Performs a purchase.\"},\"start()\":{\"notice\":\"Actvates, or 'starts', the contract.\"},\"startedAt()\":{\"notice\":\"Returns the timestamp when the contract entered the started state.\"},\"swapRates(address[],uint256,bytes)\":{\"notice\":\"Retrieves the token swap rates for the `tokens`/`referenceToken` pairs via the oracle.\"},\"transferOwnership(address)\":{\"notice\":\"See {IERC173-transferOwnership(address)}\"},\"unpause()\":{\"notice\":\"Resumes the contract.\"},\"updateSkuPricing(bytes32,address[],uint256[])\":{\"notice\":\"Sets the token prices for the specified product SKU.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/mocks/sale/UniswapSwapSaleMock.sol\":\"UniswapSwapSaleMock\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":2000},\"remappings\":[]},\"sources\":{\"@animoca/ethereum-contracts-core-1.1.2/contracts/access/IERC173.sol\":{\"keccak256\":\"0xeb8a2c766577e782ad66ce8591a8d206b0f37b657754cc7a43beeb2d9343873b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3b404032cb4e21bae47b5e9af1290e41117040b10f69e3b2f93522b97e329b59\",\"dweb:/ipfs/QmRJHYkkvWcXGuFJdbqV18yh9QUk5g4zETrrxD2HnU3iRw\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/access/Ownable.sol\":{\"keccak256\":\"0xbfd1129669bb7c154ee84b3aa1484e421ca68cb725c1039a897629631fd8b096\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://edc634aeae7272726745b1cbbf116dfdde51833b71a143e94fe7de89e9b14566\",\"dweb:/ipfs/QmXtXckxdFM3VeLvsjMWhqt44WAf7XKVYKt9bUT7pyWbjH\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/algo/EnumMap.sol\":{\"keccak256\":\"0x12716c299c0965f4f87c2792cda2bd6029ba629c1172cdfef08d95cb2d7c283f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8d17c9bcb9bb0b9f399f6366f85b4db981df6e319f90b1b84910d6c44a79d032\",\"dweb:/ipfs/QmcqU3Gj8BP88yRV571GyCcW2UAjxq2xiqRofXFKYzkRXT\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/algo/EnumSet.sol\":{\"keccak256\":\"0x0aaea4634a7c64ef61b1ee8380912084427b45b6b4fc254b76d4b78e39f92d35\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://356a344f770d238dd864e8530d2ee05e350f269346cdf02432bc767e90520ce1\",\"dweb:/ipfs/QmfQfasYUY69X4wnzizPqT8P24YZTAPQGgFQErsSzV5sva\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/lifecycle/Pausable.sol\":{\"keccak256\":\"0xaa32d2e66a8edb68c64ffab1db69925248cf3f774c40b062e1e8ff2f4d5eebed\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://37451b151d862be6413ee1d18e3500a9100128f09926a2260d0ea058c3148d8a\",\"dweb:/ipfs/QmNLsaNioeA4LK8fVpqvSkQrCob1DkENcqQUurqDQbQK3G\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/lifecycle/Startable.sol\":{\"keccak256\":\"0x87e273577d4716cbbb325f03ec91207e1022bb7f56cdcda56593c603d2b4592f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d305d7c885971e1b82a363b4c9237c4201390610621a67605b89694ca9680e35\",\"dweb:/ipfs/QmWZX1cEfsfQSoEjBgBaBn3rKJxfyaJMpJyofpM9LG4tEp\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/metatx/ManagedIdentity.sol\":{\"keccak256\":\"0xe544b34375f19f9d1ad6e309f2fc56849263cc3c3c77009f6b38782f7dea9971\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3eb04bbf1c13ca82971c1cb2fdd96a23e2dfaa5df6a7d3b7e773dd3a760cf4e4\",\"dweb:/ipfs/QmXArzbKQgsMebfYVSQtaCLAs3rp3FYp6MKjSQnZoGDnjf\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/payment/PayoutWallet.sol\":{\"keccak256\":\"0x45ef7f68177cb61463f0ac759782f490821917fac3a71a18263c38193a9c6229\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://67839b4cc5897d723099ebfd8e0593e809b02cf422056efc1497f88dd7abb415\",\"dweb:/ipfs/QmYFRXvggoT8RzWB7SSJmfaBY3xkoVYNaGotTLBxjXqqxx\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/utils/ERC20Wrapper.sol\":{\"keccak256\":\"0x57922168ce32d2260022c0c7075137940e7d3cf0bb0d2213e62194050fbcf392\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b2dbba2defa32aa9edb54797f9b3f4ec1c1e5f71193deb99289136fa2f02ad79\",\"dweb:/ipfs/QmbUbzdwyWwjw3VW1o5oBKyuG9cFN7n8j55P8MDAg3sCuK\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/utils/types/AddressIsContract.sol\":{\"keccak256\":\"0x08373f750eedc1226b22b8ab1e156b0689c463590fa7dc40e99329b2da7b5d47\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fac8cdd7be4a83b47b18c8a48c1b1779a2590118049734665a6de91e77f27d35\",\"dweb:/ipfs/QmcAobvMpD5TisPTQSihPhywmVbPv1jDhffJCaZptM7YLv\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0xcc78a17dd88fa5a2edc60c8489e2f405c0913b377216a5b26b35656b2d0dab52\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://526dc85e1f9b9b45830e202568d267d93dde7a4fcccf4ad7798dadcd92304d3c\",\"dweb:/ipfs/QmaoXMB972J3cSDLtBq3xBo4jLwqD2uzXTwujtSPqkYVhR\"]},\"contracts/mocks/sale/UniswapSwapSaleMock.sol\":{\"keccak256\":\"0x25135145a7f27e948e99fcf539f9824c7e888f90d1e71dc70efec882a608a3a8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd3d7953bf7e74d26317c241b021bb7a5247836bb875dee609461d84ec84e6d2\",\"dweb:/ipfs/Qmedp5HnyPCUDkvUxpNyibmPyWYijLgsFz4mphRSY54jVS\"]},\"contracts/oracle/UniswapV2Adapter.sol\":{\"keccak256\":\"0x1b347929faf3ddee2568b011fe50bc921bdfe23bceea7022d47259d195860a99\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://364cd66a80a90ec5ac4f1688ffb40825d5ae31197a9104d0271783f9e892f5e5\",\"dweb:/ipfs/QmaAL7GUBRRYc6U96uX7E91AFo9vz9xDqRBYX8SvZGmMg4\"]},\"contracts/oracle/interfaces/IUniswapV2Pair.sol\":{\"keccak256\":\"0xd0762fd9035a7ffa6f70623a464aee4d5c85e9e2bb07e24021af45f738a493af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3ce4fc6e82b116ca7fda0e83df93a4de8adb13e2c72f24390b63b326f01ccc3d\",\"dweb:/ipfs/QmVAZFgd7cEGdxUFTsoz7MUQvCrkqjaFtBB2oZmGd3LA1H\"]},\"contracts/oracle/interfaces/IUniswapV2Router.sol\":{\"keccak256\":\"0x0f8cb0c1e71543770defc0f19a08b62e64b7e19101b8e45643bf7ceb8416c149\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://b14aedff9a94b564366790c1720d1c55472e5d13106c1b89a0d479715dc3c3bd\",\"dweb:/ipfs/QmQQyrKigBpar2uJGLVXFY799e5cNxTX6dFQW3myFAs8Kn\"]},\"contracts/sale/FixedPricesSale.sol\":{\"keccak256\":\"0xad902ccee0e2a42eea07b4c1e011202096daff92b43158a1569d139caf93b3f0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a702cc102db63b18e0581da5d6c01ee9320cec4b690c3117b4f77316fce45185\",\"dweb:/ipfs/QmWL7kh3kBSxDYjVoq9gN79UpKLrRBgJCHqquyaCE8UWhe\"]},\"contracts/sale/UniswapSwapSale.sol\":{\"keccak256\":\"0x877e97ce4d1a5e1c774f9b5f796bc70850364ea144c9581a8ac233f8c0d7faf4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e5a48312df2a7e8e8734ad75c8f2b7c8d1c0b3de3ea3ef39c9b9d700e56421ac\",\"dweb:/ipfs/QmUUzqfoRaS9AXSDBhru7ov88jhwiUZ5SQ2KpoDyouEjk1\"]},\"contracts/sale/abstract/OracleSale.sol\":{\"keccak256\":\"0x7a5dae50fe750564347bfcd4eef33b552b901d7c688db6fae8c8e2dd442cce54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e3388afb44cf6b074cf58820e142b43ce4614bed6a004c4275f6ab05da984449\",\"dweb:/ipfs/QmbucAD5Q7cSh4Ryz8cFt7Yx4KdsXMhqcHofR75oLBuMW2\"]},\"contracts/sale/abstract/PurchaseLifeCycles.sol\":{\"keccak256\":\"0xaa18c1de5628dbd5ff281f06354b0156cb8bd24a6f5b490a787931c374266f6a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2e0731a0100fc1bda747176f169cacc5d61d89df1c78884d8843a834d58f7dcd\",\"dweb:/ipfs/QmZRDAxcvQ9QySqnmQLVM1i797NCqSJrJjKUneEmTufXBQ\"]},\"contracts/sale/abstract/Sale.sol\":{\"keccak256\":\"0x32dd01f3ca07c26e834f5784b4f2434c9cf309e3e30b2421a26da16ccf5d0e26\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://009418ea08f714b3f536d09e04d65ec39d3a4e9ba33e554ac8a26036cff8335b\",\"dweb:/ipfs/QmQvMXpCaaAwtHE4qxXYn2rxPgPzqzJM6aGuyz4nut5CH5\"]},\"contracts/sale/abstract/SwapSale.sol\":{\"keccak256\":\"0x29bdb7a4ec88520205f8e01817e5ae0df65bf72f225e02d69b3d15ce8cfdb804\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7ee6b697e3a6c3fb462e18d3cc22ae4d8c16891b817cbe997b96de404a0eb498\",\"dweb:/ipfs/QmUSBpTt98qsnLeNWVVh2U2tNFcmjsaAUjgrYfchw7ZhGR\"]},\"contracts/sale/interfaces/IOracleSale.sol\":{\"keccak256\":\"0x754fdf88f73519515a9d3748ea136b0e1137095969e91bf7e7b4cf9afb78d164\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://04a0f5ae476580e9a4011d7b6f6e00940498de2be550da0df88fc35ca3b5241c\",\"dweb:/ipfs/QmSjaAFzMbR38ofQtgvyxYKN8N4b7nY4hZAfXkNxe3HSyq\"]},\"contracts/sale/interfaces/IPurchaseNotificationsReceiver.sol\":{\"keccak256\":\"0xa85dcec80f528757a52dd66f88ae14845477e3ec733cb4d22af6db71d19e90f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://36e14e08666d5fd2af5b78848a84a11c666c65c94ca46f88e896c041da1dc1c7\",\"dweb:/ipfs/QmYiHM2DBVuX4adJfJMSvdrdfmDooHxhwGtmhNP7k2DY9n\"]},\"contracts/sale/interfaces/ISale.sol\":{\"keccak256\":\"0x0d731f242662465b2aa3ea9fe3581d0e77e3f61601390f68e4c9c75fc2103f5f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2a04d527397a7f75bd1d701fa7af263cb0799ef4d2f32dc44bb6c9598cee3625\",\"dweb:/ipfs/QmRnsakvvkU1yJyviEM8eytdCTUvjqsw1aqzdntycoG2aV\"]},\"contracts/sale/interfaces/ISwapSale.sol\":{\"keccak256\":\"0x262f0514039e101fdf36f273cfc28bc9000bcc46e53dc7bc7a2dd744075ef820\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://698bcc5dec5dc61277bc847b18a97a869a3657f2943f03f56e01089fa2f2c70f\",\"dweb:/ipfs/QmdAeUYY28Z1biqHPrR9yBLHdKQTm3VFECWJ1Cquxxs4zQ\"]}},\"version\":1}"}},"contracts/mocks/sale/abstract/OracleSaleMock.sol":{"OracleSaleMock":{"abi":[{"inputs":[{"internalType":"address payable","name":"payoutWallet_","type":"address"},{"internalType":"uint256","name":"skusCapacity","type":"uint256"},{"internalType":"uint256","name":"tokensPerSkuCapacity","type":"uint256"},{"internalType":"address","name":"referenceToken","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32[]","name":"names","type":"bytes32[]"},{"indexed":false,"internalType":"bytes32[]","name":"values","type":"bytes32[]"}],"name":"MagicValues","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":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"payoutWallet_","type":"address"}],"name":"PayoutWalletSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"purchaser","type":"address"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"bytes32","name":"sku","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"quantity","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"userData","type":"bytes"},{"indexed":false,"internalType":"uint256","name":"totalPrice","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"extData","type":"bytes"}],"name":"Purchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"sku","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxQuantityPerPurchase","type":"uint256"},{"indexed":false,"internalType":"address","name":"notificationsReceiver","type":"address"}],"name":"SkuCreation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"sku","type":"bytes32"},{"indexed":false,"internalType":"address[]","name":"tokens","type":"address[]"},{"indexed":false,"internalType":"uint256[]","name":"prices","type":"uint256[]"}],"name":"SkuPricingUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Started","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"handled","type":"bool"},{"indexed":false,"internalType":"bytes32[]","name":"pricingData","type":"bytes32[]"},{"indexed":false,"internalType":"uint256","name":"totalPrice","type":"uint256"}],"name":"UnderscoreOraclePricingResult","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"PRICE_CONVERT_VIA_ORACLE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SUPPLY_UNLIMITED","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOKEN_ETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"callUnderscoreOraclePricing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"prices","type":"uint256[]"}],"name":"callUnderscoreSetTokenPrices","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"conversionRates","outputs":[{"internalType":"uint256[]","name":"rates","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"uint256","name":"maxQuantityPerPurchase","type":"uint256"},{"internalType":"address","name":"notificationsReceiver","type":"address"}],"name":"createSku","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"estimatePurchase","outputs":[{"internalType":"uint256","name":"totalPrice","type":"uint256"},{"internalType":"bytes32[]","name":"pricingData","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"sku","type":"bytes32"}],"name":"getSkuInfo","outputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"uint256","name":"remainingSupply","type":"uint256"},{"internalType":"uint256","name":"maxQuantityPerPurchase","type":"uint256"},{"internalType":"address","name":"notificationsReceiver","type":"address"},{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"prices","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSkus","outputs":[{"internalType":"bytes32[]","name":"skus","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"mockConversionRates","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payoutWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"purchaseFor","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"referenceToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"fromToken","type":"address"},{"internalType":"address","name":"toToken","type":"address"},{"internalType":"uint256","name":"rate","type":"uint256"}],"name":"setMockConversionRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"payoutWallet_","type":"address"}],"name":"setPayoutWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"start","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"prices","type":"uint256[]"}],"name":"updateSkuPricing","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"60c06040523480156200001157600080fd5b506040516200348e3803806200348e833981810160405260808110156200003757600080fd5b5080516020820151604080840151606090940151600080546001600160a01b031916339081178255925194959394919286928692869286928692869286928592859285926001928691839182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001600160a01b03811662000106576040805162461bcd60e51b815260206004820152601460248201527f5061796f75743a207a65726f2061646472657373000000000000000000000000604482015290519081900360640190fd5b600180546001600160a01b0383166001600160a01b0319909116811790915560408051918252517fdd880d24a789958a6398c99c2e54ce31bc10a638cbc42f7dd34285479ae0f8559181900360200190a150506003805460ff1916911515919091179055608082905260a081905260408051600280825260608201835260009260208301908036833750506040805160028082526060820183529394506000939092509060208301908036833750508351919250680a89e968a9cbe8aa8960bb1b9173eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee91508490600090620001eb57fe5b60200260200101836000815181106200020057fe5b602002602001018281525082815250505060001960001b6f14d55414131657d5539312535255115160821b90836001815181106200023a57fe5b60200260200101836001815181106200024f57fe5b60200260200101828152508281525050506000805160206200346e8339815191528282604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015620002b85781810151838201526020016200029e565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015620002f9578181015183820152602001620002df565b5050505090500194505050505060405180910390a15050600780546001600160a01b0319166001600160a01b03891617905550600094506001935084925062000340915050565b506040519080825280602002602001820160405280156200036b578160200160208202803683370190505b50604080516001808252818301909252919250600091906020808301908036833701905050905060001960001b7f50524943455f434f4e564552545f5649415f4f5241434c4500000000000000009083600081518110620003c857fe5b6020026020010183600081518110620003dd57fe5b60200260200101828152508281525050506000805160206200346e8339815191528282604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015620004465781810151838201526020016200042c565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015620004875781810151838201526020016200046d565b5050505090500194505050505060405180910390a15050505050505050505060805160a051612fa4620004ca600039806122fa5250806116e05250612fa46000f3fe60806040526004361061018b5760003560e01c80638da5cb5b116100d6578063be9a65551161007f578063de96521511610059578063de965215146109a5578063f21f537d146109e8578063f2fde38b146109fd5761018b565b8063be9a655514610886578063c7b778db1461089b578063d2da15391461096a5761018b565b8063a0cf0735116100b0578063a0cf073514610679578063a963b2571461071b578063b3150ef0146107b05761018b565b80638da5cb5b1461063d5780639865bcc8146106525780639e049545146106525761018b565b80635c975abb116101385780636b8f9c43116101125780636b8f9c43146105e05780638456cb59146106135780638488bb4e146106285761018b565b80635c975abb146104175780635e6e9f701461044057806361bd38511461057b5761018b565b80632c87927b116101695780632c87927b146103a65780633f4ba83a146103ed5780635c4fafc7146104025761018b565b80631265b651146101905780631323b066146101c15780632a8a45bc146102be575b600080fd5b34801561019c57600080fd5b506101a5610a30565b604080516001600160a01b039092168252519081900360200190f35b3480156101cd57600080fd5b50610263600480360360a08110156101e457600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a08101608082013564010000000081111561022457600080fd5b82018360208201111561023657600080fd5b8035906020019184600183028401116401000000008311171561025857600080fd5b509092509050610a3f565b6040518083815260200180602001828103825283818151815260200191508051906020019060200280838360005b838110156102a9578181015183820152602001610291565b50505050905001935050505060405180910390f35b3480156102ca57600080fd5b506102e8600480360360208110156102e157600080fd5b5035610b34565b60405180878152602001868152602001858152602001846001600160a01b031681526020018060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561034d578181015183820152602001610335565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561038c578181015183820152602001610374565b505050509050019850505050505050505060405180910390f35b3480156103b257600080fd5b506103eb600480360360808110156103c957600080fd5b50803590602081013590604081013590606001356001600160a01b0316610cd9565b005b3480156103f957600080fd5b506103eb610ceb565b34801561040e57600080fd5b506101a5610d59565b34801561042357600080fd5b5061042c610d71565b604080519115158252519081900360200190f35b34801561044c57600080fd5b506103eb6004803603606081101561046357600080fd5b8135919081019060408101602082013564010000000081111561048557600080fd5b82018360208201111561049757600080fd5b803590602001918460208302840111640100000000831117156104b957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561050957600080fd5b82018360208201111561051b57600080fd5b8035906020019184602083028401116401000000008311171561053d57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610d7a945050505050565b34801561058757600080fd5b50610590610f57565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156105cc5781810151838201526020016105b4565b505050509050019250505060405180910390f35b3480156105ec57600080fd5b506103eb6004803603602081101561060357600080fd5b50356001600160a01b0316610fb2565b34801561061f57600080fd5b506103eb61107f565b34801561063457600080fd5b506101a56110e6565b34801561064957600080fd5b506101a56110f5565b34801561065e57600080fd5b50610667611104565b60408051918252519081900360200190f35b34801561068557600080fd5b506103eb600480360360a081101561069c57600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a0810160808201356401000000008111156106dc57600080fd5b8201836020820111156106ee57600080fd5b8035906020019184600183028401116401000000008311171561071057600080fd5b50909250905061110a565b6103eb600480360360a081101561073157600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a08101608082013564010000000081111561077157600080fd5b82018360208201111561078357600080fd5b803590602001918460018302840111640100000000831117156107a557600080fd5b50909250905061124d565b3480156107bc57600080fd5b506103eb600480360360608110156107d357600080fd5b813591908101906040810160208201356401000000008111156107f557600080fd5b82018360208201111561080757600080fd5b8035906020019184602083028401116401000000008311171561082957600080fd5b91939092909160208101903564010000000081111561084757600080fd5b82018360208201111561085957600080fd5b8035906020019184602083028401116401000000008311171561087b57600080fd5b509092509050611333565b34801561089257600080fd5b506103eb6113c0565b3480156108a757600080fd5b50610590600480360360408110156108be57600080fd5b8101906020810181356401000000008111156108d957600080fd5b8201836020820111156108eb57600080fd5b8035906020019184602083028401116401000000008311171561090d57600080fd5b91939092909160208101903564010000000081111561092b57600080fd5b82018360208201111561093d57600080fd5b8035906020019184600183028401116401000000008311171561095f57600080fd5b5090925090506113d3565b34801561097657600080fd5b506106676004803603604081101561098d57600080fd5b506001600160a01b03813581169160200135166114bf565b3480156109b157600080fd5b506103eb600480360360608110156109c857600080fd5b506001600160a01b038135811691602081013590911690604001356114dc565b3480156109f457600080fd5b50610667611508565b348015610a0957600080fd5b506103eb60048036036020811015610a2057600080fd5b50356001600160a01b031661150e565b6007546001600160a01b031681565b6000606060025460001415610a9b576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b610aa3611574565b610aab612edc565b610ab36115cc565b6001600160a01b03908116825289811660208084019190915290891660408084019190915260608301899052608083018890528051601f870183900483028101830190915285815290869086908190840183828082843760009201919091525050505060a0820152610b24816115d0565b9250925050965096945050505050565b6000818152600660205260408120819081908190606090819083610b5a600483016115f7565b82549850905087610bb2576040805162461bcd60e51b815260206004820152601660248201527f53616c653a206e6f6e2d6578697374656e7420736b7500000000000000000000604482015290519081900360640190fd5b60018201546002830154600384015491985096506001600160a01b031694508067ffffffffffffffff81118015610be857600080fd5b50604051908082528060200260200182016040528015610c12578160200160208202803683370190505b5093508067ffffffffffffffff81118015610c2c57600080fd5b50604051908082528060200260200182016040528015610c56578160200160208202803683370190505b50925060005b81811015610ccd57600080610c7460048601846115fb565b915091508160001c878481518110610c8857fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508060001c868481518110610cb857fe5b60209081029190910101525050600101610c5c565b50505091939550919395565b610ce58484848461168c565b50505050565b600254610d3f576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b610d4f610d4a6115cc565b6118c3565b610d5761198a565b565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b60035460ff1681565b610d85610d4a6115cc565b815181518114610ddc576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20696e636f6e73697374656e742061727261797300000000000000604482015290519081900360640190fd5b60008481526006602052604090208054610e3d576040805162461bcd60e51b815260206004820152601660248201527f53616c653a206e6f6e2d6578697374656e7420736b7500000000000000000000604482015290519081900360640190fd5b6004810182610e88576000610e51826115f7565b905060005b81811015610e81576000610e6a84826115fb565b509050610e7784826119e2565b5050600101610e56565b5050610e93565b610e93818686611ac2565b857fcb3fe5489e0cd43d0f4a33d1e09a4a0463a03d0d38f56165530854e5540db1438686604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015610efb578181015183820152602001610ee3565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015610f3a578181015183820152602001610f22565b5050505090500194505050505060405180910390a2505050505050565b60606004600001805480602002602001604051908101604052809291908181526020018280548015610fa857602002820191906000526020600020905b815481526020019060010190808311610f94575b5050505050905090565b610fbd610d4a6115cc565b6001600160a01b038116611018576040805162461bcd60e51b815260206004820152601460248201527f5061796f75743a207a65726f2061646472657373000000000000000000000000604482015290519081900360640190fd5b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03838116919091179182905560408051929091168252517fdd880d24a789958a6398c99c2e54ce31bc10a638cbc42f7dd34285479ae0f855916020908290030190a150565b6002546110d3576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b6110de610d4a6115cc565b610d57611b4a565b6001546001600160a01b031681565b6000546001600160a01b031690565b60001981565b611112612edc565b61111a6115cc565b6001600160a01b03908116825287811660208084019190915290871660408084019190915260608301879052608083018690528051601f8501839004830281018301909152838152908490849081908401838280828437600092018290525060a08601949094525050508581526006602052604081209060048201906111a08483611b88565b905060006111af858484611bf8565b90507fef3c1fcb3e366e2dc0d5fcc64ae0ae590fb62d4338c60a102f4f8136c06d4424818660e001518760c0015160405180841515815260200180602001838152602001828103825284818151815260200191508051906020019060200280838360005b8381101561122b578181015183820152602001611213565b5050505090500194505050505060405180910390a15050505050505050505050565b6002546112a1576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b6112a9611574565b6112b1612edc565b6112b96115cc565b6001600160a01b03908116825287811660208084019190915290871660408084019190915260608301879052608083018690528051601f850183900483028101830190915283815290849084908190840183828082843760009201919091525050505060a082015261132a81611cf7565b50505050505050565b6000600660008781526020019081526020016000209050600081600401905061132a8187878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808b0282810182019093528a82529093508a925089918291850190849080828437600092019190915250611ac292505050565b6113cb610d4a6115cc565b610d4f611d24565b6060838067ffffffffffffffff811180156113ed57600080fd5b50604051908082528060200260200182016040528015611417578160200160208202803683370190505b50915060005b818110156114b55761149687878381811061143457fe5b905060200201356001600160a01b0316600760009054906101000a90046001600160a01b031687878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611da692505050565b8382815181106114a257fe5b602090810291909101015260010161141d565b5050949350505050565b600860209081526000928352604080842090915290825290205481565b6001600160a01b0392831660009081526008602090815260408083209490951682529290925291902055565b60025490565b611519610d4a6115cc565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383811691821780845560405192939116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b60035460ff1615610d57576040805162461bcd60e51b815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b3390565b600060606115dd83611e1e565b6115e6836120c8565b505060c081015160e0909101519091565b5490565b815460009081908310611655576040805162461bcd60e51b815260206004820152601c60248201527f456e756d4d61703a20696e646578206f7574206f6620626f756e647300000000604482015290519081900360640190fd5b600084600001848154811061166657fe5b906000526020600020906002020190508060000154816001015492509250509250929050565b826116de576040805162461bcd60e51b815260206004820152601160248201527f53616c653a207a65726f20737570706c79000000000000000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000061170960046115f7565b1061175b576040805162461bcd60e51b815260206004820152601360248201527f53616c653a20746f6f206d616e7920736b757300000000000000000000000000604482015290519081900360640190fd5b61176660048561216a565b6117b7576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20736b7520616c7265616479206372656174656400000000000000604482015290519081900360640190fd5b6001600160a01b03811615611829576117d8816001600160a01b03166121b4565b611829576040805162461bcd60e51b815260206004820152601b60248201527f53616c653a206e6f6e2d636f6e74726163742072656365697665720000000000604482015290519081900360640190fd5b60008481526006602090815260409182902085815560018101869055600281018590556003810180546001600160a01b03861673ffffffffffffffffffffffffffffffffffffffff1990911681179091558351888152928301879052828401869052606083015291517f38bd4aabce684540cd61351b91f2f5facf9d6963934347e25aab93d87ae7ac149181900360800190a15050505050565b306001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156118fc57600080fd5b505afa158015611910573d6000803e3d6000fd5b505050506040513d602081101561192657600080fd5b50516001600160a01b03828116911614611987576040805162461bcd60e51b815260206004820152601660248201527f4f776e61626c653a206e6f7420746865206f776e657200000000000000000000604482015290519081900360640190fd5b50565b6119926121ba565b6003805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6119c56115cc565b604080516001600160a01b039092168252519081900360200190a1565b60008181526001830160205260408120548015611ab65783546000198083019190810190600090879083908110611a1557fe5b9060005260206000209060020201905080876000018481548110611a3557fe5b600091825260208083208454600290930201918255600193840154918401919091558354825289830190526040902090840190558654879080611a7457fe5b6000828152602080822060026000199094019384020182815560019081018390559290935588815289820190925260408220919091559450611abc9350505050565b60009150505b92915050565b611acd838383612211565b611ad6836115f7565b1580611af45750600754611af49084906001600160a01b0316612375565b611b45576040805162461bcd60e51b815260206004820152601860248201527f53616c653a206e6f207265666572656e636520746f6b656e0000000000000000604482015290519081900360640190fd5b505050565b611b52611574565b6003805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586119c56115cc565b6040820151600090611ba49083906001600160a01b031661238d565b905080611abc576040805162461bcd60e51b815260206004820152601f60248201527f53616c653a20756e737570706f72746564207061796d656e7420746f6b656e00604482015290519081900360640190fd5b60006000198214611c0b57506000611cf0565b600754600090611c259085906001600160a01b031661238d565b604086015160075460a0880151929350600092611c4c92916001600160a01b031690611da6565b90506000611c838760800151611c7d84611c77670de0b6b3a76400008861241d90919063ffffffff16565b90612476565b9061241d565b604080516002808252606082018352929350919060208301908036833750505060e088018190528051869190600090611cb857fe5b6020026020010181815250508160001b8760e00151600181518110611cd957fe5b602090810291909101015260c08701525060019150505b9392505050565b611d0081611e1e565b611d09816120c8565b611d12816124dd565b611d1b8161262c565b61198781612678565b60025415611d79576040805162461bcd60e51b815260206004820152601260248201527f537461727461626c653a20737461727465640000000000000000000000000000604482015290519081900360640190fd5b426002557f27029695aa5f602a4ee81f4c32dfa86e562f200a17966496f3a7c3f2ec0f94176119c56115cc565b6001600160a01b0380841660009081526008602090815260408083209386168352929052205480611cf0576040805162461bcd60e51b815260206004820152601460248201527f53616c653a20756e646566696e65642072617465000000000000000000000000604482015290519081900360640190fd5b60208101516001600160a01b0316611e7d576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a207a65726f206164647265737320726563697069656e7400000000604482015290519081900360640190fd5b60408101516001600160a01b0316611edc576040805162461bcd60e51b815260206004820152601860248201527f53616c653a207a65726f206164647265737320746f6b656e0000000000000000604482015290519081900360640190fd5b6080810151611f32576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a207a65726f207175616e7469747920707572636861736500000000604482015290519081900360640190fd5b606081015160009081526006602052604090208054611f98576040805162461bcd60e51b815260206004820152601660248201527f53616c653a206e6f6e2d6578697374656e7420736b7500000000000000000000604482015290519081900360640190fd5b816080015181600201541015611ff5576040805162461bcd60e51b815260206004820152601860248201527f53616c653a2061626f7665206d6178207175616e746974790000000000000000604482015290519081900360640190fd5b80546000191461205c5781608001518160010154101561205c576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20696e73756666696369656e7420737570706c7900000000000000604482015290519081900360640190fd5b60408201516001600160a01b03166120776004830182612375565b611b45576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a206e6f6e2d6578697374656e7420736b7520746f6b656e00000000604482015290519081900360640190fd5b60608101516000908152600660205260409020805461212e576040805162461bcd60e51b815260206004820152601560248201527f53616c653a20756e737570706f7274656420534b550000000000000000000000604482015290519081900360640190fd5b60048101600061213e8483611b88565b905061214b848383611bf8565b610ce557608084015161215f90829061241d565b60c085015250505050565b60006121768383612375565b6121ac57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611abc565b506000611abc565b3b151590565b60035460ff16610d57576040805162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604482015290519081900360640190fd5b60005b82518110156122f757600083828151811061222b57fe5b6020026020010151905060006001600160a01b0316816001600160a01b0316141561229d576040805162461bcd60e51b815260206004820152601860248201527f53616c653a207a65726f206164647265737320746f6b656e0000000000000000604482015290519081900360640190fd5b60008383815181106122ab57fe5b6020026020010151905080600014156122d7576122d1866001600160a01b0384166119e2565b506122ed565b6122eb866001600160a01b03841683612b5d565b505b5050600101612214565b507f0000000000000000000000000000000000000000000000000000000000000000612322846115f7565b1115611b45576040805162461bcd60e51b815260206004820152601560248201527f53616c653a20746f6f206d616e7920746f6b656e730000000000000000000000604482015290519081900360640190fd5b60009081526001919091016020526040902054151590565b6000818152600183016020526040812054806123f0576040805162461bcd60e51b815260206004820152601860248201527f456e756d4d61703a206e6f6e6578697374656e74206b65790000000000000000604482015290519081900360640190fd5b83600001600182038154811061240257fe5b90600052602060002090600202016001015491505092915050565b60008261242c57506000611abc565b8282028284828161243957fe5b0414611cf05760405162461bcd60e51b8152600401808060200182810382526021815260200180612f4e6021913960400191505060405180910390fd5b60008082116124cc576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b8183816124d557fe5b049392505050565b60408101516001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415612600578060c0015134101561255f576040805162461bcd60e51b815260206004820152601660248201527f53616c653a20696e73756666696369656e742045544800000000000000000000604482015290519081900360640190fd5b60015460c08201516040516001600160a01b039092169181156108fc0291906000818181858888f1935050505015801561259d573d6000803e3d6000fd5b5060006125b78260c0015134612bf490919063ffffffff16565b905080156125fa5781516040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156125f8573d6000803e3d6000fd5b505b50611987565b61198761260b6115cc565b60015460c084015160408501516001600160a01b0390811693921690612c51565b60608101516000908152600660205260409020805460001914612674576080820151600182015461265c91612bf4565b60608301516000908152600660205260409020600101555b5050565b806060015181604001516001600160a01b031682600001516001600160a01b03167f29f844483ca6b10b5c0611d039afc15ce8f6380e905307b381c3a8ee4e90e11e846020015185608001518660a001518760c001518860e001518961010001518a610120015160405160200180848051906020019060200280838360005b8381101561270f5781810151838201526020016126f7565b50505050905001838051906020019060200280838360005b8381101561273f578181015183820152602001612727565b50505050905001828051906020019060200280838360005b8381101561276f578181015183820152602001612757565b50505050905001935050505060405160208183030381529060405260405180866001600160a01b031681526020018581526020018060200184815260200180602001838103835286818151815260200191508051906020019080838360005b838110156127e65781810151838201526020016127ce565b50505050905090810190601f1680156128135780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b8381101561284657818101518382015260200161282e565b50505050905090810190601f1680156128735780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390a460608101516000908152600660205260409020600301546001600160a01b03168015612674576361eceae860e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916816001600160a01b03166361eceae8846000015185602001518660400151876060015188608001518960a001518a60c001518b60e001518c61010001518d61012001516040518b63ffffffff1660e01b8152600401808b6001600160a01b031681526020018a6001600160a01b03168152602001896001600160a01b031681526020018881526020018781526020018060200186815260200180602001806020018060200185810385528a818151815260200191508051906020019080838360005b838110156129ac578181015183820152602001612994565b50505050905090810190601f1680156129d95780820380516001836020036101000a031916815260200191505b508581038452885181528851602091820191808b01910280838360005b83811015612a0e5781810151838201526020016129f6565b50505050905001858103835287818151815260200191508051906020019060200280838360005b83811015612a4d578181015183820152602001612a35565b50505050905001858103825286818151815260200191508051906020019060200280838360005b83811015612a8c578181015183820152602001612a74565b505050509050019e505050505050505050505050505050602060405180830381600087803b158015612abd57600080fd5b505af1158015612ad1573d6000803e3d6000fd5b505050506040513d6020811015612ae757600080fd5b50517fffffffff000000000000000000000000000000000000000000000000000000001614612674576040805162461bcd60e51b815260206004820152601a60248201527f53616c653a206e6f74696669636174696f6e2072656675736564000000000000604482015290519081900360640190fd5b600082815260018401602052604081205480612bc2575050604080518082018252838152602080820184815286546001818101895560008981528481209551600290930290950191825591519082015586548684528188019092529290912055611cf0565b82856000016001830381548110612bd557fe5b9060005260206000209060020201600101819055506000915050611cf0565b600082821115612c4b576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052610ce590859081612ce76001600160a01b0382166121b4565b612d38576040805162461bcd60e51b815260206004820152601a60248201527f4552433230577261707065723a206e6f6e2d636f6e7472616374000000000000604482015290519081900360640190fd5b600080826001600160a01b0316846040518082805190602001908083835b60208310612d9357805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612d56565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612df5576040519150601f19603f3d011682016040523d82523d6000602084013e612dfa565b606091505b50915091508115612e7957805115612e7457808060200190516020811015612e2157600080fd5b5051612e74576040805162461bcd60e51b815260206004820152601e60248201527f4552433230577261707065723a206f7065726174696f6e206661696c65640000604482015290519081900360640190fd5b612ed5565b8051612ecc576040805162461bcd60e51b815260206004820152601e60248201527f4552433230577261707065723a206f7065726174696f6e206661696c65640000604482015290519081900360640190fd5b80518082602001fd5b5050505050565b60405180610140016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160008019168152602001600081526020016060815260200160008152602001606081526020016060815260200160608152509056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220ea6dc20c95daf65d13dcf713f4e25dde4a3195735b571e427fffce7dedcd6e6364736f6c63430007060033abb92614f53337043b55dc996a83ebb09adce78ec336ca188ea02180b61d1c14","opcodes":"PUSH1 0xC0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x348E CODESIZE SUB DUP1 PUSH3 0x348E DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x80 DUP2 LT ISZERO PUSH3 0x37 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 DUP1 DUP5 ADD MLOAD PUSH1 0x60 SWAP1 SWAP5 ADD MLOAD PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND CALLER SWAP1 DUP2 OR DUP3 SSTORE SWAP3 MLOAD SWAP5 SWAP6 SWAP4 SWAP5 SWAP2 SWAP3 DUP7 SWAP3 DUP7 SWAP3 DUP7 SWAP3 DUP7 SWAP3 DUP7 SWAP3 DUP7 SWAP3 DUP7 SWAP3 DUP6 SWAP3 DUP6 SWAP3 DUP6 SWAP3 PUSH1 0x1 SWAP3 DUP7 SWAP2 DUP4 SWAP2 DUP3 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP3 SWAP1 LOG3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH3 0x106 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061796F75743A207A65726F2061646472657373000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 SWAP2 AND DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD PUSH32 0xDD880D24A789958A6398C99C2E54CE31BC10A638CBC42F7DD34285479AE0F855 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP POP PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x80 DUP3 SWAP1 MSTORE PUSH1 0xA0 DUP2 SWAP1 MSTORE 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 POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x2 DUP1 DUP3 MSTORE PUSH1 0x60 DUP3 ADD DUP4 MSTORE SWAP4 SWAP5 POP PUSH1 0x0 SWAP4 SWAP1 SWAP3 POP SWAP1 PUSH1 0x20 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP POP DUP4 MLOAD SWAP2 SWAP3 POP PUSH9 0xA89E968A9CBE8AA89 PUSH1 0xBB SHL SWAP2 PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE SWAP2 POP DUP5 SWAP1 PUSH1 0x0 SWAP1 PUSH3 0x1EB JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP4 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH3 0x200 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP3 DUP2 MSTORE POP DUP3 DUP2 MSTORE POP POP POP PUSH1 0x0 NOT PUSH1 0x0 SHL PUSH16 0x14D55414131657D55393125352551151 PUSH1 0x82 SHL SWAP1 DUP4 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH3 0x23A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP4 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH3 0x24F JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP3 DUP2 MSTORE POP DUP3 DUP2 MSTORE POP POP POP PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x346E DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP3 DUP3 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x2B8 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x29E JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x2F9 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x2DF JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP PUSH1 0x7 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND OR SWAP1 SSTORE POP PUSH1 0x0 SWAP5 POP PUSH1 0x1 SWAP4 POP DUP5 SWAP3 POP PUSH3 0x340 SWAP2 POP POP JUMP JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH3 0x36B JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 DUP1 DUP3 MSTORE DUP2 DUP4 ADD SWAP1 SWAP3 MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 SWAP1 PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP PUSH1 0x0 NOT PUSH1 0x0 SHL PUSH32 0x50524943455F434F4E564552545F5649415F4F5241434C450000000000000000 SWAP1 DUP4 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH3 0x3C8 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP4 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH3 0x3DD JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP3 DUP2 MSTORE POP DUP3 DUP2 MSTORE POP POP POP PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x346E DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP3 DUP3 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x446 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x42C JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x487 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x46D JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP POP POP POP POP POP POP PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH2 0x2FA4 PUSH3 0x4CA PUSH1 0x0 CODECOPY DUP1 PUSH2 0x22FA MSTORE POP DUP1 PUSH2 0x16E0 MSTORE POP PUSH2 0x2FA4 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x18B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8DA5CB5B GT PUSH2 0xD6 JUMPI DUP1 PUSH4 0xBE9A6555 GT PUSH2 0x7F JUMPI DUP1 PUSH4 0xDE965215 GT PUSH2 0x59 JUMPI DUP1 PUSH4 0xDE965215 EQ PUSH2 0x9A5 JUMPI DUP1 PUSH4 0xF21F537D EQ PUSH2 0x9E8 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x9FD JUMPI PUSH2 0x18B JUMP JUMPDEST DUP1 PUSH4 0xBE9A6555 EQ PUSH2 0x886 JUMPI DUP1 PUSH4 0xC7B778DB EQ PUSH2 0x89B JUMPI DUP1 PUSH4 0xD2DA1539 EQ PUSH2 0x96A JUMPI PUSH2 0x18B JUMP JUMPDEST DUP1 PUSH4 0xA0CF0735 GT PUSH2 0xB0 JUMPI DUP1 PUSH4 0xA0CF0735 EQ PUSH2 0x679 JUMPI DUP1 PUSH4 0xA963B257 EQ PUSH2 0x71B JUMPI DUP1 PUSH4 0xB3150EF0 EQ PUSH2 0x7B0 JUMPI PUSH2 0x18B JUMP JUMPDEST DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x63D JUMPI DUP1 PUSH4 0x9865BCC8 EQ PUSH2 0x652 JUMPI DUP1 PUSH4 0x9E049545 EQ PUSH2 0x652 JUMPI PUSH2 0x18B JUMP JUMPDEST DUP1 PUSH4 0x5C975ABB GT PUSH2 0x138 JUMPI DUP1 PUSH4 0x6B8F9C43 GT PUSH2 0x112 JUMPI DUP1 PUSH4 0x6B8F9C43 EQ PUSH2 0x5E0 JUMPI DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x613 JUMPI DUP1 PUSH4 0x8488BB4E EQ PUSH2 0x628 JUMPI PUSH2 0x18B JUMP JUMPDEST DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x417 JUMPI DUP1 PUSH4 0x5E6E9F70 EQ PUSH2 0x440 JUMPI DUP1 PUSH4 0x61BD3851 EQ PUSH2 0x57B JUMPI PUSH2 0x18B JUMP JUMPDEST DUP1 PUSH4 0x2C87927B GT PUSH2 0x169 JUMPI DUP1 PUSH4 0x2C87927B EQ PUSH2 0x3A6 JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x3ED JUMPI DUP1 PUSH4 0x5C4FAFC7 EQ PUSH2 0x402 JUMPI PUSH2 0x18B JUMP JUMPDEST DUP1 PUSH4 0x1265B651 EQ PUSH2 0x190 JUMPI DUP1 PUSH4 0x1323B066 EQ PUSH2 0x1C1 JUMPI DUP1 PUSH4 0x2A8A45BC EQ PUSH2 0x2BE JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x19C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1A5 PUSH2 0xA30 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x263 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x1E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x224 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x236 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x258 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0xA3F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2A9 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x291 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP4 POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2CA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2E8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2E1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0xB34 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x34D JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x335 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x38C JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x374 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP9 POP POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3EB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x3C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xCD9 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3EB PUSH2 0xCEB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x40E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1A5 PUSH2 0xD59 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x423 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x42C PUSH2 0xD71 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x44C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3EB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x463 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x485 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x497 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x4B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 SWAP5 SWAP4 PUSH1 0x20 DUP2 ADD SWAP4 POP CALLDATALOAD SWAP2 POP POP PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x509 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x51B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x53D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0xD7A SWAP5 POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x587 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x590 PUSH2 0xF57 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 DUP2 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x5CC JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x5B4 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3EB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x603 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xFB2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x61F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3EB PUSH2 0x107F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x634 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1A5 PUSH2 0x10E6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x649 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1A5 PUSH2 0x10F5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x65E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x667 PUSH2 0x1104 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x685 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3EB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x69C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x6DC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x6EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x710 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x110A JUMP JUMPDEST PUSH2 0x3EB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x731 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x771 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x783 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x7A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x124D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3EB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x7D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x7F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x807 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x829 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH1 0x20 DUP2 ADD SWAP1 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x847 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x859 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x87B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x1333 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x892 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3EB PUSH2 0x13C0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8A7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x590 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x8BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x8D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x8EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x90D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH1 0x20 DUP2 ADD SWAP1 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x92B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x93D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x95F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x13D3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x976 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x667 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x98D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x14BF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x9B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3EB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x9C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x14DC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x9F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x667 PUSH2 0x1508 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA09 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3EB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA20 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x150E JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x2 SLOAD PUSH1 0x0 EQ ISZERO PUSH2 0xA9B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0xAA3 PUSH2 0x1574 JUMP JUMPDEST PUSH2 0xAAB PUSH2 0x2EDC JUMP JUMPDEST PUSH2 0xAB3 PUSH2 0x15CC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP10 DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP10 AND PUSH1 0x40 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD DUP10 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP9 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x1F DUP8 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD SWAP1 SWAP2 MSTORE DUP6 DUP2 MSTORE SWAP1 DUP7 SWAP1 DUP7 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP POP PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0xB24 DUP2 PUSH2 0x15D0 JUMP JUMPDEST SWAP3 POP SWAP3 POP POP SWAP7 POP SWAP7 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP2 SWAP1 DUP2 SWAP1 DUP2 SWAP1 PUSH1 0x60 SWAP1 DUP2 SWAP1 DUP4 PUSH2 0xB5A PUSH1 0x4 DUP4 ADD PUSH2 0x15F7 JUMP JUMPDEST DUP3 SLOAD SWAP9 POP SWAP1 POP DUP8 PUSH2 0xBB2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7500000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x3 DUP5 ADD SLOAD SWAP2 SWAP9 POP SWAP7 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP5 POP DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0xBE8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xC12 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP4 POP DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0xC2C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xC56 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xCCD JUMPI PUSH1 0x0 DUP1 PUSH2 0xC74 PUSH1 0x4 DUP7 ADD DUP5 PUSH2 0x15FB JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP2 PUSH1 0x0 SHR DUP8 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0xC88 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP DUP1 PUSH1 0x0 SHR DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0xCB8 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP POP PUSH1 0x1 ADD PUSH2 0xC5C JUMP JUMPDEST POP POP POP SWAP2 SWAP4 SWAP6 POP SWAP2 SWAP4 SWAP6 JUMP JUMPDEST PUSH2 0xCE5 DUP5 DUP5 DUP5 DUP5 PUSH2 0x168C JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0xD3F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0xD4F PUSH2 0xD4A PUSH2 0x15CC JUMP JUMPDEST PUSH2 0x18C3 JUMP JUMPDEST PUSH2 0xD57 PUSH2 0x198A JUMP JUMPDEST JUMP JUMPDEST PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0xD85 PUSH2 0xD4A PUSH2 0x15CC JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD DUP2 EQ PUSH2 0xDDC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E636F6E73697374656E742061727261797300000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0xE3D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7500000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP2 ADD DUP3 PUSH2 0xE88 JUMPI PUSH1 0x0 PUSH2 0xE51 DUP3 PUSH2 0x15F7 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xE81 JUMPI PUSH1 0x0 PUSH2 0xE6A DUP5 DUP3 PUSH2 0x15FB JUMP JUMPDEST POP SWAP1 POP PUSH2 0xE77 DUP5 DUP3 PUSH2 0x19E2 JUMP JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0xE56 JUMP JUMPDEST POP POP PUSH2 0xE93 JUMP JUMPDEST PUSH2 0xE93 DUP2 DUP7 DUP7 PUSH2 0x1AC2 JUMP JUMPDEST DUP6 PUSH32 0xCB3FE5489E0CD43D0F4A33D1E09A4A0463A03D0D38F56165530854E5540DB143 DUP7 DUP7 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xEFB JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xEE3 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xF3A JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xF22 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x4 PUSH1 0x0 ADD DUP1 SLOAD DUP1 PUSH1 0x20 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 DUP1 ISZERO PUSH2 0xFA8 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0xF94 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0xFBD PUSH2 0xD4A PUSH2 0x15CC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1018 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061796F75743A207A65726F2061646472657373000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 SWAP1 SWAP2 OR SWAP2 DUP3 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD SWAP3 SWAP1 SWAP2 AND DUP3 MSTORE MLOAD PUSH32 0xDD880D24A789958A6398C99C2E54CE31BC10A638CBC42F7DD34285479AE0F855 SWAP2 PUSH1 0x20 SWAP1 DUP3 SWAP1 SUB ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x10D3 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x10DE PUSH2 0xD4A PUSH2 0x15CC JUMP JUMPDEST PUSH2 0xD57 PUSH2 0x1B4A JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 NOT DUP2 JUMP JUMPDEST PUSH2 0x1112 PUSH2 0x2EDC JUMP JUMPDEST PUSH2 0x111A PUSH2 0x15CC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP8 DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP8 AND PUSH1 0x40 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD DUP8 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP7 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x1F DUP6 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD SWAP1 SWAP2 MSTORE DUP4 DUP2 MSTORE SWAP1 DUP5 SWAP1 DUP5 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD DUP3 SWAP1 MSTORE POP PUSH1 0xA0 DUP7 ADD SWAP5 SWAP1 SWAP5 MSTORE POP POP POP DUP6 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH1 0x4 DUP3 ADD SWAP1 PUSH2 0x11A0 DUP5 DUP4 PUSH2 0x1B88 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x11AF DUP6 DUP5 DUP5 PUSH2 0x1BF8 JUMP JUMPDEST SWAP1 POP PUSH32 0xEF3C1FCB3E366E2DC0D5FCC64AE0AE590FB62D4338C60A102F4F8136C06D4424 DUP2 DUP7 PUSH1 0xE0 ADD MLOAD DUP8 PUSH1 0xC0 ADD MLOAD PUSH1 0x40 MLOAD DUP1 DUP5 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x122B JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1213 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x12A1 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x12A9 PUSH2 0x1574 JUMP JUMPDEST PUSH2 0x12B1 PUSH2 0x2EDC JUMP JUMPDEST PUSH2 0x12B9 PUSH2 0x15CC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP8 DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP8 AND PUSH1 0x40 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD DUP8 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP7 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x1F DUP6 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD SWAP1 SWAP2 MSTORE DUP4 DUP2 MSTORE SWAP1 DUP5 SWAP1 DUP5 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP POP PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x132A DUP2 PUSH2 0x1CF7 JUMP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x6 PUSH1 0x0 DUP8 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SWAP1 POP PUSH1 0x0 DUP2 PUSH1 0x4 ADD SWAP1 POP PUSH2 0x132A DUP2 DUP8 DUP8 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP12 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP11 DUP3 MSTORE SWAP1 SWAP4 POP DUP11 SWAP3 POP DUP10 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1AC2 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x13CB PUSH2 0xD4A PUSH2 0x15CC JUMP JUMPDEST PUSH2 0xD4F PUSH2 0x1D24 JUMP JUMPDEST PUSH1 0x60 DUP4 DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x13ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1417 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x14B5 JUMPI PUSH2 0x1496 DUP8 DUP8 DUP4 DUP2 DUP2 LT PUSH2 0x1434 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x7 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 DUP8 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1DA6 SWAP3 POP POP POP JUMP JUMPDEST DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x14A2 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x141D JUMP JUMPDEST POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP6 AND DUP3 MSTORE SWAP3 SWAP1 SWAP3 MSTORE SWAP2 SWAP1 KECCAK256 SSTORE JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x1519 PUSH2 0xD4A PUSH2 0x15CC JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 DUP3 OR DUP1 DUP5 SSTORE PUSH1 0x40 MLOAD SWAP3 SWAP4 SWAP2 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xD57 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061757361626C653A2070617573656400000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x15DD DUP4 PUSH2 0x1E1E JUMP JUMPDEST PUSH2 0x15E6 DUP4 PUSH2 0x20C8 JUMP JUMPDEST POP POP PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xE0 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP2 JUMP JUMPDEST SLOAD SWAP1 JUMP JUMPDEST DUP2 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP4 LT PUSH2 0x1655 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x456E756D4D61703A20696E646578206F7574206F6620626F756E647300000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 PUSH1 0x0 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x1666 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD SWAP1 POP DUP1 PUSH1 0x0 ADD SLOAD DUP2 PUSH1 0x1 ADD SLOAD SWAP3 POP SWAP3 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP3 PUSH2 0x16DE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F20737570706C79000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH2 0x1709 PUSH1 0x4 PUSH2 0x15F7 JUMP JUMPDEST LT PUSH2 0x175B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20746F6F206D616E7920736B757300000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x1766 PUSH1 0x4 DUP6 PUSH2 0x216A JUMP JUMPDEST PUSH2 0x17B7 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20736B7520616C7265616479206372656174656400000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO PUSH2 0x1829 JUMPI PUSH2 0x17D8 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x21B4 JUMP JUMPDEST PUSH2 0x1829 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D636F6E74726163742072656365697665720000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP6 DUP2 SSTORE PUSH1 0x1 DUP2 ADD DUP7 SWAP1 SSTORE PUSH1 0x2 DUP2 ADD DUP6 SWAP1 SSTORE PUSH1 0x3 DUP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT SWAP1 SWAP2 AND DUP2 OR SWAP1 SWAP2 SSTORE DUP4 MLOAD DUP9 DUP2 MSTORE SWAP3 DUP4 ADD DUP8 SWAP1 MSTORE DUP3 DUP5 ADD DUP7 SWAP1 MSTORE PUSH1 0x60 DUP4 ADD MSTORE SWAP2 MLOAD PUSH32 0x38BD4AABCE684540CD61351B91F2F5FACF9D6963934347E25AAB93D87AE7AC14 SWAP2 DUP2 SWAP1 SUB PUSH1 0x80 ADD SWAP1 LOG1 POP POP POP POP POP JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8DA5CB5B 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 PUSH2 0x18FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1910 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1926 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ PUSH2 0x1987 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6F7420746865206F776E657200000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0x1992 PUSH2 0x21BA JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA PUSH2 0x19C5 PUSH2 0x15CC JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0x1AB6 JUMPI DUP4 SLOAD PUSH1 0x0 NOT DUP1 DUP4 ADD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x0 SWAP1 DUP8 SWAP1 DUP4 SWAP1 DUP2 LT PUSH2 0x1A15 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD SWAP1 POP DUP1 DUP8 PUSH1 0x0 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x1A35 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 DUP5 SLOAD PUSH1 0x2 SWAP1 SWAP4 MUL ADD SWAP2 DUP3 SSTORE PUSH1 0x1 SWAP4 DUP5 ADD SLOAD SWAP2 DUP5 ADD SWAP2 SWAP1 SWAP2 SSTORE DUP4 SLOAD DUP3 MSTORE DUP10 DUP4 ADD SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP1 DUP5 ADD SWAP1 SSTORE DUP7 SLOAD DUP8 SWAP1 DUP1 PUSH2 0x1A74 JUMPI INVALID JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 PUSH1 0x2 PUSH1 0x0 NOT SWAP1 SWAP5 ADD SWAP4 DUP5 MUL ADD DUP3 DUP2 SSTORE PUSH1 0x1 SWAP1 DUP2 ADD DUP4 SWAP1 SSTORE SWAP3 SWAP1 SWAP4 SSTORE DUP9 DUP2 MSTORE DUP10 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x40 DUP3 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE SWAP5 POP PUSH2 0x1ABC SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SWAP2 POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x1ACD DUP4 DUP4 DUP4 PUSH2 0x2211 JUMP JUMPDEST PUSH2 0x1AD6 DUP4 PUSH2 0x15F7 JUMP JUMPDEST ISZERO DUP1 PUSH2 0x1AF4 JUMPI POP PUSH1 0x7 SLOAD PUSH2 0x1AF4 SWAP1 DUP5 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2375 JUMP JUMPDEST PUSH2 0x1B45 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F207265666572656E636520746F6B656E0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x1B52 PUSH2 0x1574 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH2 0x19C5 PUSH2 0x15CC JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x0 SWAP1 PUSH2 0x1BA4 SWAP1 DUP4 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x238D JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x1ABC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20756E737570706F72746564207061796D656E7420746F6B656E00 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x0 NOT DUP3 EQ PUSH2 0x1C0B JUMPI POP PUSH1 0x0 PUSH2 0x1CF0 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x1C25 SWAP1 DUP6 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x238D JUMP JUMPDEST PUSH1 0x40 DUP7 ADD MLOAD PUSH1 0x7 SLOAD PUSH1 0xA0 DUP9 ADD MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 PUSH2 0x1C4C SWAP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH2 0x1DA6 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1C83 DUP8 PUSH1 0x80 ADD MLOAD PUSH2 0x1C7D DUP5 PUSH2 0x1C77 PUSH8 0xDE0B6B3A7640000 DUP9 PUSH2 0x241D SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 PUSH2 0x2476 JUMP JUMPDEST SWAP1 PUSH2 0x241D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x2 DUP1 DUP3 MSTORE PUSH1 0x60 DUP3 ADD DUP4 MSTORE SWAP3 SWAP4 POP SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP POP POP PUSH1 0xE0 DUP9 ADD DUP2 SWAP1 MSTORE DUP1 MLOAD DUP7 SWAP2 SWAP1 PUSH1 0x0 SWAP1 PUSH2 0x1CB8 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP2 PUSH1 0x0 SHL DUP8 PUSH1 0xE0 ADD MLOAD PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x1CD9 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0xC0 DUP8 ADD MSTORE POP PUSH1 0x1 SWAP2 POP POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x1D00 DUP2 PUSH2 0x1E1E JUMP JUMPDEST PUSH2 0x1D09 DUP2 PUSH2 0x20C8 JUMP JUMPDEST PUSH2 0x1D12 DUP2 PUSH2 0x24DD JUMP JUMPDEST PUSH2 0x1D1B DUP2 PUSH2 0x262C JUMP JUMPDEST PUSH2 0x1987 DUP2 PUSH2 0x2678 JUMP JUMPDEST PUSH1 0x2 SLOAD ISZERO PUSH2 0x1D79 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A20737461727465640000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST TIMESTAMP PUSH1 0x2 SSTORE PUSH32 0x27029695AA5F602A4EE81F4C32DFA86E562F200A17966496F3A7C3F2EC0F9417 PUSH2 0x19C5 PUSH2 0x15CC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD DUP1 PUSH2 0x1CF0 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20756E646566696E65642072617465000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1E7D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F206164647265737320726563697069656E7400000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1EDC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F206164647265737320746F6B656E0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x80 DUP2 ADD MLOAD PUSH2 0x1F32 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F207175616E7469747920707572636861736500000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0x1F98 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7500000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x80 ADD MLOAD DUP2 PUSH1 0x2 ADD SLOAD LT ISZERO PUSH2 0x1FF5 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A2061626F7665206D6178207175616E746974790000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 SLOAD PUSH1 0x0 NOT EQ PUSH2 0x205C JUMPI DUP2 PUSH1 0x80 ADD MLOAD DUP2 PUSH1 0x1 ADD SLOAD LT ISZERO PUSH2 0x205C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E73756666696369656E7420737570706C7900000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2077 PUSH1 0x4 DUP4 ADD DUP3 PUSH2 0x2375 JUMP JUMPDEST PUSH2 0x1B45 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7520746F6B656E00000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0x212E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20756E737570706F7274656420534B550000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP2 ADD PUSH1 0x0 PUSH2 0x213E DUP5 DUP4 PUSH2 0x1B88 JUMP JUMPDEST SWAP1 POP PUSH2 0x214B DUP5 DUP4 DUP4 PUSH2 0x1BF8 JUMP JUMPDEST PUSH2 0xCE5 JUMPI PUSH1 0x80 DUP5 ADD MLOAD PUSH2 0x215F SWAP1 DUP3 SWAP1 PUSH2 0x241D JUMP JUMPDEST PUSH1 0xC0 DUP6 ADD MSTORE POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2176 DUP4 DUP4 PUSH2 0x2375 JUMP JUMPDEST PUSH2 0x21AC JUMPI POP DUP2 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP5 SSTORE PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 SWAP1 SWAP4 ADD DUP5 SWAP1 SSTORE DUP5 SLOAD DUP5 DUP3 MSTORE DUP3 DUP7 ADD SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0x1ABC JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x1ABC JUMP JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND PUSH2 0xD57 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061757361626C653A206E6F7420706175736564000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x22F7 JUMPI PUSH1 0x0 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x222B JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x229D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F206164647265737320746F6B656E0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x22AB JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP DUP1 PUSH1 0x0 EQ ISZERO PUSH2 0x22D7 JUMPI PUSH2 0x22D1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x19E2 JUMP JUMPDEST POP PUSH2 0x22ED JUMP JUMPDEST PUSH2 0x22EB DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP4 PUSH2 0x2B5D JUMP JUMPDEST POP JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x2214 JUMP JUMPDEST POP PUSH32 0x0 PUSH2 0x2322 DUP5 PUSH2 0x15F7 JUMP JUMPDEST GT ISZERO PUSH2 0x1B45 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20746F6F206D616E7920746F6B656E730000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 PUSH2 0x23F0 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x456E756D4D61703A206E6F6E6578697374656E74206B65790000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP4 PUSH1 0x0 ADD PUSH1 0x1 DUP3 SUB DUP2 SLOAD DUP2 LT PUSH2 0x2402 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD PUSH1 0x1 ADD SLOAD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x242C JUMPI POP PUSH1 0x0 PUSH2 0x1ABC JUMP JUMPDEST DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 PUSH2 0x2439 JUMPI INVALID JUMPDEST DIV EQ PUSH2 0x1CF0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2F4E PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP3 GT PUSH2 0x24CC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206469766973696F6E206279207A65726F000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 DUP4 DUP2 PUSH2 0x24D5 JUMPI INVALID JUMPDEST DIV SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x2600 JUMPI DUP1 PUSH1 0xC0 ADD MLOAD CALLVALUE LT ISZERO PUSH2 0x255F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E73756666696369656E742045544800000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xC0 DUP3 ADD MLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 DUP2 ISZERO PUSH2 0x8FC MUL SWAP2 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x259D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x0 PUSH2 0x25B7 DUP3 PUSH1 0xC0 ADD MLOAD CALLVALUE PUSH2 0x2BF4 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x25FA JUMPI DUP2 MLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 DUP3 ISZERO PUSH2 0x8FC MUL SWAP1 DUP4 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x25F8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP JUMPDEST POP PUSH2 0x1987 JUMP JUMPDEST PUSH2 0x1987 PUSH2 0x260B PUSH2 0x15CC JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xC0 DUP5 ADD MLOAD PUSH1 0x40 DUP6 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP4 SWAP3 AND SWAP1 PUSH2 0x2C51 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x0 NOT EQ PUSH2 0x2674 JUMPI PUSH1 0x80 DUP3 ADD MLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH2 0x265C SWAP2 PUSH2 0x2BF4 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SSTORE JUMPDEST POP POP JUMP JUMPDEST DUP1 PUSH1 0x60 ADD MLOAD DUP2 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x29F844483CA6B10B5C0611D039AFC15CE8F6380E905307B381C3A8EE4E90E11E DUP5 PUSH1 0x20 ADD MLOAD DUP6 PUSH1 0x80 ADD MLOAD DUP7 PUSH1 0xA0 ADD MLOAD DUP8 PUSH1 0xC0 ADD MLOAD DUP9 PUSH1 0xE0 ADD MLOAD DUP10 PUSH2 0x100 ADD MLOAD DUP11 PUSH2 0x120 ADD MLOAD PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP5 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x270F JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x26F7 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x273F JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2727 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x276F JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2757 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP4 POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP7 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x27E6 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x27CE JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x2813 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP DUP4 DUP2 SUB DUP3 MSTORE DUP5 MLOAD DUP2 MSTORE DUP5 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP7 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2846 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x282E JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x2873 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP8 POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 ISZERO PUSH2 0x2674 JUMPI PUSH4 0x61ECEAE8 PUSH1 0xE0 SHL PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x61ECEAE8 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD DUP7 PUSH1 0x40 ADD MLOAD DUP8 PUSH1 0x60 ADD MLOAD DUP9 PUSH1 0x80 ADD MLOAD DUP10 PUSH1 0xA0 ADD MLOAD DUP11 PUSH1 0xC0 ADD MLOAD DUP12 PUSH1 0xE0 ADD MLOAD DUP13 PUSH2 0x100 ADD MLOAD DUP14 PUSH2 0x120 ADD MLOAD PUSH1 0x40 MLOAD DUP12 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP6 DUP2 SUB DUP6 MSTORE DUP11 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x29AC JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2994 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x29D9 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP DUP6 DUP2 SUB DUP5 MSTORE DUP9 MLOAD DUP2 MSTORE DUP9 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP1 DUP12 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2A0E JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x29F6 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP6 DUP2 SUB DUP4 MSTORE DUP8 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2A4D JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2A35 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP6 DUP2 SUB DUP3 MSTORE DUP7 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2A8C JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2A74 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP15 POP POP POP POP POP POP POP POP POP POP POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2ABD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2AD1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2AE7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND EQ PUSH2 0x2674 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F74696669636174696F6E2072656675736564000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x1 DUP5 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 PUSH2 0x2BC2 JUMPI POP POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE DUP4 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD DUP5 DUP2 MSTORE DUP7 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP10 SSTORE PUSH1 0x0 DUP10 DUP2 MSTORE DUP5 DUP2 KECCAK256 SWAP6 MLOAD PUSH1 0x2 SWAP1 SWAP4 MUL SWAP1 SWAP6 ADD SWAP2 DUP3 SSTORE SWAP2 MLOAD SWAP1 DUP3 ADD SSTORE DUP7 SLOAD DUP7 DUP5 MSTORE DUP2 DUP9 ADD SWAP1 SWAP3 MSTORE SWAP3 SWAP1 SWAP2 KECCAK256 SSTORE PUSH2 0x1CF0 JUMP JUMPDEST DUP3 DUP6 PUSH1 0x0 ADD PUSH1 0x1 DUP4 SUB DUP2 SLOAD DUP2 LT PUSH2 0x2BD5 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD PUSH1 0x1 ADD DUP2 SWAP1 SSTORE POP PUSH1 0x0 SWAP2 POP POP PUSH2 0x1CF0 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 GT ISZERO PUSH2 0x2C4B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x24 DUP4 ADD MSTORE DUP5 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x84 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 OR SWAP1 MSTORE PUSH2 0xCE5 SWAP1 DUP6 SWAP1 DUP2 PUSH2 0x2CE7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x21B4 JUMP JUMPDEST PUSH2 0x2D38 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433230577261707065723A206E6F6E2D636F6E7472616374000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x2D93 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x2D56 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x2DF5 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x2DFA JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 ISZERO PUSH2 0x2E79 JUMPI DUP1 MLOAD ISZERO PUSH2 0x2E74 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2E21 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x2E74 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433230577261707065723A206F7065726174696F6E206661696C65640000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x2ED5 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x2ECC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433230577261707065723A206F7065726174696F6E206661696C65640000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 MLOAD DUP1 DUP3 PUSH1 0x20 ADD REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x140 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP1 NOT AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE POP SWAP1 JUMP INVALID MSTORE8 PUSH2 0x6665 0x4D PUSH2 0x7468 GASPRICE KECCAK256 PUSH14 0x756C7469706C69636174696F6E20 PUSH16 0x766572666C6F77A26469706673582212 KECCAK256 0xEA PUSH14 0xC20C95DAF65D13DCF713F4E25DDE 0x4A BALANCE SWAP6 PUSH20 0x5B571E427FFFCE7DEDCD6E6364736F6C63430007 MOD STOP CALLER 0xAB 0xB9 0x26 EQ CREATE2 CALLER CALLDATACOPY DIV EXTCODESIZE SSTORE 0xDC SWAP10 PUSH11 0x83EBB09ADCE78EC336CA18 DUP15 LOG0 0x21 DUP1 0xB6 SAR SHR EQ ","sourceMap":"142:2360:18:-:0;;;366:237;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;366:237:18;;;;;;;;;;;;;;;;960:6:1;:15;;-1:-1:-1;;;;;;960:15:1;2518:10:32;960:15:1;;;;;990:40;;366:237:18;;;;;;;;;;;;;;;;;;;;;;;;;;2554:4:32;;366:237:18;;2518:10:32;;;;990:40:1;;960:6;;990:40;-1:-1:-1;;;;;;512:27:8;::::1;504:60;;;::::0;;-1:-1:-1;;;504:60:8;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;574:12;:28:::0;;-1:-1:-1;;;;;574:28:8;::::1;-1:-1:-1::0;;;;;;574:28:8;;::::1;::::0;::::1;::::0;;;617:30:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;-1:-1:-1::0;;543:6:5;:16;;-1:-1:-1;;543:16:5;;;;;;;;;;2570:28:32::2;::::0;;;2608:44:::2;::::0;;;2687:16:::2;::::0;;2701:1:::2;2687:16:::0;;;;;::::2;::::0;;-1:-1:-1;;2687:16:32::2;::::0;::::2;::::0;;::::2;::::0;::::2;-1:-1:-1::0;;2739:16:32::2;::::0;;2753:1:::2;2739:16:::0;;;;;::::2;::::0;;2662:41;;-1:-1:-1;2713:23:32::2;::::0;2739:16;;-1:-1:-1;2753:1:32;2739:16:::2;::::0;::::2;::::0;;::::2;::::0;::::2;-1:-1:-1::0;;2766:8:32;;2713:42;;-1:-1:-1;;;;2765:66:32;1751:44:::2;::::0;-1:-1:-1;2766:5:32;;2803:27:::2;::::0;2766:8:::2;;;;;;;;;2776:6;2783:1;2776:9;;;;;;;;;;;;;2765:66;;;::::0;::::2;;;::::0;::::2;;-1:-1:-1::0;;2886:34:32::2;;-1:-1:-1::0;;;2841:80:32::2;2842:5;2848:1;2842:8;;;;;;;;;;;;;2852:6;2859:1;2852:9;;;;;;;;;;;;;2841:80;;;::::0;::::2;;;::::0;::::2;;-1:-1:-1::0;;;;;;;;;;;2948:5:32::2;2955:6;2936:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::2;::::0;;;::::2;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::2;::::0;;;::::2;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;1605:14:29::1;:32:::0;;-1:-1:-1;;;;;;1605:32:29::1;-1:-1:-1::0;;;;;1605:32:29;::::1;;::::0;;-1:-1:-1;;;;;;;;;;1672:16:29::1;::::0;-1:-1:-1;;1672:16:29;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;1672:16:29::1;-1:-1:-1::0;1724:16:29::1;::::0;;1738:1:::1;1724:16:::0;;;;;::::1;::::0;;;1647:41;;-1:-1:-1;1698:23:29::1;::::0;1724:16;::::1;::::0;;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;1724:16:29::1;1698:42;;-1:-1:-1::0;;1803:33:29::1;;1750:87;;1751:5;1757:1;1751:8;;;;;;;;;;;;;1761:6;1768:1;1761:9;;;;;;;;;;;;;1750:87;;;::::0;::::1;;;::::0;::::1;;-1:-1:-1::0;;;;;;;;;;;1864:5:29::1;1871:6;1852:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;1370:515;;::::0;;;;366:237:18;;;;142:2360;;;;;;;;;;;;"},"deployedBytecode":{"generatedSources":[],"immutableReferences":{"5785":[{"length":32,"start":5856}],"5787":[{"length":32,"start":8954}]},"linkReferences":{},"object":"60806040526004361061018b5760003560e01c80638da5cb5b116100d6578063be9a65551161007f578063de96521511610059578063de965215146109a5578063f21f537d146109e8578063f2fde38b146109fd5761018b565b8063be9a655514610886578063c7b778db1461089b578063d2da15391461096a5761018b565b8063a0cf0735116100b0578063a0cf073514610679578063a963b2571461071b578063b3150ef0146107b05761018b565b80638da5cb5b1461063d5780639865bcc8146106525780639e049545146106525761018b565b80635c975abb116101385780636b8f9c43116101125780636b8f9c43146105e05780638456cb59146106135780638488bb4e146106285761018b565b80635c975abb146104175780635e6e9f701461044057806361bd38511461057b5761018b565b80632c87927b116101695780632c87927b146103a65780633f4ba83a146103ed5780635c4fafc7146104025761018b565b80631265b651146101905780631323b066146101c15780632a8a45bc146102be575b600080fd5b34801561019c57600080fd5b506101a5610a30565b604080516001600160a01b039092168252519081900360200190f35b3480156101cd57600080fd5b50610263600480360360a08110156101e457600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a08101608082013564010000000081111561022457600080fd5b82018360208201111561023657600080fd5b8035906020019184600183028401116401000000008311171561025857600080fd5b509092509050610a3f565b6040518083815260200180602001828103825283818151815260200191508051906020019060200280838360005b838110156102a9578181015183820152602001610291565b50505050905001935050505060405180910390f35b3480156102ca57600080fd5b506102e8600480360360208110156102e157600080fd5b5035610b34565b60405180878152602001868152602001858152602001846001600160a01b031681526020018060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561034d578181015183820152602001610335565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561038c578181015183820152602001610374565b505050509050019850505050505050505060405180910390f35b3480156103b257600080fd5b506103eb600480360360808110156103c957600080fd5b50803590602081013590604081013590606001356001600160a01b0316610cd9565b005b3480156103f957600080fd5b506103eb610ceb565b34801561040e57600080fd5b506101a5610d59565b34801561042357600080fd5b5061042c610d71565b604080519115158252519081900360200190f35b34801561044c57600080fd5b506103eb6004803603606081101561046357600080fd5b8135919081019060408101602082013564010000000081111561048557600080fd5b82018360208201111561049757600080fd5b803590602001918460208302840111640100000000831117156104b957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561050957600080fd5b82018360208201111561051b57600080fd5b8035906020019184602083028401116401000000008311171561053d57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610d7a945050505050565b34801561058757600080fd5b50610590610f57565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156105cc5781810151838201526020016105b4565b505050509050019250505060405180910390f35b3480156105ec57600080fd5b506103eb6004803603602081101561060357600080fd5b50356001600160a01b0316610fb2565b34801561061f57600080fd5b506103eb61107f565b34801561063457600080fd5b506101a56110e6565b34801561064957600080fd5b506101a56110f5565b34801561065e57600080fd5b50610667611104565b60408051918252519081900360200190f35b34801561068557600080fd5b506103eb600480360360a081101561069c57600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a0810160808201356401000000008111156106dc57600080fd5b8201836020820111156106ee57600080fd5b8035906020019184600183028401116401000000008311171561071057600080fd5b50909250905061110a565b6103eb600480360360a081101561073157600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a08101608082013564010000000081111561077157600080fd5b82018360208201111561078357600080fd5b803590602001918460018302840111640100000000831117156107a557600080fd5b50909250905061124d565b3480156107bc57600080fd5b506103eb600480360360608110156107d357600080fd5b813591908101906040810160208201356401000000008111156107f557600080fd5b82018360208201111561080757600080fd5b8035906020019184602083028401116401000000008311171561082957600080fd5b91939092909160208101903564010000000081111561084757600080fd5b82018360208201111561085957600080fd5b8035906020019184602083028401116401000000008311171561087b57600080fd5b509092509050611333565b34801561089257600080fd5b506103eb6113c0565b3480156108a757600080fd5b50610590600480360360408110156108be57600080fd5b8101906020810181356401000000008111156108d957600080fd5b8201836020820111156108eb57600080fd5b8035906020019184602083028401116401000000008311171561090d57600080fd5b91939092909160208101903564010000000081111561092b57600080fd5b82018360208201111561093d57600080fd5b8035906020019184600183028401116401000000008311171561095f57600080fd5b5090925090506113d3565b34801561097657600080fd5b506106676004803603604081101561098d57600080fd5b506001600160a01b03813581169160200135166114bf565b3480156109b157600080fd5b506103eb600480360360608110156109c857600080fd5b506001600160a01b038135811691602081013590911690604001356114dc565b3480156109f457600080fd5b50610667611508565b348015610a0957600080fd5b506103eb60048036036020811015610a2057600080fd5b50356001600160a01b031661150e565b6007546001600160a01b031681565b6000606060025460001415610a9b576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b610aa3611574565b610aab612edc565b610ab36115cc565b6001600160a01b03908116825289811660208084019190915290891660408084019190915260608301899052608083018890528051601f870183900483028101830190915285815290869086908190840183828082843760009201919091525050505060a0820152610b24816115d0565b9250925050965096945050505050565b6000818152600660205260408120819081908190606090819083610b5a600483016115f7565b82549850905087610bb2576040805162461bcd60e51b815260206004820152601660248201527f53616c653a206e6f6e2d6578697374656e7420736b7500000000000000000000604482015290519081900360640190fd5b60018201546002830154600384015491985096506001600160a01b031694508067ffffffffffffffff81118015610be857600080fd5b50604051908082528060200260200182016040528015610c12578160200160208202803683370190505b5093508067ffffffffffffffff81118015610c2c57600080fd5b50604051908082528060200260200182016040528015610c56578160200160208202803683370190505b50925060005b81811015610ccd57600080610c7460048601846115fb565b915091508160001c878481518110610c8857fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508060001c868481518110610cb857fe5b60209081029190910101525050600101610c5c565b50505091939550919395565b610ce58484848461168c565b50505050565b600254610d3f576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b610d4f610d4a6115cc565b6118c3565b610d5761198a565b565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b60035460ff1681565b610d85610d4a6115cc565b815181518114610ddc576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20696e636f6e73697374656e742061727261797300000000000000604482015290519081900360640190fd5b60008481526006602052604090208054610e3d576040805162461bcd60e51b815260206004820152601660248201527f53616c653a206e6f6e2d6578697374656e7420736b7500000000000000000000604482015290519081900360640190fd5b6004810182610e88576000610e51826115f7565b905060005b81811015610e81576000610e6a84826115fb565b509050610e7784826119e2565b5050600101610e56565b5050610e93565b610e93818686611ac2565b857fcb3fe5489e0cd43d0f4a33d1e09a4a0463a03d0d38f56165530854e5540db1438686604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015610efb578181015183820152602001610ee3565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015610f3a578181015183820152602001610f22565b5050505090500194505050505060405180910390a2505050505050565b60606004600001805480602002602001604051908101604052809291908181526020018280548015610fa857602002820191906000526020600020905b815481526020019060010190808311610f94575b5050505050905090565b610fbd610d4a6115cc565b6001600160a01b038116611018576040805162461bcd60e51b815260206004820152601460248201527f5061796f75743a207a65726f2061646472657373000000000000000000000000604482015290519081900360640190fd5b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03838116919091179182905560408051929091168252517fdd880d24a789958a6398c99c2e54ce31bc10a638cbc42f7dd34285479ae0f855916020908290030190a150565b6002546110d3576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b6110de610d4a6115cc565b610d57611b4a565b6001546001600160a01b031681565b6000546001600160a01b031690565b60001981565b611112612edc565b61111a6115cc565b6001600160a01b03908116825287811660208084019190915290871660408084019190915260608301879052608083018690528051601f8501839004830281018301909152838152908490849081908401838280828437600092018290525060a08601949094525050508581526006602052604081209060048201906111a08483611b88565b905060006111af858484611bf8565b90507fef3c1fcb3e366e2dc0d5fcc64ae0ae590fb62d4338c60a102f4f8136c06d4424818660e001518760c0015160405180841515815260200180602001838152602001828103825284818151815260200191508051906020019060200280838360005b8381101561122b578181015183820152602001611213565b5050505090500194505050505060405180910390a15050505050505050505050565b6002546112a1576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b6112a9611574565b6112b1612edc565b6112b96115cc565b6001600160a01b03908116825287811660208084019190915290871660408084019190915260608301879052608083018690528051601f850183900483028101830190915283815290849084908190840183828082843760009201919091525050505060a082015261132a81611cf7565b50505050505050565b6000600660008781526020019081526020016000209050600081600401905061132a8187878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808b0282810182019093528a82529093508a925089918291850190849080828437600092019190915250611ac292505050565b6113cb610d4a6115cc565b610d4f611d24565b6060838067ffffffffffffffff811180156113ed57600080fd5b50604051908082528060200260200182016040528015611417578160200160208202803683370190505b50915060005b818110156114b55761149687878381811061143457fe5b905060200201356001600160a01b0316600760009054906101000a90046001600160a01b031687878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611da692505050565b8382815181106114a257fe5b602090810291909101015260010161141d565b5050949350505050565b600860209081526000928352604080842090915290825290205481565b6001600160a01b0392831660009081526008602090815260408083209490951682529290925291902055565b60025490565b611519610d4a6115cc565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383811691821780845560405192939116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b60035460ff1615610d57576040805162461bcd60e51b815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b3390565b600060606115dd83611e1e565b6115e6836120c8565b505060c081015160e0909101519091565b5490565b815460009081908310611655576040805162461bcd60e51b815260206004820152601c60248201527f456e756d4d61703a20696e646578206f7574206f6620626f756e647300000000604482015290519081900360640190fd5b600084600001848154811061166657fe5b906000526020600020906002020190508060000154816001015492509250509250929050565b826116de576040805162461bcd60e51b815260206004820152601160248201527f53616c653a207a65726f20737570706c79000000000000000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000061170960046115f7565b1061175b576040805162461bcd60e51b815260206004820152601360248201527f53616c653a20746f6f206d616e7920736b757300000000000000000000000000604482015290519081900360640190fd5b61176660048561216a565b6117b7576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20736b7520616c7265616479206372656174656400000000000000604482015290519081900360640190fd5b6001600160a01b03811615611829576117d8816001600160a01b03166121b4565b611829576040805162461bcd60e51b815260206004820152601b60248201527f53616c653a206e6f6e2d636f6e74726163742072656365697665720000000000604482015290519081900360640190fd5b60008481526006602090815260409182902085815560018101869055600281018590556003810180546001600160a01b03861673ffffffffffffffffffffffffffffffffffffffff1990911681179091558351888152928301879052828401869052606083015291517f38bd4aabce684540cd61351b91f2f5facf9d6963934347e25aab93d87ae7ac149181900360800190a15050505050565b306001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156118fc57600080fd5b505afa158015611910573d6000803e3d6000fd5b505050506040513d602081101561192657600080fd5b50516001600160a01b03828116911614611987576040805162461bcd60e51b815260206004820152601660248201527f4f776e61626c653a206e6f7420746865206f776e657200000000000000000000604482015290519081900360640190fd5b50565b6119926121ba565b6003805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6119c56115cc565b604080516001600160a01b039092168252519081900360200190a1565b60008181526001830160205260408120548015611ab65783546000198083019190810190600090879083908110611a1557fe5b9060005260206000209060020201905080876000018481548110611a3557fe5b600091825260208083208454600290930201918255600193840154918401919091558354825289830190526040902090840190558654879080611a7457fe5b6000828152602080822060026000199094019384020182815560019081018390559290935588815289820190925260408220919091559450611abc9350505050565b60009150505b92915050565b611acd838383612211565b611ad6836115f7565b1580611af45750600754611af49084906001600160a01b0316612375565b611b45576040805162461bcd60e51b815260206004820152601860248201527f53616c653a206e6f207265666572656e636520746f6b656e0000000000000000604482015290519081900360640190fd5b505050565b611b52611574565b6003805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586119c56115cc565b6040820151600090611ba49083906001600160a01b031661238d565b905080611abc576040805162461bcd60e51b815260206004820152601f60248201527f53616c653a20756e737570706f72746564207061796d656e7420746f6b656e00604482015290519081900360640190fd5b60006000198214611c0b57506000611cf0565b600754600090611c259085906001600160a01b031661238d565b604086015160075460a0880151929350600092611c4c92916001600160a01b031690611da6565b90506000611c838760800151611c7d84611c77670de0b6b3a76400008861241d90919063ffffffff16565b90612476565b9061241d565b604080516002808252606082018352929350919060208301908036833750505060e088018190528051869190600090611cb857fe5b6020026020010181815250508160001b8760e00151600181518110611cd957fe5b602090810291909101015260c08701525060019150505b9392505050565b611d0081611e1e565b611d09816120c8565b611d12816124dd565b611d1b8161262c565b61198781612678565b60025415611d79576040805162461bcd60e51b815260206004820152601260248201527f537461727461626c653a20737461727465640000000000000000000000000000604482015290519081900360640190fd5b426002557f27029695aa5f602a4ee81f4c32dfa86e562f200a17966496f3a7c3f2ec0f94176119c56115cc565b6001600160a01b0380841660009081526008602090815260408083209386168352929052205480611cf0576040805162461bcd60e51b815260206004820152601460248201527f53616c653a20756e646566696e65642072617465000000000000000000000000604482015290519081900360640190fd5b60208101516001600160a01b0316611e7d576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a207a65726f206164647265737320726563697069656e7400000000604482015290519081900360640190fd5b60408101516001600160a01b0316611edc576040805162461bcd60e51b815260206004820152601860248201527f53616c653a207a65726f206164647265737320746f6b656e0000000000000000604482015290519081900360640190fd5b6080810151611f32576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a207a65726f207175616e7469747920707572636861736500000000604482015290519081900360640190fd5b606081015160009081526006602052604090208054611f98576040805162461bcd60e51b815260206004820152601660248201527f53616c653a206e6f6e2d6578697374656e7420736b7500000000000000000000604482015290519081900360640190fd5b816080015181600201541015611ff5576040805162461bcd60e51b815260206004820152601860248201527f53616c653a2061626f7665206d6178207175616e746974790000000000000000604482015290519081900360640190fd5b80546000191461205c5781608001518160010154101561205c576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20696e73756666696369656e7420737570706c7900000000000000604482015290519081900360640190fd5b60408201516001600160a01b03166120776004830182612375565b611b45576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a206e6f6e2d6578697374656e7420736b7520746f6b656e00000000604482015290519081900360640190fd5b60608101516000908152600660205260409020805461212e576040805162461bcd60e51b815260206004820152601560248201527f53616c653a20756e737570706f7274656420534b550000000000000000000000604482015290519081900360640190fd5b60048101600061213e8483611b88565b905061214b848383611bf8565b610ce557608084015161215f90829061241d565b60c085015250505050565b60006121768383612375565b6121ac57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611abc565b506000611abc565b3b151590565b60035460ff16610d57576040805162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604482015290519081900360640190fd5b60005b82518110156122f757600083828151811061222b57fe5b6020026020010151905060006001600160a01b0316816001600160a01b0316141561229d576040805162461bcd60e51b815260206004820152601860248201527f53616c653a207a65726f206164647265737320746f6b656e0000000000000000604482015290519081900360640190fd5b60008383815181106122ab57fe5b6020026020010151905080600014156122d7576122d1866001600160a01b0384166119e2565b506122ed565b6122eb866001600160a01b03841683612b5d565b505b5050600101612214565b507f0000000000000000000000000000000000000000000000000000000000000000612322846115f7565b1115611b45576040805162461bcd60e51b815260206004820152601560248201527f53616c653a20746f6f206d616e7920746f6b656e730000000000000000000000604482015290519081900360640190fd5b60009081526001919091016020526040902054151590565b6000818152600183016020526040812054806123f0576040805162461bcd60e51b815260206004820152601860248201527f456e756d4d61703a206e6f6e6578697374656e74206b65790000000000000000604482015290519081900360640190fd5b83600001600182038154811061240257fe5b90600052602060002090600202016001015491505092915050565b60008261242c57506000611abc565b8282028284828161243957fe5b0414611cf05760405162461bcd60e51b8152600401808060200182810382526021815260200180612f4e6021913960400191505060405180910390fd5b60008082116124cc576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b8183816124d557fe5b049392505050565b60408101516001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415612600578060c0015134101561255f576040805162461bcd60e51b815260206004820152601660248201527f53616c653a20696e73756666696369656e742045544800000000000000000000604482015290519081900360640190fd5b60015460c08201516040516001600160a01b039092169181156108fc0291906000818181858888f1935050505015801561259d573d6000803e3d6000fd5b5060006125b78260c0015134612bf490919063ffffffff16565b905080156125fa5781516040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156125f8573d6000803e3d6000fd5b505b50611987565b61198761260b6115cc565b60015460c084015160408501516001600160a01b0390811693921690612c51565b60608101516000908152600660205260409020805460001914612674576080820151600182015461265c91612bf4565b60608301516000908152600660205260409020600101555b5050565b806060015181604001516001600160a01b031682600001516001600160a01b03167f29f844483ca6b10b5c0611d039afc15ce8f6380e905307b381c3a8ee4e90e11e846020015185608001518660a001518760c001518860e001518961010001518a610120015160405160200180848051906020019060200280838360005b8381101561270f5781810151838201526020016126f7565b50505050905001838051906020019060200280838360005b8381101561273f578181015183820152602001612727565b50505050905001828051906020019060200280838360005b8381101561276f578181015183820152602001612757565b50505050905001935050505060405160208183030381529060405260405180866001600160a01b031681526020018581526020018060200184815260200180602001838103835286818151815260200191508051906020019080838360005b838110156127e65781810151838201526020016127ce565b50505050905090810190601f1680156128135780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b8381101561284657818101518382015260200161282e565b50505050905090810190601f1680156128735780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390a460608101516000908152600660205260409020600301546001600160a01b03168015612674576361eceae860e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916816001600160a01b03166361eceae8846000015185602001518660400151876060015188608001518960a001518a60c001518b60e001518c61010001518d61012001516040518b63ffffffff1660e01b8152600401808b6001600160a01b031681526020018a6001600160a01b03168152602001896001600160a01b031681526020018881526020018781526020018060200186815260200180602001806020018060200185810385528a818151815260200191508051906020019080838360005b838110156129ac578181015183820152602001612994565b50505050905090810190601f1680156129d95780820380516001836020036101000a031916815260200191505b508581038452885181528851602091820191808b01910280838360005b83811015612a0e5781810151838201526020016129f6565b50505050905001858103835287818151815260200191508051906020019060200280838360005b83811015612a4d578181015183820152602001612a35565b50505050905001858103825286818151815260200191508051906020019060200280838360005b83811015612a8c578181015183820152602001612a74565b505050509050019e505050505050505050505050505050602060405180830381600087803b158015612abd57600080fd5b505af1158015612ad1573d6000803e3d6000fd5b505050506040513d6020811015612ae757600080fd5b50517fffffffff000000000000000000000000000000000000000000000000000000001614612674576040805162461bcd60e51b815260206004820152601a60248201527f53616c653a206e6f74696669636174696f6e2072656675736564000000000000604482015290519081900360640190fd5b600082815260018401602052604081205480612bc2575050604080518082018252838152602080820184815286546001818101895560008981528481209551600290930290950191825591519082015586548684528188019092529290912055611cf0565b82856000016001830381548110612bd557fe5b9060005260206000209060020201600101819055506000915050611cf0565b600082821115612c4b576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052610ce590859081612ce76001600160a01b0382166121b4565b612d38576040805162461bcd60e51b815260206004820152601a60248201527f4552433230577261707065723a206e6f6e2d636f6e7472616374000000000000604482015290519081900360640190fd5b600080826001600160a01b0316846040518082805190602001908083835b60208310612d9357805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612d56565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612df5576040519150601f19603f3d011682016040523d82523d6000602084013e612dfa565b606091505b50915091508115612e7957805115612e7457808060200190516020811015612e2157600080fd5b5051612e74576040805162461bcd60e51b815260206004820152601e60248201527f4552433230577261707065723a206f7065726174696f6e206661696c65640000604482015290519081900360640190fd5b612ed5565b8051612ecc576040805162461bcd60e51b815260206004820152601e60248201527f4552433230577261707065723a206f7065726174696f6e206661696c65640000604482015290519081900360640190fd5b80518082602001fd5b5050505050565b60405180610140016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160008019168152602001600081526020016060815260200160008152602001606081526020016060815260200160608152509056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220ea6dc20c95daf65d13dcf713f4e25dde4a3195735b571e427fffce7dedcd6e6364736f6c63430007060033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x18B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8DA5CB5B GT PUSH2 0xD6 JUMPI DUP1 PUSH4 0xBE9A6555 GT PUSH2 0x7F JUMPI DUP1 PUSH4 0xDE965215 GT PUSH2 0x59 JUMPI DUP1 PUSH4 0xDE965215 EQ PUSH2 0x9A5 JUMPI DUP1 PUSH4 0xF21F537D EQ PUSH2 0x9E8 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x9FD JUMPI PUSH2 0x18B JUMP JUMPDEST DUP1 PUSH4 0xBE9A6555 EQ PUSH2 0x886 JUMPI DUP1 PUSH4 0xC7B778DB EQ PUSH2 0x89B JUMPI DUP1 PUSH4 0xD2DA1539 EQ PUSH2 0x96A JUMPI PUSH2 0x18B JUMP JUMPDEST DUP1 PUSH4 0xA0CF0735 GT PUSH2 0xB0 JUMPI DUP1 PUSH4 0xA0CF0735 EQ PUSH2 0x679 JUMPI DUP1 PUSH4 0xA963B257 EQ PUSH2 0x71B JUMPI DUP1 PUSH4 0xB3150EF0 EQ PUSH2 0x7B0 JUMPI PUSH2 0x18B JUMP JUMPDEST DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x63D JUMPI DUP1 PUSH4 0x9865BCC8 EQ PUSH2 0x652 JUMPI DUP1 PUSH4 0x9E049545 EQ PUSH2 0x652 JUMPI PUSH2 0x18B JUMP JUMPDEST DUP1 PUSH4 0x5C975ABB GT PUSH2 0x138 JUMPI DUP1 PUSH4 0x6B8F9C43 GT PUSH2 0x112 JUMPI DUP1 PUSH4 0x6B8F9C43 EQ PUSH2 0x5E0 JUMPI DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x613 JUMPI DUP1 PUSH4 0x8488BB4E EQ PUSH2 0x628 JUMPI PUSH2 0x18B JUMP JUMPDEST DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x417 JUMPI DUP1 PUSH4 0x5E6E9F70 EQ PUSH2 0x440 JUMPI DUP1 PUSH4 0x61BD3851 EQ PUSH2 0x57B JUMPI PUSH2 0x18B JUMP JUMPDEST DUP1 PUSH4 0x2C87927B GT PUSH2 0x169 JUMPI DUP1 PUSH4 0x2C87927B EQ PUSH2 0x3A6 JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x3ED JUMPI DUP1 PUSH4 0x5C4FAFC7 EQ PUSH2 0x402 JUMPI PUSH2 0x18B JUMP JUMPDEST DUP1 PUSH4 0x1265B651 EQ PUSH2 0x190 JUMPI DUP1 PUSH4 0x1323B066 EQ PUSH2 0x1C1 JUMPI DUP1 PUSH4 0x2A8A45BC EQ PUSH2 0x2BE JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x19C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1A5 PUSH2 0xA30 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x263 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x1E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x224 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x236 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x258 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0xA3F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2A9 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x291 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP4 POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2CA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2E8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2E1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0xB34 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x34D JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x335 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x38C JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x374 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP9 POP POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3EB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x3C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xCD9 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3EB PUSH2 0xCEB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x40E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1A5 PUSH2 0xD59 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x423 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x42C PUSH2 0xD71 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x44C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3EB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x463 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x485 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x497 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x4B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 SWAP5 SWAP4 PUSH1 0x20 DUP2 ADD SWAP4 POP CALLDATALOAD SWAP2 POP POP PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x509 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x51B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x53D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0xD7A SWAP5 POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x587 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x590 PUSH2 0xF57 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 DUP2 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x5CC JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x5B4 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3EB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x603 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xFB2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x61F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3EB PUSH2 0x107F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x634 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1A5 PUSH2 0x10E6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x649 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1A5 PUSH2 0x10F5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x65E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x667 PUSH2 0x1104 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x685 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3EB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x69C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x6DC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x6EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x710 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x110A JUMP JUMPDEST PUSH2 0x3EB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x731 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x771 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x783 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x7A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x124D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3EB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x7D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x7F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x807 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x829 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH1 0x20 DUP2 ADD SWAP1 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x847 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x859 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x87B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x1333 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x892 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3EB PUSH2 0x13C0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8A7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x590 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x8BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x8D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x8EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x90D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH1 0x20 DUP2 ADD SWAP1 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x92B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x93D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x95F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x13D3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x976 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x667 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x98D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x14BF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x9B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3EB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x9C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x14DC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x9F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x667 PUSH2 0x1508 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA09 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3EB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA20 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x150E JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x2 SLOAD PUSH1 0x0 EQ ISZERO PUSH2 0xA9B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0xAA3 PUSH2 0x1574 JUMP JUMPDEST PUSH2 0xAAB PUSH2 0x2EDC JUMP JUMPDEST PUSH2 0xAB3 PUSH2 0x15CC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP10 DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP10 AND PUSH1 0x40 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD DUP10 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP9 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x1F DUP8 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD SWAP1 SWAP2 MSTORE DUP6 DUP2 MSTORE SWAP1 DUP7 SWAP1 DUP7 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP POP PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0xB24 DUP2 PUSH2 0x15D0 JUMP JUMPDEST SWAP3 POP SWAP3 POP POP SWAP7 POP SWAP7 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP2 SWAP1 DUP2 SWAP1 DUP2 SWAP1 PUSH1 0x60 SWAP1 DUP2 SWAP1 DUP4 PUSH2 0xB5A PUSH1 0x4 DUP4 ADD PUSH2 0x15F7 JUMP JUMPDEST DUP3 SLOAD SWAP9 POP SWAP1 POP DUP8 PUSH2 0xBB2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7500000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x3 DUP5 ADD SLOAD SWAP2 SWAP9 POP SWAP7 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP5 POP DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0xBE8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xC12 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP4 POP DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0xC2C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xC56 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xCCD JUMPI PUSH1 0x0 DUP1 PUSH2 0xC74 PUSH1 0x4 DUP7 ADD DUP5 PUSH2 0x15FB JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP2 PUSH1 0x0 SHR DUP8 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0xC88 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP DUP1 PUSH1 0x0 SHR DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0xCB8 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP POP PUSH1 0x1 ADD PUSH2 0xC5C JUMP JUMPDEST POP POP POP SWAP2 SWAP4 SWAP6 POP SWAP2 SWAP4 SWAP6 JUMP JUMPDEST PUSH2 0xCE5 DUP5 DUP5 DUP5 DUP5 PUSH2 0x168C JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0xD3F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0xD4F PUSH2 0xD4A PUSH2 0x15CC JUMP JUMPDEST PUSH2 0x18C3 JUMP JUMPDEST PUSH2 0xD57 PUSH2 0x198A JUMP JUMPDEST JUMP JUMPDEST PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0xD85 PUSH2 0xD4A PUSH2 0x15CC JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD DUP2 EQ PUSH2 0xDDC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E636F6E73697374656E742061727261797300000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0xE3D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7500000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP2 ADD DUP3 PUSH2 0xE88 JUMPI PUSH1 0x0 PUSH2 0xE51 DUP3 PUSH2 0x15F7 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xE81 JUMPI PUSH1 0x0 PUSH2 0xE6A DUP5 DUP3 PUSH2 0x15FB JUMP JUMPDEST POP SWAP1 POP PUSH2 0xE77 DUP5 DUP3 PUSH2 0x19E2 JUMP JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0xE56 JUMP JUMPDEST POP POP PUSH2 0xE93 JUMP JUMPDEST PUSH2 0xE93 DUP2 DUP7 DUP7 PUSH2 0x1AC2 JUMP JUMPDEST DUP6 PUSH32 0xCB3FE5489E0CD43D0F4A33D1E09A4A0463A03D0D38F56165530854E5540DB143 DUP7 DUP7 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xEFB JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xEE3 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xF3A JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xF22 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x4 PUSH1 0x0 ADD DUP1 SLOAD DUP1 PUSH1 0x20 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 DUP1 ISZERO PUSH2 0xFA8 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0xF94 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0xFBD PUSH2 0xD4A PUSH2 0x15CC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1018 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061796F75743A207A65726F2061646472657373000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 SWAP1 SWAP2 OR SWAP2 DUP3 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD SWAP3 SWAP1 SWAP2 AND DUP3 MSTORE MLOAD PUSH32 0xDD880D24A789958A6398C99C2E54CE31BC10A638CBC42F7DD34285479AE0F855 SWAP2 PUSH1 0x20 SWAP1 DUP3 SWAP1 SUB ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x10D3 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x10DE PUSH2 0xD4A PUSH2 0x15CC JUMP JUMPDEST PUSH2 0xD57 PUSH2 0x1B4A JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 NOT DUP2 JUMP JUMPDEST PUSH2 0x1112 PUSH2 0x2EDC JUMP JUMPDEST PUSH2 0x111A PUSH2 0x15CC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP8 DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP8 AND PUSH1 0x40 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD DUP8 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP7 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x1F DUP6 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD SWAP1 SWAP2 MSTORE DUP4 DUP2 MSTORE SWAP1 DUP5 SWAP1 DUP5 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD DUP3 SWAP1 MSTORE POP PUSH1 0xA0 DUP7 ADD SWAP5 SWAP1 SWAP5 MSTORE POP POP POP DUP6 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH1 0x4 DUP3 ADD SWAP1 PUSH2 0x11A0 DUP5 DUP4 PUSH2 0x1B88 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x11AF DUP6 DUP5 DUP5 PUSH2 0x1BF8 JUMP JUMPDEST SWAP1 POP PUSH32 0xEF3C1FCB3E366E2DC0D5FCC64AE0AE590FB62D4338C60A102F4F8136C06D4424 DUP2 DUP7 PUSH1 0xE0 ADD MLOAD DUP8 PUSH1 0xC0 ADD MLOAD PUSH1 0x40 MLOAD DUP1 DUP5 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x122B JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1213 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x12A1 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x12A9 PUSH2 0x1574 JUMP JUMPDEST PUSH2 0x12B1 PUSH2 0x2EDC JUMP JUMPDEST PUSH2 0x12B9 PUSH2 0x15CC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP8 DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP8 AND PUSH1 0x40 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD DUP8 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP7 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x1F DUP6 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD SWAP1 SWAP2 MSTORE DUP4 DUP2 MSTORE SWAP1 DUP5 SWAP1 DUP5 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP POP PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x132A DUP2 PUSH2 0x1CF7 JUMP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x6 PUSH1 0x0 DUP8 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SWAP1 POP PUSH1 0x0 DUP2 PUSH1 0x4 ADD SWAP1 POP PUSH2 0x132A DUP2 DUP8 DUP8 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP12 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP11 DUP3 MSTORE SWAP1 SWAP4 POP DUP11 SWAP3 POP DUP10 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1AC2 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x13CB PUSH2 0xD4A PUSH2 0x15CC JUMP JUMPDEST PUSH2 0xD4F PUSH2 0x1D24 JUMP JUMPDEST PUSH1 0x60 DUP4 DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x13ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1417 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x14B5 JUMPI PUSH2 0x1496 DUP8 DUP8 DUP4 DUP2 DUP2 LT PUSH2 0x1434 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x7 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 DUP8 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1DA6 SWAP3 POP POP POP JUMP JUMPDEST DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x14A2 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x141D JUMP JUMPDEST POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP6 AND DUP3 MSTORE SWAP3 SWAP1 SWAP3 MSTORE SWAP2 SWAP1 KECCAK256 SSTORE JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x1519 PUSH2 0xD4A PUSH2 0x15CC JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 DUP3 OR DUP1 DUP5 SSTORE PUSH1 0x40 MLOAD SWAP3 SWAP4 SWAP2 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xD57 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061757361626C653A2070617573656400000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x15DD DUP4 PUSH2 0x1E1E JUMP JUMPDEST PUSH2 0x15E6 DUP4 PUSH2 0x20C8 JUMP JUMPDEST POP POP PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xE0 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP2 JUMP JUMPDEST SLOAD SWAP1 JUMP JUMPDEST DUP2 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP4 LT PUSH2 0x1655 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x456E756D4D61703A20696E646578206F7574206F6620626F756E647300000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 PUSH1 0x0 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x1666 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD SWAP1 POP DUP1 PUSH1 0x0 ADD SLOAD DUP2 PUSH1 0x1 ADD SLOAD SWAP3 POP SWAP3 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP3 PUSH2 0x16DE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F20737570706C79000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH2 0x1709 PUSH1 0x4 PUSH2 0x15F7 JUMP JUMPDEST LT PUSH2 0x175B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20746F6F206D616E7920736B757300000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x1766 PUSH1 0x4 DUP6 PUSH2 0x216A JUMP JUMPDEST PUSH2 0x17B7 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20736B7520616C7265616479206372656174656400000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO PUSH2 0x1829 JUMPI PUSH2 0x17D8 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x21B4 JUMP JUMPDEST PUSH2 0x1829 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D636F6E74726163742072656365697665720000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP6 DUP2 SSTORE PUSH1 0x1 DUP2 ADD DUP7 SWAP1 SSTORE PUSH1 0x2 DUP2 ADD DUP6 SWAP1 SSTORE PUSH1 0x3 DUP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT SWAP1 SWAP2 AND DUP2 OR SWAP1 SWAP2 SSTORE DUP4 MLOAD DUP9 DUP2 MSTORE SWAP3 DUP4 ADD DUP8 SWAP1 MSTORE DUP3 DUP5 ADD DUP7 SWAP1 MSTORE PUSH1 0x60 DUP4 ADD MSTORE SWAP2 MLOAD PUSH32 0x38BD4AABCE684540CD61351B91F2F5FACF9D6963934347E25AAB93D87AE7AC14 SWAP2 DUP2 SWAP1 SUB PUSH1 0x80 ADD SWAP1 LOG1 POP POP POP POP POP JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8DA5CB5B 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 PUSH2 0x18FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1910 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1926 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ PUSH2 0x1987 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6F7420746865206F776E657200000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0x1992 PUSH2 0x21BA JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA PUSH2 0x19C5 PUSH2 0x15CC JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0x1AB6 JUMPI DUP4 SLOAD PUSH1 0x0 NOT DUP1 DUP4 ADD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x0 SWAP1 DUP8 SWAP1 DUP4 SWAP1 DUP2 LT PUSH2 0x1A15 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD SWAP1 POP DUP1 DUP8 PUSH1 0x0 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x1A35 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 DUP5 SLOAD PUSH1 0x2 SWAP1 SWAP4 MUL ADD SWAP2 DUP3 SSTORE PUSH1 0x1 SWAP4 DUP5 ADD SLOAD SWAP2 DUP5 ADD SWAP2 SWAP1 SWAP2 SSTORE DUP4 SLOAD DUP3 MSTORE DUP10 DUP4 ADD SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP1 DUP5 ADD SWAP1 SSTORE DUP7 SLOAD DUP8 SWAP1 DUP1 PUSH2 0x1A74 JUMPI INVALID JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 PUSH1 0x2 PUSH1 0x0 NOT SWAP1 SWAP5 ADD SWAP4 DUP5 MUL ADD DUP3 DUP2 SSTORE PUSH1 0x1 SWAP1 DUP2 ADD DUP4 SWAP1 SSTORE SWAP3 SWAP1 SWAP4 SSTORE DUP9 DUP2 MSTORE DUP10 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x40 DUP3 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE SWAP5 POP PUSH2 0x1ABC SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SWAP2 POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x1ACD DUP4 DUP4 DUP4 PUSH2 0x2211 JUMP JUMPDEST PUSH2 0x1AD6 DUP4 PUSH2 0x15F7 JUMP JUMPDEST ISZERO DUP1 PUSH2 0x1AF4 JUMPI POP PUSH1 0x7 SLOAD PUSH2 0x1AF4 SWAP1 DUP5 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2375 JUMP JUMPDEST PUSH2 0x1B45 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F207265666572656E636520746F6B656E0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x1B52 PUSH2 0x1574 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH2 0x19C5 PUSH2 0x15CC JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x0 SWAP1 PUSH2 0x1BA4 SWAP1 DUP4 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x238D JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x1ABC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20756E737570706F72746564207061796D656E7420746F6B656E00 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x0 NOT DUP3 EQ PUSH2 0x1C0B JUMPI POP PUSH1 0x0 PUSH2 0x1CF0 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x1C25 SWAP1 DUP6 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x238D JUMP JUMPDEST PUSH1 0x40 DUP7 ADD MLOAD PUSH1 0x7 SLOAD PUSH1 0xA0 DUP9 ADD MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 PUSH2 0x1C4C SWAP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH2 0x1DA6 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1C83 DUP8 PUSH1 0x80 ADD MLOAD PUSH2 0x1C7D DUP5 PUSH2 0x1C77 PUSH8 0xDE0B6B3A7640000 DUP9 PUSH2 0x241D SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 PUSH2 0x2476 JUMP JUMPDEST SWAP1 PUSH2 0x241D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x2 DUP1 DUP3 MSTORE PUSH1 0x60 DUP3 ADD DUP4 MSTORE SWAP3 SWAP4 POP SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP POP POP PUSH1 0xE0 DUP9 ADD DUP2 SWAP1 MSTORE DUP1 MLOAD DUP7 SWAP2 SWAP1 PUSH1 0x0 SWAP1 PUSH2 0x1CB8 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP2 PUSH1 0x0 SHL DUP8 PUSH1 0xE0 ADD MLOAD PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x1CD9 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0xC0 DUP8 ADD MSTORE POP PUSH1 0x1 SWAP2 POP POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x1D00 DUP2 PUSH2 0x1E1E JUMP JUMPDEST PUSH2 0x1D09 DUP2 PUSH2 0x20C8 JUMP JUMPDEST PUSH2 0x1D12 DUP2 PUSH2 0x24DD JUMP JUMPDEST PUSH2 0x1D1B DUP2 PUSH2 0x262C JUMP JUMPDEST PUSH2 0x1987 DUP2 PUSH2 0x2678 JUMP JUMPDEST PUSH1 0x2 SLOAD ISZERO PUSH2 0x1D79 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A20737461727465640000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST TIMESTAMP PUSH1 0x2 SSTORE PUSH32 0x27029695AA5F602A4EE81F4C32DFA86E562F200A17966496F3A7C3F2EC0F9417 PUSH2 0x19C5 PUSH2 0x15CC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD DUP1 PUSH2 0x1CF0 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20756E646566696E65642072617465000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1E7D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F206164647265737320726563697069656E7400000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1EDC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F206164647265737320746F6B656E0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x80 DUP2 ADD MLOAD PUSH2 0x1F32 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F207175616E7469747920707572636861736500000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0x1F98 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7500000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x80 ADD MLOAD DUP2 PUSH1 0x2 ADD SLOAD LT ISZERO PUSH2 0x1FF5 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A2061626F7665206D6178207175616E746974790000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 SLOAD PUSH1 0x0 NOT EQ PUSH2 0x205C JUMPI DUP2 PUSH1 0x80 ADD MLOAD DUP2 PUSH1 0x1 ADD SLOAD LT ISZERO PUSH2 0x205C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E73756666696369656E7420737570706C7900000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2077 PUSH1 0x4 DUP4 ADD DUP3 PUSH2 0x2375 JUMP JUMPDEST PUSH2 0x1B45 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7520746F6B656E00000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0x212E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20756E737570706F7274656420534B550000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP2 ADD PUSH1 0x0 PUSH2 0x213E DUP5 DUP4 PUSH2 0x1B88 JUMP JUMPDEST SWAP1 POP PUSH2 0x214B DUP5 DUP4 DUP4 PUSH2 0x1BF8 JUMP JUMPDEST PUSH2 0xCE5 JUMPI PUSH1 0x80 DUP5 ADD MLOAD PUSH2 0x215F SWAP1 DUP3 SWAP1 PUSH2 0x241D JUMP JUMPDEST PUSH1 0xC0 DUP6 ADD MSTORE POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2176 DUP4 DUP4 PUSH2 0x2375 JUMP JUMPDEST PUSH2 0x21AC JUMPI POP DUP2 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP5 SSTORE PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 SWAP1 SWAP4 ADD DUP5 SWAP1 SSTORE DUP5 SLOAD DUP5 DUP3 MSTORE DUP3 DUP7 ADD SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0x1ABC JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x1ABC JUMP JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND PUSH2 0xD57 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061757361626C653A206E6F7420706175736564000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x22F7 JUMPI PUSH1 0x0 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x222B JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x229D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F206164647265737320746F6B656E0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x22AB JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP DUP1 PUSH1 0x0 EQ ISZERO PUSH2 0x22D7 JUMPI PUSH2 0x22D1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x19E2 JUMP JUMPDEST POP PUSH2 0x22ED JUMP JUMPDEST PUSH2 0x22EB DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP4 PUSH2 0x2B5D JUMP JUMPDEST POP JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x2214 JUMP JUMPDEST POP PUSH32 0x0 PUSH2 0x2322 DUP5 PUSH2 0x15F7 JUMP JUMPDEST GT ISZERO PUSH2 0x1B45 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20746F6F206D616E7920746F6B656E730000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 PUSH2 0x23F0 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x456E756D4D61703A206E6F6E6578697374656E74206B65790000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP4 PUSH1 0x0 ADD PUSH1 0x1 DUP3 SUB DUP2 SLOAD DUP2 LT PUSH2 0x2402 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD PUSH1 0x1 ADD SLOAD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x242C JUMPI POP PUSH1 0x0 PUSH2 0x1ABC JUMP JUMPDEST DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 PUSH2 0x2439 JUMPI INVALID JUMPDEST DIV EQ PUSH2 0x1CF0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2F4E PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP3 GT PUSH2 0x24CC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206469766973696F6E206279207A65726F000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 DUP4 DUP2 PUSH2 0x24D5 JUMPI INVALID JUMPDEST DIV SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x2600 JUMPI DUP1 PUSH1 0xC0 ADD MLOAD CALLVALUE LT ISZERO PUSH2 0x255F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E73756666696369656E742045544800000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xC0 DUP3 ADD MLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 DUP2 ISZERO PUSH2 0x8FC MUL SWAP2 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x259D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x0 PUSH2 0x25B7 DUP3 PUSH1 0xC0 ADD MLOAD CALLVALUE PUSH2 0x2BF4 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x25FA JUMPI DUP2 MLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 DUP3 ISZERO PUSH2 0x8FC MUL SWAP1 DUP4 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x25F8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP JUMPDEST POP PUSH2 0x1987 JUMP JUMPDEST PUSH2 0x1987 PUSH2 0x260B PUSH2 0x15CC JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xC0 DUP5 ADD MLOAD PUSH1 0x40 DUP6 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP4 SWAP3 AND SWAP1 PUSH2 0x2C51 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x0 NOT EQ PUSH2 0x2674 JUMPI PUSH1 0x80 DUP3 ADD MLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH2 0x265C SWAP2 PUSH2 0x2BF4 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SSTORE JUMPDEST POP POP JUMP JUMPDEST DUP1 PUSH1 0x60 ADD MLOAD DUP2 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x29F844483CA6B10B5C0611D039AFC15CE8F6380E905307B381C3A8EE4E90E11E DUP5 PUSH1 0x20 ADD MLOAD DUP6 PUSH1 0x80 ADD MLOAD DUP7 PUSH1 0xA0 ADD MLOAD DUP8 PUSH1 0xC0 ADD MLOAD DUP9 PUSH1 0xE0 ADD MLOAD DUP10 PUSH2 0x100 ADD MLOAD DUP11 PUSH2 0x120 ADD MLOAD PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP5 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x270F JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x26F7 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x273F JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2727 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x276F JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2757 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP4 POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP7 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x27E6 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x27CE JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x2813 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP DUP4 DUP2 SUB DUP3 MSTORE DUP5 MLOAD DUP2 MSTORE DUP5 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP7 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2846 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x282E JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x2873 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP8 POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 ISZERO PUSH2 0x2674 JUMPI PUSH4 0x61ECEAE8 PUSH1 0xE0 SHL PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x61ECEAE8 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD DUP7 PUSH1 0x40 ADD MLOAD DUP8 PUSH1 0x60 ADD MLOAD DUP9 PUSH1 0x80 ADD MLOAD DUP10 PUSH1 0xA0 ADD MLOAD DUP11 PUSH1 0xC0 ADD MLOAD DUP12 PUSH1 0xE0 ADD MLOAD DUP13 PUSH2 0x100 ADD MLOAD DUP14 PUSH2 0x120 ADD MLOAD PUSH1 0x40 MLOAD DUP12 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP6 DUP2 SUB DUP6 MSTORE DUP11 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x29AC JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2994 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x29D9 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP DUP6 DUP2 SUB DUP5 MSTORE DUP9 MLOAD DUP2 MSTORE DUP9 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP1 DUP12 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2A0E JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x29F6 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP6 DUP2 SUB DUP4 MSTORE DUP8 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2A4D JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2A35 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP6 DUP2 SUB DUP3 MSTORE DUP7 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2A8C JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2A74 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP15 POP POP POP POP POP POP POP POP POP POP POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2ABD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2AD1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2AE7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND EQ PUSH2 0x2674 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F74696669636174696F6E2072656675736564000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x1 DUP5 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 PUSH2 0x2BC2 JUMPI POP POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE DUP4 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD DUP5 DUP2 MSTORE DUP7 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP10 SSTORE PUSH1 0x0 DUP10 DUP2 MSTORE DUP5 DUP2 KECCAK256 SWAP6 MLOAD PUSH1 0x2 SWAP1 SWAP4 MUL SWAP1 SWAP6 ADD SWAP2 DUP3 SSTORE SWAP2 MLOAD SWAP1 DUP3 ADD SSTORE DUP7 SLOAD DUP7 DUP5 MSTORE DUP2 DUP9 ADD SWAP1 SWAP3 MSTORE SWAP3 SWAP1 SWAP2 KECCAK256 SSTORE PUSH2 0x1CF0 JUMP JUMPDEST DUP3 DUP6 PUSH1 0x0 ADD PUSH1 0x1 DUP4 SUB DUP2 SLOAD DUP2 LT PUSH2 0x2BD5 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD PUSH1 0x1 ADD DUP2 SWAP1 SSTORE POP PUSH1 0x0 SWAP2 POP POP PUSH2 0x1CF0 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 GT ISZERO PUSH2 0x2C4B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x24 DUP4 ADD MSTORE DUP5 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x84 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 OR SWAP1 MSTORE PUSH2 0xCE5 SWAP1 DUP6 SWAP1 DUP2 PUSH2 0x2CE7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x21B4 JUMP JUMPDEST PUSH2 0x2D38 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433230577261707065723A206E6F6E2D636F6E7472616374000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x2D93 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x2D56 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x2DF5 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x2DFA JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 ISZERO PUSH2 0x2E79 JUMPI DUP1 MLOAD ISZERO PUSH2 0x2E74 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2E21 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x2E74 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433230577261707065723A206F7065726174696F6E206661696C65640000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x2ED5 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x2ECC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433230577261707065723A206F7065726174696F6E206661696C65640000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 MLOAD DUP1 DUP3 PUSH1 0x20 ADD REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x140 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP1 NOT AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE POP SWAP1 JUMP INVALID MSTORE8 PUSH2 0x6665 0x4D PUSH2 0x7468 GASPRICE KECCAK256 PUSH14 0x756C7469706C69636174696F6E20 PUSH16 0x766572666C6F77A26469706673582212 KECCAK256 0xEA PUSH14 0xC20C95DAF65D13DCF713F4E25DDE 0x4A BALANCE SWAP6 PUSH20 0x5B571E427FFFCE7DEDCD6E6364736F6C63430007 MOD STOP CALLER ","sourceMap":"142:2360:18:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;941:29:29;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;941:29:29;;;;;;;;;;;;;;9044:610:32;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9044:610:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9044:610:32;;-1:-1:-1;9044:610:32;-1:-1:-1;9044:610:32;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10463:1027;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10463:1027:32;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10463:1027:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;609:255:18;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;609:255:18;;;;;;;;;;;;;;;;-1:-1:-1;;;;;609:255:18;;:::i;:::-;;4169:114:32;;;;;;;;;;;;;:::i;1698:98::-;;;;;;;;;;;;;:::i;482:18:5:-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;5032:943:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5032:943:32;;;;;;;;-1:-1:-1;5032:943:32;;-1:-1:-1;;5032:943:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5032:943:32;;-1:-1:-1;5032:943:32;;-1:-1:-1;;;;;5032:943:32:i;11621:110::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;660:263:8;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;660:263:8;-1:-1:-1;;;;;660:263:8;;:::i;3787:110:32:-;;;;;;;;;;;;;:::i;379:35:8:-;;;;;;;;;;;;;:::i;1114:94:1:-;;;;;;;;;;;;;:::i;857:77:29:-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;1059:841:18;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1059:841:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1059:841:18;;-1:-1:-1;1059:841:18;-1:-1:-1;1059:841:18;:::i;6962:537:32:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6962:537:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6962:537:32;;-1:-1:-1;6962:537:32;-1:-1:-1;6962:537:32;:::i;1906:313:18:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1906:313:18;;-1:-1:-1;1906:313:18;-1:-1:-1;1906:313:18;:::i;3396:118:32:-;;;;;;;;;;;;;:::i;3632:353:29:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3632:353:29;;-1:-1:-1;3632:353:29;-1:-1:-1;3632:353:29;:::i;285:74:18:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;285:74:18;;;;;;;;;;:::i;870:183::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;870:183:18;;;;;;;;;;;;;;;;;:::i;1276:85:6:-;;;;;;;;;;;;;:::i;1448:197:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1448:197:1;-1:-1:-1;;;;;1448:197:1;;:::i;941:29:29:-;;;-1:-1:-1;;;;;941:29:29;;:::o;9044:610:32:-;9266:18;9286:28;988:10:6;;1002:1;988:15;;980:50;;;;;-1:-1:-1;;;980:50:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;9326:19:32::1;:17;:19::i;:::-;9355:28;;:::i;:::-;9414:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;9393:33:32;;::::1;::::0;;9436:30;;::::1;:18;::::0;;::::1;:30:::0;;;;9476:22;;::::1;:14;::::0;;::::1;:22:::0;;;;9508:12:::1;::::0;::::1;:18:::0;;;9536:17:::1;::::0;::::1;:28:::0;;;9574;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;;;9594:8;;;;;;9574:28;::::1;9594:8:::0;;;;9574:28;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;;;;9574:17:32::1;::::0;::::1;:28:::0;9620:27:::1;9574:8:::0;9620:17:::1;:27::i;:::-;9613:34;;;;;9044:610:::0;;;;;;;;;:::o;10463:1027::-;10573:19;10841:14;;;:9;:14;;;;;10573:19;;;;;;10730:23;;;;10573:19;10882:23;:14;;;:21;:23::i;:::-;10930:19;;;-1:-1:-1;10865:40:32;-1:-1:-1;10967:16:32;10959:51;;;;;-1:-1:-1;;;10959:51:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;11038:23;;;;11096:30;;;;11160:29;;;;11038:23;;-1:-1:-1;11096:30:32;-1:-1:-1;;;;;;11160:29:32;;-1:-1:-1;11223:6:32;11209:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11209:21:32;;11200:30;;11263:6;11249:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11249:21:32;;11240:30;;11285:9;11280:204;11304:6;11300:1;:10;11280:204;;;11332:13;;11364:20;:14;;;11382:1;11364:17;:20::i;:::-;11331:53;;;;11426:5;11418:14;;11398:6;11405:1;11398:9;;;;;;;;;;;;;:35;-1:-1:-1;;;;;11398:35:32;;;-1:-1:-1;;;;;11398:35:32;;;;;11467:5;11459:14;;11447:6;11454:1;11447:9;;;;;;;;;;;;;;;;;:26;-1:-1:-1;;11312:3:32;;11280:204;;;;10463:1027;;;;;;;;;:::o;609:255:18:-;782:75;793:3;798:11;811:22;835:21;782:10;:75::i;:::-;609:255;;;;:::o;4169:114:32:-;988:10:6;;980:50;;;;;-1:-1:-1;;;980:50:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;4225:31:32::1;4243:12;:10;:12::i;:::-;4225:17;:31::i;:::-;4266:10;:8;:10::i;:::-;4169:114::o:0;1698:98::-;1751:44;1698:98;:::o;482:18:5:-;;;;;;:::o;5032:943:32:-;5176:31;5194:12;:10;:12::i;5176:31::-;5234:13;;5275;;5265:23;;5257:61;;;;;-1:-1:-1;;;5257:61:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;5328:23;5354:14;;;:9;:14;;;;;5386:19;;5378:59;;;;;-1:-1:-1;;;5378:59:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;5482:14;;;5510:11;5506:410;;5537:21;5561:20;:11;:18;:20::i;:::-;5537:44;;5600:9;5595:236;5619:13;5615:1;:17;5595:236;;;5737:13;5756:17;:11;5737:13;5756:14;:17::i;:::-;-1:-1:-1;5736:37:32;-1:-1:-1;5791:25:32;:11;5736:37;5791:18;:25::i;:::-;-1:-1:-1;;5634:3:32;;5595:236;;;;5506:410;;;;5861:44;5877:11;5890:6;5898;5861:15;:44::i;:::-;5948:3;5931:37;5953:6;5961;5931:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5032:943;;;;;;:::o;11621:110::-;11672:21;11712:5;:12;;11705:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11621:110;:::o;660:263:8:-;733:31;751:12;:10;:12::i;733:31::-;-1:-1:-1;;;;;782:27:8;;774:60;;;;;-1:-1:-1;;;774:60:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;844:12;:28;;-1:-1:-1;;844:28:8;-1:-1:-1;;;;;844:28:8;;;;;;;;;;;887:29;;;903:12;;;;887:29;;;;;;;;;;;;;660:263;:::o;3787:110:32:-;988:10:6;;980:50;;;;;-1:-1:-1;;;980:50:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;3841:31:32::1;3859:12;:10;:12::i;3841:31::-;3882:8;:6;:8::i;379:35:8:-:0;;;-1:-1:-1;;;;;379:35:8;;:::o;1114:94:1:-;1169:7;1195:6;-1:-1:-1;;;;;1195:6:1;1114:94;:::o;857:77:29:-;-1:-1:-1;;857:77:29;:::o;1059:841:18:-;1259:32;;:::i;:::-;1326:12;:10;:12::i;:::-;-1:-1:-1;;;;;1301:37:18;;;;;1348:34;;;:22;;;;:34;;;;1392:26;;;:18;;;;:26;;;;1428:16;;;:22;;;1460:21;;;:32;;;1502;;;;;;;;;;;;;;;;;;;;;1526:8;;;;;;1502:32;;1526:8;;;;1502:32;;;;;;;;-1:-1:-1;1502:21:18;;;:32;;;;-1:-1:-1;;;1571:14:18;;;:9;:14;;;;;;1629;;;;1673:37;1502:12;1629:14;1673:10;:37::i;:::-;1653:57;;1721:12;1736:52;1751:12;1765:11;1778:9;1736:14;:52::i;:::-;1721:67;;1804:89;1834:7;1843:12;:24;;;1869:12;:23;;;1804:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1059:841;;;;;;;;;;;:::o;6962:537:32:-;988:10:6;;980:50;;;;;-1:-1:-1;;;980:50:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;7183:19:32::1;:17;:19::i;:::-;7212:28;;:::i;:::-;7271:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;7250:33:32;;::::1;::::0;;7293:30;;::::1;:18;::::0;;::::1;:30:::0;;;;7333:22;;::::1;:14;::::0;;::::1;:22:::0;;;;7365:12:::1;::::0;::::1;:18:::0;;;7393:17:::1;::::0;::::1;:28:::0;;;7431;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;;;7451:8;;;;;;7431:28;::::1;7451:8:::0;;;;7431:28;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;;;;7431:17:32::1;::::0;::::1;:28:::0;7470:22:::1;7431:8:::0;7470:12:::1;:22::i;:::-;1040:1:6;6962:537:32::0;;;;;;:::o;1906:313:18:-;2060:23;2086:9;:14;2096:3;2086:14;;;;;;;;;;;2060:40;;2110:31;2144:7;:14;;2110:48;;2168:44;2184:11;2197:6;;2168:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2168:44:18;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2205:6:18;;-1:-1:-1;2205:6:18;;;;2168:44;;;2205:6;;2168:44;2205:6;2168:44;;;;;;;;;-1:-1:-1;2168:15:18;;-1:-1:-1;;;2168:44:18:i;3396:118:32:-;3438:31;3456:12;:10;:12::i;3438:31::-;3479:8;:6;:8::i;3632:353:29:-;3745:22;3796:6;;3827:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3827:21:29;;3819:29;;3863:9;3858:121;3882:6;3878:1;:10;3858:121;;;3920:48;3936:6;;3943:1;3936:9;;;;;;;;;;;;;-1:-1:-1;;;;;3936:9:29;3947:14;;;;;;;;;-1:-1:-1;;;;;3947:14:29;3963:4;;3920:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3920:15:29;;-1:-1:-1;;;3920:48:29:i;:::-;3909:5;3915:1;3909:8;;;;;;;;;;;;;;;;;:59;3890:3;;3858:121;;;;3632:353;;;;;;;:::o;285:74:18:-;;;;;;;;;;;;;;;;;;;;;;;;:::o;870:183::-;-1:-1:-1;;;;;1000:30:18;;;;;;;:19;:30;;;;;;;;:39;;;;;;;;;;;;;:46;870:183::o;1276:85:6:-;1344:10;;1276:85;:::o;1448:197:1:-;1527:31;1545:12;:10;:12::i;1527:31::-;1568:6;:17;;-1:-1:-1;;1568:17:1;-1:-1:-1;;;;;1568:17:1;;;;;;;;;1600:38;;1568:17;;1621:6;;;1600:38;;1568:6;1600:38;1448:197;:::o;572:96:5:-;634:6;;;;633:7;625:36;;;;;-1:-1:-1;;;625:36:5;;;;;;;;;;;;;;;;;;;;;;;;;;;355:104:7;442:10;355:104;:::o;882:291:30:-;970:18;990:28;1030:21;1042:8;1030:11;:21::i;:::-;1061:18;1070:8;1061;:18::i;:::-;-1:-1:-1;;1103:19:30;;;;1146:20;;;;;1103:19;;882:291::o;4367:107:2:-;4449:18;;4367:107::o;4827:264::-;4930:18;;4894:7;;;;4930:26;-1:-1:-1;4922:67:2;;;;;-1:-1:-1;;;4922:67:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;5000:22;5025:3;:11;;5037:5;5025:18;;;;;;;;;;;;;;;;;;5000:43;;5061:5;:9;;;5072:5;:11;;;5053:31;;;;;4827:264;;;;;:::o;12511:877:32:-;12701:16;12693:46;;;;;-1:-1:-1;;;12693:46:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;12774:13;12757:14;:5;:12;:14::i;:::-;:30;12749:62;;;;;-1:-1:-1;;;12749:62:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;12829:14;:5;12839:3;12829:9;:14::i;:::-;12821:52;;;;;-1:-1:-1;;;12821:52:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12887:35:32;;;12883:140;;12946:34;:21;-1:-1:-1;;;;;12946:32:32;;:34::i;:::-;12938:74;;;;;-1:-1:-1;;;12938:74:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;13032:23;13058:14;;;:9;:14;;;;;;;;;13082:33;;;13125:23;;;:37;;;13172:30;;;:55;;;13237:29;;;:53;;-1:-1:-1;;;;;13237:53:32;;-1:-1:-1;;13237:53:32;;;;;;;;13305:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12511:877;;;;;:::o;1770:136:1:-;1860:4;-1:-1:-1;;;;;1860:10:1;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1860:12:1;-1:-1:-1;;;;;1849:23:1;;;;;;1841:58;;;;;-1:-1:-1;;;1841:58:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;1770:136;:::o;1166:131:5:-;1213:16;:14;:16::i;:::-;1239:6;:14;;-1:-1:-1;;1239:14:5;;;1268:22;1277:12;:10;:12::i;:::-;1268:22;;;-1:-1:-1;;;;;1268:22:5;;;;;;;;;;;;;;1166:131::o;2556:1520:2:-;2620:4;2753:16;;;:11;;;:16;;;;;;2784:13;;2780:1290;;3221:18;;-1:-1:-1;;3175:12:2;;;;3221:22;;;;3151:21;;3221:3;;:22;;3512;;;;;;;;;;;;;;;;3483:51;;3655:9;3626:3;:11;;3638:13;3626:26;;;;;;;;;;;;;;;;:38;;:26;;;;;:38;;;;;;;;;;;;;;;3742:13;;3730:26;;:11;;;:26;;;;;3759:17;;;3730:46;;3882:17;;3730:3;;3882:17;;;;;;;;;;;;;;-1:-1:-1;;3882:17:2;;;;;;;;;;;;;;;;;;;;;3974:16;;;:11;;;:16;;;;;;3967:23;;;;3882:17;-1:-1:-1;4005:11:2;;-1:-1:-1;;;;4005:11:2;2780:1290;4054:5;4047:12;;;2556:1520;;;;;:::o;4676:361:29:-;4850:50;4872:11;4885:6;4893;4850:21;:50::i;:::-;4918:20;:11;:18;:20::i;:::-;:25;;:83;;-1:-1:-1;4984:14:29;;4947:54;;:11;;-1:-1:-1;;;;;4984:14:29;4947:20;:54::i;:::-;4910:120;;;;;-1:-1:-1;;;4910:120:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;4676:361;;;:::o;905:129:5:-;950:19;:17;:19::i;:::-;979:6;:13;;-1:-1:-1;;979:13:5;988:4;979:13;;;1007:20;1014:12;:10;:12::i;3773:278:26:-;3958:14;;;;3882:17;;3931:44;;:6;;-1:-1:-1;;;;;3950:23:26;3931:10;:44::i;:::-;3923:53;-1:-1:-1;3994:14:26;3986:58;;;;;-1:-1:-1;;;3986:58:26;;;;;;;;;;;;;;;;;;;;;;;;;;;5729:802:29;5896:4;-1:-1:-1;;5916:9:29;:37;5912:80;;-1:-1:-1;5976:5:29;5969:12;;5912:80;6071:14;;6002:26;;6039:49;;:11;;-1:-1:-1;;;;;6071:14:29;6039:15;:49::i;:::-;6141:14;;;;6157;;6173:17;;;;6031:58;;-1:-1:-1;6031:58:29;;6125:66;;6141:14;-1:-1:-1;;;;;6157:14:29;;6125:15;:66::i;:::-;6100:91;;6202:18;6223:73;6278:8;:17;;;6223:50;6258:14;6223:30;6246:6;6223:18;:22;;:30;;;;:::i;:::-;:34;;:50::i;:::-;:54;;:73::i;:::-;6330:16;;;6344:1;6330:16;;;;;;;;6202:94;;-1:-1:-1;6330:16:29;6344:1;6330:16;;;;;;;;-1:-1:-1;;;6307:20:29;;;:39;;;6356:23;;6390:9;;6307:39;6382:18;;6356:23;;;;;;;;;:44;;;;;6444:14;6436:23;;6410:8;:20;;;6431:1;6410:23;;;;;;;;;;;;;;;;;:49;6470:19;;;:32;-1:-1:-1;6520:4:29;;-1:-1:-1;;5729:802:29;;;;;;:::o;1275:225:30:-;1354:21;1366:8;1354:11;:21::i;:::-;1385:18;1394:8;1385;:18::i;:::-;1413;1422:8;1413;:18::i;:::-;1441:19;1451:8;1441:9;:19::i;:::-;1470:23;1484:8;1470:13;:23::i;1496:131:6:-;789:10;;:15;781:46;;;;;-1:-1:-1;;;781:46:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;1569:15:::1;1556:10;:28:::0;1599:21:::1;1607:12;:10;:12::i;2225:275:18:-:0;-1:-1:-1;;;;;2402:30:18;;;2371:12;2402:30;;;:19;:30;;;;;;;;:39;;;;;;;;;;2459:9;2451:42;;;;;-1:-1:-1;;;2451:42:18;;;;;;;;;;;;;;;;;;;;;;;;;;;15465:852:32;15565:18;;;;-1:-1:-1;;;;;15565:32:32;15557:73;;;;;-1:-1:-1;;;15557:73:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;15648:14;;;;-1:-1:-1;;;;;15648:28:32;15640:65;;;;;-1:-1:-1;;;15640:65:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;15723:17;;;;15715:63;;;;;-1:-1:-1;;;15715:63:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;15824:12;;;;15788:23;15814;;;:9;:23;;;;;15855:19;;15847:59;;;;;-1:-1:-1;;;15847:59:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;15958:8;:17;;;15924:7;:30;;;:51;;15916:88;;;;;-1:-1:-1;;;15916:88:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;16018:19;;-1:-1:-1;;16018:39:32;16014:152;;16108:8;:17;;;16081:7;:23;;;:44;;16073:82;;;;;-1:-1:-1;;;16073:82:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;16210:14;;;;-1:-1:-1;;;;;16202:23:32;16244:33;:14;;;16202:23;16244;:33::i;:::-;16236:74;;;;;-1:-1:-1;;;16236:74:32;;;;;;;;;;;;;;;;;;;;;;;;;;;2571:463:29;2696:12;;;;2660:23;2686;;;:9;:23;;;;;2727:19;;2719:58;;;;;-1:-1:-1;;;2719:58:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;2816:14;;;2787:26;2860:28;2871:8;2816:14;2860:10;:28::i;:::-;2840:48;;2904:43;2919:8;2929:6;2937:9;2904:14;:43::i;:::-;2899:129;;2999:17;;;;2985:32;;:9;;:13;:32::i;:::-;2963:19;;;:54;2571:463;;;;:::o;1481:400:3:-;1544:4;1565:20;1574:3;1579:5;1565:8;:20::i;:::-;1560:315;;-1:-1:-1;1601:22:3;;;;;;;;:10;:22;;;;;;;;;;;;;1779:17;;1758:18;;;:11;;;:18;;;;;;:38;;;;1810:11;;1560:315;-1:-1:-1;1859:5:3;1852:12;;913:377:10;1229:20;1275:8;;;913:377::o;674:96:5:-;732:6;;;;724:39;;;;;-1:-1:-1;;;724:39:5;;;;;;;;;;;;;;;;;;;;;;;;;;;13862:663:32;14032:9;14027:403;14051:6;:13;14047:1;:17;14027:403;;;14085:13;14101:6;14108:1;14101:9;;;;;;;;;;;;;;14085:25;;14149:1;-1:-1:-1;;;;;14132:19:32;:5;-1:-1:-1;;;;;14132:19:32;;;14124:56;;;;;-1:-1:-1;;;14124:56:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;14194:13;14210:6;14217:1;14210:9;;;;;;;;;;;;;;14194:25;;14237:5;14246:1;14237:10;14233:187;;;14267:43;:11;-1:-1:-1;;;;;14294:14:32;;14267:18;:43::i;:::-;;14233:187;;;14349:56;:11;-1:-1:-1;;;;;14373:14:32;;14398:5;14349:15;:56::i;:::-;;14233:187;-1:-1:-1;;14066:3:32;;14027:403;;;;14471:21;14447:20;:11;:18;:20::i;:::-;:45;;14439:79;;;;;-1:-1:-1;;;14439:79:32;;;;;;;;;;;;;;;;;;;;;;;;;;;4155:122:2;4226:4;4249:16;;;:11;;;;;:16;;;;;;:21;;;4155:122::o;5243:298::-;5309:7;5347:16;;;:11;;;:16;;;;;;5381:13;5373:50;;;;;-1:-1:-1;;;5373:50:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;5476:3;:11;;5499:1;5488:8;:12;5476:25;;;;;;;;;;;;;;;;;;:31;;;5469:38;;;5243:298;;;;:::o;3538:215:11:-;3596:7;3619:6;3615:20;;-1:-1:-1;3634:1:11;3627:8;;3615:20;3657:5;;;3661:1;3657;:5;:1;3680:5;;;;;:10;3672:56;;;;-1:-1:-1;;;3672:56:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4217:150;4275:7;4306:1;4302;:5;4294:44;;;;;-1:-1:-1;;;4294:44:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;4359:1;4355;:5;;;;;;;4217:150;-1:-1:-1;;;4217:150:11:o;2637:566:26:-;2725:14;;;;-1:-1:-1;;;;;2725:27:26;1751:44:32;2725:27:26;2721:476;;;2789:8;:19;;;2776:9;:32;;2768:67;;;;;-1:-1:-1;;;2768:67:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;2850:12;;2872:19;;;;2850:42;;-1:-1:-1;;;;;2850:12:26;;;;:42;;;;;2872:19;2850:12;:42;:12;:42;2872:19;2850:12;:42;;;;;;;;;;;;;;;;;;;;;2907:14;2924:34;2938:8;:19;;;2924:9;:13;;:34;;;;:::i;:::-;2907:51;-1:-1:-1;2977:11:26;;2973:85;;3008:18;;:35;;-1:-1:-1;;;;;3008:27:26;;;;:35;;;;;3036:6;;3008:18;:35;:18;:35;3036:6;3008:27;:35;;;;;;;;;;;;;;;;;;;;;2973:85;2721:476;;;;3088:98;3138:12;:10;:12::i;:::-;3152;;3166:19;;;;3102:14;;;;-1:-1:-1;;;;;3088:49:26;;;;:98;3152:12;;3088:49;:98::i;16954:308:32:-;17075:12;;;;17039:23;17065;;;:9;:23;;;;;17102:19;;-1:-1:-1;;17102:39:32;17098:158;;17227:17;;;;17199:23;;;;:46;;:27;:46::i;:::-;17167:12;;;;17157:23;;;;:9;:23;;;;;:39;;:88;17098:158;16954:308;;:::o;17993:1293::-;18201:8;:12;;;18173:8;:14;;;-1:-1:-1;;;;;18087:328:32;18109:8;:18;;;-1:-1:-1;;;;;18087:328:32;;18141:8;:18;;;18227:8;:17;;;18258:8;:17;;;18289:8;:19;;;18339:8;:20;;;18361:8;:20;;;18383:8;:21;;;18322:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18087:328;;;;-1:-1:-1;;;;;18087:328:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18087:328:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18468:12;;;;18426:29;18458:23;;;:9;:23;;;;;:45;;;-1:-1:-1;;;;;18458:45:32;18517:35;;18513:767;;19095:82;;;18593:584;;;18624:21;-1:-1:-1;;;;;18593:84:32;;18699:8;:18;;;18739:8;:18;;;18779:8;:14;;;18815:8;:12;;;18849:8;:17;;;18888:8;:17;;;18927:8;:19;;;18968:8;:20;;;19010:8;:20;;;19052:8;:21;;;18593:498;;;;;;;;;;;;;-1:-1:-1;;;;;18593:498:32;;;;;;-1:-1:-1;;;;;18593:498:32;;;;;;-1:-1:-1;;;;;18593:498:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18593:498:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18593:498:32;:584;;;18568:701;;;;;-1:-1:-1;;;18568:701:32;;;;;;;;;;;;;;;;;;;;;;;;;;;1678:710:2;1784:4;1917:16;;;:11;;;:16;;;;;;1948:13;1944:438;;-1:-1:-1;;2043:34:2;;;;;;;;;;;;;;;;;;2026:52;;;;;;;;:11;:52;;;;;;;;;;;;;;;;;;;;;;;;2232:18;;2213:16;;;:11;;;:16;;;;;;;:37;2264:11;;1944:438;2340:5;2306:3;:11;;2329:1;2318:8;:12;2306:25;;;;;;;;;;;;;;;;;;:31;;:39;;;;2366:5;2359:12;;;;;3136:155:11;3194:7;3226:1;3221;:6;;3213:49;;;;;-1:-1:-1;;;3213:49:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3279:5:11;;;3136:155::o;645:259:9:-;828:68;;;-1:-1:-1;;;;;828:68:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;851:27;828:68;;;793:104;;821:5;;1272;1296:19;-1:-1:-1;;;;;1296:17:9;;;:19::i;:::-;1288:58;;;;;-1:-1:-1;;;1288:58:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;1417:12;1431:17;1452:6;-1:-1:-1;;;;;1452:11:9;1464:8;1452:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1416:57;;;;1487:7;1483:528;;;1514:11;;:16;1510:122;;1569:4;1558:24;;;;;;;;;;;;;;;-1:-1:-1;1558:24:9;1550:67;;;;;-1:-1:-1;;;1550:67:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;1483:528;;;1720:11;;1716:95;;1756:40;;;-1:-1:-1;;;1756:40:9;;;;;;;;;;;;;;;;;;;;;;;;;;;1716:95;1938:4;1932:11;1982:4;1975;1971:2;1967:13;1960:27;1902:99;1147:870;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o"},"methodIdentifiers":{"PRICE_CONVERT_VIA_ORACLE()":"9865bcc8","SUPPLY_UNLIMITED()":"9e049545","TOKEN_ETH()":"5c4fafc7","callUnderscoreOraclePricing(address,address,bytes32,uint256,bytes)":"a0cf0735","callUnderscoreSetTokenPrices(bytes32,address[],uint256[])":"b3150ef0","conversionRates(address[],bytes)":"c7b778db","createSku(bytes32,uint256,uint256,address)":"2c87927b","estimatePurchase(address,address,bytes32,uint256,bytes)":"1323b066","getSkuInfo(bytes32)":"2a8a45bc","getSkus()":"61bd3851","mockConversionRates(address,address)":"d2da1539","owner()":"8da5cb5b","pause()":"8456cb59","paused()":"5c975abb","payoutWallet()":"8488bb4e","purchaseFor(address,address,bytes32,uint256,bytes)":"a963b257","referenceToken()":"1265b651","setMockConversionRate(address,address,uint256)":"de965215","setPayoutWallet(address)":"6b8f9c43","start()":"be9a6555","startedAt()":"f21f537d","transferOwnership(address)":"f2fde38b","unpause()":"3f4ba83a","updateSkuPricing(bytes32,address[],uint256[])":"5e6e9f70"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"payoutWallet_\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"skusCapacity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensPerSkuCapacity\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"referenceToken\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32[]\",\"name\":\"names\",\"type\":\"bytes32[]\"},{\"indexed\":false,\"internalType\":\"bytes32[]\",\"name\":\"values\",\"type\":\"bytes32[]\"}],\"name\":\"MagicValues\",\"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\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"payoutWallet_\",\"type\":\"address\"}],\"name\":\"PayoutWalletSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"purchaser\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalPrice\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extData\",\"type\":\"bytes\"}],\"name\":\"Purchase\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"maxQuantityPerPurchase\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"notificationsReceiver\",\"type\":\"address\"}],\"name\":\"SkuCreation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"prices\",\"type\":\"uint256[]\"}],\"name\":\"SkuPricingUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Started\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"handled\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"bytes32[]\",\"name\":\"pricingData\",\"type\":\"bytes32[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalPrice\",\"type\":\"uint256\"}],\"name\":\"UnderscoreOraclePricingResult\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"PRICE_CONVERT_VIA_ORACLE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SUPPLY_UNLIMITED\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TOKEN_ETH\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"callUnderscoreOraclePricing\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"prices\",\"type\":\"uint256[]\"}],\"name\":\"callUnderscoreSetTokenPrices\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"conversionRates\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"rates\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxQuantityPerPurchase\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"notificationsReceiver\",\"type\":\"address\"}],\"name\":\"createSku\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"estimatePurchase\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalPrice\",\"type\":\"uint256\"},{\"internalType\":\"bytes32[]\",\"name\":\"pricingData\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"}],\"name\":\"getSkuInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"remainingSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxQuantityPerPurchase\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"notificationsReceiver\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"prices\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSkus\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"skus\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"mockConversionRates\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"payoutWallet\",\"outputs\":[{\"internalType\":\"address payable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"purchaseFor\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"referenceToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"fromToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"toToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"name\":\"setMockConversionRate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"payoutWallet_\",\"type\":\"address\"}],\"name\":\"setPayoutWallet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"start\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"prices\",\"type\":\"uint256[]\"}],\"name\":\"updateSkuPricing\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"conversionRates(address[],bytes)\":{\"details\":\"Reverts if the oracle does not provide a conversion rate for one of the token pairs.\",\"params\":{\"data\":\"Additional data with no specified format for deriving the conversion rates.\",\"tokens\":\"The list of tokens to retrieve the conversion rates for.\"},\"returns\":{\"rates\":\"The conversion rates for the `tokens`/`referenceToken` pairs, retrieved via the oracle.\"}},\"estimatePurchase(address,address,bytes32,uint256,bytes)\":{\"details\":\"This function MUST compute the same price as `purchaseFor` would in identical conditions (same arguments, same point in time).If an implementer contract uses the `pricingData` field, it SHOULD document how to interpret the values.Reverts if the sale has not started.Reverts if the sale is paused.Reverts if `recipient` is the zero address.Reverts if `token` is the zero address.Reverts if `quantity` is zero.Reverts if `quantity` is greater than the maximum purchase quantity.Reverts if `quantity` is greater than the remaining supply.Reverts if `sku` does not exist.Reverts if `sku` exists but does not have a price set for `token`.\",\"params\":{\"quantity\":\"The quantity used to calculate the total price amount.\",\"recipient\":\"The recipient of the purchase used to calculate the total price amount.\",\"sku\":\"The identifier of the SKU used to calculate the total price amount.\",\"token\":\"The payment token used to calculate the total price amount.\",\"userData\":\"Optional extra user input data.\"},\"returns\":{\"pricingData\":\"Implementation-specific extra pricing data, such as details about discounts applied.  If not empty, the implementer MUST document how to interepret the values.\",\"totalPrice\":\"The computed total price.\"}},\"getSkuInfo(bytes32)\":{\"details\":\"WARNING: it is the responsibility of the implementer to ensure that the number of payment tokens is bounded, so that this function does not run out of gas.Reverts if `sku` does not exist.\",\"params\":{\"sku\":\"The SKU identifier.\"},\"returns\":{\"maxQuantityPerPurchase\":\"The maximum allowed quantity for a single purchase.\",\"notificationsReceiver\":\"The address of a contract on which to call the `onPurchaseNotificationReceived` function.\",\"prices\":\"The list of associated prices for each of the `tokens`.\",\"remainingSupply\":\"The remaining supply for sale.\",\"tokens\":\"The list of supported payment tokens.\",\"totalSupply\":\"The initial total supply for sale.\"}},\"getSkus()\":{\"returns\":{\"skus\":\"the list of created SKU identifiers.\"}},\"pause()\":{\"details\":\"Emits the `Paused` event.Reverts if called by any other than the contract owner.Reverts if the contract has not been started yet.Reverts if the contract is already paused.\"},\"purchaseFor(address,address,bytes32,uint256,bytes)\":{\"details\":\"Reverts if the sale has not started.Reverts if the sale is paused.Reverts if `recipient` is the zero address.Reverts if `token` is the zero address.Reverts if `quantity` is zero.Reverts if `quantity` is greater than the maximum purchase quantity.Reverts if `quantity` is greater than the remaining supply.Reverts if `sku` does not exist.Reverts if `sku` exists but does not have a price set for `token`.Emits the Purchase event.\",\"params\":{\"quantity\":\"The quantity to purchase.\",\"recipient\":\"The recipient of the purchase.\",\"sku\":\"The identifier of the SKU to purchase.\",\"token\":\"The token to use as the payment currency.\",\"userData\":\"Optional extra user input data.\"}},\"start()\":{\"details\":\"Emits the `Started` event.Emits the `Unpaused` event.Reverts if called by any other than the contract owner.Reverts if the contract has already been started.Reverts if the contract is not paused.\"},\"startedAt()\":{\"returns\":{\"_0\":\"The timestamp when the contract entered the started state.\"}},\"transferOwnership(address)\":{\"details\":\"Reverts if the sender is not the current contract owner.\",\"params\":{\"newOwner\":\"the address of the new owner. Use the zero address to renounce the ownership.\"}},\"unpause()\":{\"details\":\"Emits the `Unpaused` event.Reverts if called by any other than the contract owner.Reverts if the contract has not been started yet.Reverts if the contract is not paused.\"},\"updateSkuPricing(bytes32,address[],uint256[])\":{\"details\":\"Reverts if called by any other than the contract owner.Reverts if `tokens` and `prices` have different lengths.Reverts if `sku` does not exist.Reverts if one of the `tokens` is the zero address.Reverts if the update results in too many tokens for the SKU.Emits the `SkuPricingUpdate` event.\",\"params\":{\"prices\":\"The list of prices to apply for each payment token.  Zero price values are used to disable a payment token.\",\"sku\":\"The identifier of the SKU.\",\"tokens\":\"The list of payment tokens to update.  If empty, disable all the existing payment tokens.\"}}},\"version\":1},\"userdoc\":{\"events\":{\"MagicValues(bytes32[],bytes32[])\":{\"notice\":\"Event emitted to notify about the magic values necessary for interfacing with this contract.\"},\"OwnershipTransferred(address,address)\":{\"notice\":\"Event emited when ownership of a contract changes.\"},\"Purchase(address,address,address,bytes32,uint256,bytes,uint256,bytes)\":{\"notice\":\"Event emitted to notify about a purchase.\"},\"SkuCreation(bytes32,uint256,uint256,address)\":{\"notice\":\"Event emitted to notify about the creation of a SKU.\"},\"SkuPricingUpdate(bytes32,address[],uint256[])\":{\"notice\":\"Event emitted to notify about a change in the pricing of a SKU.\"}},\"kind\":\"user\",\"methods\":{\"PRICE_CONVERT_VIA_ORACLE()\":{\"notice\":\"Returns the price magic value used to represent an oracle-based token conversion pricing.\"},\"SUPPLY_UNLIMITED()\":{\"notice\":\"Returns the magic value used to represent an infinite, never-decreasing SKU's supply.\"},\"TOKEN_ETH()\":{\"notice\":\"Returns the magic value used to represent the ETH payment token.\"},\"conversionRates(address[],bytes)\":{\"notice\":\"Retrieves the token conversion rates for the `tokens`/`referenceToken` pairs via the oracle.\"},\"estimatePurchase(address,address,bytes32,uint256,bytes)\":{\"notice\":\"Estimates the computed final total amount to pay for a purchase, including any potential discount.\"},\"getSkuInfo(bytes32)\":{\"notice\":\"Returns the information relative to a SKU.\"},\"getSkus()\":{\"notice\":\"Returns the list of created SKU identifiers.\"},\"owner()\":{\"notice\":\"Gets the address of the current contract owner.\"},\"pause()\":{\"notice\":\"Pauses the contract.\"},\"purchaseFor(address,address,bytes32,uint256,bytes)\":{\"notice\":\"Performs a purchase.\"},\"start()\":{\"notice\":\"Actvates, or 'starts', the contract.\"},\"startedAt()\":{\"notice\":\"Returns the timestamp when the contract entered the started state.\"},\"transferOwnership(address)\":{\"notice\":\"See {IERC173-transferOwnership(address)}\"},\"unpause()\":{\"notice\":\"Resumes the contract.\"},\"updateSkuPricing(bytes32,address[],uint256[])\":{\"notice\":\"Sets the token prices for the specified product SKU.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/mocks/sale/abstract/OracleSaleMock.sol\":\"OracleSaleMock\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":2000},\"remappings\":[]},\"sources\":{\"@animoca/ethereum-contracts-core-1.1.2/contracts/access/IERC173.sol\":{\"keccak256\":\"0xeb8a2c766577e782ad66ce8591a8d206b0f37b657754cc7a43beeb2d9343873b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3b404032cb4e21bae47b5e9af1290e41117040b10f69e3b2f93522b97e329b59\",\"dweb:/ipfs/QmRJHYkkvWcXGuFJdbqV18yh9QUk5g4zETrrxD2HnU3iRw\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/access/Ownable.sol\":{\"keccak256\":\"0xbfd1129669bb7c154ee84b3aa1484e421ca68cb725c1039a897629631fd8b096\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://edc634aeae7272726745b1cbbf116dfdde51833b71a143e94fe7de89e9b14566\",\"dweb:/ipfs/QmXtXckxdFM3VeLvsjMWhqt44WAf7XKVYKt9bUT7pyWbjH\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/algo/EnumMap.sol\":{\"keccak256\":\"0x12716c299c0965f4f87c2792cda2bd6029ba629c1172cdfef08d95cb2d7c283f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8d17c9bcb9bb0b9f399f6366f85b4db981df6e319f90b1b84910d6c44a79d032\",\"dweb:/ipfs/QmcqU3Gj8BP88yRV571GyCcW2UAjxq2xiqRofXFKYzkRXT\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/algo/EnumSet.sol\":{\"keccak256\":\"0x0aaea4634a7c64ef61b1ee8380912084427b45b6b4fc254b76d4b78e39f92d35\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://356a344f770d238dd864e8530d2ee05e350f269346cdf02432bc767e90520ce1\",\"dweb:/ipfs/QmfQfasYUY69X4wnzizPqT8P24YZTAPQGgFQErsSzV5sva\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/lifecycle/Pausable.sol\":{\"keccak256\":\"0xaa32d2e66a8edb68c64ffab1db69925248cf3f774c40b062e1e8ff2f4d5eebed\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://37451b151d862be6413ee1d18e3500a9100128f09926a2260d0ea058c3148d8a\",\"dweb:/ipfs/QmNLsaNioeA4LK8fVpqvSkQrCob1DkENcqQUurqDQbQK3G\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/lifecycle/Startable.sol\":{\"keccak256\":\"0x87e273577d4716cbbb325f03ec91207e1022bb7f56cdcda56593c603d2b4592f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d305d7c885971e1b82a363b4c9237c4201390610621a67605b89694ca9680e35\",\"dweb:/ipfs/QmWZX1cEfsfQSoEjBgBaBn3rKJxfyaJMpJyofpM9LG4tEp\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/metatx/ManagedIdentity.sol\":{\"keccak256\":\"0xe544b34375f19f9d1ad6e309f2fc56849263cc3c3c77009f6b38782f7dea9971\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3eb04bbf1c13ca82971c1cb2fdd96a23e2dfaa5df6a7d3b7e773dd3a760cf4e4\",\"dweb:/ipfs/QmXArzbKQgsMebfYVSQtaCLAs3rp3FYp6MKjSQnZoGDnjf\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/payment/PayoutWallet.sol\":{\"keccak256\":\"0x45ef7f68177cb61463f0ac759782f490821917fac3a71a18263c38193a9c6229\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://67839b4cc5897d723099ebfd8e0593e809b02cf422056efc1497f88dd7abb415\",\"dweb:/ipfs/QmYFRXvggoT8RzWB7SSJmfaBY3xkoVYNaGotTLBxjXqqxx\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/utils/ERC20Wrapper.sol\":{\"keccak256\":\"0x57922168ce32d2260022c0c7075137940e7d3cf0bb0d2213e62194050fbcf392\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b2dbba2defa32aa9edb54797f9b3f4ec1c1e5f71193deb99289136fa2f02ad79\",\"dweb:/ipfs/QmbUbzdwyWwjw3VW1o5oBKyuG9cFN7n8j55P8MDAg3sCuK\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/utils/types/AddressIsContract.sol\":{\"keccak256\":\"0x08373f750eedc1226b22b8ab1e156b0689c463590fa7dc40e99329b2da7b5d47\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fac8cdd7be4a83b47b18c8a48c1b1779a2590118049734665a6de91e77f27d35\",\"dweb:/ipfs/QmcAobvMpD5TisPTQSihPhywmVbPv1jDhffJCaZptM7YLv\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0xcc78a17dd88fa5a2edc60c8489e2f405c0913b377216a5b26b35656b2d0dab52\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://526dc85e1f9b9b45830e202568d267d93dde7a4fcccf4ad7798dadcd92304d3c\",\"dweb:/ipfs/QmaoXMB972J3cSDLtBq3xBo4jLwqD2uzXTwujtSPqkYVhR\"]},\"contracts/mocks/sale/abstract/OracleSaleMock.sol\":{\"keccak256\":\"0x9d77cfd4033911790518ff8989c05025d4fb40ff50d4df57d4f9cce876ceeb48\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e6334d09b73b870bb52c053cee90cbb06318facff9dac760fb70d80c0c1c3574\",\"dweb:/ipfs/QmTDvriAhG3EEXcSBt5CLoqEGNnb7UifsfKGYoJDKzMdrY\"]},\"contracts/sale/FixedPricesSale.sol\":{\"keccak256\":\"0xad902ccee0e2a42eea07b4c1e011202096daff92b43158a1569d139caf93b3f0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a702cc102db63b18e0581da5d6c01ee9320cec4b690c3117b4f77316fce45185\",\"dweb:/ipfs/QmWL7kh3kBSxDYjVoq9gN79UpKLrRBgJCHqquyaCE8UWhe\"]},\"contracts/sale/abstract/OracleSale.sol\":{\"keccak256\":\"0x7a5dae50fe750564347bfcd4eef33b552b901d7c688db6fae8c8e2dd442cce54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e3388afb44cf6b074cf58820e142b43ce4614bed6a004c4275f6ab05da984449\",\"dweb:/ipfs/QmbucAD5Q7cSh4Ryz8cFt7Yx4KdsXMhqcHofR75oLBuMW2\"]},\"contracts/sale/abstract/PurchaseLifeCycles.sol\":{\"keccak256\":\"0xaa18c1de5628dbd5ff281f06354b0156cb8bd24a6f5b490a787931c374266f6a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2e0731a0100fc1bda747176f169cacc5d61d89df1c78884d8843a834d58f7dcd\",\"dweb:/ipfs/QmZRDAxcvQ9QySqnmQLVM1i797NCqSJrJjKUneEmTufXBQ\"]},\"contracts/sale/abstract/Sale.sol\":{\"keccak256\":\"0x32dd01f3ca07c26e834f5784b4f2434c9cf309e3e30b2421a26da16ccf5d0e26\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://009418ea08f714b3f536d09e04d65ec39d3a4e9ba33e554ac8a26036cff8335b\",\"dweb:/ipfs/QmQvMXpCaaAwtHE4qxXYn2rxPgPzqzJM6aGuyz4nut5CH5\"]},\"contracts/sale/interfaces/IOracleSale.sol\":{\"keccak256\":\"0x754fdf88f73519515a9d3748ea136b0e1137095969e91bf7e7b4cf9afb78d164\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://04a0f5ae476580e9a4011d7b6f6e00940498de2be550da0df88fc35ca3b5241c\",\"dweb:/ipfs/QmSjaAFzMbR38ofQtgvyxYKN8N4b7nY4hZAfXkNxe3HSyq\"]},\"contracts/sale/interfaces/IPurchaseNotificationsReceiver.sol\":{\"keccak256\":\"0xa85dcec80f528757a52dd66f88ae14845477e3ec733cb4d22af6db71d19e90f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://36e14e08666d5fd2af5b78848a84a11c666c65c94ca46f88e896c041da1dc1c7\",\"dweb:/ipfs/QmYiHM2DBVuX4adJfJMSvdrdfmDooHxhwGtmhNP7k2DY9n\"]},\"contracts/sale/interfaces/ISale.sol\":{\"keccak256\":\"0x0d731f242662465b2aa3ea9fe3581d0e77e3f61601390f68e4c9c75fc2103f5f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2a04d527397a7f75bd1d701fa7af263cb0799ef4d2f32dc44bb6c9598cee3625\",\"dweb:/ipfs/QmRnsakvvkU1yJyviEM8eytdCTUvjqsw1aqzdntycoG2aV\"]}},\"version\":1}"}},"contracts/mocks/sale/abstract/PurchaseLifeCyclesMock.sol":{"PurchaseLifeCyclesMock":{"abi":[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"path","type":"uint256"}],"name":"PurchaseLifeCyclePath","type":"event"},{"inputs":[],"name":"LIFECYCLE_STEP_DELIVERY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LIFECYCLE_STEP_NOTIFICATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LIFECYCLE_STEP_PAYMENT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LIFECYCLE_STEP_PRICING","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LIFECYCLE_STEP_VALIDATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"getEstimatePurchaseLifeCyclePath","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"getPurchaseForLifeCyclePath","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b5061054c806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80637e78ce541161005b5780637e78ce54146100ac5780639a28c028146100b4578063f1eaf68e14610158578063f5df5e0f146101fa5761007d565b8063079de8611461008257806332d1757e1461009c578063653496fd146100a4575b600080fd5b61008a610202565b60408051918252519081900360200190f35b61008a610207565b61008a61020c565b61008a610211565b610156600480360360a08110156100ca57600080fd5b73ffffffffffffffffffffffffffffffffffffffff823581169260208101359091169160408201359160608101359181019060a08101608082013564010000000081111561011757600080fd5b82018360208201111561012957600080fd5b8035906020019184600183028401116401000000008311171561014b57600080fd5b509092509050610216565b005b610156600480360360a081101561016e57600080fd5b73ffffffffffffffffffffffffffffffffffffffff823581169260208101359091169160408201359160608101359181019060a0810160808201356401000000008111156101bb57600080fd5b8201836020820111156101cd57600080fd5b803590602001918460018302840111640100000000831117156101ef57600080fd5b5090925090506102ee565b61008a610381565b600481565b601081565b600881565b602081565b60006102a18787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525092508291508190505b50604051908082528060200260200182016040528015610284578160200160208202803683370190505b506040805160008082526020820190815281830190925290610386565b90506102ac816103eb565b505060c081015160408051918252517f7062f3f0e42d4d1284efa95538041dcce5d6cd50418297ff5e453bb4055c52139181900360200190a150505050505050565b60006103368787878787878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250925082915081905061025a565b905061034181610412565b60c081015160408051918252517f7062f3f0e42d4d1284efa95538041dcce5d6cd50418297ff5e453bb4055c52139181900360200190a150505050505050565b600281565b61038e61047e565b33815273ffffffffffffffffffffffffffffffffffffffff998a1660208201529790981660408801526060870195909552608086019390935260a085019190915260c084015260e083015261010082015261012081019190915290565b600060606103f883610442565b6104018361044e565b505060c081015160e0909101519091565b61041b81610442565b6104248161044e565b61042d8161045a565b61043681610466565b61043f81610472565b50565b60c00180516002179052565b60c00180516004179052565b60c00180516008179052565b60c00180516010179052565b60c00180516020179052565b604051806101400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008019168152602001600081526020016060815260200160008152602001606081526020016060815260200160608152509056fea264697066735822122099807cd8298b9269c60cbc4d8252586bacc7b1ff8dd1683e738f64803a09579664736f6c63430007060033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x54C DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x7D JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7E78CE54 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0x7E78CE54 EQ PUSH2 0xAC JUMPI DUP1 PUSH4 0x9A28C028 EQ PUSH2 0xB4 JUMPI DUP1 PUSH4 0xF1EAF68E EQ PUSH2 0x158 JUMPI DUP1 PUSH4 0xF5DF5E0F EQ PUSH2 0x1FA JUMPI PUSH2 0x7D JUMP JUMPDEST DUP1 PUSH4 0x79DE861 EQ PUSH2 0x82 JUMPI DUP1 PUSH4 0x32D1757E EQ PUSH2 0x9C JUMPI DUP1 PUSH4 0x653496FD EQ PUSH2 0xA4 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8A PUSH2 0x202 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x8A PUSH2 0x207 JUMP JUMPDEST PUSH2 0x8A PUSH2 0x20C JUMP JUMPDEST PUSH2 0x8A PUSH2 0x211 JUMP JUMPDEST PUSH2 0x156 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0xCA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x117 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x129 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x14B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x216 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x156 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x16E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x1BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x1CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x1EF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x2EE JUMP JUMPDEST PUSH2 0x8A PUSH2 0x381 JUMP JUMPDEST PUSH1 0x4 DUP2 JUMP JUMPDEST PUSH1 0x10 DUP2 JUMP JUMPDEST PUSH1 0x8 DUP2 JUMP JUMPDEST PUSH1 0x20 DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2A1 DUP8 DUP8 DUP8 DUP8 DUP8 DUP8 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD DUP3 SWAP1 MSTORE POP SWAP3 POP DUP3 SWAP2 POP DUP2 SWAP1 POP JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x284 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 DUP2 MSTORE DUP2 DUP4 ADD SWAP1 SWAP3 MSTORE SWAP1 PUSH2 0x386 JUMP JUMPDEST SWAP1 POP PUSH2 0x2AC DUP2 PUSH2 0x3EB JUMP JUMPDEST POP POP PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD PUSH32 0x7062F3F0E42D4D1284EFA95538041DCCE5D6CD50418297FF5E453BB4055C5213 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x336 DUP8 DUP8 DUP8 DUP8 DUP8 DUP8 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD DUP3 SWAP1 MSTORE POP SWAP3 POP DUP3 SWAP2 POP DUP2 SWAP1 POP PUSH2 0x25A JUMP JUMPDEST SWAP1 POP PUSH2 0x341 DUP2 PUSH2 0x412 JUMP JUMPDEST PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD PUSH32 0x7062F3F0E42D4D1284EFA95538041DCCE5D6CD50418297FF5E453BB4055C5213 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x2 DUP2 JUMP JUMPDEST PUSH2 0x38E PUSH2 0x47E JUMP JUMPDEST CALLER DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP10 DUP11 AND PUSH1 0x20 DUP3 ADD MSTORE SWAP8 SWAP1 SWAP9 AND PUSH1 0x40 DUP9 ADD MSTORE PUSH1 0x60 DUP8 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x80 DUP7 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0xA0 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x100 DUP3 ADD MSTORE PUSH2 0x120 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x3F8 DUP4 PUSH2 0x442 JUMP JUMPDEST PUSH2 0x401 DUP4 PUSH2 0x44E JUMP JUMPDEST POP POP PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xE0 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP2 JUMP JUMPDEST PUSH2 0x41B DUP2 PUSH2 0x442 JUMP JUMPDEST PUSH2 0x424 DUP2 PUSH2 0x44E JUMP JUMPDEST PUSH2 0x42D DUP2 PUSH2 0x45A JUMP JUMPDEST PUSH2 0x436 DUP2 PUSH2 0x466 JUMP JUMPDEST PUSH2 0x43F DUP2 PUSH2 0x472 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0xC0 ADD DUP1 MLOAD PUSH1 0x2 OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xC0 ADD DUP1 MLOAD PUSH1 0x4 OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xC0 ADD DUP1 MLOAD PUSH1 0x8 OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xC0 ADD DUP1 MLOAD PUSH1 0x10 OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xC0 ADD DUP1 MLOAD PUSH1 0x20 OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x140 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP1 NOT AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE POP SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP10 DUP1 PUSH29 0xD8298B9269C60CBC4D8252586BACC7B1FF8DD1683E738F64803A095796 PUSH5 0x736F6C6343 STOP SMOD MOD STOP CALLER ","sourceMap":"149:3204:19:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b506004361061007d5760003560e01c80637e78ce541161005b5780637e78ce54146100ac5780639a28c028146100b4578063f1eaf68e14610158578063f5df5e0f146101fa5761007d565b8063079de8611461008257806332d1757e1461009c578063653496fd146100a4575b600080fd5b61008a610202565b60408051918252519081900360200190f35b61008a610207565b61008a61020c565b61008a610211565b610156600480360360a08110156100ca57600080fd5b73ffffffffffffffffffffffffffffffffffffffff823581169260208101359091169160408201359160608101359181019060a08101608082013564010000000081111561011757600080fd5b82018360208201111561012957600080fd5b8035906020019184600183028401116401000000008311171561014b57600080fd5b509092509050610216565b005b610156600480360360a081101561016e57600080fd5b73ffffffffffffffffffffffffffffffffffffffff823581169260208101359091169160408201359160608101359181019060a0810160808201356401000000008111156101bb57600080fd5b8201836020820111156101cd57600080fd5b803590602001918460018302840111640100000000831117156101ef57600080fd5b5090925090506102ee565b61008a610381565b600481565b601081565b600881565b602081565b60006102a18787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525092508291508190505b50604051908082528060200260200182016040528015610284578160200160208202803683370190505b506040805160008082526020820190815281830190925290610386565b90506102ac816103eb565b505060c081015160408051918252517f7062f3f0e42d4d1284efa95538041dcce5d6cd50418297ff5e453bb4055c52139181900360200190a150505050505050565b60006103368787878787878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250925082915081905061025a565b905061034181610412565b60c081015160408051918252517f7062f3f0e42d4d1284efa95538041dcce5d6cd50418297ff5e453bb4055c52139181900360200190a150505050505050565b600281565b61038e61047e565b33815273ffffffffffffffffffffffffffffffffffffffff998a1660208201529790981660408801526060870195909552608086019390935260a085019190915260c084015260e083015261010082015261012081019190915290565b600060606103f883610442565b6104018361044e565b505060c081015160e0909101519091565b61041b81610442565b6104248161044e565b61042d8161045a565b61043681610466565b61043f81610472565b50565b60c00180516002179052565b60c00180516004179052565b60c00180516008179052565b60c00180516010179052565b60c00180516020179052565b604051806101400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008019168152602001600081526020016060815260200160008152602001606081526020016060815260200160608152509056fea264697066735822122099807cd8298b9269c60cbc4d8252586bacc7b1ff8dd1683e738f64803a09579664736f6c63430007060033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x7D JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7E78CE54 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0x7E78CE54 EQ PUSH2 0xAC JUMPI DUP1 PUSH4 0x9A28C028 EQ PUSH2 0xB4 JUMPI DUP1 PUSH4 0xF1EAF68E EQ PUSH2 0x158 JUMPI DUP1 PUSH4 0xF5DF5E0F EQ PUSH2 0x1FA JUMPI PUSH2 0x7D JUMP JUMPDEST DUP1 PUSH4 0x79DE861 EQ PUSH2 0x82 JUMPI DUP1 PUSH4 0x32D1757E EQ PUSH2 0x9C JUMPI DUP1 PUSH4 0x653496FD EQ PUSH2 0xA4 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8A PUSH2 0x202 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x8A PUSH2 0x207 JUMP JUMPDEST PUSH2 0x8A PUSH2 0x20C JUMP JUMPDEST PUSH2 0x8A PUSH2 0x211 JUMP JUMPDEST PUSH2 0x156 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0xCA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x117 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x129 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x14B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x216 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x156 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x16E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x1BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x1CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x1EF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x2EE JUMP JUMPDEST PUSH2 0x8A PUSH2 0x381 JUMP JUMPDEST PUSH1 0x4 DUP2 JUMP JUMPDEST PUSH1 0x10 DUP2 JUMP JUMPDEST PUSH1 0x8 DUP2 JUMP JUMPDEST PUSH1 0x20 DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2A1 DUP8 DUP8 DUP8 DUP8 DUP8 DUP8 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD DUP3 SWAP1 MSTORE POP SWAP3 POP DUP3 SWAP2 POP DUP2 SWAP1 POP JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x284 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 DUP2 MSTORE DUP2 DUP4 ADD SWAP1 SWAP3 MSTORE SWAP1 PUSH2 0x386 JUMP JUMPDEST SWAP1 POP PUSH2 0x2AC DUP2 PUSH2 0x3EB JUMP JUMPDEST POP POP PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD PUSH32 0x7062F3F0E42D4D1284EFA95538041DCCE5D6CD50418297FF5E453BB4055C5213 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x336 DUP8 DUP8 DUP8 DUP8 DUP8 DUP8 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD DUP3 SWAP1 MSTORE POP SWAP3 POP DUP3 SWAP2 POP DUP2 SWAP1 POP PUSH2 0x25A JUMP JUMPDEST SWAP1 POP PUSH2 0x341 DUP2 PUSH2 0x412 JUMP JUMPDEST PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD PUSH32 0x7062F3F0E42D4D1284EFA95538041DCCE5D6CD50418297FF5E453BB4055C5213 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x2 DUP2 JUMP JUMPDEST PUSH2 0x38E PUSH2 0x47E JUMP JUMPDEST CALLER DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP10 DUP11 AND PUSH1 0x20 DUP3 ADD MSTORE SWAP8 SWAP1 SWAP9 AND PUSH1 0x40 DUP9 ADD MSTORE PUSH1 0x60 DUP8 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x80 DUP7 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0xA0 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x100 DUP3 ADD MSTORE PUSH2 0x120 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x3F8 DUP4 PUSH2 0x442 JUMP JUMPDEST PUSH2 0x401 DUP4 PUSH2 0x44E JUMP JUMPDEST POP POP PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xE0 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP2 JUMP JUMPDEST PUSH2 0x41B DUP2 PUSH2 0x442 JUMP JUMPDEST PUSH2 0x424 DUP2 PUSH2 0x44E JUMP JUMPDEST PUSH2 0x42D DUP2 PUSH2 0x45A JUMP JUMPDEST PUSH2 0x436 DUP2 PUSH2 0x466 JUMP JUMPDEST PUSH2 0x43F DUP2 PUSH2 0x472 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0xC0 ADD DUP1 MLOAD PUSH1 0x2 OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xC0 ADD DUP1 MLOAD PUSH1 0x4 OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xC0 ADD DUP1 MLOAD PUSH1 0x8 OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xC0 ADD DUP1 MLOAD PUSH1 0x10 OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xC0 ADD DUP1 MLOAD PUSH1 0x20 OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x140 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP1 NOT AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE POP SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP10 DUP1 PUSH29 0xD8298B9269C60CBC4D8252586BACC7B1FF8DD1683E738F64803A095796 PUSH5 0x736F6C6343 STOP SMOD MOD STOP CALLER ","sourceMap":"149:3204:19:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;321:55;;;:::i;:::-;;;;;;;;;;;;;;;;443:56;;;:::i;382:55::-;;;:::i;505:60::-;;;:::i;572:585::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;572:585:19;;-1:-1:-1;572:585:19;-1:-1:-1;572:585:19;:::i;:::-;;1163:575;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1163:575:19;;-1:-1:-1;1163:575:19;-1:-1:-1;1163:575:19;:::i;257:58::-;;;:::i;321:55::-;370:6;321:55;:::o;443:56::-;493:6;443:56;:::o;382:55::-;431:6;382:55;:::o;505:60::-;559:6;505:60;:::o;572:585::-;777:32;812:234;842:9;865:5;884:3;901:8;923;;812:234;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;812:234:19;-1:-1:-1;812:234:19;;-1:-1:-1;812:234:19;;-1:-1:-1;960:16:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;960:16:19;-1:-1:-1;990:16:19;;;1004:1;990:16;;;;;;1020;;;;;;;;;990;812;:234::i;:::-;777:269;;1057:31;1075:12;1057:17;:31::i;:::-;-1:-1:-1;;1126:23:19;;;;1104:46;;;;;;;;;;;;;;;;572:585;;;;;;;:::o;1163:575::-;1363:32;1398:234;1428:9;1451:5;1470:3;1487:8;1509;;1398:234;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1398:234:19;-1:-1:-1;1398:234:19;;-1:-1:-1;1398:234:19;;-1:-1:-1;1546:16:19;;1398:234;1363:269;;1643:26;1656:12;1643;:26::i;:::-;1707:23;;;;1685:46;;;;;;;;;;;;;;;;1163:575;;;;;;;:::o;257:58::-;309:6;257:58;:::o;2587:764::-;2921:28;;:::i;:::-;2982:10;2961:31;;;3002:30;;;:18;;;:30;3042:22;;;;:14;;;:22;3074:12;;;:18;;;;3102:17;;;:28;;;;3140:17;;;:28;;;;3178:19;;;:32;3220:20;;;:34;3264:20;;;:34;3308:21;;;:36;;;;2961:8;2587:764::o;882:291:30:-;970:18;990:28;1030:21;1042:8;1030:11;:21::i;:::-;1061:18;1070:8;1061;:18::i;:::-;-1:-1:-1;;1103:19:30;;;;1146:20;;;;;1103:19;;882:291::o;1275:225::-;1354:21;1366:8;1354:11;:21::i;:::-;1385:18;1394:8;1385;:18::i;:::-;1413;1422:8;1413;:18::i;:::-;1441:19;1451:8;1441:9;:19::i;:::-;1470:23;1484:8;1470:13;:23::i;:::-;1275:225;:::o;1744:168:19:-;1858:19;;;;309:6;1858:47;1836:69;;1744:168::o;1918:162::-;2029:19;;;;370:6;2029:44;2007:66;;1918:162::o;2086:157::-;2192:19;;;;431:6;2192:44;2170:66;;2086:157::o;2249:159::-;2356:19;;;;493:6;2356:45;2334:67;;2249:159::o;2414:167::-;2525:19;;;;559:6;2525:49;2503:71;;2414:167::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o"},"methodIdentifiers":{"LIFECYCLE_STEP_DELIVERY()":"32d1757e","LIFECYCLE_STEP_NOTIFICATION()":"7e78ce54","LIFECYCLE_STEP_PAYMENT()":"653496fd","LIFECYCLE_STEP_PRICING()":"079de861","LIFECYCLE_STEP_VALIDATION()":"f5df5e0f","getEstimatePurchaseLifeCyclePath(address,address,bytes32,uint256,bytes)":"9a28c028","getPurchaseForLifeCyclePath(address,address,bytes32,uint256,bytes)":"f1eaf68e"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"path\",\"type\":\"uint256\"}],\"name\":\"PurchaseLifeCyclePath\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"LIFECYCLE_STEP_DELIVERY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"LIFECYCLE_STEP_NOTIFICATION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"LIFECYCLE_STEP_PAYMENT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"LIFECYCLE_STEP_PRICING\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"LIFECYCLE_STEP_VALIDATION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"getEstimatePurchaseLifeCyclePath\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"getPurchaseForLifeCyclePath\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/mocks/sale/abstract/PurchaseLifeCyclesMock.sol\":\"PurchaseLifeCyclesMock\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":2000},\"remappings\":[]},\"sources\":{\"contracts/mocks/sale/abstract/PurchaseLifeCyclesMock.sol\":{\"keccak256\":\"0x78e884e4459ee776bb35827cd1209f7616c3ca1a9952232fd39538df8ef8777e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://716ef1ef608adb28dfa3ce3e1ff026dc64deaef789513d9c1d5efae042a514bb\",\"dweb:/ipfs/QmWzYuBcNmKf3xEW9ZANBUHFqBrp8mqFNsXM1wQYcRcYpg\"]},\"contracts/sale/abstract/PurchaseLifeCycles.sol\":{\"keccak256\":\"0xaa18c1de5628dbd5ff281f06354b0156cb8bd24a6f5b490a787931c374266f6a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2e0731a0100fc1bda747176f169cacc5d61d89df1c78884d8843a834d58f7dcd\",\"dweb:/ipfs/QmZRDAxcvQ9QySqnmQLVM1i797NCqSJrJjKUneEmTufXBQ\"]}},\"version\":1}"}},"contracts/mocks/sale/abstract/PurchaseNotificationsReceiverMock.sol":{"PurchaseNotificationsReceiverMock":{"abi":[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes4","name":"result","type":"bytes4"}],"name":"OnPurchaseNotificationReceivedResult","type":"event"},{"anonymous":false,"inputs":[],"name":"PurchaseNotificationReceived","type":"event"},{"inputs":[],"name":"PURCHASE_NOTIFICATION_RECEIVED_RESULT","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes32[]","name":"","type":"bytes32[]"},{"internalType":"bytes32[]","name":"","type":"bytes32[]"},{"internalType":"bytes32[]","name":"","type":"bytes32[]"}],"name":"onPurchaseNotificationReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b506103d3806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806301ffc9a71461004657806361eceae814610099578063c9dde55614610273575b600080fd5b6100856004803603602081101561005c57600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661027b565b604080519115158252519081900360200190f35b61023e60048036036101408110156100b057600080fd5b73ffffffffffffffffffffffffffffffffffffffff8235811692602081013582169260408201359092169160608201359160808101359181019060c0810160a082013564010000000081111561010557600080fd5b82018360208201111561011757600080fd5b8035906020019184600183028401116401000000008311171561013957600080fd5b9193909282359260408101906020013564010000000081111561015b57600080fd5b82018360208201111561016d57600080fd5b8035906020019184602083028401116401000000008311171561018f57600080fd5b9193909290916020810190356401000000008111156101ad57600080fd5b8201836020820111156101bf57600080fd5b803590602001918460208302840111640100000000831117156101e157600080fd5b9193909290916020810190356401000000008111156101ff57600080fd5b82018360208201111561021157600080fd5b8035906020019184602083028401116401000000008311171561023357600080fd5b5090925090506102c5565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b61023e610379565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f61eceae80000000000000000000000000000000000000000000000000000000014919050565b6040516000907faf051f3618aad08c47795b5fe3dabc284d5a7594e8ede9bddeea3c3012395edb908290a1604080517f61eceae800000000000000000000000000000000000000000000000000000000815290517f61eceae836ef303712cdd0c44537fcca4d240bda4dd998b83d4cb046607177a9917fffb5331ec0adf770cdc2542b0aaddc707717dba63305d6d89077e8e93e001821919081900360200190a19f9e505050505050505050505050505050565b7f61eceae836ef303712cdd0c44537fcca4d240bda4dd998b83d4cb046607177a98156fea2646970667358221220d34aa86f50e30f366e967f0b54f9875cdafa5eed1b36db3cf29227105af7f6bb64736f6c63430007060033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D3 DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x41 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x1FFC9A7 EQ PUSH2 0x46 JUMPI DUP1 PUSH4 0x61ECEAE8 EQ PUSH2 0x99 JUMPI DUP1 PUSH4 0xC9DDE556 EQ PUSH2 0x273 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x85 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x5C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH2 0x27B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x23E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH2 0x140 DUP2 LT ISZERO PUSH2 0xB0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP3 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP1 SWAP3 AND SWAP2 PUSH1 0x60 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x80 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xC0 DUP2 ADD PUSH1 0xA0 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x105 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x117 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x139 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 DUP3 CALLDATALOAD SWAP3 PUSH1 0x40 DUP2 ADD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x15B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x16D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x18F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH1 0x20 DUP2 ADD SWAP1 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x1AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x1BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x1E1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH1 0x20 DUP2 ADD SWAP1 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x1FF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x211 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x233 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x2C5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x23E PUSH2 0x379 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND PUSH32 0x61ECEAE800000000000000000000000000000000000000000000000000000000 EQ SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x0 SWAP1 PUSH32 0xAF051F3618AAD08C47795B5FE3DABC284D5A7594E8EDE9BDDEEA3C3012395EDB SWAP1 DUP3 SWAP1 LOG1 PUSH1 0x40 DUP1 MLOAD PUSH32 0x61ECEAE800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH32 0x61ECEAE836EF303712CDD0C44537FCCA4D240BDA4DD998B83D4CB046607177A9 SWAP2 PUSH32 0xFFB5331EC0ADF770CDC2542B0AADDC707717DBA63305D6D89077E8E93E001821 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 SWAP16 SWAP15 POP POP POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x61ECEAE836EF303712CDD0C44537FCCA4D240BDA4DD998B83D4CB046607177A9 DUP2 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD3 0x4A 0xA8 PUSH16 0x50E30F366E967F0B54F9875CDAFA5EED SHL CALLDATASIZE 0xDB EXTCODECOPY CALLCODE SWAP3 0x27 LT GAS 0xF7 0xF6 0xBB PUSH5 0x736F6C6343 STOP SMOD MOD STOP CALLER ","sourceMap":"171:1048:20:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100415760003560e01c806301ffc9a71461004657806361eceae814610099578063c9dde55614610273575b600080fd5b6100856004803603602081101561005c57600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661027b565b604080519115158252519081900360200190f35b61023e60048036036101408110156100b057600080fd5b73ffffffffffffffffffffffffffffffffffffffff8235811692602081013582169260408201359092169160608201359160808101359181019060c0810160a082013564010000000081111561010557600080fd5b82018360208201111561011757600080fd5b8035906020019184600183028401116401000000008311171561013957600080fd5b9193909282359260408101906020013564010000000081111561015b57600080fd5b82018360208201111561016d57600080fd5b8035906020019184602083028401116401000000008311171561018f57600080fd5b9193909290916020810190356401000000008111156101ad57600080fd5b8201836020820111156101bf57600080fd5b803590602001918460208302840111640100000000831117156101e157600080fd5b9193909290916020810190356401000000008111156101ff57600080fd5b82018360208201111561021157600080fd5b8035906020019184602083028401116401000000008311171561023357600080fd5b5090925090506102c5565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b61023e610379565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f61eceae80000000000000000000000000000000000000000000000000000000014919050565b6040516000907faf051f3618aad08c47795b5fe3dabc284d5a7594e8ede9bddeea3c3012395edb908290a1604080517f61eceae800000000000000000000000000000000000000000000000000000000815290517f61eceae836ef303712cdd0c44537fcca4d240bda4dd998b83d4cb046607177a9917fffb5331ec0adf770cdc2542b0aaddc707717dba63305d6d89077e8e93e001821919081900360200190a19f9e505050505050505050505050505050565b7f61eceae836ef303712cdd0c44537fcca4d240bda4dd998b83d4cb046607177a98156fea2646970667358221220d34aa86f50e30f366e967f0b54f9875cdafa5eed1b36db3cf29227105af7f6bb64736f6c63430007060033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x41 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x1FFC9A7 EQ PUSH2 0x46 JUMPI DUP1 PUSH4 0x61ECEAE8 EQ PUSH2 0x99 JUMPI DUP1 PUSH4 0xC9DDE556 EQ PUSH2 0x273 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x85 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x5C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH2 0x27B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x23E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH2 0x140 DUP2 LT ISZERO PUSH2 0xB0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP3 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP1 SWAP3 AND SWAP2 PUSH1 0x60 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x80 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xC0 DUP2 ADD PUSH1 0xA0 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x105 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x117 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x139 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 DUP3 CALLDATALOAD SWAP3 PUSH1 0x40 DUP2 ADD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x15B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x16D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x18F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH1 0x20 DUP2 ADD SWAP1 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x1AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x1BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x1E1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH1 0x20 DUP2 ADD SWAP1 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x1FF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x211 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x233 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x2C5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x23E PUSH2 0x379 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND PUSH32 0x61ECEAE800000000000000000000000000000000000000000000000000000000 EQ SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x0 SWAP1 PUSH32 0xAF051F3618AAD08C47795B5FE3DABC284D5A7594E8EDE9BDDEEA3C3012395EDB SWAP1 DUP3 SWAP1 LOG1 PUSH1 0x40 DUP1 MLOAD PUSH32 0x61ECEAE800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH32 0x61ECEAE836EF303712CDD0C44537FCCA4D240BDA4DD998B83D4CB046607177A9 SWAP2 PUSH32 0xFFB5331EC0ADF770CDC2542B0AADDC707717DBA63305D6D89077E8E93E001821 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 SWAP16 SWAP15 POP POP POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x61ECEAE836EF303712CDD0C44537FCCA4D240BDA4DD998B83D4CB046607177A9 DUP2 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD3 0x4A 0xA8 PUSH16 0x50E30F366E967F0B54F9875CDAFA5EED SHL CALLDATASIZE 0xDB EXTCODECOPY CALLCODE SWAP3 0x27 LT GAS 0xF7 0xF6 0xBB PUSH5 0x736F6C6343 STOP SMOD MOD STOP CALLER ","sourceMap":"171:1048:20:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;571:180:31;;;;;;;;;;;;;;;;-1:-1:-1;571:180:31;;;;:::i;:::-;;;;;;;;;;;;;;;;;;573:644:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;573:644:20;;-1:-1:-1;573:644:20;-1:-1:-1;573:644:20;:::i;:::-;;;;;;;;;;;;;;;;;;;253:207;;;:::i;571:180:31:-;681:63;;;696:48;681:63;571:180;;;:::o;573:644:20:-;1035:30;;1012:6;;1035:30;;1012:6;;1035:30;1143:44;;;;;;;;331:128;;1143:44;;;;;;;;;;1204:6;573:644;-1:-1:-1;;;;;;;;;;;;;;;573:644:20:o;253:207::-;331:128;253:207;:::o"},"methodIdentifiers":{"PURCHASE_NOTIFICATION_RECEIVED_RESULT()":"c9dde556","onPurchaseNotificationReceived(address,address,address,bytes32,uint256,bytes,uint256,bytes32[],bytes32[],bytes32[])":"61eceae8","supportsInterface(bytes4)":"01ffc9a7"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes4\",\"name\":\"result\",\"type\":\"bytes4\"}],\"name\":\"OnPurchaseNotificationReceivedResult\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"PurchaseNotificationReceived\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"PURCHASE_NOTIFICATION_RECEIVED_RESULT\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes32[]\",\"name\":\"\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"\",\"type\":\"bytes32[]\"}],\"name\":\"onPurchaseNotificationReceived\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/mocks/sale/abstract/PurchaseNotificationsReceiverMock.sol\":\"PurchaseNotificationsReceiverMock\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":2000},\"remappings\":[]},\"sources\":{\"@animoca/ethereum-contracts-core-1.1.2/contracts/introspection/IERC165.sol\":{\"keccak256\":\"0x75d489886feb4c87ca958da5b414fe5ea3c089cc3b9fe629acd44ce0628d2abe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4891221c8bff2b6800fa6e8c8815f5e22983a472075aac05cf691ee8db0ac861\",\"dweb:/ipfs/QmYP8kP9hMqfF6xAimG7wd8xM47WzU7PS1yG5hQ5k1joFH\"]},\"contracts/mocks/sale/abstract/PurchaseNotificationsReceiverMock.sol\":{\"keccak256\":\"0xd76677dff7062ddffe40d901ad9d2ff2674517d73acf860a19906f1c900b4c05\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f3249df31f8d377822bb8a49af2bb82f085b5fc0a02cf60d6079e6eec8df73cb\",\"dweb:/ipfs/QmR6H2f6bfq1f6J3XMGH7ArzhqfWXnhGHo3ot6MBd7nLES\"]},\"contracts/sale/abstract/PurchaseNotificationsReceiver.sol\":{\"keccak256\":\"0x96eef6b06d5b9a77c4816377eb9cb7711a1a18a19ceb9dd3fa1ddb1b946b937e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3ff0bf31280a4d0e3cf27c7f0e3dc16f9219592d6853726142ccf0847d6a99e2\",\"dweb:/ipfs/QmP2u9w5Kdo736no9RmfJePSq7hd2c6549QVYEpkWNNt6D\"]},\"contracts/sale/interfaces/IPurchaseNotificationsReceiver.sol\":{\"keccak256\":\"0xa85dcec80f528757a52dd66f88ae14845477e3ec733cb4d22af6db71d19e90f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://36e14e08666d5fd2af5b78848a84a11c666c65c94ca46f88e896c041da1dc1c7\",\"dweb:/ipfs/QmYiHM2DBVuX4adJfJMSvdrdfmDooHxhwGtmhNP7k2DY9n\"]}},\"version\":1}"}},"contracts/mocks/sale/abstract/SwapSaleMock.sol":{"SwapSaleMock":{"abi":[{"inputs":[{"internalType":"address payable","name":"payoutWallet_","type":"address"},{"internalType":"uint256","name":"skusCapacity","type":"uint256"},{"internalType":"uint256","name":"tokensPerSkuCapacity","type":"uint256"},{"internalType":"address","name":"referenceToken","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32[]","name":"names","type":"bytes32[]"},{"indexed":false,"internalType":"bytes32[]","name":"values","type":"bytes32[]"}],"name":"MagicValues","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":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"payoutWallet_","type":"address"}],"name":"PayoutWalletSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"purchaser","type":"address"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"bytes32","name":"sku","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"quantity","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"userData","type":"bytes"},{"indexed":false,"internalType":"uint256","name":"totalPrice","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"extData","type":"bytes"}],"name":"Purchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"sku","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxQuantityPerPurchase","type":"uint256"},{"indexed":false,"internalType":"address","name":"notificationsReceiver","type":"address"}],"name":"SkuCreation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"sku","type":"bytes32"},{"indexed":false,"internalType":"address[]","name":"tokens","type":"address[]"},{"indexed":false,"internalType":"uint256[]","name":"prices","type":"uint256[]"}],"name":"SkuPricingUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Started","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"PRICE_CONVERT_VIA_ORACLE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE_SWAP_VIA_ORACLE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SUPPLY_UNLIMITED","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOKEN_ETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"callUnderscoreOraclePricing","outputs":[{"internalType":"bool","name":"handled","type":"bool"},{"internalType":"uint256","name":"totalPrice","type":"uint256"},{"internalType":"bytes32[]","name":"pricingData","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"},{"internalType":"uint256","name":"totalPrice","type":"uint256"},{"internalType":"bytes32[]","name":"pricingData","type":"bytes32[]"}],"name":"callUnderscorePayment","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"callUnderscorePricing","outputs":[{"internalType":"uint256","name":"totalPrice","type":"uint256"},{"internalType":"bytes32[]","name":"pricingData","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"conversionRates","outputs":[{"internalType":"uint256[]","name":"rates","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"uint256","name":"maxQuantityPerPurchase","type":"uint256"},{"internalType":"address","name":"notificationsReceiver","type":"address"}],"name":"createSku","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"estimatePurchase","outputs":[{"internalType":"uint256","name":"totalPrice","type":"uint256"},{"internalType":"bytes32[]","name":"pricingData","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"sku","type":"bytes32"}],"name":"getSkuInfo","outputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"uint256","name":"remainingSupply","type":"uint256"},{"internalType":"uint256","name":"maxQuantityPerPurchase","type":"uint256"},{"internalType":"address","name":"notificationsReceiver","type":"address"},{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"prices","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSkus","outputs":[{"internalType":"bytes32[]","name":"skus","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"mockSwapRates","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mockSwapVariance","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payoutWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"purchaseFor","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"referenceToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"fromToken","type":"address"},{"internalType":"address","name":"toToken","type":"address"},{"internalType":"uint256","name":"rate","type":"uint256"}],"name":"setMockSwapRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"int256","name":"value","type":"int256"}],"name":"setMockSwapVariance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"payoutWallet_","type":"address"}],"name":"setPayoutWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"start","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256","name":"referenceAmount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"swapRates","outputs":[{"internalType":"uint256[]","name":"rates","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"prices","type":"uint256[]"}],"name":"updateSkuPricing","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"60c06040523480156200001157600080fd5b5060405162003f3838038062003f38833981810160405260808110156200003757600080fd5b5080516020820151604080840151606090940151600080546001600160a01b03191633908117825592519495939491928692869286928692869286928692869286928692869285928592859260019291869183918291907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001600160a01b03811662000110576040805162461bcd60e51b815260206004820152601460248201527f5061796f75743a207a65726f2061646472657373000000000000000000000000604482015290519081900360640190fd5b600180546001600160a01b0383166001600160a01b0319909116811790915560408051918252517fdd880d24a789958a6398c99c2e54ce31bc10a638cbc42f7dd34285479ae0f8559181900360200190a150506003805460ff1916911515919091179055608082905260a081905260408051600280825260608201835260009260208301908036833750506040805160028082526060820183529394506000939092509060208301908036833750508351919250680a89e968a9cbe8aa8960bb1b9173eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee91508490600090620001f557fe5b60200260200101836000815181106200020a57fe5b602002602001018281525082815250505060001960001b6f14d55414131657d5539312535255115160821b90836001815181106200024457fe5b60200260200101836001815181106200025957fe5b602002602001018281525082815250505060008051602062003f188339815191528282604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015620002c2578181015183820152602001620002a8565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101562000303578181015183820152602001620002e9565b5050505090500194505050505060405180910390a15050600780546001600160a01b0319166001600160a01b0389161790555060009450600193508492506200034a915050565b5060405190808252806020026020018201604052801562000375578160200160208202803683370190505b50604080516001808252818301909252919250600091906020808301908036833701905050905060001960001b7f50524943455f434f4e564552545f5649415f4f5241434c4500000000000000009083600081518110620003d257fe5b6020026020010183600081518110620003e757fe5b602002602001018281525082815250505060008051602062003f188339815191528282604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156200045057818101518382015260200162000436565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156200049157818101518382015260200162000477565b5050505090500194505050505060405180910390a1505050505050600060016001600160401b0381118015620004c657600080fd5b50604051908082528060200260200182016040528015620004f1578160200160208202803683370190505b506040805160018082528183019092529192506000919060208083019080368337505083519192507f50524943455f535741505f5649415f4f5241434c45000000000000000000000091600119915084906000906200054c57fe5b60200260200101836000815181106200056157fe5b602002602001018281525082815250505060008051602062003f188339815191528282604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015620005ca578181015183820152602001620005b0565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156200060b578181015183820152602001620005f1565b5050505090500194505050505060405180910390a15050505050505050505060805160a0516138ca6200064e60003980612a84525080611ada52506138ca6000f3fe6080604052600436106101c25760003560e01c80638456cb59116100f7578063a0cf073511610095578063c7b778db11610064578063c7b778db14610b57578063c931f7c914610c26578063f21f537d14610c61578063f2fde38b14610c76576101c2565b8063a0cf0735146108d4578063a963b257146109da578063bda4c5ab14610a6f578063be9a655514610b42576101c2565b80638da5cb5b116100d15780638da5cb5b1461080857806397309b441461081d5780639865bcc8146108bf5780639e049545146108bf576101c2565b80638456cb59146106f35780638488bb4e146107085780638ce507eb1461071d576101c2565b8063579f2c77116101645780635e6e9f701161013e5780635e6e9f70146104f6578063607dc0171461063157806361bd38511461065b5780636b8f9c43146106c0576101c2565b8063579f2c77146104a35780635c4fafc7146104b85780635c975abb146104cd576101c2565b80632c87927b116101a05780632c87927b146103dd5780633c33c51e146104245780633f4ba83a14610467578063558884bd1461047c576101c2565b80631265b651146101c75780631323b066146101f85780632a8a45bc146102f5575b600080fd5b3480156101d357600080fd5b506101dc610ca9565b604080516001600160a01b039092168252519081900360200190f35b34801561020457600080fd5b5061029a600480360360a081101561021b57600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a08101608082013564010000000081111561025b57600080fd5b82018360208201111561026d57600080fd5b8035906020019184600183028401116401000000008311171561028f57600080fd5b509092509050610cb8565b6040518083815260200180602001828103825283818151815260200191508051906020019060200280838360005b838110156102e05781810151838201526020016102c8565b50505050905001935050505060405180910390f35b34801561030157600080fd5b5061031f6004803603602081101561031857600080fd5b5035610dad565b60405180878152602001868152602001858152602001846001600160a01b031681526020018060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561038457818101518382015260200161036c565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156103c35781810151838201526020016103ab565b505050509050019850505050505050505060405180910390f35b3480156103e957600080fd5b506104226004803603608081101561040057600080fd5b50803590602081013590604081013590606001356001600160a01b0316610f52565b005b34801561043057600080fd5b506104226004803603606081101561044757600080fd5b506001600160a01b03813581169160208101359091169060400135610f64565b34801561047357600080fd5b50610422610f90565b34801561048857600080fd5b50610491610ffe565b60408051918252519081900360200190f35b3480156104af57600080fd5b50610491611004565b3480156104c457600080fd5b506101dc61100a565b3480156104d957600080fd5b506104e2611022565b604080519115158252519081900360200190f35b34801561050257600080fd5b506104226004803603606081101561051957600080fd5b8135919081019060408101602082013564010000000081111561053b57600080fd5b82018360208201111561054d57600080fd5b8035906020019184602083028401116401000000008311171561056f57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092959493602081019350359150506401000000008111156105bf57600080fd5b8201836020820111156105d157600080fd5b803590602001918460208302840111640100000000831117156105f357600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061102b945050505050565b34801561063d57600080fd5b506104226004803603602081101561065457600080fd5b5035611208565b34801561066757600080fd5b5061067061120d565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156106ac578181015183820152602001610694565b505050509050019250505060405180910390f35b3480156106cc57600080fd5b50610422600480360360208110156106e357600080fd5b50356001600160a01b0316611268565b3480156106ff57600080fd5b50610422611335565b34801561071457600080fd5b506101dc61139c565b610422600480360360e081101561073357600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a08101608082013564010000000081111561077357600080fd5b82018360208201111561078557600080fd5b803590602001918460018302840111640100000000831117156107a757600080fd5b919390928235926040810190602001356401000000008111156107c957600080fd5b8201836020820111156107db57600080fd5b803590602001918460208302840111640100000000831117156107fd57600080fd5b5090925090506113ab565b34801561081457600080fd5b506101dc611475565b34801561082957600080fd5b5061029a600480360360a081101561084057600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a08101608082013564010000000081111561088057600080fd5b82018360208201111561089257600080fd5b803590602001918460018302840111640100000000831117156108b457600080fd5b509092509050611484565b3480156108cb57600080fd5b50610491611523565b3480156108e057600080fd5b50610976600480360360a08110156108f757600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a08101608082013564010000000081111561093757600080fd5b82018360208201111561094957600080fd5b8035906020019184600183028401116401000000008311171561096b57600080fd5b509092509050611529565b60405180841515815260200183815260200180602001828103825283818151815260200191508051906020019060200280838360005b838110156109c45781810151838201526020016109ac565b5050505090500194505050505060405180910390f35b610422600480360360a08110156109f057600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135640100000000811115610a3057600080fd5b820183602082011115610a4257600080fd5b80359060200191846001830284011164010000000083111715610a6457600080fd5b5090925090506115f1565b348015610a7b57600080fd5b5061067060048036036060811015610a9257600080fd5b810190602081018135640100000000811115610aad57600080fd5b820183602082011115610abf57600080fd5b80359060200191846020830284011164010000000083111715610ae157600080fd5b91939092823592604081019060200135640100000000811115610b0357600080fd5b820183602082011115610b1557600080fd5b80359060200191846001830284011164010000000083111715610b3757600080fd5b5090925090506116d7565b348015610b4e57600080fd5b506104226117e6565b348015610b6357600080fd5b5061067060048036036040811015610b7a57600080fd5b810190602081018135640100000000811115610b9557600080fd5b820183602082011115610ba757600080fd5b80359060200191846020830284011164010000000083111715610bc957600080fd5b919390929091602081019035640100000000811115610be757600080fd5b820183602082011115610bf957600080fd5b80359060200191846001830284011164010000000083111715610c1b57600080fd5b5090925090506117f9565b348015610c3257600080fd5b5061049160048036036040811015610c4957600080fd5b506001600160a01b03813581169160200135166118e5565b348015610c6d57600080fd5b50610491611902565b348015610c8257600080fd5b5061042260048036036020811015610c9957600080fd5b50356001600160a01b0316611908565b6007546001600160a01b031681565b6000606060025460001415610d14576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b610d1c61196e565b610d24613802565b610d2c6119c6565b6001600160a01b03908116825289811660208084019190915290891660408084019190915260608301899052608083018890528051601f870183900483028101830190915285815290869086908190840183828082843760009201919091525050505060a0820152610d9d816119ca565b9250925050965096945050505050565b6000818152600660205260408120819081908190606090819083610dd3600483016119f1565b82549850905087610e2b576040805162461bcd60e51b815260206004820152601660248201527f53616c653a206e6f6e2d6578697374656e7420736b7500000000000000000000604482015290519081900360640190fd5b60018201546002830154600384015491985096506001600160a01b031694508067ffffffffffffffff81118015610e6157600080fd5b50604051908082528060200260200182016040528015610e8b578160200160208202803683370190505b5093508067ffffffffffffffff81118015610ea557600080fd5b50604051908082528060200260200182016040528015610ecf578160200160208202803683370190505b50925060005b81811015610f4657600080610eed60048601846119f5565b915091508160001c878481518110610f0157fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508060001c868481518110610f3157fe5b60209081029190910101525050600101610ed5565b50505091939550919395565b610f5e84848484611a86565b50505050565b6001600160a01b0392831660009081526008602090815260408083209490951682529290925291902055565b600254610fe4576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b610ff4610fef6119c6565b611cbd565b610ffc611d84565b565b60095481565b60011981565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b60035460ff1681565b611036610fef6119c6565b81518151811461108d576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20696e636f6e73697374656e742061727261797300000000000000604482015290519081900360640190fd5b600084815260066020526040902080546110ee576040805162461bcd60e51b815260206004820152601660248201527f53616c653a206e6f6e2d6578697374656e7420736b7500000000000000000000604482015290519081900360640190fd5b6004810182611139576000611102826119f1565b905060005b8181101561113257600061111b84826119f5565b5090506111288482611ddc565b5050600101611107565b5050611144565b611144818686611ebc565b857fcb3fe5489e0cd43d0f4a33d1e09a4a0463a03d0d38f56165530854e5540db1438686604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156111ac578181015183820152602001611194565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156111eb5781810151838201526020016111d3565b5050505090500194505050505060405180910390a2505050505050565b600955565b6060600460000180548060200260200160405190810160405280929190818152602001828054801561125e57602002820191906000526020600020905b81548152602001906001019080831161124a575b5050505050905090565b611273610fef6119c6565b6001600160a01b0381166112ce576040805162461bcd60e51b815260206004820152601460248201527f5061796f75743a207a65726f2061646472657373000000000000000000000000604482015290519081900360640190fd5b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03838116919091179182905560408051929091168252517fdd880d24a789958a6398c99c2e54ce31bc10a638cbc42f7dd34285479ae0f855916020908290030190a150565b600254611389576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b611394610fef6119c6565b610ffc611f44565b6001546001600160a01b031681565b6113b3613802565b6113bb6119c6565b6001600160a01b0390811682528a8116602080840191909152908a16604080840191909152606083018a9052608083018990528051601f880183900483028101830190915286815290879087908190840183828082843760009201919091525050505060a082015260c081018490526040805160208085028281018201909352848252909185918591829185019084908082843760009201919091525050505060e082015261146981611f82565b50505050505050505050565b6000546001600160a01b031690565b60006060611490613802565b6114986119c6565b6001600160a01b03908116825289811660208084019190915290891660408084019190915260608301899052608083018890528051601f870183900483028101830190915285815290869086908190840183828082843760009201919091525050505060a082015261150981612221565b8060c0015192508060e00151915050965096945050505050565b60001981565b6000806060611536613802565b61153e6119c6565b6001600160a01b0390811682528a8116602080840191909152908a16604080840191909152606083018a9052608083018990528051601f8801839004830281018301909152868152908790879081908401838280828437600092018290525060a08601949094525050508881526006602052604081209060048201906115c484836122c3565b90506115d1848383612333565b96508360c0015195508360e0015194505050505096509650969350505050565b600254611645576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b61164d61196e565b611655613802565b61165d6119c6565b6001600160a01b03908116825287811660208084019190915290871660408084019190915260608301879052608083018690528051601f850183900483028101830190915283815290849084908190840183828082843760009201919091525050505060a08201526116ce81612438565b50505050505050565b6060848067ffffffffffffffff811180156116f157600080fd5b5060405190808252806020026020018201604052801561171b578160200160208202803683370190505b50915060005b818110156117db57600061179d89898481811061173a57fe5b905060200201356001600160a01b0316600760009054906101000a90046001600160a01b03168989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061246592505050565b90506117bb816117b589670de0b6b3a76400006124ff565b90612558565b8483815181106117c757fe5b602090810291909101015250600101611721565b505095945050505050565b6117f1610fef6119c6565b610ff46125bf565b6060838067ffffffffffffffff8111801561181357600080fd5b5060405190808252806020026020018201604052801561183d578160200160208202803683370190505b50915060005b818110156118db576118bc87878381811061185a57fe5b905060200201356001600160a01b0316600760009054906101000a90046001600160a01b031687878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061264192505050565b8382815181106118c857fe5b6020908102919091010152600101611843565b5050949350505050565b600860209081526000928352604080842090915290825290205481565b60025490565b611913610fef6119c6565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383811691821780845560405192939116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b60035460ff1615610ffc576040805162461bcd60e51b815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b3390565b600060606119d78361264a565b6119e083612221565b505060c081015160e0909101519091565b5490565b815460009081908310611a4f576040805162461bcd60e51b815260206004820152601c60248201527f456e756d4d61703a20696e646578206f7574206f6620626f756e647300000000604482015290519081900360640190fd5b6000846000018481548110611a6057fe5b906000526020600020906002020190508060000154816001015492509250509250929050565b82611ad8576040805162461bcd60e51b815260206004820152601160248201527f53616c653a207a65726f20737570706c79000000000000000000000000000000604482015290519081900360640190fd5b7f0000000000000000000000000000000000000000000000000000000000000000611b0360046119f1565b10611b55576040805162461bcd60e51b815260206004820152601360248201527f53616c653a20746f6f206d616e7920736b757300000000000000000000000000604482015290519081900360640190fd5b611b606004856128f4565b611bb1576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20736b7520616c7265616479206372656174656400000000000000604482015290519081900360640190fd5b6001600160a01b03811615611c2357611bd2816001600160a01b031661293e565b611c23576040805162461bcd60e51b815260206004820152601b60248201527f53616c653a206e6f6e2d636f6e74726163742072656365697665720000000000604482015290519081900360640190fd5b60008481526006602090815260409182902085815560018101869055600281018590556003810180546001600160a01b03861673ffffffffffffffffffffffffffffffffffffffff1990911681179091558351888152928301879052828401869052606083015291517f38bd4aabce684540cd61351b91f2f5facf9d6963934347e25aab93d87ae7ac149181900360800190a15050505050565b306001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015611cf657600080fd5b505afa158015611d0a573d6000803e3d6000fd5b505050506040513d6020811015611d2057600080fd5b50516001600160a01b03828116911614611d81576040805162461bcd60e51b815260206004820152601660248201527f4f776e61626c653a206e6f7420746865206f776e657200000000000000000000604482015290519081900360640190fd5b50565b611d8c612944565b6003805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611dbf6119c6565b604080516001600160a01b039092168252519081900360200190a1565b60008181526001830160205260408120548015611eb05783546000198083019190810190600090879083908110611e0f57fe5b9060005260206000209060020201905080876000018481548110611e2f57fe5b600091825260208083208454600290930201918255600193840154918401919091558354825289830190526040902090840190558654879080611e6e57fe5b6000828152602080822060026000199094019384020182815560019081018390559290935588815289820190925260408220919091559450611eb69350505050565b60009150505b92915050565b611ec783838361299b565b611ed0836119f1565b1580611eee5750600754611eee9084906001600160a01b0316612aff565b611f3f576040805162461bcd60e51b815260206004820152601860248201527f53616c653a206e6f207265666572656e636520746f6b656e0000000000000000604482015290519081900360640190fd5b505050565b611f4c61196e565b6003805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611dbf6119c6565b60e0810151511580611fb457506001600019038160e00151600081518110611fa657fe5b602002602001015160001c14155b15611fc757611fc281612b17565b611d81565b60408101516001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561204e578060c00151341015612049576040805162461bcd60e51b815260206004820152601660248201527f53616c653a20696e73756666696369656e742045544800000000000000000000604482015290519081900360640190fd5b612075565b6120756120596119c6565b60c083015160408401516001600160a01b031691903090612c62565b60008160e0015160018151811061208857fe5b602002602001015160001c905060006120ba670de0b6b3a76400006117b58560c00151856124ff90919063ffffffff16565b604084015160075460a08601519293506000926120e392916001600160a01b0316908590612cea565b60408501519091506001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561216457600061211b3483612d18565b9050801561215e5784516040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561215c573d6000803e3d6000fd5b505b5061219d565b60c08401516000906121769083612d18565b9050801561219b578451604086015161219b916001600160a01b039091169083612d75565b505b6007546001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415612204576001546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156121fe573d6000803e3d6000fd5b50610f5e565b600154600754610f5e916001600160a01b03918216911683612d75565b606081015160009081526006602052604090208054612287576040805162461bcd60e51b815260206004820152601560248201527f53616c653a20756e737570706f7274656420534b550000000000000000000000604482015290519081900360640190fd5b60048101600061229784836122c3565b90506122a4848383612333565b610f5e5760808401516122b89082906124ff565b60c085015250505050565b60408201516000906122df9083906001600160a01b0316612df5565b905080611eb6576040805162461bcd60e51b815260206004820152601f60248201527f53616c653a20756e737570706f72746564207061796d656e7420746f6b656e00604482015290519081900360640190fd5b6000600119821461235057612349848484612e85565b9050612431565b60075460009061236a9085906001600160a01b0316612df5565b60808601519091506000906123809083906124ff565b604087015160075460a08901519293506000926123a992916001600160a01b0316908590612465565b905060006123c3826117b585670de0b6b3a76400006124ff565b604080516002808252606082018352929350919060208301908036833750505060e0890181905280518791906000906123f857fe5b6020026020010181815250508060001b8860e0015160018151811061241957fe5b60209081029190910101525060c08701525060019150505b9392505050565b6124418161264a565b61244a81612221565b61245381611f82565b61245c81612f7d565b611d8181612fc9565b6001600160a01b038085166000908152600860209081526040808320938716835292905290812054806124df576040805162461bcd60e51b815260206004820152601460248201527f53616c653a20756e646566696e65642072617465000000000000000000000000604482015290519081900360640190fd5b6124f5816117b586670de0b6b3a76400006124ff565b9695505050505050565b60008261250e57506000611eb6565b8282028284828161251b57fe5b04146124315760405162461bcd60e51b81526004018080602001828103825260218152602001806138746021913960400191505060405180910390fd5b60008082116125ae576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b8183816125b757fe5b049392505050565b60025415612614576040805162461bcd60e51b815260206004820152601260248201527f537461727461626c653a20737461727465640000000000000000000000000000604482015290519081900360640190fd5b426002557f27029695aa5f602a4ee81f4c32dfa86e562f200a17966496f3a7c3f2ec0f9417611dbf6119c6565b50600192915050565b60208101516001600160a01b03166126a9576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a207a65726f206164647265737320726563697069656e7400000000604482015290519081900360640190fd5b60408101516001600160a01b0316612708576040805162461bcd60e51b815260206004820152601860248201527f53616c653a207a65726f206164647265737320746f6b656e0000000000000000604482015290519081900360640190fd5b608081015161275e576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a207a65726f207175616e7469747920707572636861736500000000604482015290519081900360640190fd5b6060810151600090815260066020526040902080546127c4576040805162461bcd60e51b815260206004820152601660248201527f53616c653a206e6f6e2d6578697374656e7420736b7500000000000000000000604482015290519081900360640190fd5b816080015181600201541015612821576040805162461bcd60e51b815260206004820152601860248201527f53616c653a2061626f7665206d6178207175616e746974790000000000000000604482015290519081900360640190fd5b80546000191461288857816080015181600101541015612888576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20696e73756666696369656e7420737570706c7900000000000000604482015290519081900360640190fd5b60408201516001600160a01b03166128a36004830182612aff565b611f3f576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a206e6f6e2d6578697374656e7420736b7520746f6b656e00000000604482015290519081900360640190fd5b60006129008383612aff565b61293657508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611eb6565b506000611eb6565b3b151590565b60035460ff16610ffc576040805162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604482015290519081900360640190fd5b60005b8251811015612a815760008382815181106129b557fe5b6020026020010151905060006001600160a01b0316816001600160a01b03161415612a27576040805162461bcd60e51b815260206004820152601860248201527f53616c653a207a65726f206164647265737320746f6b656e0000000000000000604482015290519081900360640190fd5b6000838381518110612a3557fe5b602002602001015190508060001415612a6157612a5b866001600160a01b038416611ddc565b50612a77565b612a75866001600160a01b038416836134ae565b505b505060010161299e565b507f0000000000000000000000000000000000000000000000000000000000000000612aac846119f1565b1115611f3f576040805162461bcd60e51b815260206004820152601560248201527f53616c653a20746f6f206d616e7920746f6b656e730000000000000000000000604482015290519081900360640190fd5b60009081526001919091016020526040902054151590565b60408101516001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415612c3a578060c00151341015612b99576040805162461bcd60e51b815260206004820152601660248201527f53616c653a20696e73756666696369656e742045544800000000000000000000604482015290519081900360640190fd5b60015460c08201516040516001600160a01b039092169181156108fc0291906000818181858888f19350505050158015612bd7573d6000803e3d6000fd5b506000612bf18260c0015134612d1890919063ffffffff16565b90508015612c345781516040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612c32573d6000803e3d6000fd5b505b50611d81565b611d81612c456119c6565b60015460c084015160408501516001600160a01b03908116939216905b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052610f5e908590613545565b6000612cf885858585612465565b9050612d0f612d0860095461374d565b82906137a8565b50949350505050565b600082821115612d6f576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052611f3f908490613545565b600081815260018301602052604081205480612e58576040805162461bcd60e51b815260206004820152601860248201527f456e756d4d61703a206e6f6e6578697374656e74206b65790000000000000000604482015290519081900360640190fd5b836000016001820381548110612e6a57fe5b90600052602060002090600202016001015491505092915050565b60006000198214612e9857506000612431565b600754600090612eb29085906001600160a01b0316612df5565b604086015160075460a0880151929350600092612ed992916001600160a01b031690612641565b90506000612f0a8760800151612f04846117b5670de0b6b3a7640000886124ff90919063ffffffff16565b906124ff565b604080516002808252606082018352929350919060208301908036833750505060e088018190528051869190600090612f3f57fe5b6020026020010181815250508160001b8760e00151600181518110612f6057fe5b602090810291909101015260c08701525060019150509392505050565b60608101516000908152600660205260409020805460001914612fc55760808201516001820154612fad91612d18565b60608301516000908152600660205260409020600101555b5050565b806060015181604001516001600160a01b031682600001516001600160a01b03167f29f844483ca6b10b5c0611d039afc15ce8f6380e905307b381c3a8ee4e90e11e846020015185608001518660a001518760c001518860e001518961010001518a610120015160405160200180848051906020019060200280838360005b83811015613060578181015183820152602001613048565b50505050905001838051906020019060200280838360005b83811015613090578181015183820152602001613078565b50505050905001828051906020019060200280838360005b838110156130c05781810151838201526020016130a8565b50505050905001935050505060405160208183030381529060405260405180866001600160a01b031681526020018581526020018060200184815260200180602001838103835286818151815260200191508051906020019080838360005b8381101561313757818101518382015260200161311f565b50505050905090810190601f1680156131645780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b8381101561319757818101518382015260200161317f565b50505050905090810190601f1680156131c45780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390a460608101516000908152600660205260409020600301546001600160a01b03168015612fc5576361eceae860e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916816001600160a01b03166361eceae8846000015185602001518660400151876060015188608001518960a001518a60c001518b60e001518c61010001518d61012001516040518b63ffffffff1660e01b8152600401808b6001600160a01b031681526020018a6001600160a01b03168152602001896001600160a01b031681526020018881526020018781526020018060200186815260200180602001806020018060200185810385528a818151815260200191508051906020019080838360005b838110156132fd5781810151838201526020016132e5565b50505050905090810190601f16801561332a5780820380516001836020036101000a031916815260200191505b508581038452885181528851602091820191808b01910280838360005b8381101561335f578181015183820152602001613347565b50505050905001858103835287818151815260200191508051906020019060200280838360005b8381101561339e578181015183820152602001613386565b50505050905001858103825286818151815260200191508051906020019060200280838360005b838110156133dd5781810151838201526020016133c5565b505050509050019e505050505050505050505050505050602060405180830381600087803b15801561340e57600080fd5b505af1158015613422573d6000803e3d6000fd5b505050506040513d602081101561343857600080fd5b50517fffffffff000000000000000000000000000000000000000000000000000000001614612fc5576040805162461bcd60e51b815260206004820152601a60248201527f53616c653a206e6f74696669636174696f6e2072656675736564000000000000604482015290519081900360640190fd5b600082815260018401602052604081205480613513575050604080518082018252838152602080820184815286546001818101895560008981528481209551600290930290950191825591519082015586548684528188019092529290912055612431565b8285600001600183038154811061352657fe5b9060005260206000209060020201600101819055506000915050612431565b816135586001600160a01b03821661293e565b6135a9576040805162461bcd60e51b815260206004820152601a60248201527f4552433230577261707065723a206e6f6e2d636f6e7472616374000000000000604482015290519081900360640190fd5b600080826001600160a01b0316846040518082805190602001908083835b6020831061360457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016135c7565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613666576040519150601f19603f3d011682016040523d82523d6000602084013e61366b565b606091505b509150915081156136ea578051156136e55780806020019051602081101561369257600080fd5b50516136e5576040805162461bcd60e51b815260206004820152601e60248201527f4552433230577261707065723a206f7065726174696f6e206661696c65640000604482015290519081900360640190fd5b613746565b805161373d576040805162461bcd60e51b815260206004820152601e60248201527f4552433230577261707065723a206f7065726174696f6e206661696c65640000604482015290519081900360640190fd5b80518082602001fd5b5050505050565b6000808212156137a4576040805162461bcd60e51b815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f736974697665604482015290519081900360640190fd5b5090565b600082820183811015612431576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60405180610140016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160008019168152602001600081526020016060815260200160008152602001606081526020016060815260200160608152509056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220c4e75bb10eaf1422ddc64e093ef0ba270fd4dcf73ec30fd57d22121ffd33cd2964736f6c63430007060033abb92614f53337043b55dc996a83ebb09adce78ec336ca188ea02180b61d1c14","opcodes":"PUSH1 0xC0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x3F38 CODESIZE SUB DUP1 PUSH3 0x3F38 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x80 DUP2 LT ISZERO PUSH3 0x37 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 DUP1 DUP5 ADD MLOAD PUSH1 0x60 SWAP1 SWAP5 ADD MLOAD PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND CALLER SWAP1 DUP2 OR DUP3 SSTORE SWAP3 MLOAD SWAP5 SWAP6 SWAP4 SWAP5 SWAP2 SWAP3 DUP7 SWAP3 DUP7 SWAP3 DUP7 SWAP3 DUP7 SWAP3 DUP7 SWAP3 DUP7 SWAP3 DUP7 SWAP3 DUP7 SWAP3 DUP7 SWAP3 DUP7 SWAP3 DUP7 SWAP3 DUP6 SWAP3 DUP6 SWAP3 DUP6 SWAP3 PUSH1 0x1 SWAP3 SWAP2 DUP7 SWAP2 DUP4 SWAP2 DUP3 SWAP2 SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP3 SWAP1 LOG3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH3 0x110 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061796F75743A207A65726F2061646472657373000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 SWAP2 AND DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD PUSH32 0xDD880D24A789958A6398C99C2E54CE31BC10A638CBC42F7DD34285479AE0F855 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP POP PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x80 DUP3 SWAP1 MSTORE PUSH1 0xA0 DUP2 SWAP1 MSTORE 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 POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x2 DUP1 DUP3 MSTORE PUSH1 0x60 DUP3 ADD DUP4 MSTORE SWAP4 SWAP5 POP PUSH1 0x0 SWAP4 SWAP1 SWAP3 POP SWAP1 PUSH1 0x20 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP POP DUP4 MLOAD SWAP2 SWAP3 POP PUSH9 0xA89E968A9CBE8AA89 PUSH1 0xBB SHL SWAP2 PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE SWAP2 POP DUP5 SWAP1 PUSH1 0x0 SWAP1 PUSH3 0x1F5 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP4 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH3 0x20A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP3 DUP2 MSTORE POP DUP3 DUP2 MSTORE POP POP POP PUSH1 0x0 NOT PUSH1 0x0 SHL PUSH16 0x14D55414131657D55393125352551151 PUSH1 0x82 SHL SWAP1 DUP4 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH3 0x244 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP4 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH3 0x259 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP3 DUP2 MSTORE POP DUP3 DUP2 MSTORE POP POP POP PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x3F18 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP3 DUP3 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x2C2 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x2A8 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x303 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x2E9 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP PUSH1 0x7 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND OR SWAP1 SSTORE POP PUSH1 0x0 SWAP5 POP PUSH1 0x1 SWAP4 POP DUP5 SWAP3 POP PUSH3 0x34A SWAP2 POP POP JUMP JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH3 0x375 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 DUP1 DUP3 MSTORE DUP2 DUP4 ADD SWAP1 SWAP3 MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 SWAP1 PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP PUSH1 0x0 NOT PUSH1 0x0 SHL PUSH32 0x50524943455F434F4E564552545F5649415F4F5241434C450000000000000000 SWAP1 DUP4 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH3 0x3D2 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP4 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH3 0x3E7 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP3 DUP2 MSTORE POP DUP3 DUP2 MSTORE POP POP POP PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x3F18 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP3 DUP3 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x450 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x436 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x491 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x477 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP POP POP PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP1 ISZERO PUSH3 0x4C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH3 0x4F1 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 DUP1 DUP3 MSTORE DUP2 DUP4 ADD SWAP1 SWAP3 MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 SWAP1 PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP POP DUP4 MLOAD SWAP2 SWAP3 POP PUSH32 0x50524943455F535741505F5649415F4F5241434C450000000000000000000000 SWAP2 PUSH1 0x1 NOT SWAP2 POP DUP5 SWAP1 PUSH1 0x0 SWAP1 PUSH3 0x54C JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP4 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH3 0x561 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP3 DUP2 MSTORE POP DUP3 DUP2 MSTORE POP POP POP PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x3F18 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP3 DUP3 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x5CA JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x5B0 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x60B JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x5F1 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP POP POP POP POP POP POP PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH2 0x38CA PUSH3 0x64E PUSH1 0x0 CODECOPY DUP1 PUSH2 0x2A84 MSTORE POP DUP1 PUSH2 0x1ADA MSTORE POP PUSH2 0x38CA PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1C2 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8456CB59 GT PUSH2 0xF7 JUMPI DUP1 PUSH4 0xA0CF0735 GT PUSH2 0x95 JUMPI DUP1 PUSH4 0xC7B778DB GT PUSH2 0x64 JUMPI DUP1 PUSH4 0xC7B778DB EQ PUSH2 0xB57 JUMPI DUP1 PUSH4 0xC931F7C9 EQ PUSH2 0xC26 JUMPI DUP1 PUSH4 0xF21F537D EQ PUSH2 0xC61 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0xC76 JUMPI PUSH2 0x1C2 JUMP JUMPDEST DUP1 PUSH4 0xA0CF0735 EQ PUSH2 0x8D4 JUMPI DUP1 PUSH4 0xA963B257 EQ PUSH2 0x9DA JUMPI DUP1 PUSH4 0xBDA4C5AB EQ PUSH2 0xA6F JUMPI DUP1 PUSH4 0xBE9A6555 EQ PUSH2 0xB42 JUMPI PUSH2 0x1C2 JUMP JUMPDEST DUP1 PUSH4 0x8DA5CB5B GT PUSH2 0xD1 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x808 JUMPI DUP1 PUSH4 0x97309B44 EQ PUSH2 0x81D JUMPI DUP1 PUSH4 0x9865BCC8 EQ PUSH2 0x8BF JUMPI DUP1 PUSH4 0x9E049545 EQ PUSH2 0x8BF JUMPI PUSH2 0x1C2 JUMP JUMPDEST DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x6F3 JUMPI DUP1 PUSH4 0x8488BB4E EQ PUSH2 0x708 JUMPI DUP1 PUSH4 0x8CE507EB EQ PUSH2 0x71D JUMPI PUSH2 0x1C2 JUMP JUMPDEST DUP1 PUSH4 0x579F2C77 GT PUSH2 0x164 JUMPI DUP1 PUSH4 0x5E6E9F70 GT PUSH2 0x13E JUMPI DUP1 PUSH4 0x5E6E9F70 EQ PUSH2 0x4F6 JUMPI DUP1 PUSH4 0x607DC017 EQ PUSH2 0x631 JUMPI DUP1 PUSH4 0x61BD3851 EQ PUSH2 0x65B JUMPI DUP1 PUSH4 0x6B8F9C43 EQ PUSH2 0x6C0 JUMPI PUSH2 0x1C2 JUMP JUMPDEST DUP1 PUSH4 0x579F2C77 EQ PUSH2 0x4A3 JUMPI DUP1 PUSH4 0x5C4FAFC7 EQ PUSH2 0x4B8 JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x4CD JUMPI PUSH2 0x1C2 JUMP JUMPDEST DUP1 PUSH4 0x2C87927B GT PUSH2 0x1A0 JUMPI DUP1 PUSH4 0x2C87927B EQ PUSH2 0x3DD JUMPI DUP1 PUSH4 0x3C33C51E EQ PUSH2 0x424 JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x467 JUMPI DUP1 PUSH4 0x558884BD EQ PUSH2 0x47C JUMPI PUSH2 0x1C2 JUMP JUMPDEST DUP1 PUSH4 0x1265B651 EQ PUSH2 0x1C7 JUMPI DUP1 PUSH4 0x1323B066 EQ PUSH2 0x1F8 JUMPI DUP1 PUSH4 0x2A8A45BC EQ PUSH2 0x2F5 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1DC PUSH2 0xCA9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x204 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x29A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x21B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x25B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x26D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x28F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0xCB8 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2E0 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2C8 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP4 POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x301 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x31F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x318 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0xDAD JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x384 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x36C JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3C3 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3AB JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP9 POP POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x422 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x400 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xF52 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x430 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x422 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x447 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0xF64 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x473 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x422 PUSH2 0xF90 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x488 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x491 PUSH2 0xFFE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x491 PUSH2 0x1004 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1DC PUSH2 0x100A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4E2 PUSH2 0x1022 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x502 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x422 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x519 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x53B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x54D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x56F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 SWAP5 SWAP4 PUSH1 0x20 DUP2 ADD SWAP4 POP CALLDATALOAD SWAP2 POP POP PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x5BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x5D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x5F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0x102B SWAP5 POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x63D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x422 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x654 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1208 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x667 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x670 PUSH2 0x120D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 DUP2 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x6AC JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x694 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x422 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x6E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1268 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6FF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x422 PUSH2 0x1335 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x714 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1DC PUSH2 0x139C JUMP JUMPDEST PUSH2 0x422 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x733 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x773 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x785 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x7A7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 DUP3 CALLDATALOAD SWAP3 PUSH1 0x40 DUP2 ADD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x7C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x7DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x7FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x13AB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x814 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1DC PUSH2 0x1475 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x829 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x29A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x840 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x880 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x892 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x8B4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x1484 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x491 PUSH2 0x1523 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x976 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x8F7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x937 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x949 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x96B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x1529 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP5 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x9C4 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x9AC JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x422 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x9F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xA30 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xA42 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xA64 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x15F1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA7B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x670 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0xA92 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xAAD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xABF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xAE1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 DUP3 CALLDATALOAD SWAP3 PUSH1 0x40 DUP2 ADD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xB03 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xB15 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xB37 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x16D7 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xB4E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x422 PUSH2 0x17E6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xB63 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x670 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xB7A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xB95 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xBA7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xBC9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH1 0x20 DUP2 ADD SWAP1 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xBE7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xBF9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xC1B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x17F9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xC32 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x491 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xC49 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x18E5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xC6D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x491 PUSH2 0x1902 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xC82 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x422 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xC99 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1908 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x2 SLOAD PUSH1 0x0 EQ ISZERO PUSH2 0xD14 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0xD1C PUSH2 0x196E JUMP JUMPDEST PUSH2 0xD24 PUSH2 0x3802 JUMP JUMPDEST PUSH2 0xD2C PUSH2 0x19C6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP10 DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP10 AND PUSH1 0x40 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD DUP10 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP9 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x1F DUP8 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD SWAP1 SWAP2 MSTORE DUP6 DUP2 MSTORE SWAP1 DUP7 SWAP1 DUP7 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP POP PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0xD9D DUP2 PUSH2 0x19CA JUMP JUMPDEST SWAP3 POP SWAP3 POP POP SWAP7 POP SWAP7 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP2 SWAP1 DUP2 SWAP1 DUP2 SWAP1 PUSH1 0x60 SWAP1 DUP2 SWAP1 DUP4 PUSH2 0xDD3 PUSH1 0x4 DUP4 ADD PUSH2 0x19F1 JUMP JUMPDEST DUP3 SLOAD SWAP9 POP SWAP1 POP DUP8 PUSH2 0xE2B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7500000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x3 DUP5 ADD SLOAD SWAP2 SWAP9 POP SWAP7 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP5 POP DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0xE61 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xE8B JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP4 POP DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0xEA5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xECF JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xF46 JUMPI PUSH1 0x0 DUP1 PUSH2 0xEED PUSH1 0x4 DUP7 ADD DUP5 PUSH2 0x19F5 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP2 PUSH1 0x0 SHR DUP8 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0xF01 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP DUP1 PUSH1 0x0 SHR DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0xF31 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP POP PUSH1 0x1 ADD PUSH2 0xED5 JUMP JUMPDEST POP POP POP SWAP2 SWAP4 SWAP6 POP SWAP2 SWAP4 SWAP6 JUMP JUMPDEST PUSH2 0xF5E DUP5 DUP5 DUP5 DUP5 PUSH2 0x1A86 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP6 AND DUP3 MSTORE SWAP3 SWAP1 SWAP3 MSTORE SWAP2 SWAP1 KECCAK256 SSTORE JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0xFE4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0xFF4 PUSH2 0xFEF PUSH2 0x19C6 JUMP JUMPDEST PUSH2 0x1CBD JUMP JUMPDEST PUSH2 0xFFC PUSH2 0x1D84 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x9 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 NOT DUP2 JUMP JUMPDEST PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x1036 PUSH2 0xFEF PUSH2 0x19C6 JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD DUP2 EQ PUSH2 0x108D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E636F6E73697374656E742061727261797300000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0x10EE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7500000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP2 ADD DUP3 PUSH2 0x1139 JUMPI PUSH1 0x0 PUSH2 0x1102 DUP3 PUSH2 0x19F1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1132 JUMPI PUSH1 0x0 PUSH2 0x111B DUP5 DUP3 PUSH2 0x19F5 JUMP JUMPDEST POP SWAP1 POP PUSH2 0x1128 DUP5 DUP3 PUSH2 0x1DDC JUMP JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x1107 JUMP JUMPDEST POP POP PUSH2 0x1144 JUMP JUMPDEST PUSH2 0x1144 DUP2 DUP7 DUP7 PUSH2 0x1EBC JUMP JUMPDEST DUP6 PUSH32 0xCB3FE5489E0CD43D0F4A33D1E09A4A0463A03D0D38F56165530854E5540DB143 DUP7 DUP7 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x11AC JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1194 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x11EB JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x11D3 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x9 SSTORE JUMP JUMPDEST PUSH1 0x60 PUSH1 0x4 PUSH1 0x0 ADD DUP1 SLOAD DUP1 PUSH1 0x20 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 DUP1 ISZERO PUSH2 0x125E JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x124A JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x1273 PUSH2 0xFEF PUSH2 0x19C6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x12CE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061796F75743A207A65726F2061646472657373000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 SWAP1 SWAP2 OR SWAP2 DUP3 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD SWAP3 SWAP1 SWAP2 AND DUP3 MSTORE MLOAD PUSH32 0xDD880D24A789958A6398C99C2E54CE31BC10A638CBC42F7DD34285479AE0F855 SWAP2 PUSH1 0x20 SWAP1 DUP3 SWAP1 SUB ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x1389 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x1394 PUSH2 0xFEF PUSH2 0x19C6 JUMP JUMPDEST PUSH2 0xFFC PUSH2 0x1F44 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x13B3 PUSH2 0x3802 JUMP JUMPDEST PUSH2 0x13BB PUSH2 0x19C6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP11 DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP11 AND PUSH1 0x40 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD DUP11 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP10 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x1F DUP9 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD SWAP1 SWAP2 MSTORE DUP7 DUP2 MSTORE SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP POP PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP6 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP5 DUP3 MSTORE SWAP1 SWAP2 DUP6 SWAP2 DUP6 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP POP PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x1469 DUP2 PUSH2 0x1F82 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x1490 PUSH2 0x3802 JUMP JUMPDEST PUSH2 0x1498 PUSH2 0x19C6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP10 DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP10 AND PUSH1 0x40 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD DUP10 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP9 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x1F DUP8 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD SWAP1 SWAP2 MSTORE DUP6 DUP2 MSTORE SWAP1 DUP7 SWAP1 DUP7 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP POP PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x1509 DUP2 PUSH2 0x2221 JUMP JUMPDEST DUP1 PUSH1 0xC0 ADD MLOAD SWAP3 POP DUP1 PUSH1 0xE0 ADD MLOAD SWAP2 POP POP SWAP7 POP SWAP7 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 NOT DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x60 PUSH2 0x1536 PUSH2 0x3802 JUMP JUMPDEST PUSH2 0x153E PUSH2 0x19C6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP11 DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP11 AND PUSH1 0x40 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD DUP11 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP10 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x1F DUP9 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD SWAP1 SWAP2 MSTORE DUP7 DUP2 MSTORE SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD DUP3 SWAP1 MSTORE POP PUSH1 0xA0 DUP7 ADD SWAP5 SWAP1 SWAP5 MSTORE POP POP POP DUP9 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH1 0x4 DUP3 ADD SWAP1 PUSH2 0x15C4 DUP5 DUP4 PUSH2 0x22C3 JUMP JUMPDEST SWAP1 POP PUSH2 0x15D1 DUP5 DUP4 DUP4 PUSH2 0x2333 JUMP JUMPDEST SWAP7 POP DUP4 PUSH1 0xC0 ADD MLOAD SWAP6 POP DUP4 PUSH1 0xE0 ADD MLOAD SWAP5 POP POP POP POP POP SWAP7 POP SWAP7 POP SWAP7 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x1645 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x164D PUSH2 0x196E JUMP JUMPDEST PUSH2 0x1655 PUSH2 0x3802 JUMP JUMPDEST PUSH2 0x165D PUSH2 0x19C6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP8 DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP8 AND PUSH1 0x40 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD DUP8 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP7 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x1F DUP6 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD SWAP1 SWAP2 MSTORE DUP4 DUP2 MSTORE SWAP1 DUP5 SWAP1 DUP5 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP POP PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x16CE DUP2 PUSH2 0x2438 JUMP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP5 DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x16F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x171B JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x17DB JUMPI PUSH1 0x0 PUSH2 0x179D DUP10 DUP10 DUP5 DUP2 DUP2 LT PUSH2 0x173A JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x7 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP10 DUP10 DUP10 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x2465 SWAP3 POP POP POP JUMP JUMPDEST SWAP1 POP PUSH2 0x17BB DUP2 PUSH2 0x17B5 DUP10 PUSH8 0xDE0B6B3A7640000 PUSH2 0x24FF JUMP JUMPDEST SWAP1 PUSH2 0x2558 JUMP JUMPDEST DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x17C7 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP PUSH1 0x1 ADD PUSH2 0x1721 JUMP JUMPDEST POP POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x17F1 PUSH2 0xFEF PUSH2 0x19C6 JUMP JUMPDEST PUSH2 0xFF4 PUSH2 0x25BF JUMP JUMPDEST PUSH1 0x60 DUP4 DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x1813 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x183D JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x18DB JUMPI PUSH2 0x18BC DUP8 DUP8 DUP4 DUP2 DUP2 LT PUSH2 0x185A JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x7 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 DUP8 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x2641 SWAP3 POP POP POP JUMP JUMPDEST DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x18C8 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x1843 JUMP JUMPDEST POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x1913 PUSH2 0xFEF PUSH2 0x19C6 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 DUP3 OR DUP1 DUP5 SSTORE PUSH1 0x40 MLOAD SWAP3 SWAP4 SWAP2 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xFFC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061757361626C653A2070617573656400000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x19D7 DUP4 PUSH2 0x264A JUMP JUMPDEST PUSH2 0x19E0 DUP4 PUSH2 0x2221 JUMP JUMPDEST POP POP PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xE0 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP2 JUMP JUMPDEST SLOAD SWAP1 JUMP JUMPDEST DUP2 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP4 LT PUSH2 0x1A4F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x456E756D4D61703A20696E646578206F7574206F6620626F756E647300000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 PUSH1 0x0 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x1A60 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD SWAP1 POP DUP1 PUSH1 0x0 ADD SLOAD DUP2 PUSH1 0x1 ADD SLOAD SWAP3 POP SWAP3 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP3 PUSH2 0x1AD8 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F20737570706C79000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH2 0x1B03 PUSH1 0x4 PUSH2 0x19F1 JUMP JUMPDEST LT PUSH2 0x1B55 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20746F6F206D616E7920736B757300000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x1B60 PUSH1 0x4 DUP6 PUSH2 0x28F4 JUMP JUMPDEST PUSH2 0x1BB1 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20736B7520616C7265616479206372656174656400000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO PUSH2 0x1C23 JUMPI PUSH2 0x1BD2 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x293E JUMP JUMPDEST PUSH2 0x1C23 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D636F6E74726163742072656365697665720000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP6 DUP2 SSTORE PUSH1 0x1 DUP2 ADD DUP7 SWAP1 SSTORE PUSH1 0x2 DUP2 ADD DUP6 SWAP1 SSTORE PUSH1 0x3 DUP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT SWAP1 SWAP2 AND DUP2 OR SWAP1 SWAP2 SSTORE DUP4 MLOAD DUP9 DUP2 MSTORE SWAP3 DUP4 ADD DUP8 SWAP1 MSTORE DUP3 DUP5 ADD DUP7 SWAP1 MSTORE PUSH1 0x60 DUP4 ADD MSTORE SWAP2 MLOAD PUSH32 0x38BD4AABCE684540CD61351B91F2F5FACF9D6963934347E25AAB93D87AE7AC14 SWAP2 DUP2 SWAP1 SUB PUSH1 0x80 ADD SWAP1 LOG1 POP POP POP POP POP JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8DA5CB5B 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 PUSH2 0x1CF6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1D0A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1D20 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ PUSH2 0x1D81 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6F7420746865206F776E657200000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0x1D8C PUSH2 0x2944 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA PUSH2 0x1DBF PUSH2 0x19C6 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0x1EB0 JUMPI DUP4 SLOAD PUSH1 0x0 NOT DUP1 DUP4 ADD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x0 SWAP1 DUP8 SWAP1 DUP4 SWAP1 DUP2 LT PUSH2 0x1E0F JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD SWAP1 POP DUP1 DUP8 PUSH1 0x0 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x1E2F JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 DUP5 SLOAD PUSH1 0x2 SWAP1 SWAP4 MUL ADD SWAP2 DUP3 SSTORE PUSH1 0x1 SWAP4 DUP5 ADD SLOAD SWAP2 DUP5 ADD SWAP2 SWAP1 SWAP2 SSTORE DUP4 SLOAD DUP3 MSTORE DUP10 DUP4 ADD SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP1 DUP5 ADD SWAP1 SSTORE DUP7 SLOAD DUP8 SWAP1 DUP1 PUSH2 0x1E6E JUMPI INVALID JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 PUSH1 0x2 PUSH1 0x0 NOT SWAP1 SWAP5 ADD SWAP4 DUP5 MUL ADD DUP3 DUP2 SSTORE PUSH1 0x1 SWAP1 DUP2 ADD DUP4 SWAP1 SSTORE SWAP3 SWAP1 SWAP4 SSTORE DUP9 DUP2 MSTORE DUP10 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x40 DUP3 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE SWAP5 POP PUSH2 0x1EB6 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SWAP2 POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x1EC7 DUP4 DUP4 DUP4 PUSH2 0x299B JUMP JUMPDEST PUSH2 0x1ED0 DUP4 PUSH2 0x19F1 JUMP JUMPDEST ISZERO DUP1 PUSH2 0x1EEE JUMPI POP PUSH1 0x7 SLOAD PUSH2 0x1EEE SWAP1 DUP5 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2AFF JUMP JUMPDEST PUSH2 0x1F3F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F207265666572656E636520746F6B656E0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x1F4C PUSH2 0x196E JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH2 0x1DBF PUSH2 0x19C6 JUMP JUMPDEST PUSH1 0xE0 DUP2 ADD MLOAD MLOAD ISZERO DUP1 PUSH2 0x1FB4 JUMPI POP PUSH1 0x1 PUSH1 0x0 NOT SUB DUP2 PUSH1 0xE0 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x1FA6 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 SHR EQ ISZERO JUMPDEST ISZERO PUSH2 0x1FC7 JUMPI PUSH2 0x1FC2 DUP2 PUSH2 0x2B17 JUMP JUMPDEST PUSH2 0x1D81 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x204E JUMPI DUP1 PUSH1 0xC0 ADD MLOAD CALLVALUE LT ISZERO PUSH2 0x2049 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E73756666696369656E742045544800000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x2075 JUMP JUMPDEST PUSH2 0x2075 PUSH2 0x2059 PUSH2 0x19C6 JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD MLOAD PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 SWAP1 ADDRESS SWAP1 PUSH2 0x2C62 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0xE0 ADD MLOAD PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x2088 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 SHR SWAP1 POP PUSH1 0x0 PUSH2 0x20BA PUSH8 0xDE0B6B3A7640000 PUSH2 0x17B5 DUP6 PUSH1 0xC0 ADD MLOAD DUP6 PUSH2 0x24FF SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0x7 SLOAD PUSH1 0xA0 DUP7 ADD MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 PUSH2 0x20E3 SWAP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP6 SWAP1 PUSH2 0x2CEA JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MLOAD SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x2164 JUMPI PUSH1 0x0 PUSH2 0x211B CALLVALUE DUP4 PUSH2 0x2D18 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x215E JUMPI DUP5 MLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 DUP3 ISZERO PUSH2 0x8FC MUL SWAP1 DUP4 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x215C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP JUMPDEST POP PUSH2 0x219D JUMP JUMPDEST PUSH1 0xC0 DUP5 ADD MLOAD PUSH1 0x0 SWAP1 PUSH2 0x2176 SWAP1 DUP4 PUSH2 0x2D18 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x219B JUMPI DUP5 MLOAD PUSH1 0x40 DUP7 ADD MLOAD PUSH2 0x219B SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 DUP4 PUSH2 0x2D75 JUMP JUMPDEST POP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x2204 JUMPI PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 DUP3 ISZERO PUSH2 0x8FC MUL SWAP1 DUP4 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x21FE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0xF5E JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x7 SLOAD PUSH2 0xF5E SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND SWAP2 AND DUP4 PUSH2 0x2D75 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0x2287 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20756E737570706F7274656420534B550000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP2 ADD PUSH1 0x0 PUSH2 0x2297 DUP5 DUP4 PUSH2 0x22C3 JUMP JUMPDEST SWAP1 POP PUSH2 0x22A4 DUP5 DUP4 DUP4 PUSH2 0x2333 JUMP JUMPDEST PUSH2 0xF5E JUMPI PUSH1 0x80 DUP5 ADD MLOAD PUSH2 0x22B8 SWAP1 DUP3 SWAP1 PUSH2 0x24FF JUMP JUMPDEST PUSH1 0xC0 DUP6 ADD MSTORE POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x0 SWAP1 PUSH2 0x22DF SWAP1 DUP4 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2DF5 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x1EB6 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20756E737570706F72746564207061796D656E7420746F6B656E00 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 NOT DUP3 EQ PUSH2 0x2350 JUMPI PUSH2 0x2349 DUP5 DUP5 DUP5 PUSH2 0x2E85 JUMP JUMPDEST SWAP1 POP PUSH2 0x2431 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x236A SWAP1 DUP6 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2DF5 JUMP JUMPDEST PUSH1 0x80 DUP7 ADD MLOAD SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH2 0x2380 SWAP1 DUP4 SWAP1 PUSH2 0x24FF JUMP JUMPDEST PUSH1 0x40 DUP8 ADD MLOAD PUSH1 0x7 SLOAD PUSH1 0xA0 DUP10 ADD MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 PUSH2 0x23A9 SWAP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP6 SWAP1 PUSH2 0x2465 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x23C3 DUP3 PUSH2 0x17B5 DUP6 PUSH8 0xDE0B6B3A7640000 PUSH2 0x24FF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x2 DUP1 DUP3 MSTORE PUSH1 0x60 DUP3 ADD DUP4 MSTORE SWAP3 SWAP4 POP SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP POP POP PUSH1 0xE0 DUP10 ADD DUP2 SWAP1 MSTORE DUP1 MLOAD DUP8 SWAP2 SWAP1 PUSH1 0x0 SWAP1 PUSH2 0x23F8 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x0 SHL DUP9 PUSH1 0xE0 ADD MLOAD PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x2419 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP PUSH1 0xC0 DUP8 ADD MSTORE POP PUSH1 0x1 SWAP2 POP POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x2441 DUP2 PUSH2 0x264A JUMP JUMPDEST PUSH2 0x244A DUP2 PUSH2 0x2221 JUMP JUMPDEST PUSH2 0x2453 DUP2 PUSH2 0x1F82 JUMP JUMPDEST PUSH2 0x245C DUP2 PUSH2 0x2F7D JUMP JUMPDEST PUSH2 0x1D81 DUP2 PUSH2 0x2FC9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 SLOAD DUP1 PUSH2 0x24DF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20756E646566696E65642072617465000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x24F5 DUP2 PUSH2 0x17B5 DUP7 PUSH8 0xDE0B6B3A7640000 PUSH2 0x24FF JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x250E JUMPI POP PUSH1 0x0 PUSH2 0x1EB6 JUMP JUMPDEST DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 PUSH2 0x251B JUMPI INVALID JUMPDEST DIV EQ PUSH2 0x2431 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x3874 PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP3 GT PUSH2 0x25AE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206469766973696F6E206279207A65726F000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 DUP4 DUP2 PUSH2 0x25B7 JUMPI INVALID JUMPDEST DIV SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD ISZERO PUSH2 0x2614 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A20737461727465640000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST TIMESTAMP PUSH1 0x2 SSTORE PUSH32 0x27029695AA5F602A4EE81F4C32DFA86E562F200A17966496F3A7C3F2EC0F9417 PUSH2 0x1DBF PUSH2 0x19C6 JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x26A9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F206164647265737320726563697069656E7400000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2708 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F206164647265737320746F6B656E0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x80 DUP2 ADD MLOAD PUSH2 0x275E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F207175616E7469747920707572636861736500000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0x27C4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7500000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x80 ADD MLOAD DUP2 PUSH1 0x2 ADD SLOAD LT ISZERO PUSH2 0x2821 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A2061626F7665206D6178207175616E746974790000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 SLOAD PUSH1 0x0 NOT EQ PUSH2 0x2888 JUMPI DUP2 PUSH1 0x80 ADD MLOAD DUP2 PUSH1 0x1 ADD SLOAD LT ISZERO PUSH2 0x2888 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E73756666696369656E7420737570706C7900000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x28A3 PUSH1 0x4 DUP4 ADD DUP3 PUSH2 0x2AFF JUMP JUMPDEST PUSH2 0x1F3F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7520746F6B656E00000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2900 DUP4 DUP4 PUSH2 0x2AFF JUMP JUMPDEST PUSH2 0x2936 JUMPI POP DUP2 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP5 SSTORE PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 SWAP1 SWAP4 ADD DUP5 SWAP1 SSTORE DUP5 SLOAD DUP5 DUP3 MSTORE DUP3 DUP7 ADD SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0x1EB6 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x1EB6 JUMP JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND PUSH2 0xFFC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061757361626C653A206E6F7420706175736564000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x2A81 JUMPI PUSH1 0x0 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x29B5 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x2A27 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F206164647265737320746F6B656E0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2A35 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP DUP1 PUSH1 0x0 EQ ISZERO PUSH2 0x2A61 JUMPI PUSH2 0x2A5B DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x1DDC JUMP JUMPDEST POP PUSH2 0x2A77 JUMP JUMPDEST PUSH2 0x2A75 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP4 PUSH2 0x34AE JUMP JUMPDEST POP JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x299E JUMP JUMPDEST POP PUSH32 0x0 PUSH2 0x2AAC DUP5 PUSH2 0x19F1 JUMP JUMPDEST GT ISZERO PUSH2 0x1F3F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20746F6F206D616E7920746F6B656E730000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x2C3A JUMPI DUP1 PUSH1 0xC0 ADD MLOAD CALLVALUE LT ISZERO PUSH2 0x2B99 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E73756666696369656E742045544800000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xC0 DUP3 ADD MLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 DUP2 ISZERO PUSH2 0x8FC MUL SWAP2 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x2BD7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x0 PUSH2 0x2BF1 DUP3 PUSH1 0xC0 ADD MLOAD CALLVALUE PUSH2 0x2D18 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x2C34 JUMPI DUP2 MLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 DUP3 ISZERO PUSH2 0x8FC MUL SWAP1 DUP4 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x2C32 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP JUMPDEST POP PUSH2 0x1D81 JUMP JUMPDEST PUSH2 0x1D81 PUSH2 0x2C45 PUSH2 0x19C6 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xC0 DUP5 ADD MLOAD PUSH1 0x40 DUP6 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP4 SWAP3 AND SWAP1 JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x24 DUP4 ADD MSTORE DUP5 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x84 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 OR SWAP1 MSTORE PUSH2 0xF5E SWAP1 DUP6 SWAP1 PUSH2 0x3545 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2CF8 DUP6 DUP6 DUP6 DUP6 PUSH2 0x2465 JUMP JUMPDEST SWAP1 POP PUSH2 0x2D0F PUSH2 0x2D08 PUSH1 0x9 SLOAD PUSH2 0x374D JUMP JUMPDEST DUP3 SWAP1 PUSH2 0x37A8 JUMP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 GT ISZERO PUSH2 0x2D6F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 OR SWAP1 MSTORE PUSH2 0x1F3F SWAP1 DUP5 SWAP1 PUSH2 0x3545 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 PUSH2 0x2E58 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x456E756D4D61703A206E6F6E6578697374656E74206B65790000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP4 PUSH1 0x0 ADD PUSH1 0x1 DUP3 SUB DUP2 SLOAD DUP2 LT PUSH2 0x2E6A JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD PUSH1 0x1 ADD SLOAD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x0 NOT DUP3 EQ PUSH2 0x2E98 JUMPI POP PUSH1 0x0 PUSH2 0x2431 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x2EB2 SWAP1 DUP6 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2DF5 JUMP JUMPDEST PUSH1 0x40 DUP7 ADD MLOAD PUSH1 0x7 SLOAD PUSH1 0xA0 DUP9 ADD MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 PUSH2 0x2ED9 SWAP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH2 0x2641 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2F0A DUP8 PUSH1 0x80 ADD MLOAD PUSH2 0x2F04 DUP5 PUSH2 0x17B5 PUSH8 0xDE0B6B3A7640000 DUP9 PUSH2 0x24FF SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 PUSH2 0x24FF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x2 DUP1 DUP3 MSTORE PUSH1 0x60 DUP3 ADD DUP4 MSTORE SWAP3 SWAP4 POP SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP POP POP PUSH1 0xE0 DUP9 ADD DUP2 SWAP1 MSTORE DUP1 MLOAD DUP7 SWAP2 SWAP1 PUSH1 0x0 SWAP1 PUSH2 0x2F3F JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP2 PUSH1 0x0 SHL DUP8 PUSH1 0xE0 ADD MLOAD PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x2F60 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0xC0 DUP8 ADD MSTORE POP PUSH1 0x1 SWAP2 POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x0 NOT EQ PUSH2 0x2FC5 JUMPI PUSH1 0x80 DUP3 ADD MLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH2 0x2FAD SWAP2 PUSH2 0x2D18 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SSTORE JUMPDEST POP POP JUMP JUMPDEST DUP1 PUSH1 0x60 ADD MLOAD DUP2 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x29F844483CA6B10B5C0611D039AFC15CE8F6380E905307B381C3A8EE4E90E11E DUP5 PUSH1 0x20 ADD MLOAD DUP6 PUSH1 0x80 ADD MLOAD DUP7 PUSH1 0xA0 ADD MLOAD DUP8 PUSH1 0xC0 ADD MLOAD DUP9 PUSH1 0xE0 ADD MLOAD DUP10 PUSH2 0x100 ADD MLOAD DUP11 PUSH2 0x120 ADD MLOAD PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP5 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3060 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3048 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3090 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3078 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x30C0 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x30A8 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP4 POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP7 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3137 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x311F JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x3164 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP DUP4 DUP2 SUB DUP3 MSTORE DUP5 MLOAD DUP2 MSTORE DUP5 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP7 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3197 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x317F JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x31C4 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP8 POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 ISZERO PUSH2 0x2FC5 JUMPI PUSH4 0x61ECEAE8 PUSH1 0xE0 SHL PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x61ECEAE8 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD DUP7 PUSH1 0x40 ADD MLOAD DUP8 PUSH1 0x60 ADD MLOAD DUP9 PUSH1 0x80 ADD MLOAD DUP10 PUSH1 0xA0 ADD MLOAD DUP11 PUSH1 0xC0 ADD MLOAD DUP12 PUSH1 0xE0 ADD MLOAD DUP13 PUSH2 0x100 ADD MLOAD DUP14 PUSH2 0x120 ADD MLOAD PUSH1 0x40 MLOAD DUP12 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP6 DUP2 SUB DUP6 MSTORE DUP11 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x32FD JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x32E5 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x332A JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP DUP6 DUP2 SUB DUP5 MSTORE DUP9 MLOAD DUP2 MSTORE DUP9 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP1 DUP12 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x335F JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3347 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP6 DUP2 SUB DUP4 MSTORE DUP8 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x339E JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3386 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP6 DUP2 SUB DUP3 MSTORE DUP7 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x33DD JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x33C5 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP15 POP POP POP POP POP POP POP POP POP POP POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x340E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3422 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3438 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND EQ PUSH2 0x2FC5 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F74696669636174696F6E2072656675736564000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x1 DUP5 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 PUSH2 0x3513 JUMPI POP POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE DUP4 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD DUP5 DUP2 MSTORE DUP7 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP10 SSTORE PUSH1 0x0 DUP10 DUP2 MSTORE DUP5 DUP2 KECCAK256 SWAP6 MLOAD PUSH1 0x2 SWAP1 SWAP4 MUL SWAP1 SWAP6 ADD SWAP2 DUP3 SSTORE SWAP2 MLOAD SWAP1 DUP3 ADD SSTORE DUP7 SLOAD DUP7 DUP5 MSTORE DUP2 DUP9 ADD SWAP1 SWAP3 MSTORE SWAP3 SWAP1 SWAP2 KECCAK256 SSTORE PUSH2 0x2431 JUMP JUMPDEST DUP3 DUP6 PUSH1 0x0 ADD PUSH1 0x1 DUP4 SUB DUP2 SLOAD DUP2 LT PUSH2 0x3526 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD PUSH1 0x1 ADD DUP2 SWAP1 SSTORE POP PUSH1 0x0 SWAP2 POP POP PUSH2 0x2431 JUMP JUMPDEST DUP2 PUSH2 0x3558 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x293E JUMP JUMPDEST PUSH2 0x35A9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433230577261707065723A206E6F6E2D636F6E7472616374000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x3604 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x35C7 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x3666 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x366B JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 ISZERO PUSH2 0x36EA JUMPI DUP1 MLOAD ISZERO PUSH2 0x36E5 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3692 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x36E5 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433230577261707065723A206F7065726174696F6E206661696C65640000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x3746 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x373D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433230577261707065723A206F7065726174696F6E206661696C65640000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 MLOAD DUP1 DUP3 PUSH1 0x20 ADD REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 SLT ISZERO PUSH2 0x37A4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C7565206D75737420626520706F736974697665 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x2431 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x140 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP1 NOT AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE POP SWAP1 JUMP INVALID MSTORE8 PUSH2 0x6665 0x4D PUSH2 0x7468 GASPRICE KECCAK256 PUSH14 0x756C7469706C69636174696F6E20 PUSH16 0x766572666C6F77A26469706673582212 KECCAK256 0xC4 0xE7 JUMPDEST 0xB1 0xE 0xAF EQ 0x22 0xDD 0xC6 0x4E MULMOD RETURNDATACOPY CREATE 0xBA 0x27 0xF 0xD4 0xDC 0xF7 RETURNDATACOPY 0xC3 0xF 0xD5 PUSH30 0x22121FFD33CD2964736F6C63430007060033ABB92614F53337043B55DC99 PUSH11 0x83EBB09ADCE78EC336CA18 DUP15 LOG0 0x21 DUP1 0xB6 SAR SHR EQ ","sourceMap":"217:4246:21:-:0;;;433:235;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;433:235:21;;;;;;;;;;;;;;;;960:6:1;:15;;-1:-1:-1;;;;;;960:15:1;2518:10:32;960:15:1;;;;;990:40;;433:235:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2554:4:32;;2518:10;433:235:21;;2518:10:32;;;;960:6:1;990:40;;960:6;;990:40;-1:-1:-1;;;;;;512:27:8;::::1;504:60;;;::::0;;-1:-1:-1;;;504:60:8;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;574:12;:28:::0;;-1:-1:-1;;;;;574:28:8;::::1;-1:-1:-1::0;;;;;;574:28:8;;::::1;::::0;::::1;::::0;;;617:30:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;-1:-1:-1::0;;543:6:5;:16;;-1:-1:-1;;543:16:5;;;;;;;;;;2570:28:32::2;::::0;;;2608:44:::2;::::0;;;2687:16:::2;::::0;;2701:1:::2;2687:16:::0;;;;;::::2;::::0;;-1:-1:-1;;2687:16:32::2;::::0;::::2;::::0;;::::2;::::0;::::2;-1:-1:-1::0;;2739:16:32::2;::::0;;2753:1:::2;2739:16:::0;;;;;::::2;::::0;;2662:41;;-1:-1:-1;2713:23:32::2;::::0;2739:16;;-1:-1:-1;2753:1:32;2739:16:::2;::::0;::::2;::::0;;::::2;::::0;::::2;-1:-1:-1::0;;2766:8:32;;2713:42;;-1:-1:-1;;;;2765:66:32;1751:44:::2;::::0;-1:-1:-1;2766:5:32;;2803:27:::2;::::0;2766:8:::2;;;;;;;;;2776:6;2783:1;2776:9;;;;;;;;;;;;;2765:66;;;::::0;::::2;;;::::0;::::2;;-1:-1:-1::0;;2886:34:32::2;;-1:-1:-1::0;;;2841:80:32::2;2842:5;2848:1;2842:8;;;;;;;;;;;;;2852:6;2859:1;2852:9;;;;;;;;;;;;;2841:80;;;::::0;::::2;;;::::0;::::2;;-1:-1:-1::0;;;;;;;;;;;2948:5:32::2;2955:6;2936:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::2;::::0;;;::::2;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::2;::::0;;;::::2;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;1605:14:29::1;:32:::0;;-1:-1:-1;;;;;;1605:32:29::1;-1:-1:-1::0;;;;;1605:32:29;::::1;;::::0;;-1:-1:-1;;;;;;;;;;1672:16:29::1;::::0;-1:-1:-1;;1672:16:29;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;1672:16:29::1;-1:-1:-1::0;1724:16:29::1;::::0;;1738:1:::1;1724:16:::0;;;;;::::1;::::0;;;1647:41;;-1:-1:-1;1698:23:29::1;::::0;1724:16;::::1;::::0;;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;1724:16:29::1;1698:42;;-1:-1:-1::0;;1803:33:29::1;;1750:87;;1751:5;1757:1;1751:8;;;;;;;;;;;;;1761:6;1768:1;1761:9;;;;;;;;;;;;;1750:87;;;::::0;::::1;;;::::0;::::1;;-1:-1:-1::0;;;;;;;;;;;1864:5:29::1;1871:6;1852:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;1370:515;;::::0;;;;1800:22:33::1;1839:1;-1:-1:-1::0;;;;;1825:16:33::1;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;1825:16:33::1;-1:-1:-1::0;1877:16:33::1;::::0;;1891:1:::1;1877:16:::0;;;;;::::1;::::0;;;1800:41;;-1:-1:-1;1851:23:33::1;::::0;1877:16;::::1;::::0;;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;1904:8:33;;1851:42;;-1:-1:-1;1903:81:33::1;::::0;-1:-1:-1;;1128:28:33;-1:-1:-1;1904:5:33;;1953:30:::1;::::0;1904:8:::1;;;;;;;;;1914:6;1921:1;1914:9;;;;;;;;;;;;;1903:81;;;::::0;::::1;;;::::0;::::1;;-1:-1:-1::0;;;;;;;;;;;2011:5:33::1;2018:6;1999:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;1555:477;;::::0;;;;433:235:21;;;;217:4246;;;;;;;;;;;;"},"deployedBytecode":{"generatedSources":[],"immutableReferences":{"5785":[{"length":32,"start":6874}],"5787":[{"length":32,"start":10884}]},"linkReferences":{},"object":"6080604052600436106101c25760003560e01c80638456cb59116100f7578063a0cf073511610095578063c7b778db11610064578063c7b778db14610b57578063c931f7c914610c26578063f21f537d14610c61578063f2fde38b14610c76576101c2565b8063a0cf0735146108d4578063a963b257146109da578063bda4c5ab14610a6f578063be9a655514610b42576101c2565b80638da5cb5b116100d15780638da5cb5b1461080857806397309b441461081d5780639865bcc8146108bf5780639e049545146108bf576101c2565b80638456cb59146106f35780638488bb4e146107085780638ce507eb1461071d576101c2565b8063579f2c77116101645780635e6e9f701161013e5780635e6e9f70146104f6578063607dc0171461063157806361bd38511461065b5780636b8f9c43146106c0576101c2565b8063579f2c77146104a35780635c4fafc7146104b85780635c975abb146104cd576101c2565b80632c87927b116101a05780632c87927b146103dd5780633c33c51e146104245780633f4ba83a14610467578063558884bd1461047c576101c2565b80631265b651146101c75780631323b066146101f85780632a8a45bc146102f5575b600080fd5b3480156101d357600080fd5b506101dc610ca9565b604080516001600160a01b039092168252519081900360200190f35b34801561020457600080fd5b5061029a600480360360a081101561021b57600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a08101608082013564010000000081111561025b57600080fd5b82018360208201111561026d57600080fd5b8035906020019184600183028401116401000000008311171561028f57600080fd5b509092509050610cb8565b6040518083815260200180602001828103825283818151815260200191508051906020019060200280838360005b838110156102e05781810151838201526020016102c8565b50505050905001935050505060405180910390f35b34801561030157600080fd5b5061031f6004803603602081101561031857600080fd5b5035610dad565b60405180878152602001868152602001858152602001846001600160a01b031681526020018060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561038457818101518382015260200161036c565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156103c35781810151838201526020016103ab565b505050509050019850505050505050505060405180910390f35b3480156103e957600080fd5b506104226004803603608081101561040057600080fd5b50803590602081013590604081013590606001356001600160a01b0316610f52565b005b34801561043057600080fd5b506104226004803603606081101561044757600080fd5b506001600160a01b03813581169160208101359091169060400135610f64565b34801561047357600080fd5b50610422610f90565b34801561048857600080fd5b50610491610ffe565b60408051918252519081900360200190f35b3480156104af57600080fd5b50610491611004565b3480156104c457600080fd5b506101dc61100a565b3480156104d957600080fd5b506104e2611022565b604080519115158252519081900360200190f35b34801561050257600080fd5b506104226004803603606081101561051957600080fd5b8135919081019060408101602082013564010000000081111561053b57600080fd5b82018360208201111561054d57600080fd5b8035906020019184602083028401116401000000008311171561056f57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092959493602081019350359150506401000000008111156105bf57600080fd5b8201836020820111156105d157600080fd5b803590602001918460208302840111640100000000831117156105f357600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061102b945050505050565b34801561063d57600080fd5b506104226004803603602081101561065457600080fd5b5035611208565b34801561066757600080fd5b5061067061120d565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156106ac578181015183820152602001610694565b505050509050019250505060405180910390f35b3480156106cc57600080fd5b50610422600480360360208110156106e357600080fd5b50356001600160a01b0316611268565b3480156106ff57600080fd5b50610422611335565b34801561071457600080fd5b506101dc61139c565b610422600480360360e081101561073357600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a08101608082013564010000000081111561077357600080fd5b82018360208201111561078557600080fd5b803590602001918460018302840111640100000000831117156107a757600080fd5b919390928235926040810190602001356401000000008111156107c957600080fd5b8201836020820111156107db57600080fd5b803590602001918460208302840111640100000000831117156107fd57600080fd5b5090925090506113ab565b34801561081457600080fd5b506101dc611475565b34801561082957600080fd5b5061029a600480360360a081101561084057600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a08101608082013564010000000081111561088057600080fd5b82018360208201111561089257600080fd5b803590602001918460018302840111640100000000831117156108b457600080fd5b509092509050611484565b3480156108cb57600080fd5b50610491611523565b3480156108e057600080fd5b50610976600480360360a08110156108f757600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a08101608082013564010000000081111561093757600080fd5b82018360208201111561094957600080fd5b8035906020019184600183028401116401000000008311171561096b57600080fd5b509092509050611529565b60405180841515815260200183815260200180602001828103825283818151815260200191508051906020019060200280838360005b838110156109c45781810151838201526020016109ac565b5050505090500194505050505060405180910390f35b610422600480360360a08110156109f057600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135640100000000811115610a3057600080fd5b820183602082011115610a4257600080fd5b80359060200191846001830284011164010000000083111715610a6457600080fd5b5090925090506115f1565b348015610a7b57600080fd5b5061067060048036036060811015610a9257600080fd5b810190602081018135640100000000811115610aad57600080fd5b820183602082011115610abf57600080fd5b80359060200191846020830284011164010000000083111715610ae157600080fd5b91939092823592604081019060200135640100000000811115610b0357600080fd5b820183602082011115610b1557600080fd5b80359060200191846001830284011164010000000083111715610b3757600080fd5b5090925090506116d7565b348015610b4e57600080fd5b506104226117e6565b348015610b6357600080fd5b5061067060048036036040811015610b7a57600080fd5b810190602081018135640100000000811115610b9557600080fd5b820183602082011115610ba757600080fd5b80359060200191846020830284011164010000000083111715610bc957600080fd5b919390929091602081019035640100000000811115610be757600080fd5b820183602082011115610bf957600080fd5b80359060200191846001830284011164010000000083111715610c1b57600080fd5b5090925090506117f9565b348015610c3257600080fd5b5061049160048036036040811015610c4957600080fd5b506001600160a01b03813581169160200135166118e5565b348015610c6d57600080fd5b50610491611902565b348015610c8257600080fd5b5061042260048036036020811015610c9957600080fd5b50356001600160a01b0316611908565b6007546001600160a01b031681565b6000606060025460001415610d14576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b610d1c61196e565b610d24613802565b610d2c6119c6565b6001600160a01b03908116825289811660208084019190915290891660408084019190915260608301899052608083018890528051601f870183900483028101830190915285815290869086908190840183828082843760009201919091525050505060a0820152610d9d816119ca565b9250925050965096945050505050565b6000818152600660205260408120819081908190606090819083610dd3600483016119f1565b82549850905087610e2b576040805162461bcd60e51b815260206004820152601660248201527f53616c653a206e6f6e2d6578697374656e7420736b7500000000000000000000604482015290519081900360640190fd5b60018201546002830154600384015491985096506001600160a01b031694508067ffffffffffffffff81118015610e6157600080fd5b50604051908082528060200260200182016040528015610e8b578160200160208202803683370190505b5093508067ffffffffffffffff81118015610ea557600080fd5b50604051908082528060200260200182016040528015610ecf578160200160208202803683370190505b50925060005b81811015610f4657600080610eed60048601846119f5565b915091508160001c878481518110610f0157fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508060001c868481518110610f3157fe5b60209081029190910101525050600101610ed5565b50505091939550919395565b610f5e84848484611a86565b50505050565b6001600160a01b0392831660009081526008602090815260408083209490951682529290925291902055565b600254610fe4576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b610ff4610fef6119c6565b611cbd565b610ffc611d84565b565b60095481565b60011981565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b60035460ff1681565b611036610fef6119c6565b81518151811461108d576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20696e636f6e73697374656e742061727261797300000000000000604482015290519081900360640190fd5b600084815260066020526040902080546110ee576040805162461bcd60e51b815260206004820152601660248201527f53616c653a206e6f6e2d6578697374656e7420736b7500000000000000000000604482015290519081900360640190fd5b6004810182611139576000611102826119f1565b905060005b8181101561113257600061111b84826119f5565b5090506111288482611ddc565b5050600101611107565b5050611144565b611144818686611ebc565b857fcb3fe5489e0cd43d0f4a33d1e09a4a0463a03d0d38f56165530854e5540db1438686604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156111ac578181015183820152602001611194565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156111eb5781810151838201526020016111d3565b5050505090500194505050505060405180910390a2505050505050565b600955565b6060600460000180548060200260200160405190810160405280929190818152602001828054801561125e57602002820191906000526020600020905b81548152602001906001019080831161124a575b5050505050905090565b611273610fef6119c6565b6001600160a01b0381166112ce576040805162461bcd60e51b815260206004820152601460248201527f5061796f75743a207a65726f2061646472657373000000000000000000000000604482015290519081900360640190fd5b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03838116919091179182905560408051929091168252517fdd880d24a789958a6398c99c2e54ce31bc10a638cbc42f7dd34285479ae0f855916020908290030190a150565b600254611389576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b611394610fef6119c6565b610ffc611f44565b6001546001600160a01b031681565b6113b3613802565b6113bb6119c6565b6001600160a01b0390811682528a8116602080840191909152908a16604080840191909152606083018a9052608083018990528051601f880183900483028101830190915286815290879087908190840183828082843760009201919091525050505060a082015260c081018490526040805160208085028281018201909352848252909185918591829185019084908082843760009201919091525050505060e082015261146981611f82565b50505050505050505050565b6000546001600160a01b031690565b60006060611490613802565b6114986119c6565b6001600160a01b03908116825289811660208084019190915290891660408084019190915260608301899052608083018890528051601f870183900483028101830190915285815290869086908190840183828082843760009201919091525050505060a082015261150981612221565b8060c0015192508060e00151915050965096945050505050565b60001981565b6000806060611536613802565b61153e6119c6565b6001600160a01b0390811682528a8116602080840191909152908a16604080840191909152606083018a9052608083018990528051601f8801839004830281018301909152868152908790879081908401838280828437600092018290525060a08601949094525050508881526006602052604081209060048201906115c484836122c3565b90506115d1848383612333565b96508360c0015195508360e0015194505050505096509650969350505050565b600254611645576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b61164d61196e565b611655613802565b61165d6119c6565b6001600160a01b03908116825287811660208084019190915290871660408084019190915260608301879052608083018690528051601f850183900483028101830190915283815290849084908190840183828082843760009201919091525050505060a08201526116ce81612438565b50505050505050565b6060848067ffffffffffffffff811180156116f157600080fd5b5060405190808252806020026020018201604052801561171b578160200160208202803683370190505b50915060005b818110156117db57600061179d89898481811061173a57fe5b905060200201356001600160a01b0316600760009054906101000a90046001600160a01b03168989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061246592505050565b90506117bb816117b589670de0b6b3a76400006124ff565b90612558565b8483815181106117c757fe5b602090810291909101015250600101611721565b505095945050505050565b6117f1610fef6119c6565b610ff46125bf565b6060838067ffffffffffffffff8111801561181357600080fd5b5060405190808252806020026020018201604052801561183d578160200160208202803683370190505b50915060005b818110156118db576118bc87878381811061185a57fe5b905060200201356001600160a01b0316600760009054906101000a90046001600160a01b031687878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061264192505050565b8382815181106118c857fe5b6020908102919091010152600101611843565b5050949350505050565b600860209081526000928352604080842090915290825290205481565b60025490565b611913610fef6119c6565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383811691821780845560405192939116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b60035460ff1615610ffc576040805162461bcd60e51b815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b3390565b600060606119d78361264a565b6119e083612221565b505060c081015160e0909101519091565b5490565b815460009081908310611a4f576040805162461bcd60e51b815260206004820152601c60248201527f456e756d4d61703a20696e646578206f7574206f6620626f756e647300000000604482015290519081900360640190fd5b6000846000018481548110611a6057fe5b906000526020600020906002020190508060000154816001015492509250509250929050565b82611ad8576040805162461bcd60e51b815260206004820152601160248201527f53616c653a207a65726f20737570706c79000000000000000000000000000000604482015290519081900360640190fd5b7f0000000000000000000000000000000000000000000000000000000000000000611b0360046119f1565b10611b55576040805162461bcd60e51b815260206004820152601360248201527f53616c653a20746f6f206d616e7920736b757300000000000000000000000000604482015290519081900360640190fd5b611b606004856128f4565b611bb1576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20736b7520616c7265616479206372656174656400000000000000604482015290519081900360640190fd5b6001600160a01b03811615611c2357611bd2816001600160a01b031661293e565b611c23576040805162461bcd60e51b815260206004820152601b60248201527f53616c653a206e6f6e2d636f6e74726163742072656365697665720000000000604482015290519081900360640190fd5b60008481526006602090815260409182902085815560018101869055600281018590556003810180546001600160a01b03861673ffffffffffffffffffffffffffffffffffffffff1990911681179091558351888152928301879052828401869052606083015291517f38bd4aabce684540cd61351b91f2f5facf9d6963934347e25aab93d87ae7ac149181900360800190a15050505050565b306001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015611cf657600080fd5b505afa158015611d0a573d6000803e3d6000fd5b505050506040513d6020811015611d2057600080fd5b50516001600160a01b03828116911614611d81576040805162461bcd60e51b815260206004820152601660248201527f4f776e61626c653a206e6f7420746865206f776e657200000000000000000000604482015290519081900360640190fd5b50565b611d8c612944565b6003805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611dbf6119c6565b604080516001600160a01b039092168252519081900360200190a1565b60008181526001830160205260408120548015611eb05783546000198083019190810190600090879083908110611e0f57fe5b9060005260206000209060020201905080876000018481548110611e2f57fe5b600091825260208083208454600290930201918255600193840154918401919091558354825289830190526040902090840190558654879080611e6e57fe5b6000828152602080822060026000199094019384020182815560019081018390559290935588815289820190925260408220919091559450611eb69350505050565b60009150505b92915050565b611ec783838361299b565b611ed0836119f1565b1580611eee5750600754611eee9084906001600160a01b0316612aff565b611f3f576040805162461bcd60e51b815260206004820152601860248201527f53616c653a206e6f207265666572656e636520746f6b656e0000000000000000604482015290519081900360640190fd5b505050565b611f4c61196e565b6003805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611dbf6119c6565b60e0810151511580611fb457506001600019038160e00151600081518110611fa657fe5b602002602001015160001c14155b15611fc757611fc281612b17565b611d81565b60408101516001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561204e578060c00151341015612049576040805162461bcd60e51b815260206004820152601660248201527f53616c653a20696e73756666696369656e742045544800000000000000000000604482015290519081900360640190fd5b612075565b6120756120596119c6565b60c083015160408401516001600160a01b031691903090612c62565b60008160e0015160018151811061208857fe5b602002602001015160001c905060006120ba670de0b6b3a76400006117b58560c00151856124ff90919063ffffffff16565b604084015160075460a08601519293506000926120e392916001600160a01b0316908590612cea565b60408501519091506001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561216457600061211b3483612d18565b9050801561215e5784516040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561215c573d6000803e3d6000fd5b505b5061219d565b60c08401516000906121769083612d18565b9050801561219b578451604086015161219b916001600160a01b039091169083612d75565b505b6007546001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415612204576001546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156121fe573d6000803e3d6000fd5b50610f5e565b600154600754610f5e916001600160a01b03918216911683612d75565b606081015160009081526006602052604090208054612287576040805162461bcd60e51b815260206004820152601560248201527f53616c653a20756e737570706f7274656420534b550000000000000000000000604482015290519081900360640190fd5b60048101600061229784836122c3565b90506122a4848383612333565b610f5e5760808401516122b89082906124ff565b60c085015250505050565b60408201516000906122df9083906001600160a01b0316612df5565b905080611eb6576040805162461bcd60e51b815260206004820152601f60248201527f53616c653a20756e737570706f72746564207061796d656e7420746f6b656e00604482015290519081900360640190fd5b6000600119821461235057612349848484612e85565b9050612431565b60075460009061236a9085906001600160a01b0316612df5565b60808601519091506000906123809083906124ff565b604087015160075460a08901519293506000926123a992916001600160a01b0316908590612465565b905060006123c3826117b585670de0b6b3a76400006124ff565b604080516002808252606082018352929350919060208301908036833750505060e0890181905280518791906000906123f857fe5b6020026020010181815250508060001b8860e0015160018151811061241957fe5b60209081029190910101525060c08701525060019150505b9392505050565b6124418161264a565b61244a81612221565b61245381611f82565b61245c81612f7d565b611d8181612fc9565b6001600160a01b038085166000908152600860209081526040808320938716835292905290812054806124df576040805162461bcd60e51b815260206004820152601460248201527f53616c653a20756e646566696e65642072617465000000000000000000000000604482015290519081900360640190fd5b6124f5816117b586670de0b6b3a76400006124ff565b9695505050505050565b60008261250e57506000611eb6565b8282028284828161251b57fe5b04146124315760405162461bcd60e51b81526004018080602001828103825260218152602001806138746021913960400191505060405180910390fd5b60008082116125ae576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b8183816125b757fe5b049392505050565b60025415612614576040805162461bcd60e51b815260206004820152601260248201527f537461727461626c653a20737461727465640000000000000000000000000000604482015290519081900360640190fd5b426002557f27029695aa5f602a4ee81f4c32dfa86e562f200a17966496f3a7c3f2ec0f9417611dbf6119c6565b50600192915050565b60208101516001600160a01b03166126a9576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a207a65726f206164647265737320726563697069656e7400000000604482015290519081900360640190fd5b60408101516001600160a01b0316612708576040805162461bcd60e51b815260206004820152601860248201527f53616c653a207a65726f206164647265737320746f6b656e0000000000000000604482015290519081900360640190fd5b608081015161275e576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a207a65726f207175616e7469747920707572636861736500000000604482015290519081900360640190fd5b6060810151600090815260066020526040902080546127c4576040805162461bcd60e51b815260206004820152601660248201527f53616c653a206e6f6e2d6578697374656e7420736b7500000000000000000000604482015290519081900360640190fd5b816080015181600201541015612821576040805162461bcd60e51b815260206004820152601860248201527f53616c653a2061626f7665206d6178207175616e746974790000000000000000604482015290519081900360640190fd5b80546000191461288857816080015181600101541015612888576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20696e73756666696369656e7420737570706c7900000000000000604482015290519081900360640190fd5b60408201516001600160a01b03166128a36004830182612aff565b611f3f576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a206e6f6e2d6578697374656e7420736b7520746f6b656e00000000604482015290519081900360640190fd5b60006129008383612aff565b61293657508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611eb6565b506000611eb6565b3b151590565b60035460ff16610ffc576040805162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604482015290519081900360640190fd5b60005b8251811015612a815760008382815181106129b557fe5b6020026020010151905060006001600160a01b0316816001600160a01b03161415612a27576040805162461bcd60e51b815260206004820152601860248201527f53616c653a207a65726f206164647265737320746f6b656e0000000000000000604482015290519081900360640190fd5b6000838381518110612a3557fe5b602002602001015190508060001415612a6157612a5b866001600160a01b038416611ddc565b50612a77565b612a75866001600160a01b038416836134ae565b505b505060010161299e565b507f0000000000000000000000000000000000000000000000000000000000000000612aac846119f1565b1115611f3f576040805162461bcd60e51b815260206004820152601560248201527f53616c653a20746f6f206d616e7920746f6b656e730000000000000000000000604482015290519081900360640190fd5b60009081526001919091016020526040902054151590565b60408101516001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415612c3a578060c00151341015612b99576040805162461bcd60e51b815260206004820152601660248201527f53616c653a20696e73756666696369656e742045544800000000000000000000604482015290519081900360640190fd5b60015460c08201516040516001600160a01b039092169181156108fc0291906000818181858888f19350505050158015612bd7573d6000803e3d6000fd5b506000612bf18260c0015134612d1890919063ffffffff16565b90508015612c345781516040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612c32573d6000803e3d6000fd5b505b50611d81565b611d81612c456119c6565b60015460c084015160408501516001600160a01b03908116939216905b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052610f5e908590613545565b6000612cf885858585612465565b9050612d0f612d0860095461374d565b82906137a8565b50949350505050565b600082821115612d6f576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052611f3f908490613545565b600081815260018301602052604081205480612e58576040805162461bcd60e51b815260206004820152601860248201527f456e756d4d61703a206e6f6e6578697374656e74206b65790000000000000000604482015290519081900360640190fd5b836000016001820381548110612e6a57fe5b90600052602060002090600202016001015491505092915050565b60006000198214612e9857506000612431565b600754600090612eb29085906001600160a01b0316612df5565b604086015160075460a0880151929350600092612ed992916001600160a01b031690612641565b90506000612f0a8760800151612f04846117b5670de0b6b3a7640000886124ff90919063ffffffff16565b906124ff565b604080516002808252606082018352929350919060208301908036833750505060e088018190528051869190600090612f3f57fe5b6020026020010181815250508160001b8760e00151600181518110612f6057fe5b602090810291909101015260c08701525060019150509392505050565b60608101516000908152600660205260409020805460001914612fc55760808201516001820154612fad91612d18565b60608301516000908152600660205260409020600101555b5050565b806060015181604001516001600160a01b031682600001516001600160a01b03167f29f844483ca6b10b5c0611d039afc15ce8f6380e905307b381c3a8ee4e90e11e846020015185608001518660a001518760c001518860e001518961010001518a610120015160405160200180848051906020019060200280838360005b83811015613060578181015183820152602001613048565b50505050905001838051906020019060200280838360005b83811015613090578181015183820152602001613078565b50505050905001828051906020019060200280838360005b838110156130c05781810151838201526020016130a8565b50505050905001935050505060405160208183030381529060405260405180866001600160a01b031681526020018581526020018060200184815260200180602001838103835286818151815260200191508051906020019080838360005b8381101561313757818101518382015260200161311f565b50505050905090810190601f1680156131645780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b8381101561319757818101518382015260200161317f565b50505050905090810190601f1680156131c45780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390a460608101516000908152600660205260409020600301546001600160a01b03168015612fc5576361eceae860e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916816001600160a01b03166361eceae8846000015185602001518660400151876060015188608001518960a001518a60c001518b60e001518c61010001518d61012001516040518b63ffffffff1660e01b8152600401808b6001600160a01b031681526020018a6001600160a01b03168152602001896001600160a01b031681526020018881526020018781526020018060200186815260200180602001806020018060200185810385528a818151815260200191508051906020019080838360005b838110156132fd5781810151838201526020016132e5565b50505050905090810190601f16801561332a5780820380516001836020036101000a031916815260200191505b508581038452885181528851602091820191808b01910280838360005b8381101561335f578181015183820152602001613347565b50505050905001858103835287818151815260200191508051906020019060200280838360005b8381101561339e578181015183820152602001613386565b50505050905001858103825286818151815260200191508051906020019060200280838360005b838110156133dd5781810151838201526020016133c5565b505050509050019e505050505050505050505050505050602060405180830381600087803b15801561340e57600080fd5b505af1158015613422573d6000803e3d6000fd5b505050506040513d602081101561343857600080fd5b50517fffffffff000000000000000000000000000000000000000000000000000000001614612fc5576040805162461bcd60e51b815260206004820152601a60248201527f53616c653a206e6f74696669636174696f6e2072656675736564000000000000604482015290519081900360640190fd5b600082815260018401602052604081205480613513575050604080518082018252838152602080820184815286546001818101895560008981528481209551600290930290950191825591519082015586548684528188019092529290912055612431565b8285600001600183038154811061352657fe5b9060005260206000209060020201600101819055506000915050612431565b816135586001600160a01b03821661293e565b6135a9576040805162461bcd60e51b815260206004820152601a60248201527f4552433230577261707065723a206e6f6e2d636f6e7472616374000000000000604482015290519081900360640190fd5b600080826001600160a01b0316846040518082805190602001908083835b6020831061360457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016135c7565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613666576040519150601f19603f3d011682016040523d82523d6000602084013e61366b565b606091505b509150915081156136ea578051156136e55780806020019051602081101561369257600080fd5b50516136e5576040805162461bcd60e51b815260206004820152601e60248201527f4552433230577261707065723a206f7065726174696f6e206661696c65640000604482015290519081900360640190fd5b613746565b805161373d576040805162461bcd60e51b815260206004820152601e60248201527f4552433230577261707065723a206f7065726174696f6e206661696c65640000604482015290519081900360640190fd5b80518082602001fd5b5050505050565b6000808212156137a4576040805162461bcd60e51b815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f736974697665604482015290519081900360640190fd5b5090565b600082820183811015612431576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60405180610140016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160008019168152602001600081526020016060815260200160008152602001606081526020016060815260200160608152509056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220c4e75bb10eaf1422ddc64e093ef0ba270fd4dcf73ec30fd57d22121ffd33cd2964736f6c63430007060033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1C2 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8456CB59 GT PUSH2 0xF7 JUMPI DUP1 PUSH4 0xA0CF0735 GT PUSH2 0x95 JUMPI DUP1 PUSH4 0xC7B778DB GT PUSH2 0x64 JUMPI DUP1 PUSH4 0xC7B778DB EQ PUSH2 0xB57 JUMPI DUP1 PUSH4 0xC931F7C9 EQ PUSH2 0xC26 JUMPI DUP1 PUSH4 0xF21F537D EQ PUSH2 0xC61 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0xC76 JUMPI PUSH2 0x1C2 JUMP JUMPDEST DUP1 PUSH4 0xA0CF0735 EQ PUSH2 0x8D4 JUMPI DUP1 PUSH4 0xA963B257 EQ PUSH2 0x9DA JUMPI DUP1 PUSH4 0xBDA4C5AB EQ PUSH2 0xA6F JUMPI DUP1 PUSH4 0xBE9A6555 EQ PUSH2 0xB42 JUMPI PUSH2 0x1C2 JUMP JUMPDEST DUP1 PUSH4 0x8DA5CB5B GT PUSH2 0xD1 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x808 JUMPI DUP1 PUSH4 0x97309B44 EQ PUSH2 0x81D JUMPI DUP1 PUSH4 0x9865BCC8 EQ PUSH2 0x8BF JUMPI DUP1 PUSH4 0x9E049545 EQ PUSH2 0x8BF JUMPI PUSH2 0x1C2 JUMP JUMPDEST DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x6F3 JUMPI DUP1 PUSH4 0x8488BB4E EQ PUSH2 0x708 JUMPI DUP1 PUSH4 0x8CE507EB EQ PUSH2 0x71D JUMPI PUSH2 0x1C2 JUMP JUMPDEST DUP1 PUSH4 0x579F2C77 GT PUSH2 0x164 JUMPI DUP1 PUSH4 0x5E6E9F70 GT PUSH2 0x13E JUMPI DUP1 PUSH4 0x5E6E9F70 EQ PUSH2 0x4F6 JUMPI DUP1 PUSH4 0x607DC017 EQ PUSH2 0x631 JUMPI DUP1 PUSH4 0x61BD3851 EQ PUSH2 0x65B JUMPI DUP1 PUSH4 0x6B8F9C43 EQ PUSH2 0x6C0 JUMPI PUSH2 0x1C2 JUMP JUMPDEST DUP1 PUSH4 0x579F2C77 EQ PUSH2 0x4A3 JUMPI DUP1 PUSH4 0x5C4FAFC7 EQ PUSH2 0x4B8 JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x4CD JUMPI PUSH2 0x1C2 JUMP JUMPDEST DUP1 PUSH4 0x2C87927B GT PUSH2 0x1A0 JUMPI DUP1 PUSH4 0x2C87927B EQ PUSH2 0x3DD JUMPI DUP1 PUSH4 0x3C33C51E EQ PUSH2 0x424 JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x467 JUMPI DUP1 PUSH4 0x558884BD EQ PUSH2 0x47C JUMPI PUSH2 0x1C2 JUMP JUMPDEST DUP1 PUSH4 0x1265B651 EQ PUSH2 0x1C7 JUMPI DUP1 PUSH4 0x1323B066 EQ PUSH2 0x1F8 JUMPI DUP1 PUSH4 0x2A8A45BC EQ PUSH2 0x2F5 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1DC PUSH2 0xCA9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x204 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x29A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x21B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x25B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x26D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x28F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0xCB8 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2E0 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2C8 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP4 POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x301 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x31F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x318 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0xDAD JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x384 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x36C JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3C3 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3AB JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP9 POP POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x422 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x400 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xF52 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x430 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x422 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x447 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0xF64 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x473 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x422 PUSH2 0xF90 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x488 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x491 PUSH2 0xFFE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x491 PUSH2 0x1004 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1DC PUSH2 0x100A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4E2 PUSH2 0x1022 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x502 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x422 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x519 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x53B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x54D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x56F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 SWAP5 SWAP4 PUSH1 0x20 DUP2 ADD SWAP4 POP CALLDATALOAD SWAP2 POP POP PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x5BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x5D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x5F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0x102B SWAP5 POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x63D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x422 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x654 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1208 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x667 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x670 PUSH2 0x120D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 DUP2 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x6AC JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x694 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x422 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x6E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1268 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6FF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x422 PUSH2 0x1335 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x714 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1DC PUSH2 0x139C JUMP JUMPDEST PUSH2 0x422 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x733 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x773 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x785 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x7A7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 DUP3 CALLDATALOAD SWAP3 PUSH1 0x40 DUP2 ADD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x7C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x7DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x7FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x13AB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x814 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1DC PUSH2 0x1475 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x829 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x29A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x840 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x880 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x892 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x8B4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x1484 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x491 PUSH2 0x1523 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x976 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x8F7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x937 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x949 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x96B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x1529 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP5 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x9C4 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x9AC JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x422 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x9F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xA30 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xA42 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xA64 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x15F1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA7B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x670 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0xA92 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xAAD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xABF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xAE1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 DUP3 CALLDATALOAD SWAP3 PUSH1 0x40 DUP2 ADD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xB03 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xB15 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xB37 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x16D7 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xB4E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x422 PUSH2 0x17E6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xB63 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x670 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xB7A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xB95 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xBA7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xBC9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH1 0x20 DUP2 ADD SWAP1 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xBE7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xBF9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xC1B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x17F9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xC32 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x491 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xC49 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x18E5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xC6D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x491 PUSH2 0x1902 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xC82 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x422 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xC99 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1908 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x2 SLOAD PUSH1 0x0 EQ ISZERO PUSH2 0xD14 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0xD1C PUSH2 0x196E JUMP JUMPDEST PUSH2 0xD24 PUSH2 0x3802 JUMP JUMPDEST PUSH2 0xD2C PUSH2 0x19C6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP10 DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP10 AND PUSH1 0x40 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD DUP10 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP9 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x1F DUP8 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD SWAP1 SWAP2 MSTORE DUP6 DUP2 MSTORE SWAP1 DUP7 SWAP1 DUP7 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP POP PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0xD9D DUP2 PUSH2 0x19CA JUMP JUMPDEST SWAP3 POP SWAP3 POP POP SWAP7 POP SWAP7 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP2 SWAP1 DUP2 SWAP1 DUP2 SWAP1 PUSH1 0x60 SWAP1 DUP2 SWAP1 DUP4 PUSH2 0xDD3 PUSH1 0x4 DUP4 ADD PUSH2 0x19F1 JUMP JUMPDEST DUP3 SLOAD SWAP9 POP SWAP1 POP DUP8 PUSH2 0xE2B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7500000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x3 DUP5 ADD SLOAD SWAP2 SWAP9 POP SWAP7 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP5 POP DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0xE61 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xE8B JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP4 POP DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0xEA5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xECF JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xF46 JUMPI PUSH1 0x0 DUP1 PUSH2 0xEED PUSH1 0x4 DUP7 ADD DUP5 PUSH2 0x19F5 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP2 PUSH1 0x0 SHR DUP8 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0xF01 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP DUP1 PUSH1 0x0 SHR DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0xF31 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP POP PUSH1 0x1 ADD PUSH2 0xED5 JUMP JUMPDEST POP POP POP SWAP2 SWAP4 SWAP6 POP SWAP2 SWAP4 SWAP6 JUMP JUMPDEST PUSH2 0xF5E DUP5 DUP5 DUP5 DUP5 PUSH2 0x1A86 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP6 AND DUP3 MSTORE SWAP3 SWAP1 SWAP3 MSTORE SWAP2 SWAP1 KECCAK256 SSTORE JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0xFE4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0xFF4 PUSH2 0xFEF PUSH2 0x19C6 JUMP JUMPDEST PUSH2 0x1CBD JUMP JUMPDEST PUSH2 0xFFC PUSH2 0x1D84 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x9 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 NOT DUP2 JUMP JUMPDEST PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x1036 PUSH2 0xFEF PUSH2 0x19C6 JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD DUP2 EQ PUSH2 0x108D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E636F6E73697374656E742061727261797300000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0x10EE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7500000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP2 ADD DUP3 PUSH2 0x1139 JUMPI PUSH1 0x0 PUSH2 0x1102 DUP3 PUSH2 0x19F1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1132 JUMPI PUSH1 0x0 PUSH2 0x111B DUP5 DUP3 PUSH2 0x19F5 JUMP JUMPDEST POP SWAP1 POP PUSH2 0x1128 DUP5 DUP3 PUSH2 0x1DDC JUMP JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x1107 JUMP JUMPDEST POP POP PUSH2 0x1144 JUMP JUMPDEST PUSH2 0x1144 DUP2 DUP7 DUP7 PUSH2 0x1EBC JUMP JUMPDEST DUP6 PUSH32 0xCB3FE5489E0CD43D0F4A33D1E09A4A0463A03D0D38F56165530854E5540DB143 DUP7 DUP7 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x11AC JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1194 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x11EB JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x11D3 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x9 SSTORE JUMP JUMPDEST PUSH1 0x60 PUSH1 0x4 PUSH1 0x0 ADD DUP1 SLOAD DUP1 PUSH1 0x20 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 DUP1 ISZERO PUSH2 0x125E JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x124A JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x1273 PUSH2 0xFEF PUSH2 0x19C6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x12CE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061796F75743A207A65726F2061646472657373000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 SWAP1 SWAP2 OR SWAP2 DUP3 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD SWAP3 SWAP1 SWAP2 AND DUP3 MSTORE MLOAD PUSH32 0xDD880D24A789958A6398C99C2E54CE31BC10A638CBC42F7DD34285479AE0F855 SWAP2 PUSH1 0x20 SWAP1 DUP3 SWAP1 SUB ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x1389 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x1394 PUSH2 0xFEF PUSH2 0x19C6 JUMP JUMPDEST PUSH2 0xFFC PUSH2 0x1F44 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x13B3 PUSH2 0x3802 JUMP JUMPDEST PUSH2 0x13BB PUSH2 0x19C6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP11 DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP11 AND PUSH1 0x40 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD DUP11 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP10 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x1F DUP9 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD SWAP1 SWAP2 MSTORE DUP7 DUP2 MSTORE SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP POP PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP6 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP5 DUP3 MSTORE SWAP1 SWAP2 DUP6 SWAP2 DUP6 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP POP PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x1469 DUP2 PUSH2 0x1F82 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x1490 PUSH2 0x3802 JUMP JUMPDEST PUSH2 0x1498 PUSH2 0x19C6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP10 DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP10 AND PUSH1 0x40 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD DUP10 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP9 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x1F DUP8 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD SWAP1 SWAP2 MSTORE DUP6 DUP2 MSTORE SWAP1 DUP7 SWAP1 DUP7 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP POP PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x1509 DUP2 PUSH2 0x2221 JUMP JUMPDEST DUP1 PUSH1 0xC0 ADD MLOAD SWAP3 POP DUP1 PUSH1 0xE0 ADD MLOAD SWAP2 POP POP SWAP7 POP SWAP7 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 NOT DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x60 PUSH2 0x1536 PUSH2 0x3802 JUMP JUMPDEST PUSH2 0x153E PUSH2 0x19C6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP11 DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP11 AND PUSH1 0x40 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD DUP11 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP10 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x1F DUP9 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD SWAP1 SWAP2 MSTORE DUP7 DUP2 MSTORE SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD DUP3 SWAP1 MSTORE POP PUSH1 0xA0 DUP7 ADD SWAP5 SWAP1 SWAP5 MSTORE POP POP POP DUP9 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH1 0x4 DUP3 ADD SWAP1 PUSH2 0x15C4 DUP5 DUP4 PUSH2 0x22C3 JUMP JUMPDEST SWAP1 POP PUSH2 0x15D1 DUP5 DUP4 DUP4 PUSH2 0x2333 JUMP JUMPDEST SWAP7 POP DUP4 PUSH1 0xC0 ADD MLOAD SWAP6 POP DUP4 PUSH1 0xE0 ADD MLOAD SWAP5 POP POP POP POP POP SWAP7 POP SWAP7 POP SWAP7 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x1645 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x164D PUSH2 0x196E JUMP JUMPDEST PUSH2 0x1655 PUSH2 0x3802 JUMP JUMPDEST PUSH2 0x165D PUSH2 0x19C6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP8 DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP8 AND PUSH1 0x40 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD DUP8 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP7 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x1F DUP6 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD SWAP1 SWAP2 MSTORE DUP4 DUP2 MSTORE SWAP1 DUP5 SWAP1 DUP5 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP POP PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x16CE DUP2 PUSH2 0x2438 JUMP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP5 DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x16F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x171B JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x17DB JUMPI PUSH1 0x0 PUSH2 0x179D DUP10 DUP10 DUP5 DUP2 DUP2 LT PUSH2 0x173A JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x7 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP10 DUP10 DUP10 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x2465 SWAP3 POP POP POP JUMP JUMPDEST SWAP1 POP PUSH2 0x17BB DUP2 PUSH2 0x17B5 DUP10 PUSH8 0xDE0B6B3A7640000 PUSH2 0x24FF JUMP JUMPDEST SWAP1 PUSH2 0x2558 JUMP JUMPDEST DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x17C7 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP PUSH1 0x1 ADD PUSH2 0x1721 JUMP JUMPDEST POP POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x17F1 PUSH2 0xFEF PUSH2 0x19C6 JUMP JUMPDEST PUSH2 0xFF4 PUSH2 0x25BF JUMP JUMPDEST PUSH1 0x60 DUP4 DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x1813 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x183D JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x18DB JUMPI PUSH2 0x18BC DUP8 DUP8 DUP4 DUP2 DUP2 LT PUSH2 0x185A JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x7 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 DUP8 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x2641 SWAP3 POP POP POP JUMP JUMPDEST DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x18C8 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x1843 JUMP JUMPDEST POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x1913 PUSH2 0xFEF PUSH2 0x19C6 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 DUP3 OR DUP1 DUP5 SSTORE PUSH1 0x40 MLOAD SWAP3 SWAP4 SWAP2 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xFFC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061757361626C653A2070617573656400000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x19D7 DUP4 PUSH2 0x264A JUMP JUMPDEST PUSH2 0x19E0 DUP4 PUSH2 0x2221 JUMP JUMPDEST POP POP PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xE0 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP2 JUMP JUMPDEST SLOAD SWAP1 JUMP JUMPDEST DUP2 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP4 LT PUSH2 0x1A4F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x456E756D4D61703A20696E646578206F7574206F6620626F756E647300000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 PUSH1 0x0 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x1A60 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD SWAP1 POP DUP1 PUSH1 0x0 ADD SLOAD DUP2 PUSH1 0x1 ADD SLOAD SWAP3 POP SWAP3 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP3 PUSH2 0x1AD8 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F20737570706C79000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH2 0x1B03 PUSH1 0x4 PUSH2 0x19F1 JUMP JUMPDEST LT PUSH2 0x1B55 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20746F6F206D616E7920736B757300000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x1B60 PUSH1 0x4 DUP6 PUSH2 0x28F4 JUMP JUMPDEST PUSH2 0x1BB1 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20736B7520616C7265616479206372656174656400000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO PUSH2 0x1C23 JUMPI PUSH2 0x1BD2 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x293E JUMP JUMPDEST PUSH2 0x1C23 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D636F6E74726163742072656365697665720000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP6 DUP2 SSTORE PUSH1 0x1 DUP2 ADD DUP7 SWAP1 SSTORE PUSH1 0x2 DUP2 ADD DUP6 SWAP1 SSTORE PUSH1 0x3 DUP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT SWAP1 SWAP2 AND DUP2 OR SWAP1 SWAP2 SSTORE DUP4 MLOAD DUP9 DUP2 MSTORE SWAP3 DUP4 ADD DUP8 SWAP1 MSTORE DUP3 DUP5 ADD DUP7 SWAP1 MSTORE PUSH1 0x60 DUP4 ADD MSTORE SWAP2 MLOAD PUSH32 0x38BD4AABCE684540CD61351B91F2F5FACF9D6963934347E25AAB93D87AE7AC14 SWAP2 DUP2 SWAP1 SUB PUSH1 0x80 ADD SWAP1 LOG1 POP POP POP POP POP JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8DA5CB5B 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 PUSH2 0x1CF6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1D0A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1D20 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ PUSH2 0x1D81 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6F7420746865206F776E657200000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0x1D8C PUSH2 0x2944 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA PUSH2 0x1DBF PUSH2 0x19C6 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0x1EB0 JUMPI DUP4 SLOAD PUSH1 0x0 NOT DUP1 DUP4 ADD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x0 SWAP1 DUP8 SWAP1 DUP4 SWAP1 DUP2 LT PUSH2 0x1E0F JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD SWAP1 POP DUP1 DUP8 PUSH1 0x0 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x1E2F JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 DUP5 SLOAD PUSH1 0x2 SWAP1 SWAP4 MUL ADD SWAP2 DUP3 SSTORE PUSH1 0x1 SWAP4 DUP5 ADD SLOAD SWAP2 DUP5 ADD SWAP2 SWAP1 SWAP2 SSTORE DUP4 SLOAD DUP3 MSTORE DUP10 DUP4 ADD SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP1 DUP5 ADD SWAP1 SSTORE DUP7 SLOAD DUP8 SWAP1 DUP1 PUSH2 0x1E6E JUMPI INVALID JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 PUSH1 0x2 PUSH1 0x0 NOT SWAP1 SWAP5 ADD SWAP4 DUP5 MUL ADD DUP3 DUP2 SSTORE PUSH1 0x1 SWAP1 DUP2 ADD DUP4 SWAP1 SSTORE SWAP3 SWAP1 SWAP4 SSTORE DUP9 DUP2 MSTORE DUP10 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x40 DUP3 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE SWAP5 POP PUSH2 0x1EB6 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SWAP2 POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x1EC7 DUP4 DUP4 DUP4 PUSH2 0x299B JUMP JUMPDEST PUSH2 0x1ED0 DUP4 PUSH2 0x19F1 JUMP JUMPDEST ISZERO DUP1 PUSH2 0x1EEE JUMPI POP PUSH1 0x7 SLOAD PUSH2 0x1EEE SWAP1 DUP5 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2AFF JUMP JUMPDEST PUSH2 0x1F3F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F207265666572656E636520746F6B656E0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x1F4C PUSH2 0x196E JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH2 0x1DBF PUSH2 0x19C6 JUMP JUMPDEST PUSH1 0xE0 DUP2 ADD MLOAD MLOAD ISZERO DUP1 PUSH2 0x1FB4 JUMPI POP PUSH1 0x1 PUSH1 0x0 NOT SUB DUP2 PUSH1 0xE0 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x1FA6 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 SHR EQ ISZERO JUMPDEST ISZERO PUSH2 0x1FC7 JUMPI PUSH2 0x1FC2 DUP2 PUSH2 0x2B17 JUMP JUMPDEST PUSH2 0x1D81 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x204E JUMPI DUP1 PUSH1 0xC0 ADD MLOAD CALLVALUE LT ISZERO PUSH2 0x2049 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E73756666696369656E742045544800000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x2075 JUMP JUMPDEST PUSH2 0x2075 PUSH2 0x2059 PUSH2 0x19C6 JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD MLOAD PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 SWAP1 ADDRESS SWAP1 PUSH2 0x2C62 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0xE0 ADD MLOAD PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x2088 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 SHR SWAP1 POP PUSH1 0x0 PUSH2 0x20BA PUSH8 0xDE0B6B3A7640000 PUSH2 0x17B5 DUP6 PUSH1 0xC0 ADD MLOAD DUP6 PUSH2 0x24FF SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0x7 SLOAD PUSH1 0xA0 DUP7 ADD MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 PUSH2 0x20E3 SWAP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP6 SWAP1 PUSH2 0x2CEA JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MLOAD SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x2164 JUMPI PUSH1 0x0 PUSH2 0x211B CALLVALUE DUP4 PUSH2 0x2D18 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x215E JUMPI DUP5 MLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 DUP3 ISZERO PUSH2 0x8FC MUL SWAP1 DUP4 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x215C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP JUMPDEST POP PUSH2 0x219D JUMP JUMPDEST PUSH1 0xC0 DUP5 ADD MLOAD PUSH1 0x0 SWAP1 PUSH2 0x2176 SWAP1 DUP4 PUSH2 0x2D18 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x219B JUMPI DUP5 MLOAD PUSH1 0x40 DUP7 ADD MLOAD PUSH2 0x219B SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 DUP4 PUSH2 0x2D75 JUMP JUMPDEST POP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x2204 JUMPI PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 DUP3 ISZERO PUSH2 0x8FC MUL SWAP1 DUP4 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x21FE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0xF5E JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x7 SLOAD PUSH2 0xF5E SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND SWAP2 AND DUP4 PUSH2 0x2D75 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0x2287 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20756E737570706F7274656420534B550000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP2 ADD PUSH1 0x0 PUSH2 0x2297 DUP5 DUP4 PUSH2 0x22C3 JUMP JUMPDEST SWAP1 POP PUSH2 0x22A4 DUP5 DUP4 DUP4 PUSH2 0x2333 JUMP JUMPDEST PUSH2 0xF5E JUMPI PUSH1 0x80 DUP5 ADD MLOAD PUSH2 0x22B8 SWAP1 DUP3 SWAP1 PUSH2 0x24FF JUMP JUMPDEST PUSH1 0xC0 DUP6 ADD MSTORE POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x0 SWAP1 PUSH2 0x22DF SWAP1 DUP4 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2DF5 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x1EB6 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20756E737570706F72746564207061796D656E7420746F6B656E00 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 NOT DUP3 EQ PUSH2 0x2350 JUMPI PUSH2 0x2349 DUP5 DUP5 DUP5 PUSH2 0x2E85 JUMP JUMPDEST SWAP1 POP PUSH2 0x2431 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x236A SWAP1 DUP6 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2DF5 JUMP JUMPDEST PUSH1 0x80 DUP7 ADD MLOAD SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH2 0x2380 SWAP1 DUP4 SWAP1 PUSH2 0x24FF JUMP JUMPDEST PUSH1 0x40 DUP8 ADD MLOAD PUSH1 0x7 SLOAD PUSH1 0xA0 DUP10 ADD MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 PUSH2 0x23A9 SWAP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP6 SWAP1 PUSH2 0x2465 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x23C3 DUP3 PUSH2 0x17B5 DUP6 PUSH8 0xDE0B6B3A7640000 PUSH2 0x24FF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x2 DUP1 DUP3 MSTORE PUSH1 0x60 DUP3 ADD DUP4 MSTORE SWAP3 SWAP4 POP SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP POP POP PUSH1 0xE0 DUP10 ADD DUP2 SWAP1 MSTORE DUP1 MLOAD DUP8 SWAP2 SWAP1 PUSH1 0x0 SWAP1 PUSH2 0x23F8 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x0 SHL DUP9 PUSH1 0xE0 ADD MLOAD PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x2419 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP PUSH1 0xC0 DUP8 ADD MSTORE POP PUSH1 0x1 SWAP2 POP POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x2441 DUP2 PUSH2 0x264A JUMP JUMPDEST PUSH2 0x244A DUP2 PUSH2 0x2221 JUMP JUMPDEST PUSH2 0x2453 DUP2 PUSH2 0x1F82 JUMP JUMPDEST PUSH2 0x245C DUP2 PUSH2 0x2F7D JUMP JUMPDEST PUSH2 0x1D81 DUP2 PUSH2 0x2FC9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 SLOAD DUP1 PUSH2 0x24DF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20756E646566696E65642072617465000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x24F5 DUP2 PUSH2 0x17B5 DUP7 PUSH8 0xDE0B6B3A7640000 PUSH2 0x24FF JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x250E JUMPI POP PUSH1 0x0 PUSH2 0x1EB6 JUMP JUMPDEST DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 PUSH2 0x251B JUMPI INVALID JUMPDEST DIV EQ PUSH2 0x2431 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x3874 PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP3 GT PUSH2 0x25AE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206469766973696F6E206279207A65726F000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 DUP4 DUP2 PUSH2 0x25B7 JUMPI INVALID JUMPDEST DIV SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD ISZERO PUSH2 0x2614 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A20737461727465640000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST TIMESTAMP PUSH1 0x2 SSTORE PUSH32 0x27029695AA5F602A4EE81F4C32DFA86E562F200A17966496F3A7C3F2EC0F9417 PUSH2 0x1DBF PUSH2 0x19C6 JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x26A9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F206164647265737320726563697069656E7400000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2708 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F206164647265737320746F6B656E0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x80 DUP2 ADD MLOAD PUSH2 0x275E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F207175616E7469747920707572636861736500000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0x27C4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7500000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x80 ADD MLOAD DUP2 PUSH1 0x2 ADD SLOAD LT ISZERO PUSH2 0x2821 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A2061626F7665206D6178207175616E746974790000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 SLOAD PUSH1 0x0 NOT EQ PUSH2 0x2888 JUMPI DUP2 PUSH1 0x80 ADD MLOAD DUP2 PUSH1 0x1 ADD SLOAD LT ISZERO PUSH2 0x2888 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E73756666696369656E7420737570706C7900000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x28A3 PUSH1 0x4 DUP4 ADD DUP3 PUSH2 0x2AFF JUMP JUMPDEST PUSH2 0x1F3F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7520746F6B656E00000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2900 DUP4 DUP4 PUSH2 0x2AFF JUMP JUMPDEST PUSH2 0x2936 JUMPI POP DUP2 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP5 SSTORE PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 SWAP1 SWAP4 ADD DUP5 SWAP1 SSTORE DUP5 SLOAD DUP5 DUP3 MSTORE DUP3 DUP7 ADD SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0x1EB6 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x1EB6 JUMP JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND PUSH2 0xFFC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061757361626C653A206E6F7420706175736564000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x2A81 JUMPI PUSH1 0x0 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x29B5 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x2A27 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F206164647265737320746F6B656E0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2A35 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP DUP1 PUSH1 0x0 EQ ISZERO PUSH2 0x2A61 JUMPI PUSH2 0x2A5B DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x1DDC JUMP JUMPDEST POP PUSH2 0x2A77 JUMP JUMPDEST PUSH2 0x2A75 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP4 PUSH2 0x34AE JUMP JUMPDEST POP JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x299E JUMP JUMPDEST POP PUSH32 0x0 PUSH2 0x2AAC DUP5 PUSH2 0x19F1 JUMP JUMPDEST GT ISZERO PUSH2 0x1F3F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20746F6F206D616E7920746F6B656E730000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x2C3A JUMPI DUP1 PUSH1 0xC0 ADD MLOAD CALLVALUE LT ISZERO PUSH2 0x2B99 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E73756666696369656E742045544800000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xC0 DUP3 ADD MLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 DUP2 ISZERO PUSH2 0x8FC MUL SWAP2 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x2BD7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x0 PUSH2 0x2BF1 DUP3 PUSH1 0xC0 ADD MLOAD CALLVALUE PUSH2 0x2D18 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x2C34 JUMPI DUP2 MLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 DUP3 ISZERO PUSH2 0x8FC MUL SWAP1 DUP4 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x2C32 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP JUMPDEST POP PUSH2 0x1D81 JUMP JUMPDEST PUSH2 0x1D81 PUSH2 0x2C45 PUSH2 0x19C6 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xC0 DUP5 ADD MLOAD PUSH1 0x40 DUP6 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP4 SWAP3 AND SWAP1 JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x24 DUP4 ADD MSTORE DUP5 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x84 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 OR SWAP1 MSTORE PUSH2 0xF5E SWAP1 DUP6 SWAP1 PUSH2 0x3545 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2CF8 DUP6 DUP6 DUP6 DUP6 PUSH2 0x2465 JUMP JUMPDEST SWAP1 POP PUSH2 0x2D0F PUSH2 0x2D08 PUSH1 0x9 SLOAD PUSH2 0x374D JUMP JUMPDEST DUP3 SWAP1 PUSH2 0x37A8 JUMP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 GT ISZERO PUSH2 0x2D6F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 OR SWAP1 MSTORE PUSH2 0x1F3F SWAP1 DUP5 SWAP1 PUSH2 0x3545 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 PUSH2 0x2E58 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x456E756D4D61703A206E6F6E6578697374656E74206B65790000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP4 PUSH1 0x0 ADD PUSH1 0x1 DUP3 SUB DUP2 SLOAD DUP2 LT PUSH2 0x2E6A JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD PUSH1 0x1 ADD SLOAD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x0 NOT DUP3 EQ PUSH2 0x2E98 JUMPI POP PUSH1 0x0 PUSH2 0x2431 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x2EB2 SWAP1 DUP6 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2DF5 JUMP JUMPDEST PUSH1 0x40 DUP7 ADD MLOAD PUSH1 0x7 SLOAD PUSH1 0xA0 DUP9 ADD MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 PUSH2 0x2ED9 SWAP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH2 0x2641 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2F0A DUP8 PUSH1 0x80 ADD MLOAD PUSH2 0x2F04 DUP5 PUSH2 0x17B5 PUSH8 0xDE0B6B3A7640000 DUP9 PUSH2 0x24FF SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 PUSH2 0x24FF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x2 DUP1 DUP3 MSTORE PUSH1 0x60 DUP3 ADD DUP4 MSTORE SWAP3 SWAP4 POP SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP POP POP PUSH1 0xE0 DUP9 ADD DUP2 SWAP1 MSTORE DUP1 MLOAD DUP7 SWAP2 SWAP1 PUSH1 0x0 SWAP1 PUSH2 0x2F3F JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP2 PUSH1 0x0 SHL DUP8 PUSH1 0xE0 ADD MLOAD PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x2F60 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0xC0 DUP8 ADD MSTORE POP PUSH1 0x1 SWAP2 POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x0 NOT EQ PUSH2 0x2FC5 JUMPI PUSH1 0x80 DUP3 ADD MLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH2 0x2FAD SWAP2 PUSH2 0x2D18 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SSTORE JUMPDEST POP POP JUMP JUMPDEST DUP1 PUSH1 0x60 ADD MLOAD DUP2 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x29F844483CA6B10B5C0611D039AFC15CE8F6380E905307B381C3A8EE4E90E11E DUP5 PUSH1 0x20 ADD MLOAD DUP6 PUSH1 0x80 ADD MLOAD DUP7 PUSH1 0xA0 ADD MLOAD DUP8 PUSH1 0xC0 ADD MLOAD DUP9 PUSH1 0xE0 ADD MLOAD DUP10 PUSH2 0x100 ADD MLOAD DUP11 PUSH2 0x120 ADD MLOAD PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP5 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3060 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3048 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3090 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3078 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x30C0 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x30A8 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP4 POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP7 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3137 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x311F JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x3164 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP DUP4 DUP2 SUB DUP3 MSTORE DUP5 MLOAD DUP2 MSTORE DUP5 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP7 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3197 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x317F JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x31C4 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP8 POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 ISZERO PUSH2 0x2FC5 JUMPI PUSH4 0x61ECEAE8 PUSH1 0xE0 SHL PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x61ECEAE8 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD DUP7 PUSH1 0x40 ADD MLOAD DUP8 PUSH1 0x60 ADD MLOAD DUP9 PUSH1 0x80 ADD MLOAD DUP10 PUSH1 0xA0 ADD MLOAD DUP11 PUSH1 0xC0 ADD MLOAD DUP12 PUSH1 0xE0 ADD MLOAD DUP13 PUSH2 0x100 ADD MLOAD DUP14 PUSH2 0x120 ADD MLOAD PUSH1 0x40 MLOAD DUP12 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP6 DUP2 SUB DUP6 MSTORE DUP11 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x32FD JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x32E5 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x332A JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP DUP6 DUP2 SUB DUP5 MSTORE DUP9 MLOAD DUP2 MSTORE DUP9 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP1 DUP12 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x335F JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3347 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP6 DUP2 SUB DUP4 MSTORE DUP8 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x339E JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3386 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP6 DUP2 SUB DUP3 MSTORE DUP7 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x33DD JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x33C5 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP15 POP POP POP POP POP POP POP POP POP POP POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x340E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3422 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3438 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND EQ PUSH2 0x2FC5 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F74696669636174696F6E2072656675736564000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x1 DUP5 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 PUSH2 0x3513 JUMPI POP POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE DUP4 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD DUP5 DUP2 MSTORE DUP7 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP10 SSTORE PUSH1 0x0 DUP10 DUP2 MSTORE DUP5 DUP2 KECCAK256 SWAP6 MLOAD PUSH1 0x2 SWAP1 SWAP4 MUL SWAP1 SWAP6 ADD SWAP2 DUP3 SSTORE SWAP2 MLOAD SWAP1 DUP3 ADD SSTORE DUP7 SLOAD DUP7 DUP5 MSTORE DUP2 DUP9 ADD SWAP1 SWAP3 MSTORE SWAP3 SWAP1 SWAP2 KECCAK256 SSTORE PUSH2 0x2431 JUMP JUMPDEST DUP3 DUP6 PUSH1 0x0 ADD PUSH1 0x1 DUP4 SUB DUP2 SLOAD DUP2 LT PUSH2 0x3526 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD PUSH1 0x1 ADD DUP2 SWAP1 SSTORE POP PUSH1 0x0 SWAP2 POP POP PUSH2 0x2431 JUMP JUMPDEST DUP2 PUSH2 0x3558 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x293E JUMP JUMPDEST PUSH2 0x35A9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433230577261707065723A206E6F6E2D636F6E7472616374000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x3604 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x35C7 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x3666 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x366B JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 ISZERO PUSH2 0x36EA JUMPI DUP1 MLOAD ISZERO PUSH2 0x36E5 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3692 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x36E5 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433230577261707065723A206F7065726174696F6E206661696C65640000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x3746 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x373D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433230577261707065723A206F7065726174696F6E206661696C65640000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 MLOAD DUP1 DUP3 PUSH1 0x20 ADD REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 SLT ISZERO PUSH2 0x37A4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C7565206D75737420626520706F736974697665 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x2431 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x140 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP1 NOT AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE POP SWAP1 JUMP INVALID MSTORE8 PUSH2 0x6665 0x4D PUSH2 0x7468 GASPRICE KECCAK256 PUSH14 0x756C7469706C69636174696F6E20 PUSH16 0x766572666C6F77A26469706673582212 KECCAK256 0xC4 0xE7 JUMPDEST 0xB1 0xE 0xAF EQ 0x22 0xDD 0xC6 0x4E MULMOD RETURNDATACOPY CREATE 0xBA 0x27 0xF 0xD4 0xDC 0xF7 RETURNDATACOPY 0xC3 0xF 0xD5 PUSH30 0x22121FFD33CD2964736F6C63430007060033000000000000000000000000 ","sourceMap":"217:4246:21:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;941:29:29;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;941:29:29;;;;;;;;;;;;;;9044:610:32;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9044:610:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9044:610:32;;-1:-1:-1;9044:610:32;-1:-1:-1;9044:610:32;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10463:1027;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10463:1027:32;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10463:1027:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;674:255:21;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;674:255:21;;;;;;;;;;;;;;;;-1:-1:-1;;;;;674:255:21;;:::i;:::-;;935:171;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;935:171:21;;;;;;;;;;;;;;;;;:::i;4169:114:32:-;;;;;;;;;;;;;:::i;396:30:21:-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;1071:85:33;;;;;;;;;;;;;:::i;1698:98:32:-;;;;;;;;;;;;;:::i;482:18:5:-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;5032:943:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5032:943:32;;;;;;;;-1:-1:-1;5032:943:32;;-1:-1:-1;;5032:943:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5032:943:32;;-1:-1:-1;5032:943:32;;-1:-1:-1;;;;;5032:943:32:i;1112:93:21:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1112:93:21;;:::i;11621:110:32:-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;660:263:8;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;660:263:8;-1:-1:-1;;;;;660:263:8;;:::i;3787:110:32:-;;;;;;;;;;;;;:::i;379:35:8:-;;;;;;;;;;;;;:::i;1885:679:21:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1885:679:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1885:679:21;;-1:-1:-1;1885:679:21;-1:-1:-1;1885:679:21;:::i;1114:94:1:-;;;;;;;;;;;;;:::i;1211:668:21:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1211:668:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1211:668:21;;-1:-1:-1;1211:668:21;-1:-1:-1;1211:668:21;:::i;857:77:29:-;;;;;;;;;;;;;:::i;2570:978:21:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2570:978:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2570:978:21;;-1:-1:-1;2570:978:21;-1:-1:-1;2570:978:21;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6962:537:32;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6962:537:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6962:537:32;;-1:-1:-1;6962:537:32;-1:-1:-1;6962:537:32;:::i;2691:497:33:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2691:497:33;;-1:-1:-1;2691:497:33;-1:-1:-1;2691:497:33;:::i;3396:118:32:-;;;;;;;;;;;;;:::i;3632:353:29:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3632:353:29;;-1:-1:-1;3632:353:29;-1:-1:-1;3632:353:29;:::i;321:68:21:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;321:68:21;;;;;;;;;;:::i;1276:85:6:-;;;;;;;;;;;;;:::i;1448:197:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1448:197:1;-1:-1:-1;;;;;1448:197:1;;:::i;941:29:29:-;;;-1:-1:-1;;;;;941:29:29;;:::o;9044:610:32:-;9266:18;9286:28;988:10:6;;1002:1;988:15;;980:50;;;;;-1:-1:-1;;;980:50:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;9326:19:32::1;:17;:19::i;:::-;9355:28;;:::i;:::-;9414:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;9393:33:32;;::::1;::::0;;9436:30;;::::1;:18;::::0;;::::1;:30:::0;;;;9476:22;;::::1;:14;::::0;;::::1;:22:::0;;;;9508:12:::1;::::0;::::1;:18:::0;;;9536:17:::1;::::0;::::1;:28:::0;;;9574;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;;;9594:8;;;;;;9574:28;::::1;9594:8:::0;;;;9574:28;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;;;;9574:17:32::1;::::0;::::1;:28:::0;9620:27:::1;9574:8:::0;9620:17:::1;:27::i;:::-;9613:34;;;;;9044:610:::0;;;;;;;;;:::o;10463:1027::-;10573:19;10841:14;;;:9;:14;;;;;10573:19;;;;;;10730:23;;;;10573:19;10882:23;:14;;;:21;:23::i;:::-;10930:19;;;-1:-1:-1;10865:40:32;-1:-1:-1;10967:16:32;10959:51;;;;;-1:-1:-1;;;10959:51:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;11038:23;;;;11096:30;;;;11160:29;;;;11038:23;;-1:-1:-1;11096:30:32;-1:-1:-1;;;;;;11160:29:32;;-1:-1:-1;11223:6:32;11209:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11209:21:32;;11200:30;;11263:6;11249:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11249:21:32;;11240:30;;11285:9;11280:204;11304:6;11300:1;:10;11280:204;;;11332:13;;11364:20;:14;;;11382:1;11364:17;:20::i;:::-;11331:53;;;;11426:5;11418:14;;11398:6;11405:1;11398:9;;;;;;;;;;;;;:35;-1:-1:-1;;;;;11398:35:32;;;-1:-1:-1;;;;;11398:35:32;;;;;11467:5;11459:14;;11447:6;11454:1;11447:9;;;;;;;;;;;;;;;;;:26;-1:-1:-1;;11312:3:32;;11280:204;;;;10463:1027;;;;;;;;;:::o;674:255:21:-;847:75;858:3;863:11;876:22;900:21;847:10;:75::i;:::-;674:255;;;;:::o;935:171::-;-1:-1:-1;;;;;1059:24:21;;;;;;;:13;:24;;;;;;;;:33;;;;;;;;;;;;;:40;935:171::o;4169:114:32:-;988:10:6;;980:50;;;;;-1:-1:-1;;;980:50:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;4225:31:32::1;4243:12;:10;:12::i;:::-;4225:17;:31::i;:::-;4266:10;:8;:10::i;:::-;4169:114::o:0;396:30:21:-;;;;:::o;1071:85:33:-;-1:-1:-1;;1071:85:33;:::o;1698:98:32:-;1751:44;1698:98;:::o;482:18:5:-;;;;;;:::o;5032:943:32:-;5176:31;5194:12;:10;:12::i;5176:31::-;5234:13;;5275;;5265:23;;5257:61;;;;;-1:-1:-1;;;5257:61:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;5328:23;5354:14;;;:9;:14;;;;;5386:19;;5378:59;;;;;-1:-1:-1;;;5378:59:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;5482:14;;;5510:11;5506:410;;5537:21;5561:20;:11;:18;:20::i;:::-;5537:44;;5600:9;5595:236;5619:13;5615:1;:17;5595:236;;;5737:13;5756:17;:11;5737:13;5756:14;:17::i;:::-;-1:-1:-1;5736:37:32;-1:-1:-1;5791:25:32;:11;5736:37;5791:18;:25::i;:::-;-1:-1:-1;;5634:3:32;;5595:236;;;;5506:410;;;;5861:44;5877:11;5890:6;5898;5861:15;:44::i;:::-;5948:3;5931:37;5953:6;5961;5931:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5032:943;;;;;;:::o;1112:93:21:-;1174:16;:24;1112:93::o;11621:110:32:-;11672:21;11712:5;:12;;11705:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11621:110;:::o;660:263:8:-;733:31;751:12;:10;:12::i;733:31::-;-1:-1:-1;;;;;782:27:8;;774:60;;;;;-1:-1:-1;;;774:60:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;844:12;:28;;-1:-1:-1;;844:28:8;-1:-1:-1;;;;;844:28:8;;;;;;;;;;;887:29;;;903:12;;;;887:29;;;;;;;;;;;;;660:263;:::o;3787:110:32:-;988:10:6;;980:50;;;;;-1:-1:-1;;;980:50:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;3841:31:32::1;3859:12;:10;:12::i;3841:31::-;3882:8;:6;:8::i;379:35:8:-:0;;;-1:-1:-1;;;;;379:35:8;;:::o;1885:679:21:-;2155:32;;:::i;:::-;2222:12;:10;:12::i;:::-;-1:-1:-1;;;;;2197:37:21;;;;;2244:34;;;:22;;;;:34;;;;2288:26;;;:18;;;;:26;;;;2324:16;;;:22;;;2356:21;;;:32;;;2398;;;;;;;;;;;;;;;;;;;;;2422:8;;;;;;2398:32;;2422:8;;;;2398:32;;;;;;;;;-1:-1:-1;;;;2398:21:21;;;:32;2440:23;;;:36;;;2486:38;;;;;;;;;;;;;;;;;;;;2513:11;;;;;;2486:38;;;2513:11;;2486:38;2513:11;2486:38;;;;;;;;;-1:-1:-1;;;;2486:24:21;;;:38;2535:22;2486:12;2535:8;:22::i;:::-;1885:679;;;;;;;;;;:::o;1114:94:1:-;1169:7;1195:6;-1:-1:-1;;;;;1195:6:1;1114:94;:::o;1211:668:21:-;1409:18;1429:28;1469:32;;:::i;:::-;1536:12;:10;:12::i;:::-;-1:-1:-1;;;;;1511:37:21;;;;;1558:34;;;:22;;;;:34;;;;1602:26;;;:18;;;;:26;;;;1638:16;;;:22;;;1670:21;;;:32;;;1712;;;;;;;;;;;;;;;;;;;;;1736:8;;;;;;1712:32;;1736:8;;;;1712:32;;;;;;;;;-1:-1:-1;;;;1712:21:21;;;:32;1755:22;1712:12;1755:8;:22::i;:::-;1801:12;:23;;;1788:36;;1848:12;:24;;;1834:38;;1211:668;;;;;;;;;;:::o;857:77:29:-;-1:-1:-1;;857:77:29;:::o;2570:978:21:-;2811:12;2837:18;2869:28;2922:32;;:::i;:::-;2989:12;:10;:12::i;:::-;-1:-1:-1;;;;;2964:37:21;;;;;3011:34;;;:22;;;;:34;;;;3055:26;;;:18;;;;:26;;;;3091:16;;;:22;;;3123:21;;;:32;;;3165;;;;;;;;;;;;;;;;;;;;;3189:8;;;;;;3165:32;;3189:8;;;;3165:32;;;;;;;;-1:-1:-1;3165:21:21;;;:32;;;;-1:-1:-1;;;3234:14:21;;;:9;:14;;;;;;3292;;;;3336:37;3165:12;3292:14;3336:10;:37::i;:::-;3316:57;;3394:52;3409:12;3423:11;3436:9;3394:14;:52::i;:::-;3384:62;;3470:12;:23;;;3457:36;;3517:12;:24;;;3503:38;;2570:978;;;;;;;;;;;;;;:::o;6962:537:32:-;988:10:6;;980:50;;;;;-1:-1:-1;;;980:50:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;7183:19:32::1;:17;:19::i;:::-;7212:28;;:::i;:::-;7271:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;7250:33:32;;::::1;::::0;;7293:30;;::::1;:18;::::0;;::::1;:30:::0;;;;7333:22;;::::1;:14;::::0;;::::1;:22:::0;;;;7365:12:::1;::::0;::::1;:18:::0;;;7393:17:::1;::::0;::::1;:28:::0;;;7431;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;;;7451:8;;;;;;7431:28;::::1;7451:8:::0;;;;7431:28;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;;;;7431:17:32::1;::::0;::::1;:28:::0;7470:22:::1;7431:8:::0;7470:12:::1;:22::i;:::-;1040:1:6;6962:537:32::0;;;;;;:::o;2691:497:33:-;2853:22;2904:6;;2935:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2935:21:33;;2927:29;;2971:9;2966:216;2990:6;2986:1;:10;2966:216;;;3017:19;3039:63;3053:6;;3060:1;3053:9;;;;;;;;;;;;;-1:-1:-1;;;;;3053:9:33;3064:14;;;;;;;;;-1:-1:-1;;;;;3064:14:33;3080:15;3097:4;;3039:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3039:13:33;;-1:-1:-1;;;3039:63:33:i;:::-;3017:85;-1:-1:-1;3127:44:33;3017:85;3127:27;:15;3147:6;3127:19;:27::i;:::-;:31;;:44::i;:::-;3116:5;3122:1;3116:8;;;;;;;;;;;;;;;;;:55;-1:-1:-1;2998:3:33;;2966:216;;;;2691:497;;;;;;;;:::o;3396:118:32:-;3438:31;3456:12;:10;:12::i;3438:31::-;3479:8;:6;:8::i;3632:353:29:-;3745:22;3796:6;;3827:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3827:21:29;;3819:29;;3863:9;3858:121;3882:6;3878:1;:10;3858:121;;;3920:48;3936:6;;3943:1;3936:9;;;;;;;;;;;;;-1:-1:-1;;;;;3936:9:29;3947:14;;;;;;;;;-1:-1:-1;;;;;3947:14:29;3963:4;;3920:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3920:15:29;;-1:-1:-1;;;3920:48:29:i;:::-;3909:5;3915:1;3909:8;;;;;;;;;;;;;;;;;:59;3890:3;;3858:121;;;;3632:353;;;;;;;:::o;321:68:21:-;;;;;;;;;;;;;;;;;;;;;;;;:::o;1276:85:6:-;1344:10;;1276:85;:::o;1448:197:1:-;1527:31;1545:12;:10;:12::i;1527:31::-;1568:6;:17;;-1:-1:-1;;1568:17:1;-1:-1:-1;;;;;1568:17:1;;;;;;;;;1600:38;;1568:17;;1621:6;;;1600:38;;1568:6;1600:38;1448:197;:::o;572:96:5:-;634:6;;;;633:7;625:36;;;;;-1:-1:-1;;;625:36:5;;;;;;;;;;;;;;;;;;;;;;;;;;;355:104:7;442:10;355:104;:::o;882:291:30:-;970:18;990:28;1030:21;1042:8;1030:11;:21::i;:::-;1061:18;1070:8;1061;:18::i;:::-;-1:-1:-1;;1103:19:30;;;;1146:20;;;;;1103:19;;882:291::o;4367:107:2:-;4449:18;;4367:107::o;4827:264::-;4930:18;;4894:7;;;;4930:26;-1:-1:-1;4922:67:2;;;;;-1:-1:-1;;;4922:67:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;5000:22;5025:3;:11;;5037:5;5025:18;;;;;;;;;;;;;;;;;;5000:43;;5061:5;:9;;;5072:5;:11;;;5053:31;;;;;4827:264;;;;;:::o;12511:877:32:-;12701:16;12693:46;;;;;-1:-1:-1;;;12693:46:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;12774:13;12757:14;:5;:12;:14::i;:::-;:30;12749:62;;;;;-1:-1:-1;;;12749:62:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;12829:14;:5;12839:3;12829:9;:14::i;:::-;12821:52;;;;;-1:-1:-1;;;12821:52:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12887:35:32;;;12883:140;;12946:34;:21;-1:-1:-1;;;;;12946:32:32;;:34::i;:::-;12938:74;;;;;-1:-1:-1;;;12938:74:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;13032:23;13058:14;;;:9;:14;;;;;;;;;13082:33;;;13125:23;;;:37;;;13172:30;;;:55;;;13237:29;;;:53;;-1:-1:-1;;;;;13237:53:32;;-1:-1:-1;;13237:53:32;;;;;;;;13305:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12511:877;;;;;:::o;1770:136:1:-;1860:4;-1:-1:-1;;;;;1860:10:1;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1860:12:1;-1:-1:-1;;;;;1849:23:1;;;;;;1841:58;;;;;-1:-1:-1;;;1841:58:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;1770:136;:::o;1166:131:5:-;1213:16;:14;:16::i;:::-;1239:6;:14;;-1:-1:-1;;1239:14:5;;;1268:22;1277:12;:10;:12::i;:::-;1268:22;;;-1:-1:-1;;;;;1268:22:5;;;;;;;;;;;;;;1166:131::o;2556:1520:2:-;2620:4;2753:16;;;:11;;;:16;;;;;;2784:13;;2780:1290;;3221:18;;-1:-1:-1;;3175:12:2;;;;3221:22;;;;3151:21;;3221:3;;:22;;3512;;;;;;;;;;;;;;;;3483:51;;3655:9;3626:3;:11;;3638:13;3626:26;;;;;;;;;;;;;;;;:38;;:26;;;;;:38;;;;;;;;;;;;;;;3742:13;;3730:26;;:11;;;:26;;;;;3759:17;;;3730:46;;3882:17;;3730:3;;3882:17;;;;;;;;;;;;;;-1:-1:-1;;3882:17:2;;;;;;;;;;;;;;;;;;;;;3974:16;;;:11;;;:16;;;;;;3967:23;;;;3882:17;-1:-1:-1;4005:11:2;;-1:-1:-1;;;;4005:11:2;2780:1290;4054:5;4047:12;;;2556:1520;;;;;:::o;4676:361:29:-;4850:50;4872:11;4885:6;4893;4850:21;:50::i;:::-;4918:20;:11;:18;:20::i;:::-;:25;;:83;;-1:-1:-1;4984:14:29;;4947:54;;:11;;-1:-1:-1;;;;;4984:14:29;4947:20;:54::i;:::-;4910:120;;;;;-1:-1:-1;;;4910:120:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;4676:361;;;:::o;905:129:5:-;950:19;:17;:19::i;:::-;979:6;:13;;-1:-1:-1;;979:13:5;988:4;979:13;;;1007:20;1014:12;:10;:12::i;3750:1456:33:-;3839:20;;;;:27;:32;;3838:97;;;1155:1;-1:-1:-1;;1128:28:33;3885:8;:20;;;3906:1;3885:23;;;;;;;;;;;;;;3877:32;;:57;;3838:97;3834:172;;;3951:24;3966:8;3951:14;:24::i;:::-;3989:7;;3834:172;4020:14;;;;-1:-1:-1;;;;;4020:27:33;1751:44:32;4020:27:33;4016:296;;;4084:8;:19;;;4071:9;:32;;4063:67;;;;;-1:-1:-1;;;4063:67:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;4016:296;;;4202:99;4252:12;:10;:12::i;:::-;4281:19;;;;4216:14;;;;-1:-1:-1;;;;;4202:49:33;;:99;4274:4;;4202:49;:99::i;:::-;4322:16;4349:8;:20;;;4370:1;4349:23;;;;;;;;;;;;;;4341:32;;4322:51;;4383:27;4413:45;4451:6;4413:33;4426:8;:19;;;4413:8;:12;;:33;;;;:::i;:45::-;4496:14;;;;4512;;4549:17;;;;4383:75;;-1:-1:-1;4469:18:33;;4490:77;;4496:14;-1:-1:-1;;;;;4512:14:33;;4383:75;;4490:5;:77::i;:::-;4582:14;;;;4469:98;;-1:-1:-1;;;;;;4582:27:33;1751:44:32;4582:27:33;4578:419;;;4625:14;4642:25;:9;4656:10;4642:13;:25::i;:::-;4625:42;-1:-1:-1;4686:11:33;;4682:85;;4717:18;;:35;;-1:-1:-1;;;;;4717:27:33;;;;:35;;;;;4745:6;;4717:18;:35;:18;:35;4745:6;4717:27;:35;;;;;;;;;;;;;;;;;;;;;4682:85;4578:419;;;;4814:19;;;;4797:14;;4814:35;;4838:10;4814:23;:35::i;:::-;4797:52;-1:-1:-1;4868:11:33;;4864:123;;4945:18;;4913:14;;;;4899:73;;-1:-1:-1;;;;;4899:45:33;;;;4965:6;4899:45;:73::i;:::-;4578:419;;5011:14;;-1:-1:-1;;;;;5011:14:33;1751:44:32;5011:27:33;5007:193;;;5054:12;;:33;;-1:-1:-1;;;;;5054:12:33;;;;:33;;;;;5076:10;;5054:12;:33;:12;:33;5076:10;5054:12;:33;;;;;;;;;;;;;;;;;;;;;5007:193;;;5164:12;;5132:14;;5118:71;;-1:-1:-1;;;;;5132:14:33;;;;5164:12;5178:10;5118:45;:71::i;2571:463:29:-;2696:12;;;;2660:23;2686;;;:9;:23;;;;;2727:19;;2719:58;;;;;-1:-1:-1;;;2719:58:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;2816:14;;;2787:26;2860:28;2871:8;2816:14;2860:10;:28::i;:::-;2840:48;;2904:43;2919:8;2929:6;2937:9;2904:14;:43::i;:::-;2899:129;;2999:17;;;;2985:32;;:9;;:13;:32::i;:::-;2963:19;;;:54;2571:463;;;;:::o;3773:278:26:-;3958:14;;;;3882:17;;3931:44;;:6;;-1:-1:-1;;;;;3950:23:26;3931:10;:44::i;:::-;3923:53;-1:-1:-1;3994:14:26;3986:58;;;;;-1:-1:-1;;;3986:58:26;;;;;;;;;;;;;;;;;;;;;;;;;;;7581:919:33;7757:4;-1:-1:-1;;7777:34:33;;7773:126;;7834:54;7855:8;7865:11;7878:9;7834:20;:54::i;:::-;7827:61;;;;7773:126;7978:14;;7909:26;;7946:49;;:11;;-1:-1:-1;;;;;7978:14:33;7946:15;:49::i;:::-;8059:17;;;;7938:58;;-1:-1:-1;7938:58:33;;8036:41;;7938:58;;8036:22;:41::i;:::-;8123:14;;;;8139;;8176:17;;;;8006:71;;-1:-1:-1;8088:18:33;;8109:85;;8123:14;-1:-1:-1;;;;;8139:14:33;;8006:71;;8109:13;:85::i;:::-;8088:106;-1:-1:-1;8205:16:33;8224:47;8088:106;8224:31;:19;8248:6;8224:23;:31::i;:47::-;8305:16;;;8319:1;8305:16;;;;;;;;8205:66;;-1:-1:-1;8305:16:33;8319:1;8305:16;;;;;;;;-1:-1:-1;;;8282:20:33;;;:39;;;8331:23;;8365:9;;8282:39;8357:18;;8331:23;;;;;;;;;:44;;;;;8419:8;8411:17;;8385:8;:20;;;8406:1;8385:23;;;;;;;;;;;;;;;;;:43;-1:-1:-1;8439:19:33;;;:32;-1:-1:-1;8489:4:33;;-1:-1:-1;;7581:919:33;;;;;;:::o;1275:225:30:-;1354:21;1366:8;1354:11;:21::i;:::-;1385:18;1394:8;1385;:18::i;:::-;1413;1422:8;1413;:18::i;:::-;1441:19;1451:8;1441:9;:19::i;:::-;1470:23;1484:8;1470:13;:23::i;3761:380:21:-;-1:-1:-1;;;;;3988:24:21;;;3939:18;3988:24;;;:13;:24;;;;;;;;:33;;;;;;;;;;;;4039:13;4031:46;;;;;-1:-1:-1;;;4031:46:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;4100:34;4125:8;4100:20;:8;4113:6;4100:12;:20::i;:34::-;4087:47;3761:380;-1:-1:-1;;;;;;3761:380:21:o;3538:215:11:-;3596:7;3619:6;3615:20;;-1:-1:-1;3634:1:11;3627:8;;3615:20;3657:5;;;3661:1;3657;:5;:1;3680:5;;;;;:10;3672:56;;;;-1:-1:-1;;;3672:56:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4217:150;4275:7;4306:1;4302;:5;4294:44;;;;;-1:-1:-1;;;4294:44:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;4359:1;4355;:5;;;;;;;4217:150;-1:-1:-1;;;4217:150:11:o;1496:131:6:-;789:10;;:15;781:46;;;;;-1:-1:-1;;;781:46:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;1569:15:::1;1556:10;:28:::0;1599:21:::1;1607:12;:10;:12::i;3554:201:21:-:0;-1:-1:-1;3747:1:21;;3554:201;-1:-1:-1;;3554:201:21:o;15465:852:32:-;15565:18;;;;-1:-1:-1;;;;;15565:32:32;15557:73;;;;;-1:-1:-1;;;15557:73:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;15648:14;;;;-1:-1:-1;;;;;15648:28:32;15640:65;;;;;-1:-1:-1;;;15640:65:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;15723:17;;;;15715:63;;;;;-1:-1:-1;;;15715:63:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;15824:12;;;;15788:23;15814;;;:9;:23;;;;;15855:19;;15847:59;;;;;-1:-1:-1;;;15847:59:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;15958:8;:17;;;15924:7;:30;;;:51;;15916:88;;;;;-1:-1:-1;;;15916:88:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;16018:19;;-1:-1:-1;;16018:39:32;16014:152;;16108:8;:17;;;16081:7;:23;;;:44;;16073:82;;;;;-1:-1:-1;;;16073:82:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;16210:14;;;;-1:-1:-1;;;;;16202:23:32;16244:33;:14;;;16202:23;16244;:33::i;:::-;16236:74;;;;;-1:-1:-1;;;16236:74:32;;;;;;;;;;;;;;;;;;;;;;;;;;;1481:400:3;1544:4;1565:20;1574:3;1579:5;1565:8;:20::i;:::-;1560:315;;-1:-1:-1;1601:22:3;;;;;;;;:10;:22;;;;;;;;;;;;;1779:17;;1758:18;;;:11;;;:18;;;;;;:38;;;;1810:11;;1560:315;-1:-1:-1;1859:5:3;1852:12;;913:377:10;1229:20;1275:8;;;913:377::o;674:96:5:-;732:6;;;;724:39;;;;;-1:-1:-1;;;724:39:5;;;;;;;;;;;;;;;;;;;;;;;;;;;13862:663:32;14032:9;14027:403;14051:6;:13;14047:1;:17;14027:403;;;14085:13;14101:6;14108:1;14101:9;;;;;;;;;;;;;;14085:25;;14149:1;-1:-1:-1;;;;;14132:19:32;:5;-1:-1:-1;;;;;14132:19:32;;;14124:56;;;;;-1:-1:-1;;;14124:56:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;14194:13;14210:6;14217:1;14210:9;;;;;;;;;;;;;;14194:25;;14237:5;14246:1;14237:10;14233:187;;;14267:43;:11;-1:-1:-1;;;;;14294:14:32;;14267:18;:43::i;:::-;;14233:187;;;14349:56;:11;-1:-1:-1;;;;;14373:14:32;;14398:5;14349:15;:56::i;:::-;;14233:187;-1:-1:-1;;14066:3:32;;14027:403;;;;14471:21;14447:20;:11;:18;:20::i;:::-;:45;;14439:79;;;;;-1:-1:-1;;;14439:79:32;;;;;;;;;;;;;;;;;;;;;;;;;;;4155:122:2;4226:4;4249:16;;;:11;;;;;:16;;;;;;:21;;;4155:122::o;2637:566:26:-;2725:14;;;;-1:-1:-1;;;;;2725:27:26;1751:44:32;2725:27:26;2721:476;;;2789:8;:19;;;2776:9;:32;;2768:67;;;;;-1:-1:-1;;;2768:67:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;2850:12;;2872:19;;;;2850:42;;-1:-1:-1;;;;;2850:12:26;;;;:42;;;;;2872:19;2850:12;:42;:12;:42;2872:19;2850:12;:42;;;;;;;;;;;;;;;;;;;;;2907:14;2924:34;2938:8;:19;;;2924:9;:13;;:34;;;;:::i;:::-;2907:51;-1:-1:-1;2977:11:26;;2973:85;;3008:18;;:35;;-1:-1:-1;;;;;3008:27:26;;;;:35;;;;;3036:6;;3008:18;:35;:18;:35;3036:6;3008:27;:35;;;;;;;;;;;;;;;;;;;;;2973:85;2721:476;;;;3088:98;3138:12;:10;:12::i;:::-;3152;;3166:19;;;;3102:14;;;;-1:-1:-1;;;;;3088:49:26;;;;:98;3152:12;;645:259:9;828:68;;;-1:-1:-1;;;;;828:68:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;851:27;828:68;;;793:104;;821:5;;793:27;:104::i;4147:314:21:-;4308:18;4351:49;4365:9;4376:7;4385:8;4395:4;4351:13;:49::i;:::-;4338:62;;4410:44;4425:28;:16;;:26;:28::i;:::-;4410:10;;:14;:44::i;:::-;;4147:314;;;;;;:::o;3136:155:11:-;3194:7;3226:1;3221;:6;;3213:49;;;;;-1:-1:-1;;;3213:49:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3279:5:11;;;3136:155::o;416:223:9:-;573:58;;;-1:-1:-1;;;;;573:58:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;596:23;573:58;;;538:94;;566:5;;538:27;:94::i;5243:298:2:-;5309:7;5347:16;;;:11;;;:16;;;;;;5381:13;5373:50;;;;;-1:-1:-1;;;5373:50:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;5476:3;:11;;5499:1;5488:8;:12;5476:25;;;;;;;;;;;;;;;;;;:31;;;5469:38;;;5243:298;;;;:::o;5729:802:29:-;5896:4;-1:-1:-1;;5916:9:29;:37;5912:80;;-1:-1:-1;5976:5:29;5969:12;;5912:80;6071:14;;6002:26;;6039:49;;:11;;-1:-1:-1;;;;;6071:14:29;6039:15;:49::i;:::-;6141:14;;;;6157;;6173:17;;;;6031:58;;-1:-1:-1;6031:58:29;;6125:66;;6141:14;-1:-1:-1;;;;;6157:14:29;;6125:15;:66::i;:::-;6100:91;;6202:18;6223:73;6278:8;:17;;;6223:50;6258:14;6223:30;6246:6;6223:18;:22;;:30;;;;:::i;:50::-;:54;;:73::i;:::-;6330:16;;;6344:1;6330:16;;;;;;;;6202:94;;-1:-1:-1;6330:16:29;6344:1;6330:16;;;;;;;;-1:-1:-1;;;6307:20:29;;;:39;;;6356:23;;6390:9;;6307:39;6382:18;;6356:23;;;;;;;;;:44;;;;;6444:14;6436:23;;6410:8;:20;;;6431:1;6410:23;;;;;;;;;;;;;;;;;:49;6470:19;;;:32;-1:-1:-1;6520:4:29;;-1:-1:-1;;5729:802:29;;;;;:::o;16954:308:32:-;17075:12;;;;17039:23;17065;;;:9;:23;;;;;17102:19;;-1:-1:-1;;17102:39:32;17098:158;;17227:17;;;;17199:23;;;;:46;;:27;:46::i;:::-;17167:12;;;;17157:23;;;;:9;:23;;;;;:39;;:88;17098:158;16954:308;;:::o;17993:1293::-;18201:8;:12;;;18173:8;:14;;;-1:-1:-1;;;;;18087:328:32;18109:8;:18;;;-1:-1:-1;;;;;18087:328:32;;18141:8;:18;;;18227:8;:17;;;18258:8;:17;;;18289:8;:19;;;18339:8;:20;;;18361:8;:20;;;18383:8;:21;;;18322:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18087:328;;;;-1:-1:-1;;;;;18087:328:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18087:328:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18468:12;;;;18426:29;18458:23;;;:9;:23;;;;;:45;;;-1:-1:-1;;;;;18458:45:32;18517:35;;18513:767;;19095:82;;;18593:584;;;18624:21;-1:-1:-1;;;;;18593:84:32;;18699:8;:18;;;18739:8;:18;;;18779:8;:14;;;18815:8;:12;;;18849:8;:17;;;18888:8;:17;;;18927:8;:19;;;18968:8;:20;;;19010:8;:20;;;19052:8;:21;;;18593:498;;;;;;;;;;;;;-1:-1:-1;;;;;18593:498:32;;;;;;-1:-1:-1;;;;;18593:498:32;;;;;;-1:-1:-1;;;;;18593:498:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18593:498:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18593:498:32;:584;;;18568:701;;;;;-1:-1:-1;;;18568:701:32;;;;;;;;;;;;;;;;;;;;;;;;;;;1678:710:2;1784:4;1917:16;;;:11;;;:16;;;;;;1948:13;1944:438;;-1:-1:-1;;2043:34:2;;;;;;;;;;;;;;;;;;2026:52;;;;;;;;:11;:52;;;;;;;;;;;;;;;;;;;;;;;;2232:18;;2213:16;;;:11;;;:16;;;;;;;:37;2264:11;;1944:438;2340:5;2306:3;:11;;2329:1;2318:8;:12;2306:25;;;;;;;;;;;;;;;;;;:31;;:39;;;;2366:5;2359:12;;;;;1147:870:9;1272:5;1296:19;-1:-1:-1;;;;;1296:17:9;;;:19::i;:::-;1288:58;;;;;-1:-1:-1;;;1288:58:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;1417:12;1431:17;1452:6;-1:-1:-1;;;;;1452:11:9;1464:8;1452:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1416:57;;;;1487:7;1483:528;;;1514:11;;:16;1510:122;;1569:4;1558:24;;;;;;;;;;;;;;;-1:-1:-1;1558:24:9;1550:67;;;;;-1:-1:-1;;;1550:67:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;1483:528;;;1720:11;;1716:95;;1756:40;;;-1:-1:-1;;;1756:40:9;;;;;;;;;;;;;;;;;;;;;;;;;;;1716:95;1938:4;1932:11;1982:4;1975;1971:2;1967:13;1960:27;1902:99;1147:870;;;;;:::o;3282:168:12:-;3338:7;3374:1;3365:5;:10;;3357:55;;;;;-1:-1:-1;;;3357:55:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3437:5:12;3282:168::o;2690:175:11:-;2748:7;2779:5;;;2802:6;;;;2794:46;;;;;-1:-1:-1;;;2794:46:11;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o"},"methodIdentifiers":{"PRICE_CONVERT_VIA_ORACLE()":"9865bcc8","PRICE_SWAP_VIA_ORACLE()":"579f2c77","SUPPLY_UNLIMITED()":"9e049545","TOKEN_ETH()":"5c4fafc7","callUnderscoreOraclePricing(address,address,bytes32,uint256,bytes)":"a0cf0735","callUnderscorePayment(address,address,bytes32,uint256,bytes,uint256,bytes32[])":"8ce507eb","callUnderscorePricing(address,address,bytes32,uint256,bytes)":"97309b44","conversionRates(address[],bytes)":"c7b778db","createSku(bytes32,uint256,uint256,address)":"2c87927b","estimatePurchase(address,address,bytes32,uint256,bytes)":"1323b066","getSkuInfo(bytes32)":"2a8a45bc","getSkus()":"61bd3851","mockSwapRates(address,address)":"c931f7c9","mockSwapVariance()":"558884bd","owner()":"8da5cb5b","pause()":"8456cb59","paused()":"5c975abb","payoutWallet()":"8488bb4e","purchaseFor(address,address,bytes32,uint256,bytes)":"a963b257","referenceToken()":"1265b651","setMockSwapRate(address,address,uint256)":"3c33c51e","setMockSwapVariance(int256)":"607dc017","setPayoutWallet(address)":"6b8f9c43","start()":"be9a6555","startedAt()":"f21f537d","swapRates(address[],uint256,bytes)":"bda4c5ab","transferOwnership(address)":"f2fde38b","unpause()":"3f4ba83a","updateSkuPricing(bytes32,address[],uint256[])":"5e6e9f70"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"payoutWallet_\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"skusCapacity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensPerSkuCapacity\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"referenceToken\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32[]\",\"name\":\"names\",\"type\":\"bytes32[]\"},{\"indexed\":false,\"internalType\":\"bytes32[]\",\"name\":\"values\",\"type\":\"bytes32[]\"}],\"name\":\"MagicValues\",\"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\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"payoutWallet_\",\"type\":\"address\"}],\"name\":\"PayoutWalletSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"purchaser\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalPrice\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extData\",\"type\":\"bytes\"}],\"name\":\"Purchase\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"maxQuantityPerPurchase\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"notificationsReceiver\",\"type\":\"address\"}],\"name\":\"SkuCreation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"prices\",\"type\":\"uint256[]\"}],\"name\":\"SkuPricingUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Started\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"PRICE_CONVERT_VIA_ORACLE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PRICE_SWAP_VIA_ORACLE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SUPPLY_UNLIMITED\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TOKEN_ETH\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"callUnderscoreOraclePricing\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"handled\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"totalPrice\",\"type\":\"uint256\"},{\"internalType\":\"bytes32[]\",\"name\":\"pricingData\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"totalPrice\",\"type\":\"uint256\"},{\"internalType\":\"bytes32[]\",\"name\":\"pricingData\",\"type\":\"bytes32[]\"}],\"name\":\"callUnderscorePayment\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"callUnderscorePricing\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalPrice\",\"type\":\"uint256\"},{\"internalType\":\"bytes32[]\",\"name\":\"pricingData\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"conversionRates\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"rates\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxQuantityPerPurchase\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"notificationsReceiver\",\"type\":\"address\"}],\"name\":\"createSku\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"estimatePurchase\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalPrice\",\"type\":\"uint256\"},{\"internalType\":\"bytes32[]\",\"name\":\"pricingData\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"}],\"name\":\"getSkuInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"remainingSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxQuantityPerPurchase\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"notificationsReceiver\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"prices\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSkus\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"skus\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"mockSwapRates\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"mockSwapVariance\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"payoutWallet\",\"outputs\":[{\"internalType\":\"address payable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"purchaseFor\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"referenceToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"fromToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"toToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"name\":\"setMockSwapRate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"name\":\"setMockSwapVariance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"payoutWallet_\",\"type\":\"address\"}],\"name\":\"setPayoutWallet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"start\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"referenceAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"swapRates\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"rates\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"prices\",\"type\":\"uint256[]\"}],\"name\":\"updateSkuPricing\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"conversionRates(address[],bytes)\":{\"details\":\"Reverts if the oracle does not provide a conversion rate for one of the token pairs.\",\"params\":{\"data\":\"Additional data with no specified format for deriving the conversion rates.\",\"tokens\":\"The list of tokens to retrieve the conversion rates for.\"},\"returns\":{\"rates\":\"The conversion rates for the `tokens`/`referenceToken` pairs, retrieved via the oracle.\"}},\"estimatePurchase(address,address,bytes32,uint256,bytes)\":{\"details\":\"This function MUST compute the same price as `purchaseFor` would in identical conditions (same arguments, same point in time).If an implementer contract uses the `pricingData` field, it SHOULD document how to interpret the values.Reverts if the sale has not started.Reverts if the sale is paused.Reverts if `recipient` is the zero address.Reverts if `token` is the zero address.Reverts if `quantity` is zero.Reverts if `quantity` is greater than the maximum purchase quantity.Reverts if `quantity` is greater than the remaining supply.Reverts if `sku` does not exist.Reverts if `sku` exists but does not have a price set for `token`.\",\"params\":{\"quantity\":\"The quantity used to calculate the total price amount.\",\"recipient\":\"The recipient of the purchase used to calculate the total price amount.\",\"sku\":\"The identifier of the SKU used to calculate the total price amount.\",\"token\":\"The payment token used to calculate the total price amount.\",\"userData\":\"Optional extra user input data.\"},\"returns\":{\"pricingData\":\"Implementation-specific extra pricing data, such as details about discounts applied.  If not empty, the implementer MUST document how to interepret the values.\",\"totalPrice\":\"The computed total price.\"}},\"getSkuInfo(bytes32)\":{\"details\":\"WARNING: it is the responsibility of the implementer to ensure that the number of payment tokens is bounded, so that this function does not run out of gas.Reverts if `sku` does not exist.\",\"params\":{\"sku\":\"The SKU identifier.\"},\"returns\":{\"maxQuantityPerPurchase\":\"The maximum allowed quantity for a single purchase.\",\"notificationsReceiver\":\"The address of a contract on which to call the `onPurchaseNotificationReceived` function.\",\"prices\":\"The list of associated prices for each of the `tokens`.\",\"remainingSupply\":\"The remaining supply for sale.\",\"tokens\":\"The list of supported payment tokens.\",\"totalSupply\":\"The initial total supply for sale.\"}},\"getSkus()\":{\"returns\":{\"skus\":\"the list of created SKU identifiers.\"}},\"pause()\":{\"details\":\"Emits the `Paused` event.Reverts if called by any other than the contract owner.Reverts if the contract has not been started yet.Reverts if the contract is already paused.\"},\"purchaseFor(address,address,bytes32,uint256,bytes)\":{\"details\":\"Reverts if the sale has not started.Reverts if the sale is paused.Reverts if `recipient` is the zero address.Reverts if `token` is the zero address.Reverts if `quantity` is zero.Reverts if `quantity` is greater than the maximum purchase quantity.Reverts if `quantity` is greater than the remaining supply.Reverts if `sku` does not exist.Reverts if `sku` exists but does not have a price set for `token`.Emits the Purchase event.\",\"params\":{\"quantity\":\"The quantity to purchase.\",\"recipient\":\"The recipient of the purchase.\",\"sku\":\"The identifier of the SKU to purchase.\",\"token\":\"The token to use as the payment currency.\",\"userData\":\"Optional extra user input data.\"}},\"start()\":{\"details\":\"Emits the `Started` event.Emits the `Unpaused` event.Reverts if called by any other than the contract owner.Reverts if the contract has already been started.Reverts if the contract is not paused.\"},\"startedAt()\":{\"returns\":{\"_0\":\"The timestamp when the contract entered the started state.\"}},\"swapRates(address[],uint256,bytes)\":{\"details\":\"Reverts if the oracle does not provide a swap rate for one of the token pairs.\",\"params\":{\"data\":\"Additional data with no specified format for deriving the swap rates.\",\"referenceAmount\":\"The amount of `referenceToken` to retrieve the swap rates for.\",\"tokens\":\"The list of tokens to retrieve the swap rates for.\"},\"returns\":{\"rates\":\"The swap rates for the `tokens`/`referenceToken` pairs, retrieved via the oracle.\"}},\"transferOwnership(address)\":{\"details\":\"Reverts if the sender is not the current contract owner.\",\"params\":{\"newOwner\":\"the address of the new owner. Use the zero address to renounce the ownership.\"}},\"unpause()\":{\"details\":\"Emits the `Unpaused` event.Reverts if called by any other than the contract owner.Reverts if the contract has not been started yet.Reverts if the contract is not paused.\"},\"updateSkuPricing(bytes32,address[],uint256[])\":{\"details\":\"Reverts if called by any other than the contract owner.Reverts if `tokens` and `prices` have different lengths.Reverts if `sku` does not exist.Reverts if one of the `tokens` is the zero address.Reverts if the update results in too many tokens for the SKU.Emits the `SkuPricingUpdate` event.\",\"params\":{\"prices\":\"The list of prices to apply for each payment token.  Zero price values are used to disable a payment token.\",\"sku\":\"The identifier of the SKU.\",\"tokens\":\"The list of payment tokens to update.  If empty, disable all the existing payment tokens.\"}}},\"version\":1},\"userdoc\":{\"events\":{\"MagicValues(bytes32[],bytes32[])\":{\"notice\":\"Event emitted to notify about the magic values necessary for interfacing with this contract.\"},\"OwnershipTransferred(address,address)\":{\"notice\":\"Event emited when ownership of a contract changes.\"},\"Purchase(address,address,address,bytes32,uint256,bytes,uint256,bytes)\":{\"notice\":\"Event emitted to notify about a purchase.\"},\"SkuCreation(bytes32,uint256,uint256,address)\":{\"notice\":\"Event emitted to notify about the creation of a SKU.\"},\"SkuPricingUpdate(bytes32,address[],uint256[])\":{\"notice\":\"Event emitted to notify about a change in the pricing of a SKU.\"}},\"kind\":\"user\",\"methods\":{\"PRICE_CONVERT_VIA_ORACLE()\":{\"notice\":\"Returns the price magic value used to represent an oracle-based token conversion pricing.\"},\"PRICE_SWAP_VIA_ORACLE()\":{\"notice\":\"Returns the price magic value used to represent an oracle-based token swap pricing.\"},\"SUPPLY_UNLIMITED()\":{\"notice\":\"Returns the magic value used to represent an infinite, never-decreasing SKU's supply.\"},\"TOKEN_ETH()\":{\"notice\":\"Returns the magic value used to represent the ETH payment token.\"},\"conversionRates(address[],bytes)\":{\"notice\":\"Retrieves the token conversion rates for the `tokens`/`referenceToken` pairs via the oracle.\"},\"estimatePurchase(address,address,bytes32,uint256,bytes)\":{\"notice\":\"Estimates the computed final total amount to pay for a purchase, including any potential discount.\"},\"getSkuInfo(bytes32)\":{\"notice\":\"Returns the information relative to a SKU.\"},\"getSkus()\":{\"notice\":\"Returns the list of created SKU identifiers.\"},\"owner()\":{\"notice\":\"Gets the address of the current contract owner.\"},\"pause()\":{\"notice\":\"Pauses the contract.\"},\"purchaseFor(address,address,bytes32,uint256,bytes)\":{\"notice\":\"Performs a purchase.\"},\"start()\":{\"notice\":\"Actvates, or 'starts', the contract.\"},\"startedAt()\":{\"notice\":\"Returns the timestamp when the contract entered the started state.\"},\"swapRates(address[],uint256,bytes)\":{\"notice\":\"Retrieves the token swap rates for the `tokens`/`referenceToken` pairs via the oracle.\"},\"transferOwnership(address)\":{\"notice\":\"See {IERC173-transferOwnership(address)}\"},\"unpause()\":{\"notice\":\"Resumes the contract.\"},\"updateSkuPricing(bytes32,address[],uint256[])\":{\"notice\":\"Sets the token prices for the specified product SKU.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/mocks/sale/abstract/SwapSaleMock.sol\":\"SwapSaleMock\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":2000},\"remappings\":[]},\"sources\":{\"@animoca/ethereum-contracts-core-1.1.2/contracts/access/IERC173.sol\":{\"keccak256\":\"0xeb8a2c766577e782ad66ce8591a8d206b0f37b657754cc7a43beeb2d9343873b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3b404032cb4e21bae47b5e9af1290e41117040b10f69e3b2f93522b97e329b59\",\"dweb:/ipfs/QmRJHYkkvWcXGuFJdbqV18yh9QUk5g4zETrrxD2HnU3iRw\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/access/Ownable.sol\":{\"keccak256\":\"0xbfd1129669bb7c154ee84b3aa1484e421ca68cb725c1039a897629631fd8b096\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://edc634aeae7272726745b1cbbf116dfdde51833b71a143e94fe7de89e9b14566\",\"dweb:/ipfs/QmXtXckxdFM3VeLvsjMWhqt44WAf7XKVYKt9bUT7pyWbjH\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/algo/EnumMap.sol\":{\"keccak256\":\"0x12716c299c0965f4f87c2792cda2bd6029ba629c1172cdfef08d95cb2d7c283f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8d17c9bcb9bb0b9f399f6366f85b4db981df6e319f90b1b84910d6c44a79d032\",\"dweb:/ipfs/QmcqU3Gj8BP88yRV571GyCcW2UAjxq2xiqRofXFKYzkRXT\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/algo/EnumSet.sol\":{\"keccak256\":\"0x0aaea4634a7c64ef61b1ee8380912084427b45b6b4fc254b76d4b78e39f92d35\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://356a344f770d238dd864e8530d2ee05e350f269346cdf02432bc767e90520ce1\",\"dweb:/ipfs/QmfQfasYUY69X4wnzizPqT8P24YZTAPQGgFQErsSzV5sva\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/lifecycle/Pausable.sol\":{\"keccak256\":\"0xaa32d2e66a8edb68c64ffab1db69925248cf3f774c40b062e1e8ff2f4d5eebed\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://37451b151d862be6413ee1d18e3500a9100128f09926a2260d0ea058c3148d8a\",\"dweb:/ipfs/QmNLsaNioeA4LK8fVpqvSkQrCob1DkENcqQUurqDQbQK3G\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/lifecycle/Startable.sol\":{\"keccak256\":\"0x87e273577d4716cbbb325f03ec91207e1022bb7f56cdcda56593c603d2b4592f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d305d7c885971e1b82a363b4c9237c4201390610621a67605b89694ca9680e35\",\"dweb:/ipfs/QmWZX1cEfsfQSoEjBgBaBn3rKJxfyaJMpJyofpM9LG4tEp\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/metatx/ManagedIdentity.sol\":{\"keccak256\":\"0xe544b34375f19f9d1ad6e309f2fc56849263cc3c3c77009f6b38782f7dea9971\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3eb04bbf1c13ca82971c1cb2fdd96a23e2dfaa5df6a7d3b7e773dd3a760cf4e4\",\"dweb:/ipfs/QmXArzbKQgsMebfYVSQtaCLAs3rp3FYp6MKjSQnZoGDnjf\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/payment/PayoutWallet.sol\":{\"keccak256\":\"0x45ef7f68177cb61463f0ac759782f490821917fac3a71a18263c38193a9c6229\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://67839b4cc5897d723099ebfd8e0593e809b02cf422056efc1497f88dd7abb415\",\"dweb:/ipfs/QmYFRXvggoT8RzWB7SSJmfaBY3xkoVYNaGotTLBxjXqqxx\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/utils/ERC20Wrapper.sol\":{\"keccak256\":\"0x57922168ce32d2260022c0c7075137940e7d3cf0bb0d2213e62194050fbcf392\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b2dbba2defa32aa9edb54797f9b3f4ec1c1e5f71193deb99289136fa2f02ad79\",\"dweb:/ipfs/QmbUbzdwyWwjw3VW1o5oBKyuG9cFN7n8j55P8MDAg3sCuK\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/utils/types/AddressIsContract.sol\":{\"keccak256\":\"0x08373f750eedc1226b22b8ab1e156b0689c463590fa7dc40e99329b2da7b5d47\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fac8cdd7be4a83b47b18c8a48c1b1779a2590118049734665a6de91e77f27d35\",\"dweb:/ipfs/QmcAobvMpD5TisPTQSihPhywmVbPv1jDhffJCaZptM7YLv\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0xcc78a17dd88fa5a2edc60c8489e2f405c0913b377216a5b26b35656b2d0dab52\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://526dc85e1f9b9b45830e202568d267d93dde7a4fcccf4ad7798dadcd92304d3c\",\"dweb:/ipfs/QmaoXMB972J3cSDLtBq3xBo4jLwqD2uzXTwujtSPqkYVhR\"]},\"@openzeppelin/contracts/utils/SafeCast.sol\":{\"keccak256\":\"0x7b2b8baa20fd60ab4a328c8e34c64a353651b80ba4b5b157cbb61813f6f85d55\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://125b7f9efa390e663d630c62b97ae4e0707f31623bea989ef94c97ca9d777dd2\",\"dweb:/ipfs/QmaaLSuwvqK7wqcgyS3utHgfmB7RntcvP7eJSuvQod8Z9P\"]},\"contracts/mocks/sale/abstract/SwapSaleMock.sol\":{\"keccak256\":\"0x6edfd3170ccdcd5767ee3922b4576b2f585f4fdab159c2cde669d1ef864a1f09\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://448c8bfd9c37eac077c0bbd4c598ae7fd1227e3b036b1683fb55c7cfc78d07ab\",\"dweb:/ipfs/QmSAFKEscNkoKdZE2ZSEmZiBiePZC58gUaFHhwuvjmGqgs\"]},\"contracts/sale/FixedPricesSale.sol\":{\"keccak256\":\"0xad902ccee0e2a42eea07b4c1e011202096daff92b43158a1569d139caf93b3f0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a702cc102db63b18e0581da5d6c01ee9320cec4b690c3117b4f77316fce45185\",\"dweb:/ipfs/QmWL7kh3kBSxDYjVoq9gN79UpKLrRBgJCHqquyaCE8UWhe\"]},\"contracts/sale/abstract/OracleSale.sol\":{\"keccak256\":\"0x7a5dae50fe750564347bfcd4eef33b552b901d7c688db6fae8c8e2dd442cce54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e3388afb44cf6b074cf58820e142b43ce4614bed6a004c4275f6ab05da984449\",\"dweb:/ipfs/QmbucAD5Q7cSh4Ryz8cFt7Yx4KdsXMhqcHofR75oLBuMW2\"]},\"contracts/sale/abstract/PurchaseLifeCycles.sol\":{\"keccak256\":\"0xaa18c1de5628dbd5ff281f06354b0156cb8bd24a6f5b490a787931c374266f6a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2e0731a0100fc1bda747176f169cacc5d61d89df1c78884d8843a834d58f7dcd\",\"dweb:/ipfs/QmZRDAxcvQ9QySqnmQLVM1i797NCqSJrJjKUneEmTufXBQ\"]},\"contracts/sale/abstract/Sale.sol\":{\"keccak256\":\"0x32dd01f3ca07c26e834f5784b4f2434c9cf309e3e30b2421a26da16ccf5d0e26\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://009418ea08f714b3f536d09e04d65ec39d3a4e9ba33e554ac8a26036cff8335b\",\"dweb:/ipfs/QmQvMXpCaaAwtHE4qxXYn2rxPgPzqzJM6aGuyz4nut5CH5\"]},\"contracts/sale/abstract/SwapSale.sol\":{\"keccak256\":\"0x29bdb7a4ec88520205f8e01817e5ae0df65bf72f225e02d69b3d15ce8cfdb804\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7ee6b697e3a6c3fb462e18d3cc22ae4d8c16891b817cbe997b96de404a0eb498\",\"dweb:/ipfs/QmUSBpTt98qsnLeNWVVh2U2tNFcmjsaAUjgrYfchw7ZhGR\"]},\"contracts/sale/interfaces/IOracleSale.sol\":{\"keccak256\":\"0x754fdf88f73519515a9d3748ea136b0e1137095969e91bf7e7b4cf9afb78d164\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://04a0f5ae476580e9a4011d7b6f6e00940498de2be550da0df88fc35ca3b5241c\",\"dweb:/ipfs/QmSjaAFzMbR38ofQtgvyxYKN8N4b7nY4hZAfXkNxe3HSyq\"]},\"contracts/sale/interfaces/IPurchaseNotificationsReceiver.sol\":{\"keccak256\":\"0xa85dcec80f528757a52dd66f88ae14845477e3ec733cb4d22af6db71d19e90f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://36e14e08666d5fd2af5b78848a84a11c666c65c94ca46f88e896c041da1dc1c7\",\"dweb:/ipfs/QmYiHM2DBVuX4adJfJMSvdrdfmDooHxhwGtmhNP7k2DY9n\"]},\"contracts/sale/interfaces/ISale.sol\":{\"keccak256\":\"0x0d731f242662465b2aa3ea9fe3581d0e77e3f61601390f68e4c9c75fc2103f5f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2a04d527397a7f75bd1d701fa7af263cb0799ef4d2f32dc44bb6c9598cee3625\",\"dweb:/ipfs/QmRnsakvvkU1yJyviEM8eytdCTUvjqsw1aqzdntycoG2aV\"]},\"contracts/sale/interfaces/ISwapSale.sol\":{\"keccak256\":\"0x262f0514039e101fdf36f273cfc28bc9000bcc46e53dc7bc7a2dd744075ef820\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://698bcc5dec5dc61277bc847b18a97a869a3657f2943f03f56e01089fa2f2c70f\",\"dweb:/ipfs/QmdAeUYY28Z1biqHPrR9yBLHdKQTm3VFECWJ1Cquxxs4zQ\"]}},\"version\":1}"}},"contracts/oracle/UniswapV2Adapter.sol":{"UniswapV2Adapter":{"abi":[{"inputs":[{"internalType":"contract IUniswapV2Router","name":"uniswapV2Router_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract IUniswapV2Router","name":"uniswapV2Router","type":"address"}],"name":"UniswapV2RouterSet","type":"event"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b506040516101543803806101548339818101604052602081101561003357600080fd5b505161003e81610044565b50610098565b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517ffe70995e26c62b71bbd53a5b9e09215c42e2006fad72ba845051faa8de1510ba9181900360200190a150565b60ae806100a66000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c80631694505e14602d575b600080fd5b6033605c565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b60005473ffffffffffffffffffffffffffffffffffffffff168156fea26469706673582212207e2cc46733decb33b23e9609f6cbcd06fe754a1ada04845ef11ec2865b19599364736f6c63430007060033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x154 CODESIZE SUB DUP1 PUSH2 0x154 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x3E DUP2 PUSH2 0x44 JUMP JUMPDEST POP PUSH2 0x98 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 SWAP2 AND DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD PUSH32 0xFE70995E26C62B71BBD53A5B9E09215C42E2006FAD72BA845051FAA8DE1510BA SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0xAE DUP1 PUSH2 0xA6 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH1 0x28 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x1694505E EQ PUSH1 0x2D JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x33 PUSH1 0x5C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH31 0x2CC46733DECB33B23E9609F6CBCD06FE754A1ADA04845EF11EC2865B195993 PUSH5 0x736F6C6343 STOP SMOD MOD STOP CALLER ","sourceMap":"361:3129:22:-:0;;;537:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;537:101:22;594:37;537:101;594:19;:37::i;:::-;537:101;361:3129;;1955:175;2038:15;:34;;-1:-1:-1;;;;;2038:34:22;;-1:-1:-1;;;;;;2038:34:22;;;;;;;;2087:36;;;;;;;;;;;;;;;;1955:175;:::o;361:3129::-;;;;;;;"},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"6080604052348015600f57600080fd5b506004361060285760003560e01c80631694505e14602d575b600080fd5b6033605c565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b60005473ffffffffffffffffffffffffffffffffffffffff168156fea26469706673582212207e2cc46733decb33b23e9609f6cbcd06fe754a1ada04845ef11ec2865b19599364736f6c63430007060033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH1 0x28 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x1694505E EQ PUSH1 0x2D JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x33 PUSH1 0x5C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH31 0x2CC46733DECB33B23E9609F6CBCD06FE754A1ADA04845EF11EC2865B195993 PUSH5 0x736F6C6343 STOP SMOD MOD STOP CALLER ","sourceMap":"361:3129:22:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;491:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::o"},"methodIdentifiers":{"uniswapV2Router()":"1694505e"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IUniswapV2Router\",\"name\":\"uniswapV2Router_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contract IUniswapV2Router\",\"name\":\"uniswapV2Router\",\"type\":\"address\"}],\"name\":\"UniswapV2RouterSet\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"uniswapV2Router\",\"outputs\":[{\"internalType\":\"contract IUniswapV2Router\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"title\":\"UniswapV2Adapter Contract which helps to interact with UniswapV2 router.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/oracle/UniswapV2Adapter.sol\":\"UniswapV2Adapter\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":2000},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0xcc78a17dd88fa5a2edc60c8489e2f405c0913b377216a5b26b35656b2d0dab52\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://526dc85e1f9b9b45830e202568d267d93dde7a4fcccf4ad7798dadcd92304d3c\",\"dweb:/ipfs/QmaoXMB972J3cSDLtBq3xBo4jLwqD2uzXTwujtSPqkYVhR\"]},\"contracts/oracle/UniswapV2Adapter.sol\":{\"keccak256\":\"0x1b347929faf3ddee2568b011fe50bc921bdfe23bceea7022d47259d195860a99\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://364cd66a80a90ec5ac4f1688ffb40825d5ae31197a9104d0271783f9e892f5e5\",\"dweb:/ipfs/QmaAL7GUBRRYc6U96uX7E91AFo9vz9xDqRBYX8SvZGmMg4\"]},\"contracts/oracle/interfaces/IUniswapV2Pair.sol\":{\"keccak256\":\"0xd0762fd9035a7ffa6f70623a464aee4d5c85e9e2bb07e24021af45f738a493af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3ce4fc6e82b116ca7fda0e83df93a4de8adb13e2c72f24390b63b326f01ccc3d\",\"dweb:/ipfs/QmVAZFgd7cEGdxUFTsoz7MUQvCrkqjaFtBB2oZmGd3LA1H\"]},\"contracts/oracle/interfaces/IUniswapV2Router.sol\":{\"keccak256\":\"0x0f8cb0c1e71543770defc0f19a08b62e64b7e19101b8e45643bf7ceb8416c149\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://b14aedff9a94b564366790c1720d1c55472e5d13106c1b89a0d479715dc3c3bd\",\"dweb:/ipfs/QmQQyrKigBpar2uJGLVXFY799e5cNxTX6dFQW3myFAs8Kn\"]}},\"version\":1}"}},"contracts/oracle/interfaces/IUniswapV2Pair.sol":{"IUniswapV2Pair":{"abi":[{"inputs":[],"name":"getReserves","outputs":[{"internalType":"uint112","name":"reserve0","type":"uint112"},{"internalType":"uint112","name":"reserve1","type":"uint112"},{"internalType":"uint32","name":"blockTimestampLast","type":"uint32"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getReserves()":"0902f1ac"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getReserves\",\"outputs\":[{\"internalType\":\"uint112\",\"name\":\"reserve0\",\"type\":\"uint112\"},{\"internalType\":\"uint112\",\"name\":\"reserve1\",\"type\":\"uint112\"},{\"internalType\":\"uint32\",\"name\":\"blockTimestampLast\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/interfaces/IUniswapV2Pair.sol\",\"kind\":\"dev\",\"methods\":{},\"title\":\"IUniswapV2Pair Interface for the UniswapV2 pair contract.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getReserves()\":{\"notice\":\"Returns the reserves of token0 and token1 used to price trades and distribute liquidity. Also returns the  block.timestamp (mod 2**32) of the last block during which an interaction occured for the pair.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/oracle/interfaces/IUniswapV2Pair.sol\":\"IUniswapV2Pair\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":2000},\"remappings\":[]},\"sources\":{\"contracts/oracle/interfaces/IUniswapV2Pair.sol\":{\"keccak256\":\"0xd0762fd9035a7ffa6f70623a464aee4d5c85e9e2bb07e24021af45f738a493af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3ce4fc6e82b116ca7fda0e83df93a4de8adb13e2c72f24390b63b326f01ccc3d\",\"dweb:/ipfs/QmVAZFgd7cEGdxUFTsoz7MUQvCrkqjaFtBB2oZmGd3LA1H\"]}},\"version\":1}"}},"contracts/oracle/interfaces/IUniswapV2Router.sol":{"IUniswapV2Router":{"abi":[{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsIn","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapETHForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"WETH()":"ad5c4648","factory()":"c45a0155","getAmountsIn(uint256,address[])":"1f00ca74","swapETHForExactTokens(uint256,address[],address,uint256)":"fb3bdb41","swapTokensForExactETH(uint256,uint256,address[],address,uint256)":"4a25d94a","swapTokensForExactTokens(uint256,uint256,address[],address,uint256)":"8803dbee"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"WETH\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"factory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"path\",\"type\":\"address[]\"}],\"name\":\"getAmountsIn\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"path\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"swapETHForExactTokens\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInMax\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"path\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"swapTokensForExactETH\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInMax\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"path\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"swapTokensForExactTokens\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"https://github.com/Uniswap/uniswap-v2-periphery/blob/master/contracts/interfaces/IUniswapV2Router02.sol\",\"kind\":\"dev\",\"methods\":{\"WETH()\":{\"returns\":{\"_0\":\"The canonical WETH address.\"}},\"factory()\":{\"returns\":{\"_0\":\"The UniswapV2 factory used by the router.\"}},\"getAmountsIn(uint256,address[])\":{\"details\":\"Useful for calculating optimal token amounts before calling `swap`.\",\"params\":{\"amountOut\":\"the fixed amount of output asset.\",\"path\":\"An array of token addresses. path.length must be >= 2. Pools for each consecutive pair of addresses must exist and have liquidity.\"}},\"swapETHForExactTokens(uint256,address[],address,uint256)\":{\"details\":\"Leftover ETH, if any, is returned to msg.sender.msg.value (amountInMax) is the maximum amount of ETH that can be required before the transaction reverts.\",\"params\":{\"amountOut\":\"The amount of output tokens to receive.\",\"deadline\":\"Unix timestamp after which the transaction will revert.\",\"path\":\"An array of token addresses. path.length must be >= 2. Pools for each consecutive pair of addresses must exist and have liquidity.\",\"to\":\"Recipient of the output tokens.\"},\"returns\":{\"amounts\":\"The input token amount and all subsequent output token amounts.\"}},\"swapTokensForExactETH(uint256,uint256,address[],address,uint256)\":{\"details\":\"msg.sender should have already given the router an allowance of at least amountInMax on the input token.If the to address is a smart contract, it must have the ability to receive ETH.\",\"params\":{\"amountInMax\":\"The maximum amount of input tokens that can be required before the transaction reverts.\",\"amountOut\":\"The amount of ETH to receive.\",\"deadline\":\"Unix timestamp after which the transaction will revert.\",\"path\":\"An array of token addresses. path.length must be >= 2. Pools for each consecutive pair of addresses must exist and have liquidity.\",\"to\":\"Recipient of ETH.\"},\"returns\":{\"amounts\":\"The input token amount and all subsequent output token amounts.\"}},\"swapTokensForExactTokens(uint256,uint256,address[],address,uint256)\":{\"details\":\"msg.sender should have already given the router an allowance of at least amountInMax on the input token.\",\"params\":{\"amountInMax\":\"The maximum amount of input tokens that can be required before the transaction reverts.\",\"amountOut\":\"The amount of output tokens to receive.\",\"deadline\":\"Unix timestamp after which the transaction will revert.\",\"path\":\"An array of token addresses. path.length must be >= 2. Pools for each consecutive pair of addresses must exist and have liquidity.\",\"to\":\"Recipient of the output tokens.\"},\"returns\":{\"amounts\":\"The input token amount and all subsequent output token amounts.\"}}},\"title\":\"IUniswapV2Router Interface for the UniswapV2 router contract.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"WETH()\":{\"notice\":\"Returns the canonical WETH address.\"},\"factory()\":{\"notice\":\"Returns the UniswapV2 factory used by the router.\"},\"getAmountsIn(uint256,address[])\":{\"notice\":\"Given an output asset amount and an array of token addresses, calculates all preceding minimum input token amounts  by calling `getReserves` for each pair of token addresses in the path in turn, and using these to call `getAmountIn`.\"},\"swapETHForExactTokens(uint256,address[],address,uint256)\":{\"notice\":\"Receive an exact amount of tokens for as little ETH as possible, along the route determined by the path. The first element of path must be  WETH, the last is the output token and any intermediate elements represent intermediate pairs to trade through (if, for example, a direct pair  does not exist).\"},\"swapTokensForExactETH(uint256,uint256,address[],address,uint256)\":{\"notice\":\"Receive an exact amount of ETH for as few input tokens as possible, along the route determined by the path. The first element of path is the  input token, the last must be WETH, and any intermediate elements represent intermediate pairs to trade through (if, for example, a direct  pair does not exist).\"},\"swapTokensForExactTokens(uint256,uint256,address[],address,uint256)\":{\"notice\":\"Receive an exact amount of output tokens for as few input tokens as possible, along the route determined by the path.  The first element of path is the input token, the last is the output token, and any intermediate elements represent  intermediate pairs to trade through (if, for example, a direct pair does not exist).\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/oracle/interfaces/IUniswapV2Router.sol\":\"IUniswapV2Router\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":2000},\"remappings\":[]},\"sources\":{\"contracts/oracle/interfaces/IUniswapV2Router.sol\":{\"keccak256\":\"0x0f8cb0c1e71543770defc0f19a08b62e64b7e19101b8e45643bf7ceb8416c149\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://b14aedff9a94b564366790c1720d1c55472e5d13106c1b89a0d479715dc3c3bd\",\"dweb:/ipfs/QmQQyrKigBpar2uJGLVXFY799e5cNxTX6dFQW3myFAs8Kn\"]}},\"version\":1}"}},"contracts/sale/FixedOrderInventorySale.sol":{"FixedOrderInventorySale":{"abi":[{"inputs":[{"internalType":"address","name":"inventory_","type":"address"},{"internalType":"address payable","name":"payoutWallet","type":"address"},{"internalType":"uint256","name":"tokensPerSkuCapacity","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32[]","name":"names","type":"bytes32[]"},{"indexed":false,"internalType":"bytes32[]","name":"values","type":"bytes32[]"}],"name":"MagicValues","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":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"payoutWallet_","type":"address"}],"name":"PayoutWalletSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"purchaser","type":"address"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"bytes32","name":"sku","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"quantity","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"userData","type":"bytes"},{"indexed":false,"internalType":"uint256","name":"totalPrice","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"extData","type":"bytes"}],"name":"Purchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"sku","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxQuantityPerPurchase","type":"uint256"},{"indexed":false,"internalType":"address","name":"notificationsReceiver","type":"address"}],"name":"SkuCreation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"sku","type":"bytes32"},{"indexed":false,"internalType":"address[]","name":"tokens","type":"address[]"},{"indexed":false,"internalType":"uint256[]","name":"prices","type":"uint256[]"}],"name":"SkuPricingUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Started","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"SUPPLY_UNLIMITED","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOKEN_ETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokens","type":"uint256[]"}],"name":"addSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"estimatePurchase","outputs":[{"internalType":"uint256","name":"totalPrice","type":"uint256"},{"internalType":"bytes32[]","name":"pricingData","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"sku","type":"bytes32"}],"name":"getSkuInfo","outputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"uint256","name":"remainingSupply","type":"uint256"},{"internalType":"uint256","name":"maxQuantityPerPurchase","type":"uint256"},{"internalType":"address","name":"notificationsReceiver","type":"address"},{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"prices","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSkus","outputs":[{"internalType":"bytes32[]","name":"skus","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inventory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payoutWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"purchaseFor","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address payable","name":"payoutWallet_","type":"address"}],"name":"setPayoutWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"indexes","type":"uint256[]"},{"internalType":"uint256[]","name":"tokens","type":"uint256[]"}],"name":"setSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"start","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenList","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"prices","type":"uint256[]"}],"name":"updateSkuPricing","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"60e06040523480156200001157600080fd5b5060405162002fd338038062002fd3833981810160405260608110156200003757600080fd5b5080516020820151604092830151600080546001600160a01b031916339081178255945193949293919284926001928592859285928592849290918691839182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001600160a01b038116620000fa576040805162461bcd60e51b815260206004820152601460248201527f5061796f75743a207a65726f2061646472657373000000000000000000000000604482015290519081900360640190fd5b600180546001600160a01b0383166001600160a01b0319909116811790915560408051918252517fdd880d24a789958a6398c99c2e54ce31bc10a638cbc42f7dd34285479ae0f8559181900360200190a150506003805460ff1916911515919091179055608082905260a081905260408051600280825260608201835260009260208301908036833750506040805160028082526060820183529394506000939092509060208301908036833750508351919250680a89e968a9cbe8aa8960bb1b9173eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee91508490600090620001df57fe5b6020026020010183600081518110620001f457fe5b602002602001018281525082815250505060001960001b6f14d55414131657d5539312535255115160821b90836001815181106200022e57fe5b60200260200101836001815181106200024357fe5b60200260200101828152508281525050507fabb92614f53337043b55dc996a83ebb09adce78ec336ca188ea02180b61d1c148282604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015620002bd578181015183820152602001620002a3565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015620002fe578181015183820152602001620002e4565b5050505090500194505050505060405180910390a150505050506001600160a01b038616151592506200037b915050576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a207a65726f206164647265737320696e76656e746f727900000000604482015290519081900360640190fd5b5050606081901b6001600160601b03191660c05260805160a05190916001600160a01b0316612c14620003bf60003980610a3f5250806119ea525050612c146000f3fe6080604052600436106101755760003560e01c80638488bb4e116100cb578063be9a65551161007f578063d55f927311610059578063d55f9273146108eb578063f21f537d14610900578063f2fde38b1461091557610175565b8063be9a655514610811578063c4e41b2214610826578063cf3ae77b1461083b57610175565b80639e049545116100b05780639e0495451461072b5780639ead722214610752578063a963b2571461077c57610175565b80638488bb4e146107015780638da5cb5b1461071657610175565b80635c4fafc71161012d57806361bd38511161010757806361bd3851146106545780636b8f9c43146106b95780638456cb59146106ec57610175565b80635c4fafc7146104db5780635c975abb146104f05780635e6e9f701461051957610175565b806323f927c91161015e57806323f927c9146102a85780632a8a45bc146103de5780633f4ba83a146104c657610175565b80631323b0661461017a57806315d52a5c14610277575b600080fd5b34801561018657600080fd5b5061021c600480360360a081101561019d57600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a0810160808201356401000000008111156101dd57600080fd5b8201836020820111156101ef57600080fd5b8035906020019184600183028401116401000000008311171561021157600080fd5b509092509050610948565b6040518083815260200180602001828103825283818151815260200191508051906020019060200280838360005b8381101561026257818101518382015260200161024a565b50505050905001935050505060405180910390f35b34801561028357600080fd5b5061028c610a3d565b604080516001600160a01b039092168252519081900360200190f35b3480156102b457600080fd5b506103dc600480360360408110156102cb57600080fd5b8101906020810181356401000000008111156102e657600080fd5b8201836020820111156102f857600080fd5b8035906020019184602083028401116401000000008311171561031a57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561036a57600080fd5b82018360208201111561037c57600080fd5b8035906020019184602083028401116401000000008311171561039e57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610a61945050505050565b005b3480156103ea57600080fd5b506104086004803603602081101561040157600080fd5b5035610ce1565b60405180878152602001868152602001858152602001846001600160a01b031681526020018060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561046d578181015183820152602001610455565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156104ac578181015183820152602001610494565b505050509050019850505050505050505060405180910390f35b3480156104d257600080fd5b506103dc610e86565b3480156104e757600080fd5b5061028c610eef565b3480156104fc57600080fd5b50610505610f07565b604080519115158252519081900360200190f35b34801561052557600080fd5b506103dc6004803603606081101561053c57600080fd5b8135919081019060408101602082013564010000000081111561055e57600080fd5b82018360208201111561057057600080fd5b8035906020019184602083028401116401000000008311171561059257600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092959493602081019350359150506401000000008111156105e257600080fd5b8201836020820111156105f457600080fd5b8035906020019184602083028401116401000000008311171561061657600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610f10945050505050565b34801561066057600080fd5b506106696110ed565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156106a557818101518382015260200161068d565b505050509050019250505060405180910390f35b3480156106c557600080fd5b506103dc600480360360208110156106dc57600080fd5b50356001600160a01b0316611148565b3480156106f857600080fd5b506103dc611220565b34801561070d57600080fd5b5061028c611287565b34801561072257600080fd5b5061028c611296565b34801561073757600080fd5b506107406112a5565b60408051918252519081900360200190f35b34801561075e57600080fd5b506107406004803603602081101561077557600080fd5b50356112ab565b6103dc600480360360a081101561079257600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a0810160808201356401000000008111156107d257600080fd5b8201836020820111156107e457600080fd5b8035906020019184600183028401116401000000008311171561080657600080fd5b5090925090506112cc565b34801561081d57600080fd5b506103dc6113a9565b34801561083257600080fd5b506107406113bc565b34801561084757600080fd5b506103dc6004803603602081101561085e57600080fd5b81019060208101813564010000000081111561087957600080fd5b82018360208201111561088b57600080fd5b803590602001918460208302840111640100000000831117156108ad57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506113c2945050505050565b3480156108f757600080fd5b50610740611516565b34801561090c57600080fd5b5061074061151c565b34801561092157600080fd5b506103dc6004803603602081101561093857600080fd5b50356001600160a01b0316611522565b60006060600254600014156109a4576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b6109ac611593565b6109b4612b4c565b6109bc6115eb565b6001600160a01b03908116825289811660208084019190915290891660408084019190915260608301899052608083018890528051601f870183900483028101830190915285815290869086908190840183828082843760009201919091525050505060a0820152610a2d816115ef565b9250925050965096945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b610a69611616565b610a79610a746115eb565b61166d565b60085480610ace576040805162461bcd60e51b815260206004820152601260248201527f53616c653a20656d70747920746f6b656e730000000000000000000000000000604482015290519081900360640190fd5b825180610b22576040805162461bcd60e51b815260206004820152601360248201527f53616c653a20656d70747920696e646578657300000000000000000000000000604482015290519081900360640190fd5b8251818114610b78576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20696e636f6e73697374656e742061727261797300000000000000604482015290519081900360640190fd5b60075460005b838114610cd8576000878281518110610b9357fe5b6020026020010151905082811015610bf2576040805162461bcd60e51b815260206004820152601360248201527f53616c653a20696e76616c696420696e64657800000000000000000000000000604482015290519081900360640190fd5b858110610c46576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20696e646578206f75742d6f662d626f756e647300000000000000604482015290519081900360640190fd5b6000878381518110610c5457fe5b602002602001015190508060001415610cb4576040805162461bcd60e51b815260206004820152601160248201527f53616c653a207a65726f20737570706c79000000000000000000000000000000604482015290519081900360640190fd5b8060088381548110610cc257fe5b6000918252602090912001555050600101610b7e565b50505050505050565b6000818152600660205260408120819081908190606090819083610d0760048301611734565b82549850905087610d5f576040805162461bcd60e51b815260206004820152601660248201527f53616c653a206e6f6e2d6578697374656e7420736b7500000000000000000000604482015290519081900360640190fd5b60018201546002830154600384015491985096506001600160a01b031694508067ffffffffffffffff81118015610d9557600080fd5b50604051908082528060200260200182016040528015610dbf578160200160208202803683370190505b5093508067ffffffffffffffff81118015610dd957600080fd5b50604051908082528060200260200182016040528015610e03578160200160208202803683370190505b50925060005b81811015610e7a57600080610e216004860184611738565b915091508160001c878481518110610e3557fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508060001c868481518110610e6557fe5b60209081029190910101525050600101610e09565b50505091939550919395565b600254610eda576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b610ee5610a746115eb565b610eed6117c9565b565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b60035460ff1681565b610f1b610a746115eb565b815181518114610f72576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20696e636f6e73697374656e742061727261797300000000000000604482015290519081900360640190fd5b60008481526006602052604090208054610fd3576040805162461bcd60e51b815260206004820152601660248201527f53616c653a206e6f6e2d6578697374656e7420736b7500000000000000000000604482015290519081900360640190fd5b600481018261101e576000610fe782611734565b905060005b818110156110175760006110008482611738565b50905061100d8482611821565b5050600101610fec565b5050611029565b611029818686611901565b857fcb3fe5489e0cd43d0f4a33d1e09a4a0463a03d0d38f56165530854e5540db1438686604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015611091578181015183820152602001611079565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156110d05781810151838201526020016110b8565b5050505090500194505050505060405180910390a2505050505050565b6060600460000180548060200260200160405190810160405280929190818152602001828054801561113e57602002820191906000526020600020905b81548152602001906001019080831161112a575b5050505050905090565b611153610a746115eb565b6001600160a01b0381166111ae576040805162461bcd60e51b815260206004820152601460248201527f5061796f75743a207a65726f2061646472657373000000000000000000000000604482015290519081900360640190fd5b600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03838116919091179182905560408051929091168252517fdd880d24a789958a6398c99c2e54ce31bc10a638cbc42f7dd34285479ae0f855916020908290030190a150565b600254611274576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b61127f610a746115eb565b610eed611a6a565b6001546001600160a01b031681565b6000546001600160a01b031690565b60001981565b600881815481106112bb57600080fd5b600091825260209091200154905081565b600254611320576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b611328611593565b611330612b4c565b6113386115eb565b6001600160a01b03908116825287811660208084019190915290871660408084019190915260608301879052608083018690528051601f850183900483028101830190915283815290849084908190840183828082843760009201919091525050505060a0820152610cd881611aa8565b6113b4610a746115eb565b610ee5611ad5565b60085490565b6113cd610a746115eb565b805180611421576040805162461bcd60e51b815260206004820152601260248201527f53616c653a20656d70747920746f6b656e730000000000000000000000000000604482015290519081900360640190fd5b60005b8181146114d657600083828151811061143957fe5b602002602001015190508060001415611499576040805162461bcd60e51b815260206004820152601160248201527f53616c653a207a65726f20737570706c79000000000000000000000000000000604482015290519081900360640190fd5b60088054600181810183556000929092527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3019190915501611424565b506114e16004611734565b156115125760006114f3600482611b57565b6000908152600660205260409020805483018155600101805483019055505b5050565b60075481565b60025490565b61152d610a746115eb565b600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383811691821780845560405192939116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b60035460ff1615610eed576040805162461bcd60e51b815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b3390565b600060606115fc83611bd1565b61160583611e7b565b505060c081015160e0909101519091565b60035460ff16610eed576040805162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604482015290519081900360640190fd5b306001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156116a657600080fd5b505afa1580156116ba573d6000803e3d6000fd5b505050506040513d60208110156116d057600080fd5b50516001600160a01b03828116911614611731576040805162461bcd60e51b815260206004820152601660248201527f4f776e61626c653a206e6f7420746865206f776e657200000000000000000000604482015290519081900360640190fd5b50565b5490565b815460009081908310611792576040805162461bcd60e51b815260206004820152601c60248201527f456e756d4d61703a20696e646578206f7574206f6620626f756e647300000000604482015290519081900360640190fd5b60008460000184815481106117a357fe5b906000526020600020906002020190508060000154816001015492509250509250929050565b6117d1611616565b6003805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6118046115eb565b604080516001600160a01b039092168252519081900360200190a1565b600081815260018301602052604081205480156118f5578354600019808301919081019060009087908390811061185457fe5b906000526020600020906002020190508087600001848154811061187457fe5b6000918252602080832084546002909302019182556001938401549184019190915583548252898301905260409020908401905586548790806118b357fe5b60008281526020808220600260001990940193840201828155600190810183905592909355888152898201909252604082209190915594506118fb9350505050565b60009150505b92915050565b60005b82518110156119e757600083828151811061191b57fe5b6020026020010151905060006001600160a01b0316816001600160a01b0316141561198d576040805162461bcd60e51b815260206004820152601860248201527f53616c653a207a65726f206164647265737320746f6b656e0000000000000000604482015290519081900360640190fd5b600083838151811061199b57fe5b6020026020010151905080600014156119c7576119c1866001600160a01b038416611821565b506119dd565b6119db866001600160a01b03841683611f18565b505b5050600101611904565b507f0000000000000000000000000000000000000000000000000000000000000000611a1284611734565b1115611a65576040805162461bcd60e51b815260206004820152601560248201527f53616c653a20746f6f206d616e7920746f6b656e730000000000000000000000604482015290519081900360640190fd5b505050565b611a72611593565b6003805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586118046115eb565b611ab181611bd1565b611aba81611e7b565b611ac381611fb2565b611acc81612101565b611731816121b2565b60025415611b2a576040805162461bcd60e51b815260206004820152601260248201527f537461727461626c653a20737461727465640000000000000000000000000000604482015290519081900360640190fd5b426002557f27029695aa5f602a4ee81f4c32dfa86e562f200a17966496f3a7c3f2ec0f94176118046115eb565b81546000908210611baf576040805162461bcd60e51b815260206004820152601c60248201527f456e756d5365743a20696e646578206f7574206f6620626f756e647300000000604482015290519081900360640190fd5b826000018281548110611bbe57fe5b9060005260206000200154905092915050565b60208101516001600160a01b0316611c30576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a207a65726f206164647265737320726563697069656e7400000000604482015290519081900360640190fd5b60408101516001600160a01b0316611c8f576040805162461bcd60e51b815260206004820152601860248201527f53616c653a207a65726f206164647265737320746f6b656e0000000000000000604482015290519081900360640190fd5b6080810151611ce5576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a207a65726f207175616e7469747920707572636861736500000000604482015290519081900360640190fd5b606081015160009081526006602052604090208054611d4b576040805162461bcd60e51b815260206004820152601660248201527f53616c653a206e6f6e2d6578697374656e7420736b7500000000000000000000604482015290519081900360640190fd5b816080015181600201541015611da8576040805162461bcd60e51b815260206004820152601860248201527f53616c653a2061626f7665206d6178207175616e746974790000000000000000604482015290519081900360640190fd5b805460001914611e0f57816080015181600101541015611e0f576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20696e73756666696369656e7420737570706c7900000000000000604482015290519081900360640190fd5b60408201516001600160a01b0316611e2a6004830182612697565b611a65576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a206e6f6e2d6578697374656e7420736b7520746f6b656e00000000604482015290519081900360640190fd5b606081015160009081526006602052604090208054611ee1576040805162461bcd60e51b815260206004820152601560248201527f53616c653a20756e737570706f7274656420534b550000000000000000000000604482015290519081900360640190fd5b600481016000611ef184836126af565b9050611f0a84608001518261271f90919063ffffffff16565b60c090940193909352505050565b600082815260018401602052604081205480611f7d575050604080518082018252838152602080820184815286546001818101895560008981528481209551600290930290950191825591519082015586548684528188019092529290912055611fab565b82856000016001830381548110611f9057fe5b90600052602060002090600202016001018190555060009150505b9392505050565b60408101516001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14156120d5578060c00151341015612034576040805162461bcd60e51b815260206004820152601660248201527f53616c653a20696e73756666696369656e742045544800000000000000000000604482015290519081900360640190fd5b60015460c08201516040516001600160a01b039092169181156108fc0291906000818181858888f19350505050158015612072573d6000803e3d6000fd5b50600061208c8260c001513461277890919063ffffffff16565b905080156120cf5781516040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156120cd573d6000803e3d6000fd5b505b50611731565b6117316120e06115eb565b60015460c084015160408501516001600160a01b03908116939216906127d5565b61210a81612863565b806080015167ffffffffffffffff8111801561212557600080fd5b5060405190808252806020026020018201604052801561214f578160200160208202803683370190505b506101208201526007546000905b826080015182146121ab576008818154811061217557fe5b906000526020600020015460001b836101200151838151811061219457fe5b60209081029190910101526001918201910161215d565b6007555050565b806060015181604001516001600160a01b031682600001516001600160a01b03167f29f844483ca6b10b5c0611d039afc15ce8f6380e905307b381c3a8ee4e90e11e846020015185608001518660a001518760c001518860e001518961010001518a610120015160405160200180848051906020019060200280838360005b83811015612249578181015183820152602001612231565b50505050905001838051906020019060200280838360005b83811015612279578181015183820152602001612261565b50505050905001828051906020019060200280838360005b838110156122a9578181015183820152602001612291565b50505050905001935050505060405160208183030381529060405260405180866001600160a01b031681526020018581526020018060200184815260200180602001838103835286818151815260200191508051906020019080838360005b83811015612320578181015183820152602001612308565b50505050905090810190601f16801561234d5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015612380578181015183820152602001612368565b50505050905090810190601f1680156123ad5780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390a460608101516000908152600660205260409020600301546001600160a01b03168015611512576361eceae860e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916816001600160a01b03166361eceae8846000015185602001518660400151876060015188608001518960a001518a60c001518b60e001518c61010001518d61012001516040518b63ffffffff1660e01b8152600401808b6001600160a01b031681526020018a6001600160a01b03168152602001896001600160a01b031681526020018881526020018781526020018060200186815260200180602001806020018060200185810385528a818151815260200191508051906020019080838360005b838110156124e65781810151838201526020016124ce565b50505050905090810190601f1680156125135780820380516001836020036101000a031916815260200191505b508581038452885181528851602091820191808b01910280838360005b83811015612548578181015183820152602001612530565b50505050905001858103835287818151815260200191508051906020019060200280838360005b8381101561258757818101518382015260200161256f565b50505050905001858103825286818151815260200191508051906020019060200280838360005b838110156125c65781810151838201526020016125ae565b505050509050019e505050505050505050505050505050602060405180830381600087803b1580156125f757600080fd5b505af115801561260b573d6000803e3d6000fd5b505050506040513d602081101561262157600080fd5b50517fffffffff000000000000000000000000000000000000000000000000000000001614611512576040805162461bcd60e51b815260206004820152601a60248201527f53616c653a206e6f74696669636174696f6e2072656675736564000000000000604482015290519081900360640190fd5b60009081526001919091016020526040902054151590565b60408201516000906126cb9083906001600160a01b03166128ae565b9050806118fb576040805162461bcd60e51b815260206004820152601f60248201527f53616c653a20756e737570706f72746564207061796d656e7420746f6b656e00604482015290519081900360640190fd5b60008261272e575060006118fb565b8282028284828161273b57fe5b0414611fab5760405162461bcd60e51b8152600401808060200182810382526021815260200180612bbe6021913960400191505060405180910390fd5b6000828211156127cf576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261285d90859061293e565b50505050565b60608101516000908152600660205260409020805460001914611512576080820151600182015461289391612778565b60608301516000908152600660205260409020600101555050565b600081815260018301602052604081205480612911576040805162461bcd60e51b815260206004820152601860248201527f456e756d4d61703a206e6f6e6578697374656e74206b65790000000000000000604482015290519081900360640190fd5b83600001600182038154811061292357fe5b90600052602060002090600202016001015491505092915050565b816129516001600160a01b038216612b46565b6129a2576040805162461bcd60e51b815260206004820152601a60248201527f4552433230577261707065723a206e6f6e2d636f6e7472616374000000000000604482015290519081900360640190fd5b600080826001600160a01b0316846040518082805190602001908083835b602083106129fd57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016129c0565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612a5f576040519150601f19603f3d011682016040523d82523d6000602084013e612a64565b606091505b50915091508115612ae357805115612ade57808060200190516020811015612a8b57600080fd5b5051612ade576040805162461bcd60e51b815260206004820152601e60248201527f4552433230577261707065723a206f7065726174696f6e206661696c65640000604482015290519081900360640190fd5b612b3f565b8051612b36576040805162461bcd60e51b815260206004820152601e60248201527f4552433230577261707065723a206f7065726174696f6e206661696c65640000604482015290519081900360640190fd5b80518082602001fd5b5050505050565b3b151590565b60405180610140016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160008019168152602001600081526020016060815260200160008152602001606081526020016060815260200160608152509056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220e91ea586dd8d6e66fc1de22016f28aa034bb7c7316a0cf63cbb029b45425576864736f6c63430007060033","opcodes":"PUSH1 0xE0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x2FD3 CODESIZE SUB DUP1 PUSH3 0x2FD3 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x60 DUP2 LT ISZERO PUSH3 0x37 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 SWAP3 DUP4 ADD MLOAD PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND CALLER SWAP1 DUP2 OR DUP3 SSTORE SWAP5 MLOAD SWAP4 SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 DUP5 SWAP3 PUSH1 0x1 SWAP3 DUP6 SWAP3 DUP6 SWAP3 DUP6 SWAP3 DUP6 SWAP3 DUP5 SWAP3 SWAP1 SWAP2 DUP7 SWAP2 DUP4 SWAP2 DUP3 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP3 SWAP1 LOG3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH3 0xFA JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061796F75743A207A65726F2061646472657373000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 SWAP2 AND DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD PUSH32 0xDD880D24A789958A6398C99C2E54CE31BC10A638CBC42F7DD34285479AE0F855 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP POP PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x80 DUP3 SWAP1 MSTORE PUSH1 0xA0 DUP2 SWAP1 MSTORE 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 POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x2 DUP1 DUP3 MSTORE PUSH1 0x60 DUP3 ADD DUP4 MSTORE SWAP4 SWAP5 POP PUSH1 0x0 SWAP4 SWAP1 SWAP3 POP SWAP1 PUSH1 0x20 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP POP DUP4 MLOAD SWAP2 SWAP3 POP PUSH9 0xA89E968A9CBE8AA89 PUSH1 0xBB SHL SWAP2 PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE SWAP2 POP DUP5 SWAP1 PUSH1 0x0 SWAP1 PUSH3 0x1DF JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP4 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH3 0x1F4 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP3 DUP2 MSTORE POP DUP3 DUP2 MSTORE POP POP POP PUSH1 0x0 NOT PUSH1 0x0 SHL PUSH16 0x14D55414131657D55393125352551151 PUSH1 0x82 SHL SWAP1 DUP4 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH3 0x22E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP4 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH3 0x243 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP3 DUP2 MSTORE POP DUP3 DUP2 MSTORE POP POP POP PUSH32 0xABB92614F53337043B55DC996A83EBB09ADCE78EC336CA188EA02180B61D1C14 DUP3 DUP3 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x2BD JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x2A3 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x2FE JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x2E4 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND ISZERO ISZERO SWAP3 POP PUSH3 0x37B SWAP2 POP POP JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F206164647265737320696E76656E746F727900000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP PUSH1 0x60 DUP2 SWAP1 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH1 0xC0 MSTORE PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD SWAP1 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2C14 PUSH3 0x3BF PUSH1 0x0 CODECOPY DUP1 PUSH2 0xA3F MSTORE POP DUP1 PUSH2 0x19EA MSTORE POP POP PUSH2 0x2C14 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x175 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8488BB4E GT PUSH2 0xCB JUMPI DUP1 PUSH4 0xBE9A6555 GT PUSH2 0x7F JUMPI DUP1 PUSH4 0xD55F9273 GT PUSH2 0x59 JUMPI DUP1 PUSH4 0xD55F9273 EQ PUSH2 0x8EB JUMPI DUP1 PUSH4 0xF21F537D EQ PUSH2 0x900 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x915 JUMPI PUSH2 0x175 JUMP JUMPDEST DUP1 PUSH4 0xBE9A6555 EQ PUSH2 0x811 JUMPI DUP1 PUSH4 0xC4E41B22 EQ PUSH2 0x826 JUMPI DUP1 PUSH4 0xCF3AE77B EQ PUSH2 0x83B JUMPI PUSH2 0x175 JUMP JUMPDEST DUP1 PUSH4 0x9E049545 GT PUSH2 0xB0 JUMPI DUP1 PUSH4 0x9E049545 EQ PUSH2 0x72B JUMPI DUP1 PUSH4 0x9EAD7222 EQ PUSH2 0x752 JUMPI DUP1 PUSH4 0xA963B257 EQ PUSH2 0x77C JUMPI PUSH2 0x175 JUMP JUMPDEST DUP1 PUSH4 0x8488BB4E EQ PUSH2 0x701 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x716 JUMPI PUSH2 0x175 JUMP JUMPDEST DUP1 PUSH4 0x5C4FAFC7 GT PUSH2 0x12D JUMPI DUP1 PUSH4 0x61BD3851 GT PUSH2 0x107 JUMPI DUP1 PUSH4 0x61BD3851 EQ PUSH2 0x654 JUMPI DUP1 PUSH4 0x6B8F9C43 EQ PUSH2 0x6B9 JUMPI DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x6EC JUMPI PUSH2 0x175 JUMP JUMPDEST DUP1 PUSH4 0x5C4FAFC7 EQ PUSH2 0x4DB JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x4F0 JUMPI DUP1 PUSH4 0x5E6E9F70 EQ PUSH2 0x519 JUMPI PUSH2 0x175 JUMP JUMPDEST DUP1 PUSH4 0x23F927C9 GT PUSH2 0x15E JUMPI DUP1 PUSH4 0x23F927C9 EQ PUSH2 0x2A8 JUMPI DUP1 PUSH4 0x2A8A45BC EQ PUSH2 0x3DE JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x4C6 JUMPI PUSH2 0x175 JUMP JUMPDEST DUP1 PUSH4 0x1323B066 EQ PUSH2 0x17A JUMPI DUP1 PUSH4 0x15D52A5C EQ PUSH2 0x277 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x186 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x21C PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x19D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x1DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x1EF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x211 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x948 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x262 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x24A JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP4 POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x283 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28C PUSH2 0xA3D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2B4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3DC PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x2E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x2F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x31A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 SWAP5 SWAP4 PUSH1 0x20 DUP2 ADD SWAP4 POP CALLDATALOAD SWAP2 POP POP PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x36A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x37C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x39E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0xA61 SWAP5 POP POP POP POP POP JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x408 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x401 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0xCE1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x46D JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x455 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4AC JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x494 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP9 POP POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3DC PUSH2 0xE86 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28C PUSH2 0xEEF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x505 PUSH2 0xF07 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x525 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3DC PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x53C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x55E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x570 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x592 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 SWAP5 SWAP4 PUSH1 0x20 DUP2 ADD SWAP4 POP CALLDATALOAD SWAP2 POP POP PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x5E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x5F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x616 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0xF10 SWAP5 POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x660 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x669 PUSH2 0x10ED JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 DUP2 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x6A5 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x68D JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3DC PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x6DC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1148 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3DC PUSH2 0x1220 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x70D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28C PUSH2 0x1287 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x722 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28C PUSH2 0x1296 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x737 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x740 PUSH2 0x12A5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x75E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x740 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x775 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x12AB JUMP JUMPDEST PUSH2 0x3DC PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x792 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x7D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x7E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x806 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x12CC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x81D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3DC PUSH2 0x13A9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x832 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x740 PUSH2 0x13BC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x847 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3DC PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x85E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x879 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x88B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x8AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0x13C2 SWAP5 POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8F7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x740 PUSH2 0x1516 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x90C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x740 PUSH2 0x151C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x921 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3DC PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x938 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1522 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x2 SLOAD PUSH1 0x0 EQ ISZERO PUSH2 0x9A4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x9AC PUSH2 0x1593 JUMP JUMPDEST PUSH2 0x9B4 PUSH2 0x2B4C JUMP JUMPDEST PUSH2 0x9BC PUSH2 0x15EB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP10 DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP10 AND PUSH1 0x40 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD DUP10 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP9 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x1F DUP8 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD SWAP1 SWAP2 MSTORE DUP6 DUP2 MSTORE SWAP1 DUP7 SWAP1 DUP7 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP POP PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0xA2D DUP2 PUSH2 0x15EF JUMP JUMPDEST SWAP3 POP SWAP3 POP POP SWAP7 POP SWAP7 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0xA69 PUSH2 0x1616 JUMP JUMPDEST PUSH2 0xA79 PUSH2 0xA74 PUSH2 0x15EB JUMP JUMPDEST PUSH2 0x166D JUMP JUMPDEST PUSH1 0x8 SLOAD DUP1 PUSH2 0xACE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20656D70747920746F6B656E730000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP3 MLOAD DUP1 PUSH2 0xB22 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20656D70747920696E646578657300000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP3 MLOAD DUP2 DUP2 EQ PUSH2 0xB78 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E636F6E73697374656E742061727261797300000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x0 JUMPDEST DUP4 DUP2 EQ PUSH2 0xCD8 JUMPI PUSH1 0x0 DUP8 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xB93 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP DUP3 DUP2 LT ISZERO PUSH2 0xBF2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E76616C696420696E64657800000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP6 DUP2 LT PUSH2 0xC46 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E646578206F75742D6F662D626F756E647300000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP8 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0xC54 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP DUP1 PUSH1 0x0 EQ ISZERO PUSH2 0xCB4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F20737570706C79000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x8 DUP4 DUP2 SLOAD DUP2 LT PUSH2 0xCC2 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SSTORE POP POP PUSH1 0x1 ADD PUSH2 0xB7E JUMP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP2 SWAP1 DUP2 SWAP1 DUP2 SWAP1 PUSH1 0x60 SWAP1 DUP2 SWAP1 DUP4 PUSH2 0xD07 PUSH1 0x4 DUP4 ADD PUSH2 0x1734 JUMP JUMPDEST DUP3 SLOAD SWAP9 POP SWAP1 POP DUP8 PUSH2 0xD5F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7500000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x3 DUP5 ADD SLOAD SWAP2 SWAP9 POP SWAP7 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP5 POP DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0xD95 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xDBF JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP4 POP DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0xDD9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xE03 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xE7A JUMPI PUSH1 0x0 DUP1 PUSH2 0xE21 PUSH1 0x4 DUP7 ADD DUP5 PUSH2 0x1738 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP2 PUSH1 0x0 SHR DUP8 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0xE35 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP DUP1 PUSH1 0x0 SHR DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0xE65 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP POP PUSH1 0x1 ADD PUSH2 0xE09 JUMP JUMPDEST POP POP POP SWAP2 SWAP4 SWAP6 POP SWAP2 SWAP4 SWAP6 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0xEDA JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0xEE5 PUSH2 0xA74 PUSH2 0x15EB JUMP JUMPDEST PUSH2 0xEED PUSH2 0x17C9 JUMP JUMPDEST JUMP JUMPDEST PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0xF1B PUSH2 0xA74 PUSH2 0x15EB JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD DUP2 EQ PUSH2 0xF72 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E636F6E73697374656E742061727261797300000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0xFD3 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7500000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP2 ADD DUP3 PUSH2 0x101E JUMPI PUSH1 0x0 PUSH2 0xFE7 DUP3 PUSH2 0x1734 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1017 JUMPI PUSH1 0x0 PUSH2 0x1000 DUP5 DUP3 PUSH2 0x1738 JUMP JUMPDEST POP SWAP1 POP PUSH2 0x100D DUP5 DUP3 PUSH2 0x1821 JUMP JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0xFEC JUMP JUMPDEST POP POP PUSH2 0x1029 JUMP JUMPDEST PUSH2 0x1029 DUP2 DUP7 DUP7 PUSH2 0x1901 JUMP JUMPDEST DUP6 PUSH32 0xCB3FE5489E0CD43D0F4A33D1E09A4A0463A03D0D38F56165530854E5540DB143 DUP7 DUP7 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1091 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1079 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x10D0 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x10B8 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x4 PUSH1 0x0 ADD DUP1 SLOAD DUP1 PUSH1 0x20 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 DUP1 ISZERO PUSH2 0x113E JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x112A JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x1153 PUSH2 0xA74 PUSH2 0x15EB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x11AE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061796F75743A207A65726F2061646472657373000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 SWAP1 SWAP2 OR SWAP2 DUP3 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD SWAP3 SWAP1 SWAP2 AND DUP3 MSTORE MLOAD PUSH32 0xDD880D24A789958A6398C99C2E54CE31BC10A638CBC42F7DD34285479AE0F855 SWAP2 PUSH1 0x20 SWAP1 DUP3 SWAP1 SUB ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x1274 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x127F PUSH2 0xA74 PUSH2 0x15EB JUMP JUMPDEST PUSH2 0xEED PUSH2 0x1A6A JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 NOT DUP2 JUMP JUMPDEST PUSH1 0x8 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x12BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x1320 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x1328 PUSH2 0x1593 JUMP JUMPDEST PUSH2 0x1330 PUSH2 0x2B4C JUMP JUMPDEST PUSH2 0x1338 PUSH2 0x15EB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP8 DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP8 AND PUSH1 0x40 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD DUP8 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP7 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x1F DUP6 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD SWAP1 SWAP2 MSTORE DUP4 DUP2 MSTORE SWAP1 DUP5 SWAP1 DUP5 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP POP PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0xCD8 DUP2 PUSH2 0x1AA8 JUMP JUMPDEST PUSH2 0x13B4 PUSH2 0xA74 PUSH2 0x15EB JUMP JUMPDEST PUSH2 0xEE5 PUSH2 0x1AD5 JUMP JUMPDEST PUSH1 0x8 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x13CD PUSH2 0xA74 PUSH2 0x15EB JUMP JUMPDEST DUP1 MLOAD DUP1 PUSH2 0x1421 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20656D70747920746F6B656E730000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 EQ PUSH2 0x14D6 JUMPI PUSH1 0x0 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1439 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP DUP1 PUSH1 0x0 EQ ISZERO PUSH2 0x1499 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F20737570706C79000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x8 DUP1 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP4 SSTORE PUSH1 0x0 SWAP3 SWAP1 SWAP3 MSTORE PUSH32 0xF3F7A9FE364FAAB93B216DA50A3214154F22A0A2B415B23A84C8169E8B636EE3 ADD SWAP2 SWAP1 SWAP2 SSTORE ADD PUSH2 0x1424 JUMP JUMPDEST POP PUSH2 0x14E1 PUSH1 0x4 PUSH2 0x1734 JUMP JUMPDEST ISZERO PUSH2 0x1512 JUMPI PUSH1 0x0 PUSH2 0x14F3 PUSH1 0x4 DUP3 PUSH2 0x1B57 JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD DUP4 ADD DUP2 SSTORE PUSH1 0x1 ADD DUP1 SLOAD DUP4 ADD SWAP1 SSTORE POP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x7 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x152D PUSH2 0xA74 PUSH2 0x15EB JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 DUP3 OR DUP1 DUP5 SSTORE PUSH1 0x40 MLOAD SWAP3 SWAP4 SWAP2 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xEED JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061757361626C653A2070617573656400000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x15FC DUP4 PUSH2 0x1BD1 JUMP JUMPDEST PUSH2 0x1605 DUP4 PUSH2 0x1E7B JUMP JUMPDEST POP POP PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xE0 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP2 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND PUSH2 0xEED JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061757361626C653A206E6F7420706175736564000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8DA5CB5B 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 PUSH2 0x16A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x16BA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x16D0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ PUSH2 0x1731 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6F7420746865206F776E657200000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP JUMP JUMPDEST SLOAD SWAP1 JUMP JUMPDEST DUP2 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP4 LT PUSH2 0x1792 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x456E756D4D61703A20696E646578206F7574206F6620626F756E647300000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 PUSH1 0x0 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x17A3 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD SWAP1 POP DUP1 PUSH1 0x0 ADD SLOAD DUP2 PUSH1 0x1 ADD SLOAD SWAP3 POP SWAP3 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH2 0x17D1 PUSH2 0x1616 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA PUSH2 0x1804 PUSH2 0x15EB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0x18F5 JUMPI DUP4 SLOAD PUSH1 0x0 NOT DUP1 DUP4 ADD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x0 SWAP1 DUP8 SWAP1 DUP4 SWAP1 DUP2 LT PUSH2 0x1854 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD SWAP1 POP DUP1 DUP8 PUSH1 0x0 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x1874 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 DUP5 SLOAD PUSH1 0x2 SWAP1 SWAP4 MUL ADD SWAP2 DUP3 SSTORE PUSH1 0x1 SWAP4 DUP5 ADD SLOAD SWAP2 DUP5 ADD SWAP2 SWAP1 SWAP2 SSTORE DUP4 SLOAD DUP3 MSTORE DUP10 DUP4 ADD SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP1 DUP5 ADD SWAP1 SSTORE DUP7 SLOAD DUP8 SWAP1 DUP1 PUSH2 0x18B3 JUMPI INVALID JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 PUSH1 0x2 PUSH1 0x0 NOT SWAP1 SWAP5 ADD SWAP4 DUP5 MUL ADD DUP3 DUP2 SSTORE PUSH1 0x1 SWAP1 DUP2 ADD DUP4 SWAP1 SSTORE SWAP3 SWAP1 SWAP4 SSTORE DUP9 DUP2 MSTORE DUP10 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x40 DUP3 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE SWAP5 POP PUSH2 0x18FB SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SWAP2 POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x19E7 JUMPI PUSH1 0x0 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x191B JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x198D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F206164647265737320746F6B656E0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x199B JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP DUP1 PUSH1 0x0 EQ ISZERO PUSH2 0x19C7 JUMPI PUSH2 0x19C1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x1821 JUMP JUMPDEST POP PUSH2 0x19DD JUMP JUMPDEST PUSH2 0x19DB DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP4 PUSH2 0x1F18 JUMP JUMPDEST POP JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x1904 JUMP JUMPDEST POP PUSH32 0x0 PUSH2 0x1A12 DUP5 PUSH2 0x1734 JUMP JUMPDEST GT ISZERO PUSH2 0x1A65 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20746F6F206D616E7920746F6B656E730000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x1A72 PUSH2 0x1593 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH2 0x1804 PUSH2 0x15EB JUMP JUMPDEST PUSH2 0x1AB1 DUP2 PUSH2 0x1BD1 JUMP JUMPDEST PUSH2 0x1ABA DUP2 PUSH2 0x1E7B JUMP JUMPDEST PUSH2 0x1AC3 DUP2 PUSH2 0x1FB2 JUMP JUMPDEST PUSH2 0x1ACC DUP2 PUSH2 0x2101 JUMP JUMPDEST PUSH2 0x1731 DUP2 PUSH2 0x21B2 JUMP JUMPDEST PUSH1 0x2 SLOAD ISZERO PUSH2 0x1B2A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A20737461727465640000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST TIMESTAMP PUSH1 0x2 SSTORE PUSH32 0x27029695AA5F602A4EE81F4C32DFA86E562F200A17966496F3A7C3F2EC0F9417 PUSH2 0x1804 PUSH2 0x15EB JUMP JUMPDEST DUP2 SLOAD PUSH1 0x0 SWAP1 DUP3 LT PUSH2 0x1BAF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x456E756D5365743A20696E646578206F7574206F6620626F756E647300000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP3 PUSH1 0x0 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x1BBE JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1C30 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F206164647265737320726563697069656E7400000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1C8F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F206164647265737320746F6B656E0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x80 DUP2 ADD MLOAD PUSH2 0x1CE5 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F207175616E7469747920707572636861736500000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0x1D4B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7500000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x80 ADD MLOAD DUP2 PUSH1 0x2 ADD SLOAD LT ISZERO PUSH2 0x1DA8 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A2061626F7665206D6178207175616E746974790000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 SLOAD PUSH1 0x0 NOT EQ PUSH2 0x1E0F JUMPI DUP2 PUSH1 0x80 ADD MLOAD DUP2 PUSH1 0x1 ADD SLOAD LT ISZERO PUSH2 0x1E0F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E73756666696369656E7420737570706C7900000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1E2A PUSH1 0x4 DUP4 ADD DUP3 PUSH2 0x2697 JUMP JUMPDEST PUSH2 0x1A65 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7520746F6B656E00000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0x1EE1 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20756E737570706F7274656420534B550000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP2 ADD PUSH1 0x0 PUSH2 0x1EF1 DUP5 DUP4 PUSH2 0x26AF JUMP JUMPDEST SWAP1 POP PUSH2 0x1F0A DUP5 PUSH1 0x80 ADD MLOAD DUP3 PUSH2 0x271F SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0xC0 SWAP1 SWAP5 ADD SWAP4 SWAP1 SWAP4 MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x1 DUP5 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 PUSH2 0x1F7D JUMPI POP POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE DUP4 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD DUP5 DUP2 MSTORE DUP7 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP10 SSTORE PUSH1 0x0 DUP10 DUP2 MSTORE DUP5 DUP2 KECCAK256 SWAP6 MLOAD PUSH1 0x2 SWAP1 SWAP4 MUL SWAP1 SWAP6 ADD SWAP2 DUP3 SSTORE SWAP2 MLOAD SWAP1 DUP3 ADD SSTORE DUP7 SLOAD DUP7 DUP5 MSTORE DUP2 DUP9 ADD SWAP1 SWAP3 MSTORE SWAP3 SWAP1 SWAP2 KECCAK256 SSTORE PUSH2 0x1FAB JUMP JUMPDEST DUP3 DUP6 PUSH1 0x0 ADD PUSH1 0x1 DUP4 SUB DUP2 SLOAD DUP2 LT PUSH2 0x1F90 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD PUSH1 0x1 ADD DUP2 SWAP1 SSTORE POP PUSH1 0x0 SWAP2 POP POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x20D5 JUMPI DUP1 PUSH1 0xC0 ADD MLOAD CALLVALUE LT ISZERO PUSH2 0x2034 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E73756666696369656E742045544800000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xC0 DUP3 ADD MLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 DUP2 ISZERO PUSH2 0x8FC MUL SWAP2 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x2072 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x0 PUSH2 0x208C DUP3 PUSH1 0xC0 ADD MLOAD CALLVALUE PUSH2 0x2778 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x20CF JUMPI DUP2 MLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 DUP3 ISZERO PUSH2 0x8FC MUL SWAP1 DUP4 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x20CD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP JUMPDEST POP PUSH2 0x1731 JUMP JUMPDEST PUSH2 0x1731 PUSH2 0x20E0 PUSH2 0x15EB JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xC0 DUP5 ADD MLOAD PUSH1 0x40 DUP6 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP4 SWAP3 AND SWAP1 PUSH2 0x27D5 JUMP JUMPDEST PUSH2 0x210A DUP2 PUSH2 0x2863 JUMP JUMPDEST DUP1 PUSH1 0x80 ADD MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x2125 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x214F JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP PUSH2 0x120 DUP3 ADD MSTORE PUSH1 0x7 SLOAD PUSH1 0x0 SWAP1 JUMPDEST DUP3 PUSH1 0x80 ADD MLOAD DUP3 EQ PUSH2 0x21AB JUMPI PUSH1 0x8 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x2175 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD PUSH1 0x0 SHL DUP4 PUSH2 0x120 ADD MLOAD DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2194 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x215D JUMP JUMPDEST PUSH1 0x7 SSTORE POP POP JUMP JUMPDEST DUP1 PUSH1 0x60 ADD MLOAD DUP2 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x29F844483CA6B10B5C0611D039AFC15CE8F6380E905307B381C3A8EE4E90E11E DUP5 PUSH1 0x20 ADD MLOAD DUP6 PUSH1 0x80 ADD MLOAD DUP7 PUSH1 0xA0 ADD MLOAD DUP8 PUSH1 0xC0 ADD MLOAD DUP9 PUSH1 0xE0 ADD MLOAD DUP10 PUSH2 0x100 ADD MLOAD DUP11 PUSH2 0x120 ADD MLOAD PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP5 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2249 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2231 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2279 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2261 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x22A9 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2291 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP4 POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP7 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2320 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2308 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x234D JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP DUP4 DUP2 SUB DUP3 MSTORE DUP5 MLOAD DUP2 MSTORE DUP5 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP7 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2380 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2368 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x23AD JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP8 POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 ISZERO PUSH2 0x1512 JUMPI PUSH4 0x61ECEAE8 PUSH1 0xE0 SHL PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x61ECEAE8 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD DUP7 PUSH1 0x40 ADD MLOAD DUP8 PUSH1 0x60 ADD MLOAD DUP9 PUSH1 0x80 ADD MLOAD DUP10 PUSH1 0xA0 ADD MLOAD DUP11 PUSH1 0xC0 ADD MLOAD DUP12 PUSH1 0xE0 ADD MLOAD DUP13 PUSH2 0x100 ADD MLOAD DUP14 PUSH2 0x120 ADD MLOAD PUSH1 0x40 MLOAD DUP12 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP6 DUP2 SUB DUP6 MSTORE DUP11 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x24E6 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x24CE JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x2513 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP DUP6 DUP2 SUB DUP5 MSTORE DUP9 MLOAD DUP2 MSTORE DUP9 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP1 DUP12 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2548 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2530 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP6 DUP2 SUB DUP4 MSTORE DUP8 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2587 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x256F JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP6 DUP2 SUB DUP3 MSTORE DUP7 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x25C6 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x25AE JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP15 POP POP POP POP POP POP POP POP POP POP POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x25F7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x260B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2621 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND EQ PUSH2 0x1512 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F74696669636174696F6E2072656675736564000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x0 SWAP1 PUSH2 0x26CB SWAP1 DUP4 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x28AE JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x18FB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20756E737570706F72746564207061796D656E7420746F6B656E00 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x272E JUMPI POP PUSH1 0x0 PUSH2 0x18FB JUMP JUMPDEST DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 PUSH2 0x273B JUMPI INVALID JUMPDEST DIV EQ PUSH2 0x1FAB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2BBE PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP3 GT ISZERO PUSH2 0x27CF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x24 DUP4 ADD MSTORE DUP5 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x84 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 OR SWAP1 MSTORE PUSH2 0x285D SWAP1 DUP6 SWAP1 PUSH2 0x293E JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x0 NOT EQ PUSH2 0x1512 JUMPI PUSH1 0x80 DUP3 ADD MLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH2 0x2893 SWAP2 PUSH2 0x2778 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 PUSH2 0x2911 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x456E756D4D61703A206E6F6E6578697374656E74206B65790000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP4 PUSH1 0x0 ADD PUSH1 0x1 DUP3 SUB DUP2 SLOAD DUP2 LT PUSH2 0x2923 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD PUSH1 0x1 ADD SLOAD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 PUSH2 0x2951 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x2B46 JUMP JUMPDEST PUSH2 0x29A2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433230577261707065723A206E6F6E2D636F6E7472616374000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x29FD JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x29C0 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x2A5F JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x2A64 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 ISZERO PUSH2 0x2AE3 JUMPI DUP1 MLOAD ISZERO PUSH2 0x2ADE JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2A8B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x2ADE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433230577261707065723A206F7065726174696F6E206661696C65640000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x2B3F JUMP JUMPDEST DUP1 MLOAD PUSH2 0x2B36 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433230577261707065723A206F7065726174696F6E206661696C65640000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 MLOAD DUP1 DUP3 PUSH1 0x20 ADD REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x140 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP1 NOT AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE POP SWAP1 JUMP INVALID MSTORE8 PUSH2 0x6665 0x4D PUSH2 0x7468 GASPRICE KECCAK256 PUSH14 0x756C7469706C69636174696F6E20 PUSH16 0x766572666C6F77A26469706673582212 KECCAK256 0xE9 0x1E 0xA5 DUP7 0xDD DUP14 PUSH15 0x66FC1DE22016F28AA034BB7C7316A0 0xCF PUSH4 0xCBB029B4 SLOAD 0x25 JUMPI PUSH9 0x64736F6C6343000706 STOP CALLER ","sourceMap":"436:5582:25:-:0;;;1040:363;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1040:363:25;;;;;;;;;;;960:6:1;:15;;-1:-1:-1;;;;;;960:15:1;2518:10:32;960:15:1;;;;;990:40;;1040:363:25;;;;;;;;1225:1;;1040:363;;;;1225:1;;1040:363;;1225:1;;2518:10:32;;1040:363:25;;2518:10:32;;;;990:40:1;;960:6;;990:40;-1:-1:-1;;;;;;512:27:8;::::1;504:60;;;::::0;;-1:-1:-1;;;504:60:8;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;574:12;:28:::0;;-1:-1:-1;;;;;574:28:8;::::1;-1:-1:-1::0;;;;;;574:28:8;;::::1;::::0;::::1;::::0;;;617:30:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;-1:-1:-1::0;;543:6:5;:16;;-1:-1:-1;;543:16:5;;;;;;;;;;2570:28:32::2;::::0;;;2608:44:::2;::::0;;;2687:16:::2;::::0;;2701:1:::2;2687:16:::0;;;;;::::2;::::0;;-1:-1:-1;;2687:16:32::2;::::0;::::2;::::0;;::::2;::::0;::::2;-1:-1:-1::0;;2739:16:32::2;::::0;;2753:1:::2;2739:16:::0;;;;;::::2;::::0;;2662:41;;-1:-1:-1;2713:23:32::2;::::0;2739:16;;-1:-1:-1;2753:1:32;2739:16:::2;::::0;::::2;::::0;;::::2;::::0;::::2;-1:-1:-1::0;;2766:8:32;;2713:42;;-1:-1:-1;;;;2765:66:32;1751:44:::2;::::0;-1:-1:-1;2766:5:32;;2803:27:::2;::::0;2766:8:::2;;;;;;;;;2776:6;2783:1;2776:9;;;;;;;;;;;;;2765:66;;;::::0;::::2;;;::::0;::::2;;-1:-1:-1::0;;2886:34:32::2;;-1:-1:-1::0;;;2841:80:32::2;2842:5;2848:1;2842:8;;;;;;;;;;;;;2852:6;2859:1;2852:9;;;;;;;;;;;;;2841:80;;;::::0;::::2;;;::::0;::::2;;2936:26;2948:5;2955:6;2936:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::2;::::0;;;::::2;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::2;::::0;;;::::2;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;;;;;;1307:24:25;::::1;::::0;::::1;::::0;-1:-1:-1;1299:65:25::1;::::0;-1:-1:-1;;1299:65:25::1;;::::0;;-1:-1:-1;;;1299:65:25;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;1374:22:25::1;::::0;;;-1:-1:-1;;;;;;1374:22:25;::::1;::::0;436:5582;;;;;;-1:-1:-1;;;;;436:5582:25;;;;;;;;;;"},"deployedBytecode":{"generatedSources":[],"immutableReferences":{"4261":[{"length":32,"start":2623}],"5787":[{"length":32,"start":6634}]},"linkReferences":{},"object":"6080604052600436106101755760003560e01c80638488bb4e116100cb578063be9a65551161007f578063d55f927311610059578063d55f9273146108eb578063f21f537d14610900578063f2fde38b1461091557610175565b8063be9a655514610811578063c4e41b2214610826578063cf3ae77b1461083b57610175565b80639e049545116100b05780639e0495451461072b5780639ead722214610752578063a963b2571461077c57610175565b80638488bb4e146107015780638da5cb5b1461071657610175565b80635c4fafc71161012d57806361bd38511161010757806361bd3851146106545780636b8f9c43146106b95780638456cb59146106ec57610175565b80635c4fafc7146104db5780635c975abb146104f05780635e6e9f701461051957610175565b806323f927c91161015e57806323f927c9146102a85780632a8a45bc146103de5780633f4ba83a146104c657610175565b80631323b0661461017a57806315d52a5c14610277575b600080fd5b34801561018657600080fd5b5061021c600480360360a081101561019d57600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a0810160808201356401000000008111156101dd57600080fd5b8201836020820111156101ef57600080fd5b8035906020019184600183028401116401000000008311171561021157600080fd5b509092509050610948565b6040518083815260200180602001828103825283818151815260200191508051906020019060200280838360005b8381101561026257818101518382015260200161024a565b50505050905001935050505060405180910390f35b34801561028357600080fd5b5061028c610a3d565b604080516001600160a01b039092168252519081900360200190f35b3480156102b457600080fd5b506103dc600480360360408110156102cb57600080fd5b8101906020810181356401000000008111156102e657600080fd5b8201836020820111156102f857600080fd5b8035906020019184602083028401116401000000008311171561031a57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561036a57600080fd5b82018360208201111561037c57600080fd5b8035906020019184602083028401116401000000008311171561039e57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610a61945050505050565b005b3480156103ea57600080fd5b506104086004803603602081101561040157600080fd5b5035610ce1565b60405180878152602001868152602001858152602001846001600160a01b031681526020018060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561046d578181015183820152602001610455565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156104ac578181015183820152602001610494565b505050509050019850505050505050505060405180910390f35b3480156104d257600080fd5b506103dc610e86565b3480156104e757600080fd5b5061028c610eef565b3480156104fc57600080fd5b50610505610f07565b604080519115158252519081900360200190f35b34801561052557600080fd5b506103dc6004803603606081101561053c57600080fd5b8135919081019060408101602082013564010000000081111561055e57600080fd5b82018360208201111561057057600080fd5b8035906020019184602083028401116401000000008311171561059257600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092959493602081019350359150506401000000008111156105e257600080fd5b8201836020820111156105f457600080fd5b8035906020019184602083028401116401000000008311171561061657600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610f10945050505050565b34801561066057600080fd5b506106696110ed565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156106a557818101518382015260200161068d565b505050509050019250505060405180910390f35b3480156106c557600080fd5b506103dc600480360360208110156106dc57600080fd5b50356001600160a01b0316611148565b3480156106f857600080fd5b506103dc611220565b34801561070d57600080fd5b5061028c611287565b34801561072257600080fd5b5061028c611296565b34801561073757600080fd5b506107406112a5565b60408051918252519081900360200190f35b34801561075e57600080fd5b506107406004803603602081101561077557600080fd5b50356112ab565b6103dc600480360360a081101561079257600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a0810160808201356401000000008111156107d257600080fd5b8201836020820111156107e457600080fd5b8035906020019184600183028401116401000000008311171561080657600080fd5b5090925090506112cc565b34801561081d57600080fd5b506103dc6113a9565b34801561083257600080fd5b506107406113bc565b34801561084757600080fd5b506103dc6004803603602081101561085e57600080fd5b81019060208101813564010000000081111561087957600080fd5b82018360208201111561088b57600080fd5b803590602001918460208302840111640100000000831117156108ad57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506113c2945050505050565b3480156108f757600080fd5b50610740611516565b34801561090c57600080fd5b5061074061151c565b34801561092157600080fd5b506103dc6004803603602081101561093857600080fd5b50356001600160a01b0316611522565b60006060600254600014156109a4576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b6109ac611593565b6109b4612b4c565b6109bc6115eb565b6001600160a01b03908116825289811660208084019190915290891660408084019190915260608301899052608083018890528051601f870183900483028101830190915285815290869086908190840183828082843760009201919091525050505060a0820152610a2d816115ef565b9250925050965096945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b610a69611616565b610a79610a746115eb565b61166d565b60085480610ace576040805162461bcd60e51b815260206004820152601260248201527f53616c653a20656d70747920746f6b656e730000000000000000000000000000604482015290519081900360640190fd5b825180610b22576040805162461bcd60e51b815260206004820152601360248201527f53616c653a20656d70747920696e646578657300000000000000000000000000604482015290519081900360640190fd5b8251818114610b78576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20696e636f6e73697374656e742061727261797300000000000000604482015290519081900360640190fd5b60075460005b838114610cd8576000878281518110610b9357fe5b6020026020010151905082811015610bf2576040805162461bcd60e51b815260206004820152601360248201527f53616c653a20696e76616c696420696e64657800000000000000000000000000604482015290519081900360640190fd5b858110610c46576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20696e646578206f75742d6f662d626f756e647300000000000000604482015290519081900360640190fd5b6000878381518110610c5457fe5b602002602001015190508060001415610cb4576040805162461bcd60e51b815260206004820152601160248201527f53616c653a207a65726f20737570706c79000000000000000000000000000000604482015290519081900360640190fd5b8060088381548110610cc257fe5b6000918252602090912001555050600101610b7e565b50505050505050565b6000818152600660205260408120819081908190606090819083610d0760048301611734565b82549850905087610d5f576040805162461bcd60e51b815260206004820152601660248201527f53616c653a206e6f6e2d6578697374656e7420736b7500000000000000000000604482015290519081900360640190fd5b60018201546002830154600384015491985096506001600160a01b031694508067ffffffffffffffff81118015610d9557600080fd5b50604051908082528060200260200182016040528015610dbf578160200160208202803683370190505b5093508067ffffffffffffffff81118015610dd957600080fd5b50604051908082528060200260200182016040528015610e03578160200160208202803683370190505b50925060005b81811015610e7a57600080610e216004860184611738565b915091508160001c878481518110610e3557fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508060001c868481518110610e6557fe5b60209081029190910101525050600101610e09565b50505091939550919395565b600254610eda576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b610ee5610a746115eb565b610eed6117c9565b565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b60035460ff1681565b610f1b610a746115eb565b815181518114610f72576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20696e636f6e73697374656e742061727261797300000000000000604482015290519081900360640190fd5b60008481526006602052604090208054610fd3576040805162461bcd60e51b815260206004820152601660248201527f53616c653a206e6f6e2d6578697374656e7420736b7500000000000000000000604482015290519081900360640190fd5b600481018261101e576000610fe782611734565b905060005b818110156110175760006110008482611738565b50905061100d8482611821565b5050600101610fec565b5050611029565b611029818686611901565b857fcb3fe5489e0cd43d0f4a33d1e09a4a0463a03d0d38f56165530854e5540db1438686604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015611091578181015183820152602001611079565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156110d05781810151838201526020016110b8565b5050505090500194505050505060405180910390a2505050505050565b6060600460000180548060200260200160405190810160405280929190818152602001828054801561113e57602002820191906000526020600020905b81548152602001906001019080831161112a575b5050505050905090565b611153610a746115eb565b6001600160a01b0381166111ae576040805162461bcd60e51b815260206004820152601460248201527f5061796f75743a207a65726f2061646472657373000000000000000000000000604482015290519081900360640190fd5b600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03838116919091179182905560408051929091168252517fdd880d24a789958a6398c99c2e54ce31bc10a638cbc42f7dd34285479ae0f855916020908290030190a150565b600254611274576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b61127f610a746115eb565b610eed611a6a565b6001546001600160a01b031681565b6000546001600160a01b031690565b60001981565b600881815481106112bb57600080fd5b600091825260209091200154905081565b600254611320576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b611328611593565b611330612b4c565b6113386115eb565b6001600160a01b03908116825287811660208084019190915290871660408084019190915260608301879052608083018690528051601f850183900483028101830190915283815290849084908190840183828082843760009201919091525050505060a0820152610cd881611aa8565b6113b4610a746115eb565b610ee5611ad5565b60085490565b6113cd610a746115eb565b805180611421576040805162461bcd60e51b815260206004820152601260248201527f53616c653a20656d70747920746f6b656e730000000000000000000000000000604482015290519081900360640190fd5b60005b8181146114d657600083828151811061143957fe5b602002602001015190508060001415611499576040805162461bcd60e51b815260206004820152601160248201527f53616c653a207a65726f20737570706c79000000000000000000000000000000604482015290519081900360640190fd5b60088054600181810183556000929092527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3019190915501611424565b506114e16004611734565b156115125760006114f3600482611b57565b6000908152600660205260409020805483018155600101805483019055505b5050565b60075481565b60025490565b61152d610a746115eb565b600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383811691821780845560405192939116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b60035460ff1615610eed576040805162461bcd60e51b815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b3390565b600060606115fc83611bd1565b61160583611e7b565b505060c081015160e0909101519091565b60035460ff16610eed576040805162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604482015290519081900360640190fd5b306001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156116a657600080fd5b505afa1580156116ba573d6000803e3d6000fd5b505050506040513d60208110156116d057600080fd5b50516001600160a01b03828116911614611731576040805162461bcd60e51b815260206004820152601660248201527f4f776e61626c653a206e6f7420746865206f776e657200000000000000000000604482015290519081900360640190fd5b50565b5490565b815460009081908310611792576040805162461bcd60e51b815260206004820152601c60248201527f456e756d4d61703a20696e646578206f7574206f6620626f756e647300000000604482015290519081900360640190fd5b60008460000184815481106117a357fe5b906000526020600020906002020190508060000154816001015492509250509250929050565b6117d1611616565b6003805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6118046115eb565b604080516001600160a01b039092168252519081900360200190a1565b600081815260018301602052604081205480156118f5578354600019808301919081019060009087908390811061185457fe5b906000526020600020906002020190508087600001848154811061187457fe5b6000918252602080832084546002909302019182556001938401549184019190915583548252898301905260409020908401905586548790806118b357fe5b60008281526020808220600260001990940193840201828155600190810183905592909355888152898201909252604082209190915594506118fb9350505050565b60009150505b92915050565b60005b82518110156119e757600083828151811061191b57fe5b6020026020010151905060006001600160a01b0316816001600160a01b0316141561198d576040805162461bcd60e51b815260206004820152601860248201527f53616c653a207a65726f206164647265737320746f6b656e0000000000000000604482015290519081900360640190fd5b600083838151811061199b57fe5b6020026020010151905080600014156119c7576119c1866001600160a01b038416611821565b506119dd565b6119db866001600160a01b03841683611f18565b505b5050600101611904565b507f0000000000000000000000000000000000000000000000000000000000000000611a1284611734565b1115611a65576040805162461bcd60e51b815260206004820152601560248201527f53616c653a20746f6f206d616e7920746f6b656e730000000000000000000000604482015290519081900360640190fd5b505050565b611a72611593565b6003805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586118046115eb565b611ab181611bd1565b611aba81611e7b565b611ac381611fb2565b611acc81612101565b611731816121b2565b60025415611b2a576040805162461bcd60e51b815260206004820152601260248201527f537461727461626c653a20737461727465640000000000000000000000000000604482015290519081900360640190fd5b426002557f27029695aa5f602a4ee81f4c32dfa86e562f200a17966496f3a7c3f2ec0f94176118046115eb565b81546000908210611baf576040805162461bcd60e51b815260206004820152601c60248201527f456e756d5365743a20696e646578206f7574206f6620626f756e647300000000604482015290519081900360640190fd5b826000018281548110611bbe57fe5b9060005260206000200154905092915050565b60208101516001600160a01b0316611c30576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a207a65726f206164647265737320726563697069656e7400000000604482015290519081900360640190fd5b60408101516001600160a01b0316611c8f576040805162461bcd60e51b815260206004820152601860248201527f53616c653a207a65726f206164647265737320746f6b656e0000000000000000604482015290519081900360640190fd5b6080810151611ce5576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a207a65726f207175616e7469747920707572636861736500000000604482015290519081900360640190fd5b606081015160009081526006602052604090208054611d4b576040805162461bcd60e51b815260206004820152601660248201527f53616c653a206e6f6e2d6578697374656e7420736b7500000000000000000000604482015290519081900360640190fd5b816080015181600201541015611da8576040805162461bcd60e51b815260206004820152601860248201527f53616c653a2061626f7665206d6178207175616e746974790000000000000000604482015290519081900360640190fd5b805460001914611e0f57816080015181600101541015611e0f576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20696e73756666696369656e7420737570706c7900000000000000604482015290519081900360640190fd5b60408201516001600160a01b0316611e2a6004830182612697565b611a65576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a206e6f6e2d6578697374656e7420736b7520746f6b656e00000000604482015290519081900360640190fd5b606081015160009081526006602052604090208054611ee1576040805162461bcd60e51b815260206004820152601560248201527f53616c653a20756e737570706f7274656420534b550000000000000000000000604482015290519081900360640190fd5b600481016000611ef184836126af565b9050611f0a84608001518261271f90919063ffffffff16565b60c090940193909352505050565b600082815260018401602052604081205480611f7d575050604080518082018252838152602080820184815286546001818101895560008981528481209551600290930290950191825591519082015586548684528188019092529290912055611fab565b82856000016001830381548110611f9057fe5b90600052602060002090600202016001018190555060009150505b9392505050565b60408101516001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14156120d5578060c00151341015612034576040805162461bcd60e51b815260206004820152601660248201527f53616c653a20696e73756666696369656e742045544800000000000000000000604482015290519081900360640190fd5b60015460c08201516040516001600160a01b039092169181156108fc0291906000818181858888f19350505050158015612072573d6000803e3d6000fd5b50600061208c8260c001513461277890919063ffffffff16565b905080156120cf5781516040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156120cd573d6000803e3d6000fd5b505b50611731565b6117316120e06115eb565b60015460c084015160408501516001600160a01b03908116939216906127d5565b61210a81612863565b806080015167ffffffffffffffff8111801561212557600080fd5b5060405190808252806020026020018201604052801561214f578160200160208202803683370190505b506101208201526007546000905b826080015182146121ab576008818154811061217557fe5b906000526020600020015460001b836101200151838151811061219457fe5b60209081029190910101526001918201910161215d565b6007555050565b806060015181604001516001600160a01b031682600001516001600160a01b03167f29f844483ca6b10b5c0611d039afc15ce8f6380e905307b381c3a8ee4e90e11e846020015185608001518660a001518760c001518860e001518961010001518a610120015160405160200180848051906020019060200280838360005b83811015612249578181015183820152602001612231565b50505050905001838051906020019060200280838360005b83811015612279578181015183820152602001612261565b50505050905001828051906020019060200280838360005b838110156122a9578181015183820152602001612291565b50505050905001935050505060405160208183030381529060405260405180866001600160a01b031681526020018581526020018060200184815260200180602001838103835286818151815260200191508051906020019080838360005b83811015612320578181015183820152602001612308565b50505050905090810190601f16801561234d5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015612380578181015183820152602001612368565b50505050905090810190601f1680156123ad5780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390a460608101516000908152600660205260409020600301546001600160a01b03168015611512576361eceae860e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916816001600160a01b03166361eceae8846000015185602001518660400151876060015188608001518960a001518a60c001518b60e001518c61010001518d61012001516040518b63ffffffff1660e01b8152600401808b6001600160a01b031681526020018a6001600160a01b03168152602001896001600160a01b031681526020018881526020018781526020018060200186815260200180602001806020018060200185810385528a818151815260200191508051906020019080838360005b838110156124e65781810151838201526020016124ce565b50505050905090810190601f1680156125135780820380516001836020036101000a031916815260200191505b508581038452885181528851602091820191808b01910280838360005b83811015612548578181015183820152602001612530565b50505050905001858103835287818151815260200191508051906020019060200280838360005b8381101561258757818101518382015260200161256f565b50505050905001858103825286818151815260200191508051906020019060200280838360005b838110156125c65781810151838201526020016125ae565b505050509050019e505050505050505050505050505050602060405180830381600087803b1580156125f757600080fd5b505af115801561260b573d6000803e3d6000fd5b505050506040513d602081101561262157600080fd5b50517fffffffff000000000000000000000000000000000000000000000000000000001614611512576040805162461bcd60e51b815260206004820152601a60248201527f53616c653a206e6f74696669636174696f6e2072656675736564000000000000604482015290519081900360640190fd5b60009081526001919091016020526040902054151590565b60408201516000906126cb9083906001600160a01b03166128ae565b9050806118fb576040805162461bcd60e51b815260206004820152601f60248201527f53616c653a20756e737570706f72746564207061796d656e7420746f6b656e00604482015290519081900360640190fd5b60008261272e575060006118fb565b8282028284828161273b57fe5b0414611fab5760405162461bcd60e51b8152600401808060200182810382526021815260200180612bbe6021913960400191505060405180910390fd5b6000828211156127cf576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261285d90859061293e565b50505050565b60608101516000908152600660205260409020805460001914611512576080820151600182015461289391612778565b60608301516000908152600660205260409020600101555050565b600081815260018301602052604081205480612911576040805162461bcd60e51b815260206004820152601860248201527f456e756d4d61703a206e6f6e6578697374656e74206b65790000000000000000604482015290519081900360640190fd5b83600001600182038154811061292357fe5b90600052602060002090600202016001015491505092915050565b816129516001600160a01b038216612b46565b6129a2576040805162461bcd60e51b815260206004820152601a60248201527f4552433230577261707065723a206e6f6e2d636f6e7472616374000000000000604482015290519081900360640190fd5b600080826001600160a01b0316846040518082805190602001908083835b602083106129fd57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016129c0565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612a5f576040519150601f19603f3d011682016040523d82523d6000602084013e612a64565b606091505b50915091508115612ae357805115612ade57808060200190516020811015612a8b57600080fd5b5051612ade576040805162461bcd60e51b815260206004820152601e60248201527f4552433230577261707065723a206f7065726174696f6e206661696c65640000604482015290519081900360640190fd5b612b3f565b8051612b36576040805162461bcd60e51b815260206004820152601e60248201527f4552433230577261707065723a206f7065726174696f6e206661696c65640000604482015290519081900360640190fd5b80518082602001fd5b5050505050565b3b151590565b60405180610140016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160008019168152602001600081526020016060815260200160008152602001606081526020016060815260200160608152509056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220e91ea586dd8d6e66fc1de22016f28aa034bb7c7316a0cf63cbb029b45425576864736f6c63430007060033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x175 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8488BB4E GT PUSH2 0xCB JUMPI DUP1 PUSH4 0xBE9A6555 GT PUSH2 0x7F JUMPI DUP1 PUSH4 0xD55F9273 GT PUSH2 0x59 JUMPI DUP1 PUSH4 0xD55F9273 EQ PUSH2 0x8EB JUMPI DUP1 PUSH4 0xF21F537D EQ PUSH2 0x900 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x915 JUMPI PUSH2 0x175 JUMP JUMPDEST DUP1 PUSH4 0xBE9A6555 EQ PUSH2 0x811 JUMPI DUP1 PUSH4 0xC4E41B22 EQ PUSH2 0x826 JUMPI DUP1 PUSH4 0xCF3AE77B EQ PUSH2 0x83B JUMPI PUSH2 0x175 JUMP JUMPDEST DUP1 PUSH4 0x9E049545 GT PUSH2 0xB0 JUMPI DUP1 PUSH4 0x9E049545 EQ PUSH2 0x72B JUMPI DUP1 PUSH4 0x9EAD7222 EQ PUSH2 0x752 JUMPI DUP1 PUSH4 0xA963B257 EQ PUSH2 0x77C JUMPI PUSH2 0x175 JUMP JUMPDEST DUP1 PUSH4 0x8488BB4E EQ PUSH2 0x701 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x716 JUMPI PUSH2 0x175 JUMP JUMPDEST DUP1 PUSH4 0x5C4FAFC7 GT PUSH2 0x12D JUMPI DUP1 PUSH4 0x61BD3851 GT PUSH2 0x107 JUMPI DUP1 PUSH4 0x61BD3851 EQ PUSH2 0x654 JUMPI DUP1 PUSH4 0x6B8F9C43 EQ PUSH2 0x6B9 JUMPI DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x6EC JUMPI PUSH2 0x175 JUMP JUMPDEST DUP1 PUSH4 0x5C4FAFC7 EQ PUSH2 0x4DB JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x4F0 JUMPI DUP1 PUSH4 0x5E6E9F70 EQ PUSH2 0x519 JUMPI PUSH2 0x175 JUMP JUMPDEST DUP1 PUSH4 0x23F927C9 GT PUSH2 0x15E JUMPI DUP1 PUSH4 0x23F927C9 EQ PUSH2 0x2A8 JUMPI DUP1 PUSH4 0x2A8A45BC EQ PUSH2 0x3DE JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x4C6 JUMPI PUSH2 0x175 JUMP JUMPDEST DUP1 PUSH4 0x1323B066 EQ PUSH2 0x17A JUMPI DUP1 PUSH4 0x15D52A5C EQ PUSH2 0x277 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x186 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x21C PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x19D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x1DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x1EF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x211 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x948 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x262 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x24A JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP4 POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x283 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28C PUSH2 0xA3D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2B4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3DC PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x2E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x2F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x31A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 SWAP5 SWAP4 PUSH1 0x20 DUP2 ADD SWAP4 POP CALLDATALOAD SWAP2 POP POP PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x36A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x37C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x39E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0xA61 SWAP5 POP POP POP POP POP JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x408 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x401 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0xCE1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x46D JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x455 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4AC JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x494 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP9 POP POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3DC PUSH2 0xE86 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28C PUSH2 0xEEF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x505 PUSH2 0xF07 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x525 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3DC PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x53C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x55E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x570 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x592 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 SWAP5 SWAP4 PUSH1 0x20 DUP2 ADD SWAP4 POP CALLDATALOAD SWAP2 POP POP PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x5E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x5F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x616 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0xF10 SWAP5 POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x660 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x669 PUSH2 0x10ED JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 DUP2 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x6A5 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x68D JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3DC PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x6DC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1148 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3DC PUSH2 0x1220 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x70D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28C PUSH2 0x1287 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x722 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28C PUSH2 0x1296 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x737 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x740 PUSH2 0x12A5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x75E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x740 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x775 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x12AB JUMP JUMPDEST PUSH2 0x3DC PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x792 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x7D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x7E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x806 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x12CC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x81D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3DC PUSH2 0x13A9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x832 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x740 PUSH2 0x13BC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x847 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3DC PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x85E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x879 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x88B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x8AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0x13C2 SWAP5 POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8F7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x740 PUSH2 0x1516 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x90C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x740 PUSH2 0x151C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x921 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3DC PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x938 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1522 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x2 SLOAD PUSH1 0x0 EQ ISZERO PUSH2 0x9A4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x9AC PUSH2 0x1593 JUMP JUMPDEST PUSH2 0x9B4 PUSH2 0x2B4C JUMP JUMPDEST PUSH2 0x9BC PUSH2 0x15EB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP10 DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP10 AND PUSH1 0x40 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD DUP10 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP9 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x1F DUP8 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD SWAP1 SWAP2 MSTORE DUP6 DUP2 MSTORE SWAP1 DUP7 SWAP1 DUP7 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP POP PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0xA2D DUP2 PUSH2 0x15EF JUMP JUMPDEST SWAP3 POP SWAP3 POP POP SWAP7 POP SWAP7 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0xA69 PUSH2 0x1616 JUMP JUMPDEST PUSH2 0xA79 PUSH2 0xA74 PUSH2 0x15EB JUMP JUMPDEST PUSH2 0x166D JUMP JUMPDEST PUSH1 0x8 SLOAD DUP1 PUSH2 0xACE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20656D70747920746F6B656E730000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP3 MLOAD DUP1 PUSH2 0xB22 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20656D70747920696E646578657300000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP3 MLOAD DUP2 DUP2 EQ PUSH2 0xB78 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E636F6E73697374656E742061727261797300000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x0 JUMPDEST DUP4 DUP2 EQ PUSH2 0xCD8 JUMPI PUSH1 0x0 DUP8 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xB93 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP DUP3 DUP2 LT ISZERO PUSH2 0xBF2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E76616C696420696E64657800000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP6 DUP2 LT PUSH2 0xC46 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E646578206F75742D6F662D626F756E647300000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP8 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0xC54 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP DUP1 PUSH1 0x0 EQ ISZERO PUSH2 0xCB4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F20737570706C79000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x8 DUP4 DUP2 SLOAD DUP2 LT PUSH2 0xCC2 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SSTORE POP POP PUSH1 0x1 ADD PUSH2 0xB7E JUMP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP2 SWAP1 DUP2 SWAP1 DUP2 SWAP1 PUSH1 0x60 SWAP1 DUP2 SWAP1 DUP4 PUSH2 0xD07 PUSH1 0x4 DUP4 ADD PUSH2 0x1734 JUMP JUMPDEST DUP3 SLOAD SWAP9 POP SWAP1 POP DUP8 PUSH2 0xD5F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7500000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x3 DUP5 ADD SLOAD SWAP2 SWAP9 POP SWAP7 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP5 POP DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0xD95 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xDBF JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP4 POP DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0xDD9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xE03 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xE7A JUMPI PUSH1 0x0 DUP1 PUSH2 0xE21 PUSH1 0x4 DUP7 ADD DUP5 PUSH2 0x1738 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP2 PUSH1 0x0 SHR DUP8 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0xE35 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP DUP1 PUSH1 0x0 SHR DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0xE65 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP POP PUSH1 0x1 ADD PUSH2 0xE09 JUMP JUMPDEST POP POP POP SWAP2 SWAP4 SWAP6 POP SWAP2 SWAP4 SWAP6 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0xEDA JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0xEE5 PUSH2 0xA74 PUSH2 0x15EB JUMP JUMPDEST PUSH2 0xEED PUSH2 0x17C9 JUMP JUMPDEST JUMP JUMPDEST PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0xF1B PUSH2 0xA74 PUSH2 0x15EB JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD DUP2 EQ PUSH2 0xF72 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E636F6E73697374656E742061727261797300000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0xFD3 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7500000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP2 ADD DUP3 PUSH2 0x101E JUMPI PUSH1 0x0 PUSH2 0xFE7 DUP3 PUSH2 0x1734 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1017 JUMPI PUSH1 0x0 PUSH2 0x1000 DUP5 DUP3 PUSH2 0x1738 JUMP JUMPDEST POP SWAP1 POP PUSH2 0x100D DUP5 DUP3 PUSH2 0x1821 JUMP JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0xFEC JUMP JUMPDEST POP POP PUSH2 0x1029 JUMP JUMPDEST PUSH2 0x1029 DUP2 DUP7 DUP7 PUSH2 0x1901 JUMP JUMPDEST DUP6 PUSH32 0xCB3FE5489E0CD43D0F4A33D1E09A4A0463A03D0D38F56165530854E5540DB143 DUP7 DUP7 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1091 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1079 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x10D0 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x10B8 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x4 PUSH1 0x0 ADD DUP1 SLOAD DUP1 PUSH1 0x20 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 DUP1 ISZERO PUSH2 0x113E JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x112A JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x1153 PUSH2 0xA74 PUSH2 0x15EB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x11AE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061796F75743A207A65726F2061646472657373000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 SWAP1 SWAP2 OR SWAP2 DUP3 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD SWAP3 SWAP1 SWAP2 AND DUP3 MSTORE MLOAD PUSH32 0xDD880D24A789958A6398C99C2E54CE31BC10A638CBC42F7DD34285479AE0F855 SWAP2 PUSH1 0x20 SWAP1 DUP3 SWAP1 SUB ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x1274 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x127F PUSH2 0xA74 PUSH2 0x15EB JUMP JUMPDEST PUSH2 0xEED PUSH2 0x1A6A JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 NOT DUP2 JUMP JUMPDEST PUSH1 0x8 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x12BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x1320 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x1328 PUSH2 0x1593 JUMP JUMPDEST PUSH2 0x1330 PUSH2 0x2B4C JUMP JUMPDEST PUSH2 0x1338 PUSH2 0x15EB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP8 DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP8 AND PUSH1 0x40 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD DUP8 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP7 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x1F DUP6 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD SWAP1 SWAP2 MSTORE DUP4 DUP2 MSTORE SWAP1 DUP5 SWAP1 DUP5 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP POP PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0xCD8 DUP2 PUSH2 0x1AA8 JUMP JUMPDEST PUSH2 0x13B4 PUSH2 0xA74 PUSH2 0x15EB JUMP JUMPDEST PUSH2 0xEE5 PUSH2 0x1AD5 JUMP JUMPDEST PUSH1 0x8 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x13CD PUSH2 0xA74 PUSH2 0x15EB JUMP JUMPDEST DUP1 MLOAD DUP1 PUSH2 0x1421 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20656D70747920746F6B656E730000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 EQ PUSH2 0x14D6 JUMPI PUSH1 0x0 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1439 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP DUP1 PUSH1 0x0 EQ ISZERO PUSH2 0x1499 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F20737570706C79000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x8 DUP1 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP4 SSTORE PUSH1 0x0 SWAP3 SWAP1 SWAP3 MSTORE PUSH32 0xF3F7A9FE364FAAB93B216DA50A3214154F22A0A2B415B23A84C8169E8B636EE3 ADD SWAP2 SWAP1 SWAP2 SSTORE ADD PUSH2 0x1424 JUMP JUMPDEST POP PUSH2 0x14E1 PUSH1 0x4 PUSH2 0x1734 JUMP JUMPDEST ISZERO PUSH2 0x1512 JUMPI PUSH1 0x0 PUSH2 0x14F3 PUSH1 0x4 DUP3 PUSH2 0x1B57 JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD DUP4 ADD DUP2 SSTORE PUSH1 0x1 ADD DUP1 SLOAD DUP4 ADD SWAP1 SSTORE POP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x7 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x152D PUSH2 0xA74 PUSH2 0x15EB JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 DUP3 OR DUP1 DUP5 SSTORE PUSH1 0x40 MLOAD SWAP3 SWAP4 SWAP2 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xEED JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061757361626C653A2070617573656400000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x15FC DUP4 PUSH2 0x1BD1 JUMP JUMPDEST PUSH2 0x1605 DUP4 PUSH2 0x1E7B JUMP JUMPDEST POP POP PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xE0 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP2 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND PUSH2 0xEED JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061757361626C653A206E6F7420706175736564000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8DA5CB5B 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 PUSH2 0x16A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x16BA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x16D0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ PUSH2 0x1731 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6F7420746865206F776E657200000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP JUMP JUMPDEST SLOAD SWAP1 JUMP JUMPDEST DUP2 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP4 LT PUSH2 0x1792 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x456E756D4D61703A20696E646578206F7574206F6620626F756E647300000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 PUSH1 0x0 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x17A3 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD SWAP1 POP DUP1 PUSH1 0x0 ADD SLOAD DUP2 PUSH1 0x1 ADD SLOAD SWAP3 POP SWAP3 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH2 0x17D1 PUSH2 0x1616 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA PUSH2 0x1804 PUSH2 0x15EB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0x18F5 JUMPI DUP4 SLOAD PUSH1 0x0 NOT DUP1 DUP4 ADD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x0 SWAP1 DUP8 SWAP1 DUP4 SWAP1 DUP2 LT PUSH2 0x1854 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD SWAP1 POP DUP1 DUP8 PUSH1 0x0 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x1874 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 DUP5 SLOAD PUSH1 0x2 SWAP1 SWAP4 MUL ADD SWAP2 DUP3 SSTORE PUSH1 0x1 SWAP4 DUP5 ADD SLOAD SWAP2 DUP5 ADD SWAP2 SWAP1 SWAP2 SSTORE DUP4 SLOAD DUP3 MSTORE DUP10 DUP4 ADD SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP1 DUP5 ADD SWAP1 SSTORE DUP7 SLOAD DUP8 SWAP1 DUP1 PUSH2 0x18B3 JUMPI INVALID JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 PUSH1 0x2 PUSH1 0x0 NOT SWAP1 SWAP5 ADD SWAP4 DUP5 MUL ADD DUP3 DUP2 SSTORE PUSH1 0x1 SWAP1 DUP2 ADD DUP4 SWAP1 SSTORE SWAP3 SWAP1 SWAP4 SSTORE DUP9 DUP2 MSTORE DUP10 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x40 DUP3 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE SWAP5 POP PUSH2 0x18FB SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SWAP2 POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x19E7 JUMPI PUSH1 0x0 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x191B JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x198D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F206164647265737320746F6B656E0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x199B JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP DUP1 PUSH1 0x0 EQ ISZERO PUSH2 0x19C7 JUMPI PUSH2 0x19C1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x1821 JUMP JUMPDEST POP PUSH2 0x19DD JUMP JUMPDEST PUSH2 0x19DB DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP4 PUSH2 0x1F18 JUMP JUMPDEST POP JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x1904 JUMP JUMPDEST POP PUSH32 0x0 PUSH2 0x1A12 DUP5 PUSH2 0x1734 JUMP JUMPDEST GT ISZERO PUSH2 0x1A65 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20746F6F206D616E7920746F6B656E730000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x1A72 PUSH2 0x1593 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH2 0x1804 PUSH2 0x15EB JUMP JUMPDEST PUSH2 0x1AB1 DUP2 PUSH2 0x1BD1 JUMP JUMPDEST PUSH2 0x1ABA DUP2 PUSH2 0x1E7B JUMP JUMPDEST PUSH2 0x1AC3 DUP2 PUSH2 0x1FB2 JUMP JUMPDEST PUSH2 0x1ACC DUP2 PUSH2 0x2101 JUMP JUMPDEST PUSH2 0x1731 DUP2 PUSH2 0x21B2 JUMP JUMPDEST PUSH1 0x2 SLOAD ISZERO PUSH2 0x1B2A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A20737461727465640000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST TIMESTAMP PUSH1 0x2 SSTORE PUSH32 0x27029695AA5F602A4EE81F4C32DFA86E562F200A17966496F3A7C3F2EC0F9417 PUSH2 0x1804 PUSH2 0x15EB JUMP JUMPDEST DUP2 SLOAD PUSH1 0x0 SWAP1 DUP3 LT PUSH2 0x1BAF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x456E756D5365743A20696E646578206F7574206F6620626F756E647300000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP3 PUSH1 0x0 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x1BBE JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1C30 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F206164647265737320726563697069656E7400000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1C8F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F206164647265737320746F6B656E0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x80 DUP2 ADD MLOAD PUSH2 0x1CE5 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F207175616E7469747920707572636861736500000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0x1D4B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7500000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x80 ADD MLOAD DUP2 PUSH1 0x2 ADD SLOAD LT ISZERO PUSH2 0x1DA8 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A2061626F7665206D6178207175616E746974790000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 SLOAD PUSH1 0x0 NOT EQ PUSH2 0x1E0F JUMPI DUP2 PUSH1 0x80 ADD MLOAD DUP2 PUSH1 0x1 ADD SLOAD LT ISZERO PUSH2 0x1E0F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E73756666696369656E7420737570706C7900000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1E2A PUSH1 0x4 DUP4 ADD DUP3 PUSH2 0x2697 JUMP JUMPDEST PUSH2 0x1A65 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7520746F6B656E00000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0x1EE1 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20756E737570706F7274656420534B550000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP2 ADD PUSH1 0x0 PUSH2 0x1EF1 DUP5 DUP4 PUSH2 0x26AF JUMP JUMPDEST SWAP1 POP PUSH2 0x1F0A DUP5 PUSH1 0x80 ADD MLOAD DUP3 PUSH2 0x271F SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0xC0 SWAP1 SWAP5 ADD SWAP4 SWAP1 SWAP4 MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x1 DUP5 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 PUSH2 0x1F7D JUMPI POP POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE DUP4 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD DUP5 DUP2 MSTORE DUP7 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP10 SSTORE PUSH1 0x0 DUP10 DUP2 MSTORE DUP5 DUP2 KECCAK256 SWAP6 MLOAD PUSH1 0x2 SWAP1 SWAP4 MUL SWAP1 SWAP6 ADD SWAP2 DUP3 SSTORE SWAP2 MLOAD SWAP1 DUP3 ADD SSTORE DUP7 SLOAD DUP7 DUP5 MSTORE DUP2 DUP9 ADD SWAP1 SWAP3 MSTORE SWAP3 SWAP1 SWAP2 KECCAK256 SSTORE PUSH2 0x1FAB JUMP JUMPDEST DUP3 DUP6 PUSH1 0x0 ADD PUSH1 0x1 DUP4 SUB DUP2 SLOAD DUP2 LT PUSH2 0x1F90 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD PUSH1 0x1 ADD DUP2 SWAP1 SSTORE POP PUSH1 0x0 SWAP2 POP POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x20D5 JUMPI DUP1 PUSH1 0xC0 ADD MLOAD CALLVALUE LT ISZERO PUSH2 0x2034 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E73756666696369656E742045544800000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xC0 DUP3 ADD MLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 DUP2 ISZERO PUSH2 0x8FC MUL SWAP2 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x2072 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x0 PUSH2 0x208C DUP3 PUSH1 0xC0 ADD MLOAD CALLVALUE PUSH2 0x2778 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x20CF JUMPI DUP2 MLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 DUP3 ISZERO PUSH2 0x8FC MUL SWAP1 DUP4 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x20CD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP JUMPDEST POP PUSH2 0x1731 JUMP JUMPDEST PUSH2 0x1731 PUSH2 0x20E0 PUSH2 0x15EB JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xC0 DUP5 ADD MLOAD PUSH1 0x40 DUP6 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP4 SWAP3 AND SWAP1 PUSH2 0x27D5 JUMP JUMPDEST PUSH2 0x210A DUP2 PUSH2 0x2863 JUMP JUMPDEST DUP1 PUSH1 0x80 ADD MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x2125 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x214F JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP PUSH2 0x120 DUP3 ADD MSTORE PUSH1 0x7 SLOAD PUSH1 0x0 SWAP1 JUMPDEST DUP3 PUSH1 0x80 ADD MLOAD DUP3 EQ PUSH2 0x21AB JUMPI PUSH1 0x8 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x2175 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD PUSH1 0x0 SHL DUP4 PUSH2 0x120 ADD MLOAD DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2194 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x215D JUMP JUMPDEST PUSH1 0x7 SSTORE POP POP JUMP JUMPDEST DUP1 PUSH1 0x60 ADD MLOAD DUP2 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x29F844483CA6B10B5C0611D039AFC15CE8F6380E905307B381C3A8EE4E90E11E DUP5 PUSH1 0x20 ADD MLOAD DUP6 PUSH1 0x80 ADD MLOAD DUP7 PUSH1 0xA0 ADD MLOAD DUP8 PUSH1 0xC0 ADD MLOAD DUP9 PUSH1 0xE0 ADD MLOAD DUP10 PUSH2 0x100 ADD MLOAD DUP11 PUSH2 0x120 ADD MLOAD PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP5 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2249 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2231 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2279 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2261 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x22A9 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2291 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP4 POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP7 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2320 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2308 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x234D JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP DUP4 DUP2 SUB DUP3 MSTORE DUP5 MLOAD DUP2 MSTORE DUP5 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP7 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2380 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2368 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x23AD JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP8 POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 ISZERO PUSH2 0x1512 JUMPI PUSH4 0x61ECEAE8 PUSH1 0xE0 SHL PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x61ECEAE8 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD DUP7 PUSH1 0x40 ADD MLOAD DUP8 PUSH1 0x60 ADD MLOAD DUP9 PUSH1 0x80 ADD MLOAD DUP10 PUSH1 0xA0 ADD MLOAD DUP11 PUSH1 0xC0 ADD MLOAD DUP12 PUSH1 0xE0 ADD MLOAD DUP13 PUSH2 0x100 ADD MLOAD DUP14 PUSH2 0x120 ADD MLOAD PUSH1 0x40 MLOAD DUP12 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP6 DUP2 SUB DUP6 MSTORE DUP11 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x24E6 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x24CE JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x2513 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP DUP6 DUP2 SUB DUP5 MSTORE DUP9 MLOAD DUP2 MSTORE DUP9 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP1 DUP12 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2548 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2530 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP6 DUP2 SUB DUP4 MSTORE DUP8 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2587 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x256F JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP6 DUP2 SUB DUP3 MSTORE DUP7 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x25C6 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x25AE JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP15 POP POP POP POP POP POP POP POP POP POP POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x25F7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x260B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2621 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND EQ PUSH2 0x1512 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F74696669636174696F6E2072656675736564000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x0 SWAP1 PUSH2 0x26CB SWAP1 DUP4 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x28AE JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x18FB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20756E737570706F72746564207061796D656E7420746F6B656E00 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x272E JUMPI POP PUSH1 0x0 PUSH2 0x18FB JUMP JUMPDEST DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 PUSH2 0x273B JUMPI INVALID JUMPDEST DIV EQ PUSH2 0x1FAB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2BBE PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP3 GT ISZERO PUSH2 0x27CF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x24 DUP4 ADD MSTORE DUP5 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x84 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 OR SWAP1 MSTORE PUSH2 0x285D SWAP1 DUP6 SWAP1 PUSH2 0x293E JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x0 NOT EQ PUSH2 0x1512 JUMPI PUSH1 0x80 DUP3 ADD MLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH2 0x2893 SWAP2 PUSH2 0x2778 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 PUSH2 0x2911 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x456E756D4D61703A206E6F6E6578697374656E74206B65790000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP4 PUSH1 0x0 ADD PUSH1 0x1 DUP3 SUB DUP2 SLOAD DUP2 LT PUSH2 0x2923 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD PUSH1 0x1 ADD SLOAD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 PUSH2 0x2951 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x2B46 JUMP JUMPDEST PUSH2 0x29A2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433230577261707065723A206E6F6E2D636F6E7472616374000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x29FD JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x29C0 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x2A5F JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x2A64 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 ISZERO PUSH2 0x2AE3 JUMPI DUP1 MLOAD ISZERO PUSH2 0x2ADE JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2A8B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x2ADE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433230577261707065723A206F7065726174696F6E206661696C65640000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x2B3F JUMP JUMPDEST DUP1 MLOAD PUSH2 0x2B36 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433230577261707065723A206F7065726174696F6E206661696C65640000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 MLOAD DUP1 DUP3 PUSH1 0x20 ADD REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x140 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP1 NOT AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE POP SWAP1 JUMP INVALID MSTORE8 PUSH2 0x6665 0x4D PUSH2 0x7468 GASPRICE KECCAK256 PUSH14 0x756C7469706C69636174696F6E20 PUSH16 0x766572666C6F77A26469706673582212 KECCAK256 0xE9 0x1E 0xA5 DUP7 0xDD DUP14 PUSH15 0x66FC1DE22016F28AA034BB7C7316A0 0xCF PUSH4 0xCBB029B4 SLOAD 0x25 JUMPI PUSH9 0x64736F6C6343000706 STOP CALLER ","sourceMap":"436:5582:25:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9044:610:32;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9044:610:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9044:610:32;;-1:-1:-1;9044:610:32;-1:-1:-1;9044:610:32;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;530:34:25;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;530:34:25;;;;;;;;;;;;;;3677:948;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3677:948:25;;;;;;;;-1:-1:-1;3677:948:25;;-1:-1:-1;;3677:948:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3677:948:25;;-1:-1:-1;3677:948:25;;-1:-1:-1;;;;;3677:948:25:i;:::-;;10463:1027:32;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10463:1027:32;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10463:1027:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4169:114;;;;;;;;;;;;;:::i;1698:98::-;;;;;;;;;;;;;:::i;482:18:5:-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;5032:943:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5032:943:32;;;;;;;;-1:-1:-1;5032:943:32;;-1:-1:-1;;5032:943:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5032:943:32;;-1:-1:-1;5032:943:32;;-1:-1:-1;;;;;5032:943:32:i;11621:110::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;660:263:8;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;660:263:8;-1:-1:-1;;;;;660:263:8;;:::i;3787:110:32:-;;;;;;;;;;;;;:::i;379:35:8:-;;;;;;;;;;;;;:::i;1114:94:1:-;;;;;;;;;;;;;:::i;1802:69:32:-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;603:26:25;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;603:26:25;;:::i;6962:537:32:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6962:537:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6962:537:32;;-1:-1:-1;6962:537:32;-1:-1:-1;6962:537:32;:::i;3396:118::-;;;;;;;;;;;;;:::i;4745:104:25:-;;;;;;;;;;;;;:::i;1806:633::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1806:633:25;;-1:-1:-1;1806:633:25;;-1:-1:-1;;;;;1806:633:25:i;571:25::-;;;;;;;;;;;;;:::i;1276:85:6:-;;;;;;;;;;;;;:::i;1448:197:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1448:197:1;-1:-1:-1;;;;;1448:197:1;;:::i;9044:610:32:-;9266:18;9286:28;988:10:6;;1002:1;988:15;;980:50;;;;;-1:-1:-1;;;980:50:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;9326:19:32::1;:17;:19::i;:::-;9355:28;;:::i;:::-;9414:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;9393:33:32;;::::1;::::0;;9436:30;;::::1;:18;::::0;;::::1;:30:::0;;;;9476:22;;::::1;:14;::::0;;::::1;:22:::0;;;;9508:12:::1;::::0;::::1;:18:::0;;;9536:17:::1;::::0;::::1;:28:::0;;;9574;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;;;9594:8;;;;;;9574:28;::::1;9594:8:::0;;;;9574:28;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;;;;9574:17:32::1;::::0;::::1;:28:::0;9620:27:::1;9574:8:::0;9620:17:::1;:27::i;:::-;9613:34;;;;;9044:610:::0;;;;;;;;;:::o;530:34:25:-;;;:::o;3677:948::-;3772:16;:14;:16::i;:::-;3798:31;3816:12;:10;:12::i;:::-;3798:17;:31::i;:::-;3865:9;:16;3933:20;3925:51;;;;;-1:-1:-1;;;3925:51:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;4008:14;;4041:15;4033:47;;;;;-1:-1:-1;;;4033:47:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;4111:13;;4143:23;;;4135:61;;;;;-1:-1:-1;;;4135:61:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;4229:10;;4207:19;4250:369;4275:10;4270:1;:15;4250:369;;4306:13;4322:7;4330:1;4322:10;;;;;;;;;;;;;;4306:26;;4364:11;4355:5;:20;;4347:52;;;;;-1:-1:-1;;;4347:52:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;4429:15;4421:5;:23;4413:61;;;;;-1:-1:-1;;;4413:61:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;4489:13;4505:6;4512:1;4505:9;;;;;;;;;;;;;;4489:25;;4537:5;4546:1;4537:10;;4529:40;;;;;-1:-1:-1;;;4529:40:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;4603:5;4584:9;4594:5;4584:16;;;;;;;;;;;;;;;;;:24;-1:-1:-1;;4287:3:25;;4250:369;;;;3677:948;;;;;;:::o;10463:1027:32:-;10573:19;10841:14;;;:9;:14;;;;;10573:19;;;;;;10730:23;;;;10573:19;10882:23;:14;;;:21;:23::i;:::-;10930:19;;;-1:-1:-1;10865:40:32;-1:-1:-1;10967:16:32;10959:51;;;;;-1:-1:-1;;;10959:51:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;11038:23;;;;11096:30;;;;11160:29;;;;11038:23;;-1:-1:-1;11096:30:32;-1:-1:-1;;;;;;11160:29:32;;-1:-1:-1;11223:6:32;11209:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11209:21:32;;11200:30;;11263:6;11249:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11249:21:32;;11240:30;;11285:9;11280:204;11304:6;11300:1;:10;11280:204;;;11332:13;;11364:20;:14;;;11382:1;11364:17;:20::i;:::-;11331:53;;;;11426:5;11418:14;;11398:6;11405:1;11398:9;;;;;;;;;;;;;:35;-1:-1:-1;;;;;11398:35:32;;;-1:-1:-1;;;;;11398:35:32;;;;;11467:5;11459:14;;11447:6;11454:1;11447:9;;;;;;;;;;;;;;;;;:26;-1:-1:-1;;11312:3:32;;11280:204;;;;10463:1027;;;;;;;;;:::o;4169:114::-;988:10:6;;980:50;;;;;-1:-1:-1;;;980:50:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;4225:31:32::1;4243:12;:10;:12::i;4225:31::-;4266:10;:8;:10::i;:::-;4169:114::o:0;1698:98::-;1751:44;1698:98;:::o;482:18:5:-;;;;;;:::o;5032:943:32:-;5176:31;5194:12;:10;:12::i;5176:31::-;5234:13;;5275;;5265:23;;5257:61;;;;;-1:-1:-1;;;5257:61:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;5328:23;5354:14;;;:9;:14;;;;;5386:19;;5378:59;;;;;-1:-1:-1;;;5378:59:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;5482:14;;;5510:11;5506:410;;5537:21;5561:20;:11;:18;:20::i;:::-;5537:44;;5600:9;5595:236;5619:13;5615:1;:17;5595:236;;;5737:13;5756:17;:11;5737:13;5756:14;:17::i;:::-;-1:-1:-1;5736:37:32;-1:-1:-1;5791:25:32;:11;5736:37;5791:18;:25::i;:::-;-1:-1:-1;;5634:3:32;;5595:236;;;;5506:410;;;;5861:44;5877:11;5890:6;5898;5861:15;:44::i;:::-;5948:3;5931:37;5953:6;5961;5931:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5032:943;;;;;;:::o;11621:110::-;11672:21;11712:5;:12;;11705:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11621:110;:::o;660:263:8:-;733:31;751:12;:10;:12::i;733:31::-;-1:-1:-1;;;;;782:27:8;;774:60;;;;;-1:-1:-1;;;774:60:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;844:12;:28;;;;-1:-1:-1;;;;;844:28:8;;;;;;;;;;;887:29;;;903:12;;;;887:29;;;;;;;;;;;;;660:263;:::o;3787:110:32:-;988:10:6;;980:50;;;;;-1:-1:-1;;;980:50:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;3841:31:32::1;3859:12;:10;:12::i;3841:31::-;3882:8;:6;:8::i;379:35:8:-:0;;;-1:-1:-1;;;;;379:35:8;;:::o;1114:94:1:-;1169:7;1195:6;-1:-1:-1;;;;;1195:6:1;1114:94;:::o;1802:69:32:-;-1:-1:-1;;1802:69:32;:::o;603:26:25:-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;603:26:25;:::o;6962:537:32:-;988:10:6;;980:50;;;;;-1:-1:-1;;;980:50:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;7183:19:32::1;:17;:19::i;:::-;7212:28;;:::i;:::-;7271:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;7250:33:32;;::::1;::::0;;7293:30;;::::1;:18;::::0;;::::1;:30:::0;;;;7333:22;;::::1;:14;::::0;;::::1;:22:::0;;;;7365:12:::1;::::0;::::1;:18:::0;;;7393:17:::1;::::0;::::1;:28:::0;;;7431;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;;;7451:8;;;;;;7431:28;::::1;7451:8:::0;;;;7431:28;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;;;;7431:17:32::1;::::0;::::1;:28:::0;7470:22:::1;7431:8:::0;7470:12:::1;:22::i;3396:118::-:0;3438:31;3456:12;:10;:12::i;3438:31::-;3479:8;:6;:8::i;4745:104:25:-;4826:9;:16;4745:104;:::o;1806:633::-;1875:31;1893:12;:10;:12::i;1875:31::-;1936:13;;1968:14;1960:45;;;;;-1:-1:-1;;;1960:45:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;2021:9;2016:182;2041:9;2036:1;:14;2016:182;;2071:13;2087:6;2094:1;2087:9;;;;;;;;;;;;;;2071:25;;2119:5;2128:1;2119:10;;2111:40;;;;;-1:-1:-1;;;2111:40:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;2166:9;:21;;;;;;;;-1:-1:-1;2166:21:25;;;;;;;;;;2052:3;2016:182;;;;2212:14;:5;:12;:14::i;:::-;:19;2208:225;;2247:11;2261;:5;2247:11;2261:8;:11::i;:::-;2286:23;2312:14;;;:9;:14;;;;;2340:32;;;;;;-1:-1:-1;2386:23:25;:36;;;;;;-1:-1:-1;2208:225:25;1806:633;;:::o;571:25::-;;;;:::o;1276:85:6:-;1344:10;;1276:85;:::o;1448:197:1:-;1527:31;1545:12;:10;:12::i;1527:31::-;1568:6;:17;;;;-1:-1:-1;;;;;1568:17:1;;;;;;;;;1600:38;;1568:17;;1621:6;;;1600:38;;1568:6;1600:38;1448:197;:::o;572:96:5:-;634:6;;;;633:7;625:36;;;;;-1:-1:-1;;;625:36:5;;;;;;;;;;;;;;;;;;;;;;;;;;;355:104:7;442:10;355:104;:::o;882:291:30:-;970:18;990:28;1030:21;1042:8;1030:11;:21::i;:::-;1061:18;1070:8;1061;:18::i;:::-;-1:-1:-1;;1103:19:30;;;;1146:20;;;;;1103:19;;882:291::o;674:96:5:-;732:6;;;;724:39;;;;;-1:-1:-1;;;724:39:5;;;;;;;;;;;;;;;;;;;;;;;;;;;1770:136:1;1860:4;-1:-1:-1;;;;;1860:10:1;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1860:12:1;-1:-1:-1;;;;;1849:23:1;;;;;;1841:58;;;;;-1:-1:-1;;;1841:58:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;1770:136;:::o;4367:107:2:-;4449:18;;4367:107::o;4827:264::-;4930:18;;4894:7;;;;4930:26;-1:-1:-1;4922:67:2;;;;;-1:-1:-1;;;4922:67:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;5000:22;5025:3;:11;;5037:5;5025:18;;;;;;;;;;;;;;;;;;5000:43;;5061:5;:9;;;5072:5;:11;;;5053:31;;;;;4827:264;;;;;:::o;1166:131:5:-;1213:16;:14;:16::i;:::-;1239:6;:14;;-1:-1:-1;;1239:14:5;;;1268:22;1277:12;:10;:12::i;:::-;1268:22;;;-1:-1:-1;;;;;1268:22:5;;;;;;;;;;;;;;1166:131::o;2556:1520:2:-;2620:4;2753:16;;;:11;;;:16;;;;;;2784:13;;2780:1290;;3221:18;;-1:-1:-1;;3175:12:2;;;;3221:22;;;;3151:21;;3221:3;;:22;;3512;;;;;;;;;;;;;;;;3483:51;;3655:9;3626:3;:11;;3638:13;3626:26;;;;;;;;;;;;;;;;:38;;:26;;;;;:38;;;;;;;;;;;;;;;3742:13;;3730:26;;:11;;;:26;;;;;3759:17;;;3730:46;;3882:17;;3730:3;;3882:17;;;;;;;;;;;;;;-1:-1:-1;;3882:17:2;;;;;;;;;;;;;;;;;;;;;3974:16;;;:11;;;:16;;;;;;3967:23;;;;3882:17;-1:-1:-1;4005:11:2;;-1:-1:-1;;;;4005:11:2;2780:1290;4054:5;4047:12;;;2556:1520;;;;;:::o;13862:663:32:-;14032:9;14027:403;14051:6;:13;14047:1;:17;14027:403;;;14085:13;14101:6;14108:1;14101:9;;;;;;;;;;;;;;14085:25;;14149:1;-1:-1:-1;;;;;14132:19:32;:5;-1:-1:-1;;;;;14132:19:32;;;14124:56;;;;;-1:-1:-1;;;14124:56:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;14194:13;14210:6;14217:1;14210:9;;;;;;;;;;;;;;14194:25;;14237:5;14246:1;14237:10;14233:187;;;14267:43;:11;-1:-1:-1;;;;;14294:14:32;;14267:18;:43::i;:::-;;14233:187;;;14349:56;:11;-1:-1:-1;;;;;14373:14:32;;14398:5;14349:15;:56::i;:::-;;14233:187;-1:-1:-1;;14066:3:32;;14027:403;;;;14471:21;14447:20;:11;:18;:20::i;:::-;:45;;14439:79;;;;;-1:-1:-1;;;14439:79:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;13862:663;;;:::o;905:129:5:-;950:19;:17;:19::i;:::-;979:6;:13;;-1:-1:-1;;979:13:5;988:4;979:13;;;1007:20;1014:12;:10;:12::i;1275:225:30:-;1354:21;1366:8;1354:11;:21::i;:::-;1385:18;1394:8;1385;:18::i;:::-;1413;1422:8;1413;:18::i;:::-;1441:19;1451:8;1441:9;:19::i;:::-;1470:23;1484:8;1470:13;:23::i;1496:131:6:-;789:10;;:15;781:46;;;;;-1:-1:-1;;;781:46:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;1569:15:::1;1556:10;:28:::0;1599:21:::1;1607:12;:10;:12::i;4301:193:3:-:0;4395:17;;4368:7;;4395:25;-1:-1:-1;4387:66:3;;;;;-1:-1:-1;;;4387:66:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;4470:3;:10;;4481:5;4470:17;;;;;;;;;;;;;;;;4463:24;;4301:193;;;;:::o;15465:852:32:-;15565:18;;;;-1:-1:-1;;;;;15565:32:32;15557:73;;;;;-1:-1:-1;;;15557:73:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;15648:14;;;;-1:-1:-1;;;;;15648:28:32;15640:65;;;;;-1:-1:-1;;;15640:65:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;15723:17;;;;15715:63;;;;;-1:-1:-1;;;15715:63:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;15824:12;;;;15788:23;15814;;;:9;:23;;;;;15855:19;;15847:59;;;;;-1:-1:-1;;;15847:59:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;15958:8;:17;;;15924:7;:30;;;:51;;15916:88;;;;;-1:-1:-1;;;15916:88:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;16018:19;;-1:-1:-1;;16018:39:32;16014:152;;16108:8;:17;;;16081:7;:23;;;:44;;16073:82;;;;;-1:-1:-1;;;16073:82:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;16210:14;;;;-1:-1:-1;;;;;16202:23:32;16244:33;:14;;;16202:23;16244;:33::i;:::-;16236:74;;;;;-1:-1:-1;;;16236:74:32;;;;;;;;;;;;;;;;;;;;;;;;;;;1788:388:26;1913:12;;;;1877:23;1903;;;:9;:23;;;;;1944:19;;1936:58;;;;;-1:-1:-1;;;1936:58:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;2033:14;;;2004:26;2077:28;2088:8;2033:14;2077:10;:28::i;:::-;2057:48;;2137:32;2151:8;:17;;;2137:9;:13;;:32;;;;:::i;:::-;2115:19;;;;:54;;;;-1:-1:-1;;;1788:388:26:o;1678:710:2:-;1784:4;1917:16;;;:11;;;:16;;;;;;1948:13;1944:438;;-1:-1:-1;;2043:34:2;;;;;;;;;;;;;;;;;;2026:52;;;;;;;;:11;:52;;;;;;;;;;;;;;;;;;;;;;;;2232:18;;2213:16;;;:11;;;:16;;;;;;;:37;2264:11;;1944:438;2340:5;2306:3;:11;;2329:1;2318:8;:12;2306:25;;;;;;;;;;;;;;;;;;:31;;:39;;;;2366:5;2359:12;;;1678:710;;;;;;:::o;2637:566:26:-;2725:14;;;;-1:-1:-1;;;;;2725:27:26;1751:44:32;2725:27:26;2721:476;;;2789:8;:19;;;2776:9;:32;;2768:67;;;;;-1:-1:-1;;;2768:67:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;2850:12;;2872:19;;;;2850:42;;-1:-1:-1;;;;;2850:12:26;;;;:42;;;;;2872:19;2850:12;:42;:12;:42;2872:19;2850:12;:42;;;;;;;;;;;;;;;;;;;;;2907:14;2924:34;2938:8;:19;;;2924:9;:13;;:34;;;;:::i;:::-;2907:51;-1:-1:-1;2977:11:26;;2973:85;;3008:18;;:35;;-1:-1:-1;;;;;3008:27:26;;;;:35;;;;;3036:6;;3008:18;:35;:18;:35;3036:6;3008:27;:35;;;;;;;;;;;;;;;;;;;;;2973:85;2721:476;;;;3088:98;3138:12;:10;:12::i;:::-;3152;;3166:19;;;;3102:14;;;;-1:-1:-1;;;;;3088:49:26;;;;:98;3152:12;;3088:49;:98::i;5527:489:25:-;5612:25;5628:8;5612:15;:25::i;:::-;5686:8;:17;;;5672:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5672:32:25;-1:-1:-1;5648:21:25;;;:56;5769:10;;5715:18;;5790:185;5811:8;:17;;;5797:10;:31;5790:185;;5888:9;5898:11;5888:22;;;;;;;;;;;;;;;;5880:31;;5844:8;:21;;;5866:10;5844:33;;;;;;;;;;;;;;;;;:67;5925:12;;;;;5951:13;5790:185;;;5985:10;:24;-1:-1:-1;;5527:489:25:o;17993:1293:32:-;18201:8;:12;;;18173:8;:14;;;-1:-1:-1;;;;;18087:328:32;18109:8;:18;;;-1:-1:-1;;;;;18087:328:32;;18141:8;:18;;;18227:8;:17;;;18258:8;:17;;;18289:8;:19;;;18339:8;:20;;;18361:8;:20;;;18383:8;:21;;;18322:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18087:328;;;;-1:-1:-1;;;;;18087:328:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18087:328:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18468:12;;;;18426:29;18458:23;;;:9;:23;;;;;:45;;;-1:-1:-1;;;;;18458:45:32;18517:35;;18513:767;;19095:82;;;18593:584;;;18624:21;-1:-1:-1;;;;;18593:84:32;;18699:8;:18;;;18739:8;:18;;;18779:8;:14;;;18815:8;:12;;;18849:8;:17;;;18888:8;:17;;;18927:8;:19;;;18968:8;:20;;;19010:8;:20;;;19052:8;:21;;;18593:498;;;;;;;;;;;;;-1:-1:-1;;;;;18593:498:32;;;;;;-1:-1:-1;;;;;18593:498:32;;;;;;-1:-1:-1;;;;;18593:498:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18593:498:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18593:498:32;:584;;;18568:701;;;;;-1:-1:-1;;;18568:701:32;;;;;;;;;;;;;;;;;;;;;;;;;;;4155:122:2;4226:4;4249:16;;;:11;;;;;:16;;;;;;:21;;;4155:122::o;3773:278:26:-;3958:14;;;;3882:17;;3931:44;;:6;;-1:-1:-1;;;;;3950:23:26;3931:10;:44::i;:::-;3923:53;-1:-1:-1;3994:14:26;3986:58;;;;;-1:-1:-1;;;3986:58:26;;;;;;;;;;;;;;;;;;;;;;;;;;;3538:215:11;3596:7;3619:6;3615:20;;-1:-1:-1;3634:1:11;3627:8;;3615:20;3657:5;;;3661:1;3657;:5;:1;3680:5;;;;;:10;3672:56;;;;-1:-1:-1;;;3672:56:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3136:155;3194:7;3226:1;3221;:6;;3213:49;;;;;-1:-1:-1;;;3213:49:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3279:5:11;;;3136:155::o;645:259:9:-;828:68;;;-1:-1:-1;;;;;828:68:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;851:27;828:68;;;793:104;;821:5;;793:27;:104::i;:::-;645:259;;;;:::o;16954:308:32:-;17075:12;;;;17039:23;17065;;;:9;:23;;;;;17102:19;;-1:-1:-1;;17102:39:32;17098:158;;17227:17;;;;17199:23;;;;:46;;:27;:46::i;:::-;17167:12;;;;17157:23;;;;:9;:23;;;;;:39;;:88;16954:308;;:::o;5243:298:2:-;5309:7;5347:16;;;:11;;;:16;;;;;;5381:13;5373:50;;;;;-1:-1:-1;;;5373:50:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;5476:3;:11;;5499:1;5488:8;:12;5476:25;;;;;;;;;;;;;;;;;;:31;;;5469:38;;;5243:298;;;;:::o;1147:870:9:-;1272:5;1296:19;-1:-1:-1;;;;;1296:17:9;;;:19::i;:::-;1288:58;;;;;-1:-1:-1;;;1288:58:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;1417:12;1431:17;1452:6;-1:-1:-1;;;;;1452:11:9;1464:8;1452:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1416:57;;;;1487:7;1483:528;;;1514:11;;:16;1510:122;;1569:4;1558:24;;;;;;;;;;;;;;;-1:-1:-1;1558:24:9;1550:67;;;;;-1:-1:-1;;;1550:67:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;1483:528;;;1720:11;;1716:95;;1756:40;;;-1:-1:-1;;;1756:40:9;;;;;;;;;;;;;;;;;;;;;;;;;;;1716:95;1938:4;1932:11;1982:4;1975;1971:2;1967:13;1960:27;1902:99;1147:870;;;;;:::o;913:377:10:-;1229:20;1275:8;;;913:377::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o"},"methodIdentifiers":{"SUPPLY_UNLIMITED()":"9e049545","TOKEN_ETH()":"5c4fafc7","addSupply(uint256[])":"cf3ae77b","estimatePurchase(address,address,bytes32,uint256,bytes)":"1323b066","getSkuInfo(bytes32)":"2a8a45bc","getSkus()":"61bd3851","getTotalSupply()":"c4e41b22","inventory()":"15d52a5c","owner()":"8da5cb5b","pause()":"8456cb59","paused()":"5c975abb","payoutWallet()":"8488bb4e","purchaseFor(address,address,bytes32,uint256,bytes)":"a963b257","setPayoutWallet(address)":"6b8f9c43","setSupply(uint256[],uint256[])":"23f927c9","start()":"be9a6555","startedAt()":"f21f537d","tokenIndex()":"d55f9273","tokenList(uint256)":"9ead7222","transferOwnership(address)":"f2fde38b","unpause()":"3f4ba83a","updateSkuPricing(bytes32,address[],uint256[])":"5e6e9f70"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"inventory_\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"payoutWallet\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokensPerSkuCapacity\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32[]\",\"name\":\"names\",\"type\":\"bytes32[]\"},{\"indexed\":false,\"internalType\":\"bytes32[]\",\"name\":\"values\",\"type\":\"bytes32[]\"}],\"name\":\"MagicValues\",\"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\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"payoutWallet_\",\"type\":\"address\"}],\"name\":\"PayoutWalletSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"purchaser\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalPrice\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extData\",\"type\":\"bytes\"}],\"name\":\"Purchase\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"maxQuantityPerPurchase\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"notificationsReceiver\",\"type\":\"address\"}],\"name\":\"SkuCreation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"prices\",\"type\":\"uint256[]\"}],\"name\":\"SkuPricingUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Started\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"SUPPLY_UNLIMITED\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TOKEN_ETH\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"tokens\",\"type\":\"uint256[]\"}],\"name\":\"addSupply\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"estimatePurchase\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalPrice\",\"type\":\"uint256\"},{\"internalType\":\"bytes32[]\",\"name\":\"pricingData\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"}],\"name\":\"getSkuInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"remainingSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxQuantityPerPurchase\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"notificationsReceiver\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"prices\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSkus\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"skus\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inventory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"payoutWallet\",\"outputs\":[{\"internalType\":\"address payable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"purchaseFor\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"payoutWallet_\",\"type\":\"address\"}],\"name\":\"setPayoutWallet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"indexes\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokens\",\"type\":\"uint256[]\"}],\"name\":\"setSupply\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"start\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"tokenList\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"prices\",\"type\":\"uint256[]\"}],\"name\":\"updateSkuPricing\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"addSupply(uint256[])\":{\"details\":\"Reverts if called by any other than the contract owner.Reverts if `tokens` is empty.Reverts if any of `tokens` are zero.The list of tokens specified (in sequence) will be appended to the end of the ordered  sale supply list.\",\"params\":{\"tokens\":\"The list of tokens to add.\"}},\"constructor\":{\"details\":\"Reverts if `inventory_` is the zero address.Emits the `MagicValues` event.Emits the `Paused` event.\",\"params\":{\"inventory_\":\"The inventory contract from which the NFT sale supply is attributed from.\",\"payoutWallet\":\"The payout wallet.\",\"tokensPerSkuCapacity\":\"the cap for the number of tokens managed per SKU.\"}},\"estimatePurchase(address,address,bytes32,uint256,bytes)\":{\"details\":\"This function MUST compute the same price as `purchaseFor` would in identical conditions (same arguments, same point in time).If an implementer contract uses the `pricingData` field, it SHOULD document how to interpret the values.Reverts if the sale has not started.Reverts if the sale is paused.Reverts if `recipient` is the zero address.Reverts if `token` is the zero address.Reverts if `quantity` is zero.Reverts if `quantity` is greater than the maximum purchase quantity.Reverts if `quantity` is greater than the remaining supply.Reverts if `sku` does not exist.Reverts if `sku` exists but does not have a price set for `token`.\",\"params\":{\"quantity\":\"The quantity used to calculate the total price amount.\",\"recipient\":\"The recipient of the purchase used to calculate the total price amount.\",\"sku\":\"The identifier of the SKU used to calculate the total price amount.\",\"token\":\"The payment token used to calculate the total price amount.\",\"userData\":\"Optional extra user input data.\"},\"returns\":{\"pricingData\":\"Implementation-specific extra pricing data, such as details about discounts applied.  If not empty, the implementer MUST document how to interepret the values.\",\"totalPrice\":\"The computed total price.\"}},\"getSkuInfo(bytes32)\":{\"details\":\"WARNING: it is the responsibility of the implementer to ensure that the number of payment tokens is bounded, so that this function does not run out of gas.Reverts if `sku` does not exist.\",\"params\":{\"sku\":\"The SKU identifier.\"},\"returns\":{\"maxQuantityPerPurchase\":\"The maximum allowed quantity for a single purchase.\",\"notificationsReceiver\":\"The address of a contract on which to call the `onPurchaseNotificationReceived` function.\",\"prices\":\"The list of associated prices for each of the `tokens`.\",\"remainingSupply\":\"The remaining supply for sale.\",\"tokens\":\"The list of supported payment tokens.\",\"totalSupply\":\"The initial total supply for sale.\"}},\"getSkus()\":{\"returns\":{\"skus\":\"the list of created SKU identifiers.\"}},\"getTotalSupply()\":{\"returns\":{\"_0\":\"The amount of total sale supply.\"}},\"pause()\":{\"details\":\"Emits the `Paused` event.Reverts if called by any other than the contract owner.Reverts if the contract has not been started yet.Reverts if the contract is already paused.\"},\"purchaseFor(address,address,bytes32,uint256,bytes)\":{\"details\":\"Reverts if the sale has not started.Reverts if the sale is paused.Reverts if `recipient` is the zero address.Reverts if `token` is the zero address.Reverts if `quantity` is zero.Reverts if `quantity` is greater than the maximum purchase quantity.Reverts if `quantity` is greater than the remaining supply.Reverts if `sku` does not exist.Reverts if `sku` exists but does not have a price set for `token`.Emits the Purchase event.\",\"params\":{\"quantity\":\"The quantity to purchase.\",\"recipient\":\"The recipient of the purchase.\",\"sku\":\"The identifier of the SKU to purchase.\",\"token\":\"The token to use as the payment currency.\",\"userData\":\"Optional extra user input data.\"}},\"setSupply(uint256[],uint256[])\":{\"details\":\"Reverts if called by any other than the contract owner.Reverts if called when the contract is not paused.Reverts if the sale supply is empty.Reverts if the lengths of `indexes` and `tokens` do not match.Reverts if `indexes` is zero length.Reverts if any of `indexes` are less than `tokenIndex`.Reverts if any of `indexes` are out-of-bounds.Reverts it `tokens` is zero length.Reverts if any of `tokens` are zero.Does not allow resizing of the sale supply, only the re-ordering or replacment of  existing tokens.Because the elements of `indexes` and `tokens` are processed in sequence, duplicate  entries in either array are permitted, which allows for ordered operations to be performed  on the ordered sale supply list in the same transaction.\",\"params\":{\"indexes\":\"The list of indexes in the ordered sale supply list whose element values  will be set.\",\"tokens\":\"The new tokens to set in the ordered sale supply list at the corresponding  positions provided by `indexes`.\"}},\"start()\":{\"details\":\"Emits the `Started` event.Emits the `Unpaused` event.Reverts if called by any other than the contract owner.Reverts if the contract has already been started.Reverts if the contract is not paused.\"},\"startedAt()\":{\"returns\":{\"_0\":\"The timestamp when the contract entered the started state.\"}},\"transferOwnership(address)\":{\"details\":\"Reverts if the sender is not the current contract owner.\",\"params\":{\"newOwner\":\"the address of the new owner. Use the zero address to renounce the ownership.\"}},\"unpause()\":{\"details\":\"Emits the `Unpaused` event.Reverts if called by any other than the contract owner.Reverts if the contract has not been started yet.Reverts if the contract is not paused.\"},\"updateSkuPricing(bytes32,address[],uint256[])\":{\"details\":\"Reverts if called by any other than the contract owner.Reverts if `tokens` and `prices` have different lengths.Reverts if `sku` does not exist.Reverts if one of the `tokens` is the zero address.Reverts if the update results in too many tokens for the SKU.Emits the `SkuPricingUpdate` event.\",\"params\":{\"prices\":\"The list of prices to apply for each payment token.  Zero price values are used to disable a payment token.\",\"sku\":\"The identifier of the SKU.\",\"tokens\":\"The list of payment tokens to update.  If empty, disable all the existing payment tokens.\"}}},\"title\":\"FixedOrderInventorySale A FixedPricesSale contract that handles the purchase of NFTs of an inventory contract to a receipient. The provisioning of the NFTs occurs in a sequential order defined by a token list. Only a single SKU is supported.\",\"version\":1},\"userdoc\":{\"events\":{\"MagicValues(bytes32[],bytes32[])\":{\"notice\":\"Event emitted to notify about the magic values necessary for interfacing with this contract.\"},\"OwnershipTransferred(address,address)\":{\"notice\":\"Event emited when ownership of a contract changes.\"},\"Purchase(address,address,address,bytes32,uint256,bytes,uint256,bytes)\":{\"notice\":\"Event emitted to notify about a purchase.\"},\"SkuCreation(bytes32,uint256,uint256,address)\":{\"notice\":\"Event emitted to notify about the creation of a SKU.\"},\"SkuPricingUpdate(bytes32,address[],uint256[])\":{\"notice\":\"Event emitted to notify about a change in the pricing of a SKU.\"}},\"kind\":\"user\",\"methods\":{\"SUPPLY_UNLIMITED()\":{\"notice\":\"Returns the magic value used to represent an infinite, never-decreasing SKU's supply.\"},\"TOKEN_ETH()\":{\"notice\":\"Returns the magic value used to represent the ETH payment token.\"},\"addSupply(uint256[])\":{\"notice\":\"Adds additional tokens to the sale supply.\"},\"constructor\":{\"notice\":\"Constructor.\"},\"estimatePurchase(address,address,bytes32,uint256,bytes)\":{\"notice\":\"Estimates the computed final total amount to pay for a purchase, including any potential discount.\"},\"getSkuInfo(bytes32)\":{\"notice\":\"Returns the information relative to a SKU.\"},\"getSkus()\":{\"notice\":\"Returns the list of created SKU identifiers.\"},\"getTotalSupply()\":{\"notice\":\"Retrieves the amount of total sale supply.\"},\"owner()\":{\"notice\":\"Gets the address of the current contract owner.\"},\"pause()\":{\"notice\":\"Pauses the contract.\"},\"purchaseFor(address,address,bytes32,uint256,bytes)\":{\"notice\":\"Performs a purchase.\"},\"setSupply(uint256[],uint256[])\":{\"notice\":\"Sets the tokens of the ordered sale supply list.\"},\"start()\":{\"notice\":\"Actvates, or 'starts', the contract.\"},\"startedAt()\":{\"notice\":\"Returns the timestamp when the contract entered the started state.\"},\"transferOwnership(address)\":{\"notice\":\"See {IERC173-transferOwnership(address)}\"},\"unpause()\":{\"notice\":\"Resumes the contract.\"},\"updateSkuPricing(bytes32,address[],uint256[])\":{\"notice\":\"Sets the token prices for the specified product SKU.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/sale/FixedOrderInventorySale.sol\":\"FixedOrderInventorySale\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":2000},\"remappings\":[]},\"sources\":{\"@animoca/ethereum-contracts-core-1.1.2/contracts/access/IERC173.sol\":{\"keccak256\":\"0xeb8a2c766577e782ad66ce8591a8d206b0f37b657754cc7a43beeb2d9343873b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3b404032cb4e21bae47b5e9af1290e41117040b10f69e3b2f93522b97e329b59\",\"dweb:/ipfs/QmRJHYkkvWcXGuFJdbqV18yh9QUk5g4zETrrxD2HnU3iRw\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/access/Ownable.sol\":{\"keccak256\":\"0xbfd1129669bb7c154ee84b3aa1484e421ca68cb725c1039a897629631fd8b096\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://edc634aeae7272726745b1cbbf116dfdde51833b71a143e94fe7de89e9b14566\",\"dweb:/ipfs/QmXtXckxdFM3VeLvsjMWhqt44WAf7XKVYKt9bUT7pyWbjH\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/algo/EnumMap.sol\":{\"keccak256\":\"0x12716c299c0965f4f87c2792cda2bd6029ba629c1172cdfef08d95cb2d7c283f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8d17c9bcb9bb0b9f399f6366f85b4db981df6e319f90b1b84910d6c44a79d032\",\"dweb:/ipfs/QmcqU3Gj8BP88yRV571GyCcW2UAjxq2xiqRofXFKYzkRXT\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/algo/EnumSet.sol\":{\"keccak256\":\"0x0aaea4634a7c64ef61b1ee8380912084427b45b6b4fc254b76d4b78e39f92d35\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://356a344f770d238dd864e8530d2ee05e350f269346cdf02432bc767e90520ce1\",\"dweb:/ipfs/QmfQfasYUY69X4wnzizPqT8P24YZTAPQGgFQErsSzV5sva\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/lifecycle/Pausable.sol\":{\"keccak256\":\"0xaa32d2e66a8edb68c64ffab1db69925248cf3f774c40b062e1e8ff2f4d5eebed\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://37451b151d862be6413ee1d18e3500a9100128f09926a2260d0ea058c3148d8a\",\"dweb:/ipfs/QmNLsaNioeA4LK8fVpqvSkQrCob1DkENcqQUurqDQbQK3G\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/lifecycle/Startable.sol\":{\"keccak256\":\"0x87e273577d4716cbbb325f03ec91207e1022bb7f56cdcda56593c603d2b4592f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d305d7c885971e1b82a363b4c9237c4201390610621a67605b89694ca9680e35\",\"dweb:/ipfs/QmWZX1cEfsfQSoEjBgBaBn3rKJxfyaJMpJyofpM9LG4tEp\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/metatx/ManagedIdentity.sol\":{\"keccak256\":\"0xe544b34375f19f9d1ad6e309f2fc56849263cc3c3c77009f6b38782f7dea9971\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3eb04bbf1c13ca82971c1cb2fdd96a23e2dfaa5df6a7d3b7e773dd3a760cf4e4\",\"dweb:/ipfs/QmXArzbKQgsMebfYVSQtaCLAs3rp3FYp6MKjSQnZoGDnjf\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/payment/PayoutWallet.sol\":{\"keccak256\":\"0x45ef7f68177cb61463f0ac759782f490821917fac3a71a18263c38193a9c6229\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://67839b4cc5897d723099ebfd8e0593e809b02cf422056efc1497f88dd7abb415\",\"dweb:/ipfs/QmYFRXvggoT8RzWB7SSJmfaBY3xkoVYNaGotTLBxjXqqxx\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/utils/ERC20Wrapper.sol\":{\"keccak256\":\"0x57922168ce32d2260022c0c7075137940e7d3cf0bb0d2213e62194050fbcf392\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b2dbba2defa32aa9edb54797f9b3f4ec1c1e5f71193deb99289136fa2f02ad79\",\"dweb:/ipfs/QmbUbzdwyWwjw3VW1o5oBKyuG9cFN7n8j55P8MDAg3sCuK\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/utils/types/AddressIsContract.sol\":{\"keccak256\":\"0x08373f750eedc1226b22b8ab1e156b0689c463590fa7dc40e99329b2da7b5d47\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fac8cdd7be4a83b47b18c8a48c1b1779a2590118049734665a6de91e77f27d35\",\"dweb:/ipfs/QmcAobvMpD5TisPTQSihPhywmVbPv1jDhffJCaZptM7YLv\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0xcc78a17dd88fa5a2edc60c8489e2f405c0913b377216a5b26b35656b2d0dab52\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://526dc85e1f9b9b45830e202568d267d93dde7a4fcccf4ad7798dadcd92304d3c\",\"dweb:/ipfs/QmaoXMB972J3cSDLtBq3xBo4jLwqD2uzXTwujtSPqkYVhR\"]},\"contracts/sale/FixedOrderInventorySale.sol\":{\"keccak256\":\"0x01c4c65bb0baa3349682a5d6f875afe52d9323d56e43f7a11fd0e0a643257232\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d5b03ec27fb816bea622224440bea5aaee9a9c9180cc4c088906587374b34c07\",\"dweb:/ipfs/QmYzcUED3rvjkiBXeUQE9GMYkr6eW7fXednJKrRWCaQfy8\"]},\"contracts/sale/FixedPricesSale.sol\":{\"keccak256\":\"0xad902ccee0e2a42eea07b4c1e011202096daff92b43158a1569d139caf93b3f0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a702cc102db63b18e0581da5d6c01ee9320cec4b690c3117b4f77316fce45185\",\"dweb:/ipfs/QmWL7kh3kBSxDYjVoq9gN79UpKLrRBgJCHqquyaCE8UWhe\"]},\"contracts/sale/abstract/PurchaseLifeCycles.sol\":{\"keccak256\":\"0xaa18c1de5628dbd5ff281f06354b0156cb8bd24a6f5b490a787931c374266f6a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2e0731a0100fc1bda747176f169cacc5d61d89df1c78884d8843a834d58f7dcd\",\"dweb:/ipfs/QmZRDAxcvQ9QySqnmQLVM1i797NCqSJrJjKUneEmTufXBQ\"]},\"contracts/sale/abstract/Sale.sol\":{\"keccak256\":\"0x32dd01f3ca07c26e834f5784b4f2434c9cf309e3e30b2421a26da16ccf5d0e26\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://009418ea08f714b3f536d09e04d65ec39d3a4e9ba33e554ac8a26036cff8335b\",\"dweb:/ipfs/QmQvMXpCaaAwtHE4qxXYn2rxPgPzqzJM6aGuyz4nut5CH5\"]},\"contracts/sale/interfaces/IPurchaseNotificationsReceiver.sol\":{\"keccak256\":\"0xa85dcec80f528757a52dd66f88ae14845477e3ec733cb4d22af6db71d19e90f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://36e14e08666d5fd2af5b78848a84a11c666c65c94ca46f88e896c041da1dc1c7\",\"dweb:/ipfs/QmYiHM2DBVuX4adJfJMSvdrdfmDooHxhwGtmhNP7k2DY9n\"]},\"contracts/sale/interfaces/ISale.sol\":{\"keccak256\":\"0x0d731f242662465b2aa3ea9fe3581d0e77e3f61601390f68e4c9c75fc2103f5f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2a04d527397a7f75bd1d701fa7af263cb0799ef4d2f32dc44bb6c9598cee3625\",\"dweb:/ipfs/QmRnsakvvkU1yJyviEM8eytdCTUvjqsw1aqzdntycoG2aV\"]}},\"version\":1}"}},"contracts/sale/FixedPricesSale.sol":{"FixedPricesSale":{"abi":[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32[]","name":"names","type":"bytes32[]"},{"indexed":false,"internalType":"bytes32[]","name":"values","type":"bytes32[]"}],"name":"MagicValues","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":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"payoutWallet_","type":"address"}],"name":"PayoutWalletSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"purchaser","type":"address"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"bytes32","name":"sku","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"quantity","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"userData","type":"bytes"},{"indexed":false,"internalType":"uint256","name":"totalPrice","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"extData","type":"bytes"}],"name":"Purchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"sku","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxQuantityPerPurchase","type":"uint256"},{"indexed":false,"internalType":"address","name":"notificationsReceiver","type":"address"}],"name":"SkuCreation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"sku","type":"bytes32"},{"indexed":false,"internalType":"address[]","name":"tokens","type":"address[]"},{"indexed":false,"internalType":"uint256[]","name":"prices","type":"uint256[]"}],"name":"SkuPricingUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Started","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"SUPPLY_UNLIMITED","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOKEN_ETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"estimatePurchase","outputs":[{"internalType":"uint256","name":"totalPrice","type":"uint256"},{"internalType":"bytes32[]","name":"pricingData","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"sku","type":"bytes32"}],"name":"getSkuInfo","outputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"uint256","name":"remainingSupply","type":"uint256"},{"internalType":"uint256","name":"maxQuantityPerPurchase","type":"uint256"},{"internalType":"address","name":"notificationsReceiver","type":"address"},{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"prices","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSkus","outputs":[{"internalType":"bytes32[]","name":"skus","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payoutWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"purchaseFor","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address payable","name":"payoutWallet_","type":"address"}],"name":"setPayoutWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"start","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"prices","type":"uint256[]"}],"name":"updateSkuPricing","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"SUPPLY_UNLIMITED()":"9e049545","TOKEN_ETH()":"5c4fafc7","estimatePurchase(address,address,bytes32,uint256,bytes)":"1323b066","getSkuInfo(bytes32)":"2a8a45bc","getSkus()":"61bd3851","owner()":"8da5cb5b","pause()":"8456cb59","paused()":"5c975abb","payoutWallet()":"8488bb4e","purchaseFor(address,address,bytes32,uint256,bytes)":"a963b257","setPayoutWallet(address)":"6b8f9c43","start()":"be9a6555","startedAt()":"f21f537d","transferOwnership(address)":"f2fde38b","unpause()":"3f4ba83a","updateSkuPricing(bytes32,address[],uint256[])":"5e6e9f70"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32[]\",\"name\":\"names\",\"type\":\"bytes32[]\"},{\"indexed\":false,\"internalType\":\"bytes32[]\",\"name\":\"values\",\"type\":\"bytes32[]\"}],\"name\":\"MagicValues\",\"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\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"payoutWallet_\",\"type\":\"address\"}],\"name\":\"PayoutWalletSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"purchaser\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalPrice\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extData\",\"type\":\"bytes\"}],\"name\":\"Purchase\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"maxQuantityPerPurchase\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"notificationsReceiver\",\"type\":\"address\"}],\"name\":\"SkuCreation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"prices\",\"type\":\"uint256[]\"}],\"name\":\"SkuPricingUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Started\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"SUPPLY_UNLIMITED\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TOKEN_ETH\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"estimatePurchase\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalPrice\",\"type\":\"uint256\"},{\"internalType\":\"bytes32[]\",\"name\":\"pricingData\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"}],\"name\":\"getSkuInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"remainingSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxQuantityPerPurchase\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"notificationsReceiver\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"prices\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSkus\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"skus\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"payoutWallet\",\"outputs\":[{\"internalType\":\"address payable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"purchaseFor\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"payoutWallet_\",\"type\":\"address\"}],\"name\":\"setPayoutWallet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"start\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"prices\",\"type\":\"uint256[]\"}],\"name\":\"updateSkuPricing\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Emits the `MagicValues` event.Emits the `Paused` event.\",\"params\":{\"payoutWallet_\":\"the payout wallet.\",\"skusCapacity\":\"the cap for the number of managed SKUs.\",\"tokensPerSkuCapacity\":\"the cap for the number of tokens managed per SKU.\"}},\"estimatePurchase(address,address,bytes32,uint256,bytes)\":{\"details\":\"This function MUST compute the same price as `purchaseFor` would in identical conditions (same arguments, same point in time).If an implementer contract uses the `pricingData` field, it SHOULD document how to interpret the values.Reverts if the sale has not started.Reverts if the sale is paused.Reverts if `recipient` is the zero address.Reverts if `token` is the zero address.Reverts if `quantity` is zero.Reverts if `quantity` is greater than the maximum purchase quantity.Reverts if `quantity` is greater than the remaining supply.Reverts if `sku` does not exist.Reverts if `sku` exists but does not have a price set for `token`.\",\"params\":{\"quantity\":\"The quantity used to calculate the total price amount.\",\"recipient\":\"The recipient of the purchase used to calculate the total price amount.\",\"sku\":\"The identifier of the SKU used to calculate the total price amount.\",\"token\":\"The payment token used to calculate the total price amount.\",\"userData\":\"Optional extra user input data.\"},\"returns\":{\"pricingData\":\"Implementation-specific extra pricing data, such as details about discounts applied.  If not empty, the implementer MUST document how to interepret the values.\",\"totalPrice\":\"The computed total price.\"}},\"getSkuInfo(bytes32)\":{\"details\":\"WARNING: it is the responsibility of the implementer to ensure that the number of payment tokens is bounded, so that this function does not run out of gas.Reverts if `sku` does not exist.\",\"params\":{\"sku\":\"The SKU identifier.\"},\"returns\":{\"maxQuantityPerPurchase\":\"The maximum allowed quantity for a single purchase.\",\"notificationsReceiver\":\"The address of a contract on which to call the `onPurchaseNotificationReceived` function.\",\"prices\":\"The list of associated prices for each of the `tokens`.\",\"remainingSupply\":\"The remaining supply for sale.\",\"tokens\":\"The list of supported payment tokens.\",\"totalSupply\":\"The initial total supply for sale.\"}},\"getSkus()\":{\"returns\":{\"skus\":\"the list of created SKU identifiers.\"}},\"pause()\":{\"details\":\"Emits the `Paused` event.Reverts if called by any other than the contract owner.Reverts if the contract has not been started yet.Reverts if the contract is already paused.\"},\"purchaseFor(address,address,bytes32,uint256,bytes)\":{\"details\":\"Reverts if the sale has not started.Reverts if the sale is paused.Reverts if `recipient` is the zero address.Reverts if `token` is the zero address.Reverts if `quantity` is zero.Reverts if `quantity` is greater than the maximum purchase quantity.Reverts if `quantity` is greater than the remaining supply.Reverts if `sku` does not exist.Reverts if `sku` exists but does not have a price set for `token`.Emits the Purchase event.\",\"params\":{\"quantity\":\"The quantity to purchase.\",\"recipient\":\"The recipient of the purchase.\",\"sku\":\"The identifier of the SKU to purchase.\",\"token\":\"The token to use as the payment currency.\",\"userData\":\"Optional extra user input data.\"}},\"start()\":{\"details\":\"Emits the `Started` event.Emits the `Unpaused` event.Reverts if called by any other than the contract owner.Reverts if the contract has already been started.Reverts if the contract is not paused.\"},\"startedAt()\":{\"returns\":{\"_0\":\"The timestamp when the contract entered the started state.\"}},\"transferOwnership(address)\":{\"details\":\"Reverts if the sender is not the current contract owner.\",\"params\":{\"newOwner\":\"the address of the new owner. Use the zero address to renounce the ownership.\"}},\"unpause()\":{\"details\":\"Emits the `Unpaused` event.Reverts if called by any other than the contract owner.Reverts if the contract has not been started yet.Reverts if the contract is not paused.\"},\"updateSkuPricing(bytes32,address[],uint256[])\":{\"details\":\"Reverts if called by any other than the contract owner.Reverts if `tokens` and `prices` have different lengths.Reverts if `sku` does not exist.Reverts if one of the `tokens` is the zero address.Reverts if the update results in too many tokens for the SKU.Emits the `SkuPricingUpdate` event.\",\"params\":{\"prices\":\"The list of prices to apply for each payment token.  Zero price values are used to disable a payment token.\",\"sku\":\"The identifier of the SKU.\",\"tokens\":\"The list of payment tokens to update.  If empty, disable all the existing payment tokens.\"}}},\"title\":\"FixedPricesSale An Sale which implements a fixed prices strategy.  The final implementer is responsible for implementing any additional pricing and/or delivery logic.\",\"version\":1},\"userdoc\":{\"events\":{\"MagicValues(bytes32[],bytes32[])\":{\"notice\":\"Event emitted to notify about the magic values necessary for interfacing with this contract.\"},\"OwnershipTransferred(address,address)\":{\"notice\":\"Event emited when ownership of a contract changes.\"},\"Purchase(address,address,address,bytes32,uint256,bytes,uint256,bytes)\":{\"notice\":\"Event emitted to notify about a purchase.\"},\"SkuCreation(bytes32,uint256,uint256,address)\":{\"notice\":\"Event emitted to notify about the creation of a SKU.\"},\"SkuPricingUpdate(bytes32,address[],uint256[])\":{\"notice\":\"Event emitted to notify about a change in the pricing of a SKU.\"}},\"kind\":\"user\",\"methods\":{\"SUPPLY_UNLIMITED()\":{\"notice\":\"Returns the magic value used to represent an infinite, never-decreasing SKU's supply.\"},\"TOKEN_ETH()\":{\"notice\":\"Returns the magic value used to represent the ETH payment token.\"},\"constructor\":{\"notice\":\"Constructor.\"},\"estimatePurchase(address,address,bytes32,uint256,bytes)\":{\"notice\":\"Estimates the computed final total amount to pay for a purchase, including any potential discount.\"},\"getSkuInfo(bytes32)\":{\"notice\":\"Returns the information relative to a SKU.\"},\"getSkus()\":{\"notice\":\"Returns the list of created SKU identifiers.\"},\"owner()\":{\"notice\":\"Gets the address of the current contract owner.\"},\"pause()\":{\"notice\":\"Pauses the contract.\"},\"purchaseFor(address,address,bytes32,uint256,bytes)\":{\"notice\":\"Performs a purchase.\"},\"start()\":{\"notice\":\"Actvates, or 'starts', the contract.\"},\"startedAt()\":{\"notice\":\"Returns the timestamp when the contract entered the started state.\"},\"transferOwnership(address)\":{\"notice\":\"See {IERC173-transferOwnership(address)}\"},\"unpause()\":{\"notice\":\"Resumes the contract.\"},\"updateSkuPricing(bytes32,address[],uint256[])\":{\"notice\":\"Sets the token prices for the specified product SKU.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/sale/FixedPricesSale.sol\":\"FixedPricesSale\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":2000},\"remappings\":[]},\"sources\":{\"@animoca/ethereum-contracts-core-1.1.2/contracts/access/IERC173.sol\":{\"keccak256\":\"0xeb8a2c766577e782ad66ce8591a8d206b0f37b657754cc7a43beeb2d9343873b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3b404032cb4e21bae47b5e9af1290e41117040b10f69e3b2f93522b97e329b59\",\"dweb:/ipfs/QmRJHYkkvWcXGuFJdbqV18yh9QUk5g4zETrrxD2HnU3iRw\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/access/Ownable.sol\":{\"keccak256\":\"0xbfd1129669bb7c154ee84b3aa1484e421ca68cb725c1039a897629631fd8b096\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://edc634aeae7272726745b1cbbf116dfdde51833b71a143e94fe7de89e9b14566\",\"dweb:/ipfs/QmXtXckxdFM3VeLvsjMWhqt44WAf7XKVYKt9bUT7pyWbjH\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/algo/EnumMap.sol\":{\"keccak256\":\"0x12716c299c0965f4f87c2792cda2bd6029ba629c1172cdfef08d95cb2d7c283f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8d17c9bcb9bb0b9f399f6366f85b4db981df6e319f90b1b84910d6c44a79d032\",\"dweb:/ipfs/QmcqU3Gj8BP88yRV571GyCcW2UAjxq2xiqRofXFKYzkRXT\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/algo/EnumSet.sol\":{\"keccak256\":\"0x0aaea4634a7c64ef61b1ee8380912084427b45b6b4fc254b76d4b78e39f92d35\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://356a344f770d238dd864e8530d2ee05e350f269346cdf02432bc767e90520ce1\",\"dweb:/ipfs/QmfQfasYUY69X4wnzizPqT8P24YZTAPQGgFQErsSzV5sva\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/lifecycle/Pausable.sol\":{\"keccak256\":\"0xaa32d2e66a8edb68c64ffab1db69925248cf3f774c40b062e1e8ff2f4d5eebed\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://37451b151d862be6413ee1d18e3500a9100128f09926a2260d0ea058c3148d8a\",\"dweb:/ipfs/QmNLsaNioeA4LK8fVpqvSkQrCob1DkENcqQUurqDQbQK3G\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/lifecycle/Startable.sol\":{\"keccak256\":\"0x87e273577d4716cbbb325f03ec91207e1022bb7f56cdcda56593c603d2b4592f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d305d7c885971e1b82a363b4c9237c4201390610621a67605b89694ca9680e35\",\"dweb:/ipfs/QmWZX1cEfsfQSoEjBgBaBn3rKJxfyaJMpJyofpM9LG4tEp\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/metatx/ManagedIdentity.sol\":{\"keccak256\":\"0xe544b34375f19f9d1ad6e309f2fc56849263cc3c3c77009f6b38782f7dea9971\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3eb04bbf1c13ca82971c1cb2fdd96a23e2dfaa5df6a7d3b7e773dd3a760cf4e4\",\"dweb:/ipfs/QmXArzbKQgsMebfYVSQtaCLAs3rp3FYp6MKjSQnZoGDnjf\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/payment/PayoutWallet.sol\":{\"keccak256\":\"0x45ef7f68177cb61463f0ac759782f490821917fac3a71a18263c38193a9c6229\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://67839b4cc5897d723099ebfd8e0593e809b02cf422056efc1497f88dd7abb415\",\"dweb:/ipfs/QmYFRXvggoT8RzWB7SSJmfaBY3xkoVYNaGotTLBxjXqqxx\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/utils/ERC20Wrapper.sol\":{\"keccak256\":\"0x57922168ce32d2260022c0c7075137940e7d3cf0bb0d2213e62194050fbcf392\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b2dbba2defa32aa9edb54797f9b3f4ec1c1e5f71193deb99289136fa2f02ad79\",\"dweb:/ipfs/QmbUbzdwyWwjw3VW1o5oBKyuG9cFN7n8j55P8MDAg3sCuK\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/utils/types/AddressIsContract.sol\":{\"keccak256\":\"0x08373f750eedc1226b22b8ab1e156b0689c463590fa7dc40e99329b2da7b5d47\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fac8cdd7be4a83b47b18c8a48c1b1779a2590118049734665a6de91e77f27d35\",\"dweb:/ipfs/QmcAobvMpD5TisPTQSihPhywmVbPv1jDhffJCaZptM7YLv\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0xcc78a17dd88fa5a2edc60c8489e2f405c0913b377216a5b26b35656b2d0dab52\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://526dc85e1f9b9b45830e202568d267d93dde7a4fcccf4ad7798dadcd92304d3c\",\"dweb:/ipfs/QmaoXMB972J3cSDLtBq3xBo4jLwqD2uzXTwujtSPqkYVhR\"]},\"contracts/sale/FixedPricesSale.sol\":{\"keccak256\":\"0xad902ccee0e2a42eea07b4c1e011202096daff92b43158a1569d139caf93b3f0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a702cc102db63b18e0581da5d6c01ee9320cec4b690c3117b4f77316fce45185\",\"dweb:/ipfs/QmWL7kh3kBSxDYjVoq9gN79UpKLrRBgJCHqquyaCE8UWhe\"]},\"contracts/sale/abstract/PurchaseLifeCycles.sol\":{\"keccak256\":\"0xaa18c1de5628dbd5ff281f06354b0156cb8bd24a6f5b490a787931c374266f6a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2e0731a0100fc1bda747176f169cacc5d61d89df1c78884d8843a834d58f7dcd\",\"dweb:/ipfs/QmZRDAxcvQ9QySqnmQLVM1i797NCqSJrJjKUneEmTufXBQ\"]},\"contracts/sale/abstract/Sale.sol\":{\"keccak256\":\"0x32dd01f3ca07c26e834f5784b4f2434c9cf309e3e30b2421a26da16ccf5d0e26\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://009418ea08f714b3f536d09e04d65ec39d3a4e9ba33e554ac8a26036cff8335b\",\"dweb:/ipfs/QmQvMXpCaaAwtHE4qxXYn2rxPgPzqzJM6aGuyz4nut5CH5\"]},\"contracts/sale/interfaces/IPurchaseNotificationsReceiver.sol\":{\"keccak256\":\"0xa85dcec80f528757a52dd66f88ae14845477e3ec733cb4d22af6db71d19e90f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://36e14e08666d5fd2af5b78848a84a11c666c65c94ca46f88e896c041da1dc1c7\",\"dweb:/ipfs/QmYiHM2DBVuX4adJfJMSvdrdfmDooHxhwGtmhNP7k2DY9n\"]},\"contracts/sale/interfaces/ISale.sol\":{\"keccak256\":\"0x0d731f242662465b2aa3ea9fe3581d0e77e3f61601390f68e4c9c75fc2103f5f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2a04d527397a7f75bd1d701fa7af263cb0799ef4d2f32dc44bb6c9598cee3625\",\"dweb:/ipfs/QmRnsakvvkU1yJyviEM8eytdCTUvjqsw1aqzdntycoG2aV\"]}},\"version\":1}"}},"contracts/sale/UniswapOracleSale.sol":{"UniswapOracleSale":{"abi":[{"inputs":[{"internalType":"address payable","name":"payoutWallet_","type":"address"},{"internalType":"uint256","name":"skusCapacity","type":"uint256"},{"internalType":"uint256","name":"tokensPerSkuCapacity","type":"uint256"},{"internalType":"address","name":"referenceToken","type":"address"},{"internalType":"contract IUniswapV2Router","name":"uniswapV2Router","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32[]","name":"names","type":"bytes32[]"},{"indexed":false,"internalType":"bytes32[]","name":"values","type":"bytes32[]"}],"name":"MagicValues","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":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"payoutWallet_","type":"address"}],"name":"PayoutWalletSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"purchaser","type":"address"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"bytes32","name":"sku","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"quantity","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"userData","type":"bytes"},{"indexed":false,"internalType":"uint256","name":"totalPrice","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"extData","type":"bytes"}],"name":"Purchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"sku","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxQuantityPerPurchase","type":"uint256"},{"indexed":false,"internalType":"address","name":"notificationsReceiver","type":"address"}],"name":"SkuCreation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"sku","type":"bytes32"},{"indexed":false,"internalType":"address[]","name":"tokens","type":"address[]"},{"indexed":false,"internalType":"uint256[]","name":"prices","type":"uint256[]"}],"name":"SkuPricingUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Started","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract IUniswapV2Router","name":"uniswapV2Router","type":"address"}],"name":"UniswapV2RouterSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"PRICE_CONVERT_VIA_ORACLE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SUPPLY_UNLIMITED","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOKEN_ETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"conversionRates","outputs":[{"internalType":"uint256[]","name":"rates","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"estimatePurchase","outputs":[{"internalType":"uint256","name":"totalPrice","type":"uint256"},{"internalType":"bytes32[]","name":"pricingData","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"sku","type":"bytes32"}],"name":"getSkuInfo","outputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"uint256","name":"remainingSupply","type":"uint256"},{"internalType":"uint256","name":"maxQuantityPerPurchase","type":"uint256"},{"internalType":"address","name":"notificationsReceiver","type":"address"},{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"prices","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSkus","outputs":[{"internalType":"bytes32[]","name":"skus","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payoutWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"purchaseFor","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"referenceToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"payoutWallet_","type":"address"}],"name":"setPayoutWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"start","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"prices","type":"uint256[]"}],"name":"updateSkuPricing","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"60c06040523480156200001157600080fd5b506040516200325138038062003251833981810160405260a08110156200003757600080fd5b50805160208201516040808401516060850151608090950151600080546001600160a01b031916339081178255935195969495929493919283928892889288928892869286928692859285928592600192869183918291907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001600160a01b03811662000111576040805162461bcd60e51b815260206004820152601460248201527f5061796f75743a207a65726f2061646472657373000000000000000000000000604482015290519081900360640190fd5b600180546001600160a01b0383166001600160a01b0319909116811790915560408051918252517fdd880d24a789958a6398c99c2e54ce31bc10a638cbc42f7dd34285479ae0f8559181900360200190a150506003805460ff1916911515919091179055608082905260a081905260408051600280825260608201835260009260208301908036833750506040805160028082526060820183529394506000939092509060208301908036833750508351919250680a89e968a9cbe8aa8960bb1b9173eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee91508490600090620001f657fe5b60200260200101836000815181106200020b57fe5b602002602001018281525082815250505060001960001b6f14d55414131657d5539312535255115160821b90836001815181106200024557fe5b60200260200101836001815181106200025a57fe5b6020026020010182815250828152505050600080516020620032318339815191528282604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015620002c3578181015183820152602001620002a9565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101562000304578181015183820152602001620002ea565b5050505090500194505050505060405180910390a15050600780546001600160a01b0319166001600160a01b0389161790555060009450600193508492506200034b915050565b5060405190808252806020026020018201604052801562000376578160200160208202803683370190505b50604080516001808252818301909252919250600091906020808301908036833701905050905060001960001b7f50524943455f434f4e564552545f5649415f4f5241434c4500000000000000009083600081518110620003d357fe5b6020026020010183600081518110620003e857fe5b6020026020010182815250828152505050600080516020620032318339815191528282604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156200045157818101518382015260200162000437565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156200049257818101518382015260200162000478565b5050505090500194505050505060405180910390a1505050505050620004be81620004ca60201b60201c565b5050505050506200051e565b600880546001600160a01b0383166001600160a01b0319909116811790915560408051918252517ffe70995e26c62b71bbd53a5b9e09215c42e2006fad72ba845051faa8de1510ba9181900360200190a150565b60805160a051612cf46200053d60003980611bb4525050612cf46000f3fe60806040526004361061015f5760003560e01c80638456cb59116100c0578063a963b25711610074578063c7b778db11610059578063c7b778db146106c7578063f21f537d14610796578063f2fde38b146107ab5761015f565b8063a963b2571461061d578063be9a6555146106b25761015f565b80638da5cb5b116100a55780638da5cb5b146105e15780639865bcc8146105f65780639e049545146105f65761015f565b80638456cb59146105b75780638488bb4e146105cc5761015f565b80635c4fafc7116101175780635e6e9f70116100fc5780635e6e9f70146103e457806361bd38511461051f5780636b8f9c43146105845761015f565b80635c4fafc7146103a65780635c975abb146103bb5761015f565b80631694505e116101485780631694505e146102925780632a8a45bc146102a75780633f4ba83a1461038f5761015f565b80631265b651146101645780631323b06614610195575b600080fd5b34801561017057600080fd5b506101796107de565b604080516001600160a01b039092168252519081900360200190f35b3480156101a157600080fd5b50610237600480360360a08110156101b857600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a0810160808201356401000000008111156101f857600080fd5b82018360208201111561020a57600080fd5b8035906020019184600183028401116401000000008311171561022c57600080fd5b5090925090506107ed565b6040518083815260200180602001828103825283818151815260200191508051906020019060200280838360005b8381101561027d578181015183820152602001610265565b50505050905001935050505060405180910390f35b34801561029e57600080fd5b506101796108e2565b3480156102b357600080fd5b506102d1600480360360208110156102ca57600080fd5b50356108f1565b60405180878152602001868152602001858152602001846001600160a01b031681526020018060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561033657818101518382015260200161031e565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561037557818101518382015260200161035d565b505050509050019850505050505050505060405180910390f35b34801561039b57600080fd5b506103a4610a96565b005b3480156103b257600080fd5b50610179610b04565b3480156103c757600080fd5b506103d0610b1c565b604080519115158252519081900360200190f35b3480156103f057600080fd5b506103a46004803603606081101561040757600080fd5b8135919081019060408101602082013564010000000081111561042957600080fd5b82018360208201111561043b57600080fd5b8035906020019184602083028401116401000000008311171561045d57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092959493602081019350359150506401000000008111156104ad57600080fd5b8201836020820111156104bf57600080fd5b803590602001918460208302840111640100000000831117156104e157600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610b25945050505050565b34801561052b57600080fd5b50610534610d02565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610570578181015183820152602001610558565b505050509050019250505060405180910390f35b34801561059057600080fd5b506103a4600480360360208110156105a757600080fd5b50356001600160a01b0316610d5d565b3480156105c357600080fd5b506103a4610e35565b3480156105d857600080fd5b50610179610e9c565b3480156105ed57600080fd5b50610179610eab565b34801561060257600080fd5b5061060b610eba565b60408051918252519081900360200190f35b6103a4600480360360a081101561063357600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a08101608082013564010000000081111561067357600080fd5b82018360208201111561068557600080fd5b803590602001918460018302840111640100000000831117156106a757600080fd5b509092509050610ec0565b3480156106be57600080fd5b506103a4610fa6565b3480156106d357600080fd5b50610534600480360360408110156106ea57600080fd5b81019060208101813564010000000081111561070557600080fd5b82018360208201111561071757600080fd5b8035906020019184602083028401116401000000008311171561073957600080fd5b91939092909160208101903564010000000081111561075757600080fd5b82018360208201111561076957600080fd5b8035906020019184600183028401116401000000008311171561078b57600080fd5b509092509050610fb9565b3480156107a257600080fd5b5061060b6110a5565b3480156107b757600080fd5b506103a4600480360360208110156107ce57600080fd5b50356001600160a01b03166110ab565b6007546001600160a01b031681565b6000606060025460001415610849576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b61085161111c565b610859612c2c565b610861611174565b6001600160a01b03908116825289811660208084019190915290891660408084019190915260608301899052608083018890528051601f870183900483028101830190915285815290869086908190840183828082843760009201919091525050505060a08201526108d281611178565b9250925050965096945050505050565b6008546001600160a01b031681565b60008181526006602052604081208190819081906060908190836109176004830161119f565b8254985090508761096f576040805162461bcd60e51b815260206004820152601660248201527f53616c653a206e6f6e2d6578697374656e7420736b7500000000000000000000604482015290519081900360640190fd5b60018201546002830154600384015491985096506001600160a01b031694508067ffffffffffffffff811180156109a557600080fd5b506040519080825280602002602001820160405280156109cf578160200160208202803683370190505b5093508067ffffffffffffffff811180156109e957600080fd5b50604051908082528060200260200182016040528015610a13578160200160208202803683370190505b50925060005b81811015610a8a57600080610a3160048601846111a3565b915091508160001c878481518110610a4557fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508060001c868481518110610a7557fe5b60209081029190910101525050600101610a19565b50505091939550919395565b600254610aea576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b610afa610af5611174565b611235565b610b026112fc565b565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b60035460ff1681565b610b30610af5611174565b815181518114610b87576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20696e636f6e73697374656e742061727261797300000000000000604482015290519081900360640190fd5b60008481526006602052604090208054610be8576040805162461bcd60e51b815260206004820152601660248201527f53616c653a206e6f6e2d6578697374656e7420736b7500000000000000000000604482015290519081900360640190fd5b6004810182610c33576000610bfc8261119f565b905060005b81811015610c2c576000610c1584826111a3565b509050610c228482611354565b5050600101610c01565b5050610c3e565b610c3e818686611434565b857fcb3fe5489e0cd43d0f4a33d1e09a4a0463a03d0d38f56165530854e5540db1438686604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015610ca6578181015183820152602001610c8e565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015610ce5578181015183820152602001610ccd565b5050505090500194505050505060405180910390a2505050505050565b60606004600001805480602002602001604051908101604052809291908181526020018280548015610d5357602002820191906000526020600020905b815481526020019060010190808311610d3f575b5050505050905090565b610d68610af5611174565b6001600160a01b038116610dc3576040805162461bcd60e51b815260206004820152601460248201527f5061796f75743a207a65726f2061646472657373000000000000000000000000604482015290519081900360640190fd5b600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03838116919091179182905560408051929091168252517fdd880d24a789958a6398c99c2e54ce31bc10a638cbc42f7dd34285479ae0f855916020908290030190a150565b600254610e89576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b610e94610af5611174565b610b026114bc565b6001546001600160a01b031681565b6000546001600160a01b031690565b60001981565b600254610f14576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b610f1c61111c565b610f24612c2c565b610f2c611174565b6001600160a01b03908116825287811660208084019190915290871660408084019190915260608301879052608083018690528051601f850183900483028101830190915283815290849084908190840183828082843760009201919091525050505060a0820152610f9d816114fa565b50505050505050565b610fb1610af5611174565b610afa611527565b6060838067ffffffffffffffff81118015610fd357600080fd5b50604051908082528060200260200182016040528015610ffd578160200160208202803683370190505b50915060005b8181101561109b5761107c87878381811061101a57fe5b905060200201356001600160a01b0316600760009054906101000a90046001600160a01b031687878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506115a992505050565b83828151811061108857fe5b6020908102919091010152600101611003565b5050949350505050565b60025490565b6110b6610af5611174565b600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383811691821780845560405192939116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b60035460ff1615610b02576040805162461bcd60e51b815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b3390565b6000606061118583611727565b61118e836119d1565b505060c081015160e0909101519091565b5490565b8154600090819083106111fd576040805162461bcd60e51b815260206004820152601c60248201527f456e756d4d61703a20696e646578206f7574206f6620626f756e647300000000604482015290519081900360640190fd5b600084600001848154811061120e57fe5b906000526020600020906002020190508060000154816001015492509250505b9250929050565b306001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561126e57600080fd5b505afa158015611282573d6000803e3d6000fd5b505050506040513d602081101561129857600080fd5b50516001600160a01b038281169116146112f9576040805162461bcd60e51b815260206004820152601660248201527f4f776e61626c653a206e6f7420746865206f776e657200000000000000000000604482015290519081900360640190fd5b50565b611304611a74565b6003805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611337611174565b604080516001600160a01b039092168252519081900360200190a1565b60008181526001830160205260408120548015611428578354600019808301919081019060009087908390811061138757fe5b90600052602060002090600202019050808760000184815481106113a757fe5b6000918252602080832084546002909302019182556001938401549184019190915583548252898301905260409020908401905586548790806113e657fe5b600082815260208082206002600019909401938402018281556001908101839055929093558881528982019092526040822091909155945061142e9350505050565b60009150505b92915050565b61143f838383611acb565b6114488361119f565b158061146657506007546114669084906001600160a01b0316611c2f565b6114b7576040805162461bcd60e51b815260206004820152601860248201527f53616c653a206e6f207265666572656e636520746f6b656e0000000000000000604482015290519081900360640190fd5b505050565b6114c461111c565b6003805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611337611174565b61150381611727565b61150c816119d1565b61151581611c47565b61151e81611d96565b6112f981611de2565b6002541561157c576040805162461bcd60e51b815260206004820152601260248201527f537461727461626c653a20737461727465640000000000000000000000000000604482015290519081900360640190fd5b426002557f27029695aa5f602a4ee81f4c32dfa86e562f200a17966496f3a7c3f2ec0f9417611337611174565b60006001600160a01b03841673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561164d57600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561161e57600080fd5b505afa158015611632573d6000803e3d6000fd5b505050506040513d602081101561164857600080fd5b505193505b6001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14156116ef57600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156116c057600080fd5b505afa1580156116d4573d6000803e3d6000fd5b505050506040513d60208110156116ea57600080fd5b505192505b6000806116fc86866122c7565b909250905061171d8261171783670de0b6b3a7640000612393565b906123f3565b9695505050505050565b60208101516001600160a01b0316611786576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a207a65726f206164647265737320726563697069656e7400000000604482015290519081900360640190fd5b60408101516001600160a01b03166117e5576040805162461bcd60e51b815260206004820152601860248201527f53616c653a207a65726f206164647265737320746f6b656e0000000000000000604482015290519081900360640190fd5b608081015161183b576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a207a65726f207175616e7469747920707572636861736500000000604482015290519081900360640190fd5b6060810151600090815260066020526040902080546118a1576040805162461bcd60e51b815260206004820152601660248201527f53616c653a206e6f6e2d6578697374656e7420736b7500000000000000000000604482015290519081900360640190fd5b8160800151816002015410156118fe576040805162461bcd60e51b815260206004820152601860248201527f53616c653a2061626f7665206d6178207175616e746974790000000000000000604482015290519081900360640190fd5b80546000191461196557816080015181600101541015611965576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20696e73756666696369656e7420737570706c7900000000000000604482015290519081900360640190fd5b60408201516001600160a01b03166119806004830182611c2f565b6114b7576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a206e6f6e2d6578697374656e7420736b7520746f6b656e00000000604482015290519081900360640190fd5b606081015160009081526006602052604090208054611a37576040805162461bcd60e51b815260206004820152601560248201527f53616c653a20756e737570706f7274656420534b550000000000000000000000604482015290519081900360640190fd5b600481016000611a47848361245a565b9050611a548483836124ca565b611a6e576080840151611a68908290612393565b60c08501525b50505050565b60035460ff16610b02576040805162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604482015290519081900360640190fd5b60005b8251811015611bb1576000838281518110611ae557fe5b6020026020010151905060006001600160a01b0316816001600160a01b03161415611b57576040805162461bcd60e51b815260206004820152601860248201527f53616c653a207a65726f206164647265737320746f6b656e0000000000000000604482015290519081900360640190fd5b6000838381518110611b6557fe5b602002602001015190508060001415611b9157611b8b866001600160a01b038416611354565b50611ba7565b611ba5866001600160a01b038416836125c2565b505b5050600101611ace565b507f0000000000000000000000000000000000000000000000000000000000000000611bdc8461119f565b11156114b7576040805162461bcd60e51b815260206004820152601560248201527f53616c653a20746f6f206d616e7920746f6b656e730000000000000000000000604482015290519081900360640190fd5b60009081526001919091016020526040902054151590565b60408101516001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415611d6a578060c00151341015611cc9576040805162461bcd60e51b815260206004820152601660248201527f53616c653a20696e73756666696369656e742045544800000000000000000000604482015290519081900360640190fd5b60015460c08201516040516001600160a01b039092169181156108fc0291906000818181858888f19350505050158015611d07573d6000803e3d6000fd5b506000611d218260c001513461265990919063ffffffff16565b90508015611d645781516040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611d62573d6000803e3d6000fd5b505b506112f9565b6112f9611d75611174565b60015460c084015160408501516001600160a01b03908116939216906126b6565b60608101516000908152600660205260409020805460001914611dde5760808201516001820154611dc691612659565b60608301516000908152600660205260409020600101555b5050565b806060015181604001516001600160a01b031682600001516001600160a01b03167f29f844483ca6b10b5c0611d039afc15ce8f6380e905307b381c3a8ee4e90e11e846020015185608001518660a001518760c001518860e001518961010001518a610120015160405160200180848051906020019060200280838360005b83811015611e79578181015183820152602001611e61565b50505050905001838051906020019060200280838360005b83811015611ea9578181015183820152602001611e91565b50505050905001828051906020019060200280838360005b83811015611ed9578181015183820152602001611ec1565b50505050905001935050505060405160208183030381529060405260405180866001600160a01b031681526020018581526020018060200184815260200180602001838103835286818151815260200191508051906020019080838360005b83811015611f50578181015183820152602001611f38565b50505050905090810190601f168015611f7d5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015611fb0578181015183820152602001611f98565b50505050905090810190601f168015611fdd5780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390a460608101516000908152600660205260409020600301546001600160a01b03168015611dde576361eceae860e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916816001600160a01b03166361eceae8846000015185602001518660400151876060015188608001518960a001518a60c001518b60e001518c61010001518d61012001516040518b63ffffffff1660e01b8152600401808b6001600160a01b031681526020018a6001600160a01b03168152602001896001600160a01b031681526020018881526020018781526020018060200186815260200180602001806020018060200185810385528a818151815260200191508051906020019080838360005b838110156121165781810151838201526020016120fe565b50505050905090810190601f1680156121435780820380516001836020036101000a031916815260200191505b508581038452885181528851602091820191808b01910280838360005b83811015612178578181015183820152602001612160565b50505050905001858103835287818151815260200191508051906020019060200280838360005b838110156121b757818101518382015260200161219f565b50505050905001858103825286818151815260200191508051906020019060200280838360005b838110156121f65781810151838201526020016121de565b505050509050019e505050505050505050505050505050602060405180830381600087803b15801561222757600080fd5b505af115801561223b573d6000803e3d6000fd5b505050506040513d602081101561225157600080fd5b50517fffffffff000000000000000000000000000000000000000000000000000000001614611dde576040805162461bcd60e51b815260206004820152601a60248201527f53616c653a206e6f74696669636174696f6e2072656675736564000000000000604482015290519081900360640190fd5b60008060006122d6858561273e565b5090506000806122e6878761282b565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561231e57600080fd5b505afa158015612332573d6000803e3d6000fd5b505050506040513d606081101561234857600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506001600160a01b0387811690841614612382578082612385565b81815b909890975095505050505050565b6000826123a25750600061142e565b828202828482816123af57fe5b04146123ec5760405162461bcd60e51b8152600401808060200182810382526021815260200180612c9e6021913960400191505060405180910390fd5b9392505050565b6000808211612449576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161245257fe5b049392505050565b60408201516000906124769083906001600160a01b031661298e565b90508061142e576040805162461bcd60e51b815260206004820152601f60248201527f53616c653a20756e737570706f72746564207061796d656e7420746f6b656e00604482015290519081900360640190fd5b600060001982146124dd575060006123ec565b6007546000906124f79085906001600160a01b031661298e565b604086015160075460a088015192935060009261251e92916001600160a01b0316906115a9565b9050600061254f876080015161254984611717670de0b6b3a76400008861239390919063ffffffff16565b90612393565b604080516002808252606082018352929350919060208301908036833750505060e08801819052805186919060009061258457fe5b6020026020010181815250508160001b8760e001516001815181106125a557fe5b602090810291909101015260c08701525060019150509392505050565b6000828152600184016020526040812054806126275750506040805180820182528381526020808201848152865460018181018955600089815284812095516002909302909501918255915190820155865486845281880190925292909120556123ec565b8285600001600183038154811061263a57fe5b90600052602060002090600202016001018190555060009150506123ec565b6000828211156126b0576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052611a6e908590612a1e565b600080826001600160a01b0316846001600160a01b031614156127a8576040805162461bcd60e51b815260206004820152601960248201527f556e697377617056323a2073616d652061646472657373657300000000000000604482015290519081900360640190fd5b826001600160a01b0316846001600160a01b0316106127c85782846127cb565b83835b90925090506001600160a01b03821661122e576040805162461bcd60e51b815260206004820152601760248201527f556e697377617056323a207a65726f2061646472657373000000000000000000604482015290519081900360640190fd5b600080600061283a858561273e565b91509150600860009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561288c57600080fd5b505afa1580156128a0573d6000803e3d6000fd5b505050506040513d60208110156128b657600080fd5b5051604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606095861b811660208381019190915294861b81166034830152825160288184030181526048830184528051908601207fff0000000000000000000000000000000000000000000000000000000000000060688401529390951b9094166069850152607d8401919091527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f609d808501919091528151808503909101815260bd909301905281519101209392505050565b6000818152600183016020526040812054806129f1576040805162461bcd60e51b815260206004820152601860248201527f456e756d4d61703a206e6f6e6578697374656e74206b65790000000000000000604482015290519081900360640190fd5b836000016001820381548110612a0357fe5b90600052602060002090600202016001015491505092915050565b81612a316001600160a01b038216612c26565b612a82576040805162461bcd60e51b815260206004820152601a60248201527f4552433230577261707065723a206e6f6e2d636f6e7472616374000000000000604482015290519081900360640190fd5b600080826001600160a01b0316846040518082805190602001908083835b60208310612add57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612aa0565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612b3f576040519150601f19603f3d011682016040523d82523d6000602084013e612b44565b606091505b50915091508115612bc357805115612bbe57808060200190516020811015612b6b57600080fd5b5051612bbe576040805162461bcd60e51b815260206004820152601e60248201527f4552433230577261707065723a206f7065726174696f6e206661696c65640000604482015290519081900360640190fd5b612c1f565b8051612c16576040805162461bcd60e51b815260206004820152601e60248201527f4552433230577261707065723a206f7065726174696f6e206661696c65640000604482015290519081900360640190fd5b80518082602001fd5b5050505050565b3b151590565b60405180610140016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160008019168152602001600081526020016060815260200160008152602001606081526020016060815260200160608152509056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220d7bfe72990982df55cd5ca67efed556bd04518d4d15e801f5b2d15ba4957913964736f6c63430007060033abb92614f53337043b55dc996a83ebb09adce78ec336ca188ea02180b61d1c14","opcodes":"PUSH1 0xC0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x3251 CODESIZE SUB DUP1 PUSH3 0x3251 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0xA0 DUP2 LT ISZERO PUSH3 0x37 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 DUP1 DUP5 ADD MLOAD PUSH1 0x60 DUP6 ADD MLOAD PUSH1 0x80 SWAP1 SWAP6 ADD MLOAD PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND CALLER SWAP1 DUP2 OR DUP3 SSTORE SWAP4 MLOAD SWAP6 SWAP7 SWAP5 SWAP6 SWAP3 SWAP5 SWAP4 SWAP2 SWAP3 DUP4 SWAP3 DUP9 SWAP3 DUP9 SWAP3 DUP9 SWAP3 DUP9 SWAP3 DUP7 SWAP3 DUP7 SWAP3 DUP7 SWAP3 DUP6 SWAP3 DUP6 SWAP3 DUP6 SWAP3 PUSH1 0x1 SWAP3 DUP7 SWAP2 DUP4 SWAP2 DUP3 SWAP2 SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP3 SWAP1 LOG3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH3 0x111 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061796F75743A207A65726F2061646472657373000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 SWAP2 AND DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD PUSH32 0xDD880D24A789958A6398C99C2E54CE31BC10A638CBC42F7DD34285479AE0F855 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP POP PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x80 DUP3 SWAP1 MSTORE PUSH1 0xA0 DUP2 SWAP1 MSTORE 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 POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x2 DUP1 DUP3 MSTORE PUSH1 0x60 DUP3 ADD DUP4 MSTORE SWAP4 SWAP5 POP PUSH1 0x0 SWAP4 SWAP1 SWAP3 POP SWAP1 PUSH1 0x20 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP POP DUP4 MLOAD SWAP2 SWAP3 POP PUSH9 0xA89E968A9CBE8AA89 PUSH1 0xBB SHL SWAP2 PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE SWAP2 POP DUP5 SWAP1 PUSH1 0x0 SWAP1 PUSH3 0x1F6 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP4 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH3 0x20B JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP3 DUP2 MSTORE POP DUP3 DUP2 MSTORE POP POP POP PUSH1 0x0 NOT PUSH1 0x0 SHL PUSH16 0x14D55414131657D55393125352551151 PUSH1 0x82 SHL SWAP1 DUP4 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH3 0x245 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP4 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH3 0x25A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP3 DUP2 MSTORE POP DUP3 DUP2 MSTORE POP POP POP PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x3231 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP3 DUP3 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x2C3 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x2A9 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x304 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x2EA JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP PUSH1 0x7 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND OR SWAP1 SSTORE POP PUSH1 0x0 SWAP5 POP PUSH1 0x1 SWAP4 POP DUP5 SWAP3 POP PUSH3 0x34B SWAP2 POP POP JUMP JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH3 0x376 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 DUP1 DUP3 MSTORE DUP2 DUP4 ADD SWAP1 SWAP3 MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 SWAP1 PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP PUSH1 0x0 NOT PUSH1 0x0 SHL PUSH32 0x50524943455F434F4E564552545F5649415F4F5241434C450000000000000000 SWAP1 DUP4 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH3 0x3D3 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP4 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH3 0x3E8 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP3 DUP2 MSTORE POP DUP3 DUP2 MSTORE POP POP POP PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x3231 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP3 DUP3 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x451 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x437 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x492 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x478 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP POP POP PUSH3 0x4BE DUP2 PUSH3 0x4CA PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST POP POP POP POP POP POP PUSH3 0x51E JUMP JUMPDEST PUSH1 0x8 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 SWAP2 AND DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD PUSH32 0xFE70995E26C62B71BBD53A5B9E09215C42E2006FAD72BA845051FAA8DE1510BA SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH2 0x2CF4 PUSH3 0x53D PUSH1 0x0 CODECOPY DUP1 PUSH2 0x1BB4 MSTORE POP POP PUSH2 0x2CF4 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x15F JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8456CB59 GT PUSH2 0xC0 JUMPI DUP1 PUSH4 0xA963B257 GT PUSH2 0x74 JUMPI DUP1 PUSH4 0xC7B778DB GT PUSH2 0x59 JUMPI DUP1 PUSH4 0xC7B778DB EQ PUSH2 0x6C7 JUMPI DUP1 PUSH4 0xF21F537D EQ PUSH2 0x796 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x7AB JUMPI PUSH2 0x15F JUMP JUMPDEST DUP1 PUSH4 0xA963B257 EQ PUSH2 0x61D JUMPI DUP1 PUSH4 0xBE9A6555 EQ PUSH2 0x6B2 JUMPI PUSH2 0x15F JUMP JUMPDEST DUP1 PUSH4 0x8DA5CB5B GT PUSH2 0xA5 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x5E1 JUMPI DUP1 PUSH4 0x9865BCC8 EQ PUSH2 0x5F6 JUMPI DUP1 PUSH4 0x9E049545 EQ PUSH2 0x5F6 JUMPI PUSH2 0x15F JUMP JUMPDEST DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x5B7 JUMPI DUP1 PUSH4 0x8488BB4E EQ PUSH2 0x5CC JUMPI PUSH2 0x15F JUMP JUMPDEST DUP1 PUSH4 0x5C4FAFC7 GT PUSH2 0x117 JUMPI DUP1 PUSH4 0x5E6E9F70 GT PUSH2 0xFC JUMPI DUP1 PUSH4 0x5E6E9F70 EQ PUSH2 0x3E4 JUMPI DUP1 PUSH4 0x61BD3851 EQ PUSH2 0x51F JUMPI DUP1 PUSH4 0x6B8F9C43 EQ PUSH2 0x584 JUMPI PUSH2 0x15F JUMP JUMPDEST DUP1 PUSH4 0x5C4FAFC7 EQ PUSH2 0x3A6 JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x3BB JUMPI PUSH2 0x15F JUMP JUMPDEST DUP1 PUSH4 0x1694505E GT PUSH2 0x148 JUMPI DUP1 PUSH4 0x1694505E EQ PUSH2 0x292 JUMPI DUP1 PUSH4 0x2A8A45BC EQ PUSH2 0x2A7 JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x38F JUMPI PUSH2 0x15F JUMP JUMPDEST DUP1 PUSH4 0x1265B651 EQ PUSH2 0x164 JUMPI DUP1 PUSH4 0x1323B066 EQ PUSH2 0x195 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x170 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x179 PUSH2 0x7DE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1A1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x237 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x1B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x1F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x20A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x22C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x7ED JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x27D JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x265 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP4 POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x29E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x179 PUSH2 0x8E2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2D1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2CA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x8F1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x336 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x31E JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x375 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x35D JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP9 POP POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x39B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3A4 PUSH2 0xA96 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x179 PUSH2 0xB04 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D0 PUSH2 0xB1C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3A4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x407 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x429 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x43B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x45D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 SWAP5 SWAP4 PUSH1 0x20 DUP2 ADD SWAP4 POP CALLDATALOAD SWAP2 POP POP PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x4AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x4BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x4E1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0xB25 SWAP5 POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x52B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x534 PUSH2 0xD02 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 DUP2 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x570 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x558 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x590 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3A4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x5A7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xD5D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3A4 PUSH2 0xE35 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x179 PUSH2 0xE9C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x179 PUSH2 0xEAB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x602 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x60B PUSH2 0xEBA JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x3A4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x633 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x673 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x685 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x6A7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0xEC0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3A4 PUSH2 0xFA6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x534 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x6EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x705 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x717 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x739 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH1 0x20 DUP2 ADD SWAP1 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x757 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x769 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x78B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0xFB9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7A2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x60B PUSH2 0x10A5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3A4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x7CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x10AB JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x2 SLOAD PUSH1 0x0 EQ ISZERO PUSH2 0x849 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x851 PUSH2 0x111C JUMP JUMPDEST PUSH2 0x859 PUSH2 0x2C2C JUMP JUMPDEST PUSH2 0x861 PUSH2 0x1174 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP10 DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP10 AND PUSH1 0x40 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD DUP10 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP9 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x1F DUP8 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD SWAP1 SWAP2 MSTORE DUP6 DUP2 MSTORE SWAP1 DUP7 SWAP1 DUP7 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP POP PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x8D2 DUP2 PUSH2 0x1178 JUMP JUMPDEST SWAP3 POP SWAP3 POP POP SWAP7 POP SWAP7 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP2 SWAP1 DUP2 SWAP1 DUP2 SWAP1 PUSH1 0x60 SWAP1 DUP2 SWAP1 DUP4 PUSH2 0x917 PUSH1 0x4 DUP4 ADD PUSH2 0x119F JUMP JUMPDEST DUP3 SLOAD SWAP9 POP SWAP1 POP DUP8 PUSH2 0x96F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7500000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x3 DUP5 ADD SLOAD SWAP2 SWAP9 POP SWAP7 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP5 POP DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x9A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x9CF JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP4 POP DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x9E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xA13 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xA8A JUMPI PUSH1 0x0 DUP1 PUSH2 0xA31 PUSH1 0x4 DUP7 ADD DUP5 PUSH2 0x11A3 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP2 PUSH1 0x0 SHR DUP8 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0xA45 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP DUP1 PUSH1 0x0 SHR DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0xA75 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP POP PUSH1 0x1 ADD PUSH2 0xA19 JUMP JUMPDEST POP POP POP SWAP2 SWAP4 SWAP6 POP SWAP2 SWAP4 SWAP6 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0xAEA JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0xAFA PUSH2 0xAF5 PUSH2 0x1174 JUMP JUMPDEST PUSH2 0x1235 JUMP JUMPDEST PUSH2 0xB02 PUSH2 0x12FC JUMP JUMPDEST JUMP JUMPDEST PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0xB30 PUSH2 0xAF5 PUSH2 0x1174 JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD DUP2 EQ PUSH2 0xB87 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E636F6E73697374656E742061727261797300000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0xBE8 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7500000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP2 ADD DUP3 PUSH2 0xC33 JUMPI PUSH1 0x0 PUSH2 0xBFC DUP3 PUSH2 0x119F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xC2C JUMPI PUSH1 0x0 PUSH2 0xC15 DUP5 DUP3 PUSH2 0x11A3 JUMP JUMPDEST POP SWAP1 POP PUSH2 0xC22 DUP5 DUP3 PUSH2 0x1354 JUMP JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0xC01 JUMP JUMPDEST POP POP PUSH2 0xC3E JUMP JUMPDEST PUSH2 0xC3E DUP2 DUP7 DUP7 PUSH2 0x1434 JUMP JUMPDEST DUP6 PUSH32 0xCB3FE5489E0CD43D0F4A33D1E09A4A0463A03D0D38F56165530854E5540DB143 DUP7 DUP7 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xCA6 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xC8E JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xCE5 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xCCD JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x4 PUSH1 0x0 ADD DUP1 SLOAD DUP1 PUSH1 0x20 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 DUP1 ISZERO PUSH2 0xD53 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0xD3F JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0xD68 PUSH2 0xAF5 PUSH2 0x1174 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xDC3 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061796F75743A207A65726F2061646472657373000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 SWAP1 SWAP2 OR SWAP2 DUP3 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD SWAP3 SWAP1 SWAP2 AND DUP3 MSTORE MLOAD PUSH32 0xDD880D24A789958A6398C99C2E54CE31BC10A638CBC42F7DD34285479AE0F855 SWAP2 PUSH1 0x20 SWAP1 DUP3 SWAP1 SUB ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0xE89 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0xE94 PUSH2 0xAF5 PUSH2 0x1174 JUMP JUMPDEST PUSH2 0xB02 PUSH2 0x14BC JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 NOT DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0xF14 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0xF1C PUSH2 0x111C JUMP JUMPDEST PUSH2 0xF24 PUSH2 0x2C2C JUMP JUMPDEST PUSH2 0xF2C PUSH2 0x1174 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP8 DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP8 AND PUSH1 0x40 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD DUP8 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP7 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x1F DUP6 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD SWAP1 SWAP2 MSTORE DUP4 DUP2 MSTORE SWAP1 DUP5 SWAP1 DUP5 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP POP PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0xF9D DUP2 PUSH2 0x14FA JUMP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0xFB1 PUSH2 0xAF5 PUSH2 0x1174 JUMP JUMPDEST PUSH2 0xAFA PUSH2 0x1527 JUMP JUMPDEST PUSH1 0x60 DUP4 DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0xFD3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xFFD JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x109B JUMPI PUSH2 0x107C DUP8 DUP8 DUP4 DUP2 DUP2 LT PUSH2 0x101A JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x7 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 DUP8 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x15A9 SWAP3 POP POP POP JUMP JUMPDEST DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1088 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x1003 JUMP JUMPDEST POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x10B6 PUSH2 0xAF5 PUSH2 0x1174 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 DUP3 OR DUP1 DUP5 SSTORE PUSH1 0x40 MLOAD SWAP3 SWAP4 SWAP2 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xB02 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061757361626C653A2070617573656400000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x1185 DUP4 PUSH2 0x1727 JUMP JUMPDEST PUSH2 0x118E DUP4 PUSH2 0x19D1 JUMP JUMPDEST POP POP PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xE0 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP2 JUMP JUMPDEST SLOAD SWAP1 JUMP JUMPDEST DUP2 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP4 LT PUSH2 0x11FD JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x456E756D4D61703A20696E646578206F7574206F6620626F756E647300000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 PUSH1 0x0 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x120E JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD SWAP1 POP DUP1 PUSH1 0x0 ADD SLOAD DUP2 PUSH1 0x1 ADD SLOAD SWAP3 POP SWAP3 POP POP JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8DA5CB5B 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 PUSH2 0x126E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1282 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1298 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ PUSH2 0x12F9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6F7420746865206F776E657200000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0x1304 PUSH2 0x1A74 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA PUSH2 0x1337 PUSH2 0x1174 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0x1428 JUMPI DUP4 SLOAD PUSH1 0x0 NOT DUP1 DUP4 ADD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x0 SWAP1 DUP8 SWAP1 DUP4 SWAP1 DUP2 LT PUSH2 0x1387 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD SWAP1 POP DUP1 DUP8 PUSH1 0x0 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x13A7 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 DUP5 SLOAD PUSH1 0x2 SWAP1 SWAP4 MUL ADD SWAP2 DUP3 SSTORE PUSH1 0x1 SWAP4 DUP5 ADD SLOAD SWAP2 DUP5 ADD SWAP2 SWAP1 SWAP2 SSTORE DUP4 SLOAD DUP3 MSTORE DUP10 DUP4 ADD SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP1 DUP5 ADD SWAP1 SSTORE DUP7 SLOAD DUP8 SWAP1 DUP1 PUSH2 0x13E6 JUMPI INVALID JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 PUSH1 0x2 PUSH1 0x0 NOT SWAP1 SWAP5 ADD SWAP4 DUP5 MUL ADD DUP3 DUP2 SSTORE PUSH1 0x1 SWAP1 DUP2 ADD DUP4 SWAP1 SSTORE SWAP3 SWAP1 SWAP4 SSTORE DUP9 DUP2 MSTORE DUP10 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x40 DUP3 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE SWAP5 POP PUSH2 0x142E SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SWAP2 POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x143F DUP4 DUP4 DUP4 PUSH2 0x1ACB JUMP JUMPDEST PUSH2 0x1448 DUP4 PUSH2 0x119F JUMP JUMPDEST ISZERO DUP1 PUSH2 0x1466 JUMPI POP PUSH1 0x7 SLOAD PUSH2 0x1466 SWAP1 DUP5 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1C2F JUMP JUMPDEST PUSH2 0x14B7 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F207265666572656E636520746F6B656E0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x14C4 PUSH2 0x111C JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH2 0x1337 PUSH2 0x1174 JUMP JUMPDEST PUSH2 0x1503 DUP2 PUSH2 0x1727 JUMP JUMPDEST PUSH2 0x150C DUP2 PUSH2 0x19D1 JUMP JUMPDEST PUSH2 0x1515 DUP2 PUSH2 0x1C47 JUMP JUMPDEST PUSH2 0x151E DUP2 PUSH2 0x1D96 JUMP JUMPDEST PUSH2 0x12F9 DUP2 PUSH2 0x1DE2 JUMP JUMPDEST PUSH1 0x2 SLOAD ISZERO PUSH2 0x157C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A20737461727465640000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST TIMESTAMP PUSH1 0x2 SSTORE PUSH32 0x27029695AA5F602A4EE81F4C32DFA86E562F200A17966496F3A7C3F2EC0F9417 PUSH2 0x1337 PUSH2 0x1174 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x164D JUMPI PUSH1 0x8 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND 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 PUSH2 0x161E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1632 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1648 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP4 POP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x16EF JUMPI PUSH1 0x8 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND 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 PUSH2 0x16C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x16D4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x16EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP3 POP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x16FC DUP7 DUP7 PUSH2 0x22C7 JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x171D DUP3 PUSH2 0x1717 DUP4 PUSH8 0xDE0B6B3A7640000 PUSH2 0x2393 JUMP JUMPDEST SWAP1 PUSH2 0x23F3 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1786 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F206164647265737320726563697069656E7400000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x17E5 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F206164647265737320746F6B656E0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x80 DUP2 ADD MLOAD PUSH2 0x183B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F207175616E7469747920707572636861736500000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0x18A1 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7500000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x80 ADD MLOAD DUP2 PUSH1 0x2 ADD SLOAD LT ISZERO PUSH2 0x18FE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A2061626F7665206D6178207175616E746974790000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 SLOAD PUSH1 0x0 NOT EQ PUSH2 0x1965 JUMPI DUP2 PUSH1 0x80 ADD MLOAD DUP2 PUSH1 0x1 ADD SLOAD LT ISZERO PUSH2 0x1965 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E73756666696369656E7420737570706C7900000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1980 PUSH1 0x4 DUP4 ADD DUP3 PUSH2 0x1C2F JUMP JUMPDEST PUSH2 0x14B7 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7520746F6B656E00000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0x1A37 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20756E737570706F7274656420534B550000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP2 ADD PUSH1 0x0 PUSH2 0x1A47 DUP5 DUP4 PUSH2 0x245A JUMP JUMPDEST SWAP1 POP PUSH2 0x1A54 DUP5 DUP4 DUP4 PUSH2 0x24CA JUMP JUMPDEST PUSH2 0x1A6E JUMPI PUSH1 0x80 DUP5 ADD MLOAD PUSH2 0x1A68 SWAP1 DUP3 SWAP1 PUSH2 0x2393 JUMP JUMPDEST PUSH1 0xC0 DUP6 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND PUSH2 0xB02 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061757361626C653A206E6F7420706175736564000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x1BB1 JUMPI PUSH1 0x0 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1AE5 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1B57 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F206164647265737320746F6B656E0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1B65 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP DUP1 PUSH1 0x0 EQ ISZERO PUSH2 0x1B91 JUMPI PUSH2 0x1B8B DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x1354 JUMP JUMPDEST POP PUSH2 0x1BA7 JUMP JUMPDEST PUSH2 0x1BA5 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP4 PUSH2 0x25C2 JUMP JUMPDEST POP JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x1ACE JUMP JUMPDEST POP PUSH32 0x0 PUSH2 0x1BDC DUP5 PUSH2 0x119F JUMP JUMPDEST GT ISZERO PUSH2 0x14B7 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20746F6F206D616E7920746F6B656E730000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x1D6A JUMPI DUP1 PUSH1 0xC0 ADD MLOAD CALLVALUE LT ISZERO PUSH2 0x1CC9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E73756666696369656E742045544800000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xC0 DUP3 ADD MLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 DUP2 ISZERO PUSH2 0x8FC MUL SWAP2 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x1D07 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x0 PUSH2 0x1D21 DUP3 PUSH1 0xC0 ADD MLOAD CALLVALUE PUSH2 0x2659 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x1D64 JUMPI DUP2 MLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 DUP3 ISZERO PUSH2 0x8FC MUL SWAP1 DUP4 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x1D62 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP JUMPDEST POP PUSH2 0x12F9 JUMP JUMPDEST PUSH2 0x12F9 PUSH2 0x1D75 PUSH2 0x1174 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xC0 DUP5 ADD MLOAD PUSH1 0x40 DUP6 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP4 SWAP3 AND SWAP1 PUSH2 0x26B6 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x0 NOT EQ PUSH2 0x1DDE JUMPI PUSH1 0x80 DUP3 ADD MLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH2 0x1DC6 SWAP2 PUSH2 0x2659 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SSTORE JUMPDEST POP POP JUMP JUMPDEST DUP1 PUSH1 0x60 ADD MLOAD DUP2 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x29F844483CA6B10B5C0611D039AFC15CE8F6380E905307B381C3A8EE4E90E11E DUP5 PUSH1 0x20 ADD MLOAD DUP6 PUSH1 0x80 ADD MLOAD DUP7 PUSH1 0xA0 ADD MLOAD DUP8 PUSH1 0xC0 ADD MLOAD DUP9 PUSH1 0xE0 ADD MLOAD DUP10 PUSH2 0x100 ADD MLOAD DUP11 PUSH2 0x120 ADD MLOAD PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP5 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1E79 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1E61 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1EA9 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1E91 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1ED9 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1EC1 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP4 POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP7 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1F50 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1F38 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1F7D JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP DUP4 DUP2 SUB DUP3 MSTORE DUP5 MLOAD DUP2 MSTORE DUP5 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP7 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1FB0 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1F98 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1FDD JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP8 POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 ISZERO PUSH2 0x1DDE JUMPI PUSH4 0x61ECEAE8 PUSH1 0xE0 SHL PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x61ECEAE8 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD DUP7 PUSH1 0x40 ADD MLOAD DUP8 PUSH1 0x60 ADD MLOAD DUP9 PUSH1 0x80 ADD MLOAD DUP10 PUSH1 0xA0 ADD MLOAD DUP11 PUSH1 0xC0 ADD MLOAD DUP12 PUSH1 0xE0 ADD MLOAD DUP13 PUSH2 0x100 ADD MLOAD DUP14 PUSH2 0x120 ADD MLOAD PUSH1 0x40 MLOAD DUP12 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP6 DUP2 SUB DUP6 MSTORE DUP11 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2116 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x20FE JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x2143 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP DUP6 DUP2 SUB DUP5 MSTORE DUP9 MLOAD DUP2 MSTORE DUP9 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP1 DUP12 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2178 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2160 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP6 DUP2 SUB DUP4 MSTORE DUP8 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x21B7 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x219F JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP6 DUP2 SUB DUP3 MSTORE DUP7 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x21F6 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x21DE JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP15 POP POP POP POP POP POP POP POP POP POP POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2227 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x223B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2251 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND EQ PUSH2 0x1DDE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F74696669636174696F6E2072656675736564000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x22D6 DUP6 DUP6 PUSH2 0x273E JUMP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP1 PUSH2 0x22E6 DUP8 DUP8 PUSH2 0x282B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x902F1AC PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x231E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2332 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x2348 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND SWAP4 POP AND SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND SWAP1 DUP5 AND EQ PUSH2 0x2382 JUMPI DUP1 DUP3 PUSH2 0x2385 JUMP JUMPDEST DUP2 DUP2 JUMPDEST SWAP1 SWAP9 SWAP1 SWAP8 POP SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x23A2 JUMPI POP PUSH1 0x0 PUSH2 0x142E JUMP JUMPDEST DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 PUSH2 0x23AF JUMPI INVALID JUMPDEST DIV EQ PUSH2 0x23EC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2C9E PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 GT PUSH2 0x2449 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206469766973696F6E206279207A65726F000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 DUP4 DUP2 PUSH2 0x2452 JUMPI INVALID JUMPDEST DIV SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x0 SWAP1 PUSH2 0x2476 SWAP1 DUP4 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x298E JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x142E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20756E737570706F72746564207061796D656E7420746F6B656E00 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x0 NOT DUP3 EQ PUSH2 0x24DD JUMPI POP PUSH1 0x0 PUSH2 0x23EC JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x24F7 SWAP1 DUP6 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x298E JUMP JUMPDEST PUSH1 0x40 DUP7 ADD MLOAD PUSH1 0x7 SLOAD PUSH1 0xA0 DUP9 ADD MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 PUSH2 0x251E SWAP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH2 0x15A9 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x254F DUP8 PUSH1 0x80 ADD MLOAD PUSH2 0x2549 DUP5 PUSH2 0x1717 PUSH8 0xDE0B6B3A7640000 DUP9 PUSH2 0x2393 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 PUSH2 0x2393 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x2 DUP1 DUP3 MSTORE PUSH1 0x60 DUP3 ADD DUP4 MSTORE SWAP3 SWAP4 POP SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP POP POP PUSH1 0xE0 DUP9 ADD DUP2 SWAP1 MSTORE DUP1 MLOAD DUP7 SWAP2 SWAP1 PUSH1 0x0 SWAP1 PUSH2 0x2584 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP2 PUSH1 0x0 SHL DUP8 PUSH1 0xE0 ADD MLOAD PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x25A5 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0xC0 DUP8 ADD MSTORE POP PUSH1 0x1 SWAP2 POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x1 DUP5 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 PUSH2 0x2627 JUMPI POP POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE DUP4 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD DUP5 DUP2 MSTORE DUP7 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP10 SSTORE PUSH1 0x0 DUP10 DUP2 MSTORE DUP5 DUP2 KECCAK256 SWAP6 MLOAD PUSH1 0x2 SWAP1 SWAP4 MUL SWAP1 SWAP6 ADD SWAP2 DUP3 SSTORE SWAP2 MLOAD SWAP1 DUP3 ADD SSTORE DUP7 SLOAD DUP7 DUP5 MSTORE DUP2 DUP9 ADD SWAP1 SWAP3 MSTORE SWAP3 SWAP1 SWAP2 KECCAK256 SSTORE PUSH2 0x23EC JUMP JUMPDEST DUP3 DUP6 PUSH1 0x0 ADD PUSH1 0x1 DUP4 SUB DUP2 SLOAD DUP2 LT PUSH2 0x263A JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD PUSH1 0x1 ADD DUP2 SWAP1 SSTORE POP PUSH1 0x0 SWAP2 POP POP PUSH2 0x23EC JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 GT ISZERO PUSH2 0x26B0 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x24 DUP4 ADD MSTORE DUP5 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x84 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 OR SWAP1 MSTORE PUSH2 0x1A6E SWAP1 DUP6 SWAP1 PUSH2 0x2A1E JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x27A8 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x556E697377617056323A2073616D652061646472657373657300000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH2 0x27C8 JUMPI DUP3 DUP5 PUSH2 0x27CB JUMP JUMPDEST DUP4 DUP4 JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x122E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x556E697377617056323A207A65726F2061646472657373000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x283A DUP6 DUP6 PUSH2 0x273E JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x8 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND 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 PUSH2 0x288C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x28A0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x28B6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 PUSH1 0x60 SWAP6 DUP7 SHL DUP2 AND PUSH1 0x20 DUP4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP5 DUP7 SHL DUP2 AND PUSH1 0x34 DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x28 DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH1 0x48 DUP4 ADD DUP5 MSTORE DUP1 MLOAD SWAP1 DUP7 ADD KECCAK256 PUSH32 0xFF00000000000000000000000000000000000000000000000000000000000000 PUSH1 0x68 DUP5 ADD MSTORE SWAP4 SWAP1 SWAP6 SHL SWAP1 SWAP5 AND PUSH1 0x69 DUP6 ADD MSTORE PUSH1 0x7D DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x96E8AC4277198FF8B6F785478AA9A39F403CB768DD02CBEE326C3E7DA348845F PUSH1 0x9D DUP1 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MLOAD DUP1 DUP6 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xBD SWAP1 SWAP4 ADD SWAP1 MSTORE DUP2 MLOAD SWAP2 ADD KECCAK256 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 PUSH2 0x29F1 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x456E756D4D61703A206E6F6E6578697374656E74206B65790000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP4 PUSH1 0x0 ADD PUSH1 0x1 DUP3 SUB DUP2 SLOAD DUP2 LT PUSH2 0x2A03 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD PUSH1 0x1 ADD SLOAD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 PUSH2 0x2A31 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x2C26 JUMP JUMPDEST PUSH2 0x2A82 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433230577261707065723A206E6F6E2D636F6E7472616374000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x2ADD JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x2AA0 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x2B3F JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x2B44 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 ISZERO PUSH2 0x2BC3 JUMPI DUP1 MLOAD ISZERO PUSH2 0x2BBE JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2B6B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x2BBE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433230577261707065723A206F7065726174696F6E206661696C65640000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x2C1F JUMP JUMPDEST DUP1 MLOAD PUSH2 0x2C16 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433230577261707065723A206F7065726174696F6E206661696C65640000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 MLOAD DUP1 DUP3 PUSH1 0x20 ADD REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x140 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP1 NOT AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE POP SWAP1 JUMP INVALID MSTORE8 PUSH2 0x6665 0x4D PUSH2 0x7468 GASPRICE KECCAK256 PUSH14 0x756C7469706C69636174696F6E20 PUSH16 0x766572666C6F77A26469706673582212 KECCAK256 0xD7 0xBF 0xE7 0x29 SWAP1 SWAP9 0x2D CREATE2 0x5C 0xD5 0xCA PUSH8 0xEFED556BD04518D4 0xD1 0x5E DUP1 0x1F JUMPDEST 0x2D ISZERO 0xBA 0x49 JUMPI SWAP2 CODECOPY PUSH5 0x736F6C6343 STOP SMOD MOD STOP CALLER 0xAB 0xB9 0x26 EQ CREATE2 CALLER CALLDATACOPY DIV EXTCODESIZE SSTORE 0xDC SWAP10 PUSH11 0x83EBB09ADCE78EC336CA18 DUP15 LOG0 0x21 DUP1 0xB6 SAR SHR EQ ","sourceMap":"704:2102:27:-:0;;;1313:313;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1313:313:27;;;;;;;;;;;;;;;;;;;;960:6:1;:15;;-1:-1:-1;;;;;;960:15:1;2518:10:32;960:15:1;;;;;990:40;;1313:313:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2554:4:32;;1313:313:27;;2518:10:32;;;;960:6:1;990:40;;960:6;;990:40;-1:-1:-1;;;;;;512:27:8;::::1;504:60;;;::::0;;-1:-1:-1;;;504:60:8;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;574:12;:28:::0;;-1:-1:-1;;;;;574:28:8;::::1;-1:-1:-1::0;;;;;;574:28:8;;::::1;::::0;::::1;::::0;;;617:30:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;-1:-1:-1::0;;543:6:5;:16;;-1:-1:-1;;543:16:5;;;;;;;;;;2570:28:32::2;::::0;;;2608:44:::2;::::0;;;2687:16:::2;::::0;;2701:1:::2;2687:16:::0;;;;;::::2;::::0;;-1:-1:-1;;2687:16:32::2;::::0;::::2;::::0;;::::2;::::0;::::2;-1:-1:-1::0;;2739:16:32::2;::::0;;2753:1:::2;2739:16:::0;;;;;::::2;::::0;;2662:41;;-1:-1:-1;2713:23:32::2;::::0;2739:16;;-1:-1:-1;2753:1:32;2739:16:::2;::::0;::::2;::::0;;::::2;::::0;::::2;-1:-1:-1::0;;2766:8:32;;2713:42;;-1:-1:-1;;;;2765:66:32;1751:44:::2;::::0;-1:-1:-1;2766:5:32;;2803:27:::2;::::0;2766:8:::2;;;;;;;;;2776:6;2783:1;2776:9;;;;;;;;;;;;;2765:66;;;::::0;::::2;;;::::0;::::2;;-1:-1:-1::0;;2886:34:32::2;;-1:-1:-1::0;;;2841:80:32::2;2842:5;2848:1;2842:8;;;;;;;;;;;;;2852:6;2859:1;2852:9;;;;;;;;;;;;;2841:80;;;::::0;::::2;;;::::0;::::2;;-1:-1:-1::0;;;;;;;;;;;2948:5:32::2;2955:6;2936:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::2;::::0;;;::::2;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::2;::::0;;;::::2;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;1605:14:29::1;:32:::0;;-1:-1:-1;;;;;;1605:32:29::1;-1:-1:-1::0;;;;;1605:32:29;::::1;;::::0;;-1:-1:-1;;;;;;;;;;1672:16:29::1;::::0;-1:-1:-1;;1672:16:29;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;1672:16:29::1;-1:-1:-1::0;1724:16:29::1;::::0;;1738:1:::1;1724:16:::0;;;;;::::1;::::0;;;1647:41;;-1:-1:-1;1698:23:29::1;::::0;1724:16;::::1;::::0;;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;1724:16:29::1;1698:42;;-1:-1:-1::0;;1803:33:29::1;;1750:87;;1751:5;1757:1;1751:8;;;;;;;;;;;;;1761:6;1768:1;1761:9;;;;;;;;;;;;;1750:87;;;::::0;::::1;;;::::0;::::1;;-1:-1:-1::0;;;;;;;;;;;1864:5:29::1;1871:6;1852:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;1370:515;;::::0;;;;594:37:22;614:16;594:19;;;:37;;:::i;:::-;537:101;1313:313:27;;;;;704:2102;;1955:175:22;2038:15;:34;;-1:-1:-1;;;;;2038:34:22;;-1:-1:-1;;;;;;2038:34:22;;;;;;;;2087:36;;;;;;;;;;;;;;;;1955:175;:::o;704:2102:27:-;;;;;;;;;;;;;"},"deployedBytecode":{"generatedSources":[],"immutableReferences":{"5787":[{"length":32,"start":7092}]},"linkReferences":{},"object":"60806040526004361061015f5760003560e01c80638456cb59116100c0578063a963b25711610074578063c7b778db11610059578063c7b778db146106c7578063f21f537d14610796578063f2fde38b146107ab5761015f565b8063a963b2571461061d578063be9a6555146106b25761015f565b80638da5cb5b116100a55780638da5cb5b146105e15780639865bcc8146105f65780639e049545146105f65761015f565b80638456cb59146105b75780638488bb4e146105cc5761015f565b80635c4fafc7116101175780635e6e9f70116100fc5780635e6e9f70146103e457806361bd38511461051f5780636b8f9c43146105845761015f565b80635c4fafc7146103a65780635c975abb146103bb5761015f565b80631694505e116101485780631694505e146102925780632a8a45bc146102a75780633f4ba83a1461038f5761015f565b80631265b651146101645780631323b06614610195575b600080fd5b34801561017057600080fd5b506101796107de565b604080516001600160a01b039092168252519081900360200190f35b3480156101a157600080fd5b50610237600480360360a08110156101b857600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a0810160808201356401000000008111156101f857600080fd5b82018360208201111561020a57600080fd5b8035906020019184600183028401116401000000008311171561022c57600080fd5b5090925090506107ed565b6040518083815260200180602001828103825283818151815260200191508051906020019060200280838360005b8381101561027d578181015183820152602001610265565b50505050905001935050505060405180910390f35b34801561029e57600080fd5b506101796108e2565b3480156102b357600080fd5b506102d1600480360360208110156102ca57600080fd5b50356108f1565b60405180878152602001868152602001858152602001846001600160a01b031681526020018060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561033657818101518382015260200161031e565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561037557818101518382015260200161035d565b505050509050019850505050505050505060405180910390f35b34801561039b57600080fd5b506103a4610a96565b005b3480156103b257600080fd5b50610179610b04565b3480156103c757600080fd5b506103d0610b1c565b604080519115158252519081900360200190f35b3480156103f057600080fd5b506103a46004803603606081101561040757600080fd5b8135919081019060408101602082013564010000000081111561042957600080fd5b82018360208201111561043b57600080fd5b8035906020019184602083028401116401000000008311171561045d57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092959493602081019350359150506401000000008111156104ad57600080fd5b8201836020820111156104bf57600080fd5b803590602001918460208302840111640100000000831117156104e157600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610b25945050505050565b34801561052b57600080fd5b50610534610d02565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610570578181015183820152602001610558565b505050509050019250505060405180910390f35b34801561059057600080fd5b506103a4600480360360208110156105a757600080fd5b50356001600160a01b0316610d5d565b3480156105c357600080fd5b506103a4610e35565b3480156105d857600080fd5b50610179610e9c565b3480156105ed57600080fd5b50610179610eab565b34801561060257600080fd5b5061060b610eba565b60408051918252519081900360200190f35b6103a4600480360360a081101561063357600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a08101608082013564010000000081111561067357600080fd5b82018360208201111561068557600080fd5b803590602001918460018302840111640100000000831117156106a757600080fd5b509092509050610ec0565b3480156106be57600080fd5b506103a4610fa6565b3480156106d357600080fd5b50610534600480360360408110156106ea57600080fd5b81019060208101813564010000000081111561070557600080fd5b82018360208201111561071757600080fd5b8035906020019184602083028401116401000000008311171561073957600080fd5b91939092909160208101903564010000000081111561075757600080fd5b82018360208201111561076957600080fd5b8035906020019184600183028401116401000000008311171561078b57600080fd5b509092509050610fb9565b3480156107a257600080fd5b5061060b6110a5565b3480156107b757600080fd5b506103a4600480360360208110156107ce57600080fd5b50356001600160a01b03166110ab565b6007546001600160a01b031681565b6000606060025460001415610849576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b61085161111c565b610859612c2c565b610861611174565b6001600160a01b03908116825289811660208084019190915290891660408084019190915260608301899052608083018890528051601f870183900483028101830190915285815290869086908190840183828082843760009201919091525050505060a08201526108d281611178565b9250925050965096945050505050565b6008546001600160a01b031681565b60008181526006602052604081208190819081906060908190836109176004830161119f565b8254985090508761096f576040805162461bcd60e51b815260206004820152601660248201527f53616c653a206e6f6e2d6578697374656e7420736b7500000000000000000000604482015290519081900360640190fd5b60018201546002830154600384015491985096506001600160a01b031694508067ffffffffffffffff811180156109a557600080fd5b506040519080825280602002602001820160405280156109cf578160200160208202803683370190505b5093508067ffffffffffffffff811180156109e957600080fd5b50604051908082528060200260200182016040528015610a13578160200160208202803683370190505b50925060005b81811015610a8a57600080610a3160048601846111a3565b915091508160001c878481518110610a4557fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508060001c868481518110610a7557fe5b60209081029190910101525050600101610a19565b50505091939550919395565b600254610aea576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b610afa610af5611174565b611235565b610b026112fc565b565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b60035460ff1681565b610b30610af5611174565b815181518114610b87576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20696e636f6e73697374656e742061727261797300000000000000604482015290519081900360640190fd5b60008481526006602052604090208054610be8576040805162461bcd60e51b815260206004820152601660248201527f53616c653a206e6f6e2d6578697374656e7420736b7500000000000000000000604482015290519081900360640190fd5b6004810182610c33576000610bfc8261119f565b905060005b81811015610c2c576000610c1584826111a3565b509050610c228482611354565b5050600101610c01565b5050610c3e565b610c3e818686611434565b857fcb3fe5489e0cd43d0f4a33d1e09a4a0463a03d0d38f56165530854e5540db1438686604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015610ca6578181015183820152602001610c8e565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015610ce5578181015183820152602001610ccd565b5050505090500194505050505060405180910390a2505050505050565b60606004600001805480602002602001604051908101604052809291908181526020018280548015610d5357602002820191906000526020600020905b815481526020019060010190808311610d3f575b5050505050905090565b610d68610af5611174565b6001600160a01b038116610dc3576040805162461bcd60e51b815260206004820152601460248201527f5061796f75743a207a65726f2061646472657373000000000000000000000000604482015290519081900360640190fd5b600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03838116919091179182905560408051929091168252517fdd880d24a789958a6398c99c2e54ce31bc10a638cbc42f7dd34285479ae0f855916020908290030190a150565b600254610e89576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b610e94610af5611174565b610b026114bc565b6001546001600160a01b031681565b6000546001600160a01b031690565b60001981565b600254610f14576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b610f1c61111c565b610f24612c2c565b610f2c611174565b6001600160a01b03908116825287811660208084019190915290871660408084019190915260608301879052608083018690528051601f850183900483028101830190915283815290849084908190840183828082843760009201919091525050505060a0820152610f9d816114fa565b50505050505050565b610fb1610af5611174565b610afa611527565b6060838067ffffffffffffffff81118015610fd357600080fd5b50604051908082528060200260200182016040528015610ffd578160200160208202803683370190505b50915060005b8181101561109b5761107c87878381811061101a57fe5b905060200201356001600160a01b0316600760009054906101000a90046001600160a01b031687878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506115a992505050565b83828151811061108857fe5b6020908102919091010152600101611003565b5050949350505050565b60025490565b6110b6610af5611174565b600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383811691821780845560405192939116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b60035460ff1615610b02576040805162461bcd60e51b815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b3390565b6000606061118583611727565b61118e836119d1565b505060c081015160e0909101519091565b5490565b8154600090819083106111fd576040805162461bcd60e51b815260206004820152601c60248201527f456e756d4d61703a20696e646578206f7574206f6620626f756e647300000000604482015290519081900360640190fd5b600084600001848154811061120e57fe5b906000526020600020906002020190508060000154816001015492509250505b9250929050565b306001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561126e57600080fd5b505afa158015611282573d6000803e3d6000fd5b505050506040513d602081101561129857600080fd5b50516001600160a01b038281169116146112f9576040805162461bcd60e51b815260206004820152601660248201527f4f776e61626c653a206e6f7420746865206f776e657200000000000000000000604482015290519081900360640190fd5b50565b611304611a74565b6003805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611337611174565b604080516001600160a01b039092168252519081900360200190a1565b60008181526001830160205260408120548015611428578354600019808301919081019060009087908390811061138757fe5b90600052602060002090600202019050808760000184815481106113a757fe5b6000918252602080832084546002909302019182556001938401549184019190915583548252898301905260409020908401905586548790806113e657fe5b600082815260208082206002600019909401938402018281556001908101839055929093558881528982019092526040822091909155945061142e9350505050565b60009150505b92915050565b61143f838383611acb565b6114488361119f565b158061146657506007546114669084906001600160a01b0316611c2f565b6114b7576040805162461bcd60e51b815260206004820152601860248201527f53616c653a206e6f207265666572656e636520746f6b656e0000000000000000604482015290519081900360640190fd5b505050565b6114c461111c565b6003805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611337611174565b61150381611727565b61150c816119d1565b61151581611c47565b61151e81611d96565b6112f981611de2565b6002541561157c576040805162461bcd60e51b815260206004820152601260248201527f537461727461626c653a20737461727465640000000000000000000000000000604482015290519081900360640190fd5b426002557f27029695aa5f602a4ee81f4c32dfa86e562f200a17966496f3a7c3f2ec0f9417611337611174565b60006001600160a01b03841673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561164d57600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561161e57600080fd5b505afa158015611632573d6000803e3d6000fd5b505050506040513d602081101561164857600080fd5b505193505b6001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14156116ef57600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156116c057600080fd5b505afa1580156116d4573d6000803e3d6000fd5b505050506040513d60208110156116ea57600080fd5b505192505b6000806116fc86866122c7565b909250905061171d8261171783670de0b6b3a7640000612393565b906123f3565b9695505050505050565b60208101516001600160a01b0316611786576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a207a65726f206164647265737320726563697069656e7400000000604482015290519081900360640190fd5b60408101516001600160a01b03166117e5576040805162461bcd60e51b815260206004820152601860248201527f53616c653a207a65726f206164647265737320746f6b656e0000000000000000604482015290519081900360640190fd5b608081015161183b576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a207a65726f207175616e7469747920707572636861736500000000604482015290519081900360640190fd5b6060810151600090815260066020526040902080546118a1576040805162461bcd60e51b815260206004820152601660248201527f53616c653a206e6f6e2d6578697374656e7420736b7500000000000000000000604482015290519081900360640190fd5b8160800151816002015410156118fe576040805162461bcd60e51b815260206004820152601860248201527f53616c653a2061626f7665206d6178207175616e746974790000000000000000604482015290519081900360640190fd5b80546000191461196557816080015181600101541015611965576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20696e73756666696369656e7420737570706c7900000000000000604482015290519081900360640190fd5b60408201516001600160a01b03166119806004830182611c2f565b6114b7576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a206e6f6e2d6578697374656e7420736b7520746f6b656e00000000604482015290519081900360640190fd5b606081015160009081526006602052604090208054611a37576040805162461bcd60e51b815260206004820152601560248201527f53616c653a20756e737570706f7274656420534b550000000000000000000000604482015290519081900360640190fd5b600481016000611a47848361245a565b9050611a548483836124ca565b611a6e576080840151611a68908290612393565b60c08501525b50505050565b60035460ff16610b02576040805162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604482015290519081900360640190fd5b60005b8251811015611bb1576000838281518110611ae557fe5b6020026020010151905060006001600160a01b0316816001600160a01b03161415611b57576040805162461bcd60e51b815260206004820152601860248201527f53616c653a207a65726f206164647265737320746f6b656e0000000000000000604482015290519081900360640190fd5b6000838381518110611b6557fe5b602002602001015190508060001415611b9157611b8b866001600160a01b038416611354565b50611ba7565b611ba5866001600160a01b038416836125c2565b505b5050600101611ace565b507f0000000000000000000000000000000000000000000000000000000000000000611bdc8461119f565b11156114b7576040805162461bcd60e51b815260206004820152601560248201527f53616c653a20746f6f206d616e7920746f6b656e730000000000000000000000604482015290519081900360640190fd5b60009081526001919091016020526040902054151590565b60408101516001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415611d6a578060c00151341015611cc9576040805162461bcd60e51b815260206004820152601660248201527f53616c653a20696e73756666696369656e742045544800000000000000000000604482015290519081900360640190fd5b60015460c08201516040516001600160a01b039092169181156108fc0291906000818181858888f19350505050158015611d07573d6000803e3d6000fd5b506000611d218260c001513461265990919063ffffffff16565b90508015611d645781516040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611d62573d6000803e3d6000fd5b505b506112f9565b6112f9611d75611174565b60015460c084015160408501516001600160a01b03908116939216906126b6565b60608101516000908152600660205260409020805460001914611dde5760808201516001820154611dc691612659565b60608301516000908152600660205260409020600101555b5050565b806060015181604001516001600160a01b031682600001516001600160a01b03167f29f844483ca6b10b5c0611d039afc15ce8f6380e905307b381c3a8ee4e90e11e846020015185608001518660a001518760c001518860e001518961010001518a610120015160405160200180848051906020019060200280838360005b83811015611e79578181015183820152602001611e61565b50505050905001838051906020019060200280838360005b83811015611ea9578181015183820152602001611e91565b50505050905001828051906020019060200280838360005b83811015611ed9578181015183820152602001611ec1565b50505050905001935050505060405160208183030381529060405260405180866001600160a01b031681526020018581526020018060200184815260200180602001838103835286818151815260200191508051906020019080838360005b83811015611f50578181015183820152602001611f38565b50505050905090810190601f168015611f7d5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015611fb0578181015183820152602001611f98565b50505050905090810190601f168015611fdd5780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390a460608101516000908152600660205260409020600301546001600160a01b03168015611dde576361eceae860e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916816001600160a01b03166361eceae8846000015185602001518660400151876060015188608001518960a001518a60c001518b60e001518c61010001518d61012001516040518b63ffffffff1660e01b8152600401808b6001600160a01b031681526020018a6001600160a01b03168152602001896001600160a01b031681526020018881526020018781526020018060200186815260200180602001806020018060200185810385528a818151815260200191508051906020019080838360005b838110156121165781810151838201526020016120fe565b50505050905090810190601f1680156121435780820380516001836020036101000a031916815260200191505b508581038452885181528851602091820191808b01910280838360005b83811015612178578181015183820152602001612160565b50505050905001858103835287818151815260200191508051906020019060200280838360005b838110156121b757818101518382015260200161219f565b50505050905001858103825286818151815260200191508051906020019060200280838360005b838110156121f65781810151838201526020016121de565b505050509050019e505050505050505050505050505050602060405180830381600087803b15801561222757600080fd5b505af115801561223b573d6000803e3d6000fd5b505050506040513d602081101561225157600080fd5b50517fffffffff000000000000000000000000000000000000000000000000000000001614611dde576040805162461bcd60e51b815260206004820152601a60248201527f53616c653a206e6f74696669636174696f6e2072656675736564000000000000604482015290519081900360640190fd5b60008060006122d6858561273e565b5090506000806122e6878761282b565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561231e57600080fd5b505afa158015612332573d6000803e3d6000fd5b505050506040513d606081101561234857600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506001600160a01b0387811690841614612382578082612385565b81815b909890975095505050505050565b6000826123a25750600061142e565b828202828482816123af57fe5b04146123ec5760405162461bcd60e51b8152600401808060200182810382526021815260200180612c9e6021913960400191505060405180910390fd5b9392505050565b6000808211612449576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161245257fe5b049392505050565b60408201516000906124769083906001600160a01b031661298e565b90508061142e576040805162461bcd60e51b815260206004820152601f60248201527f53616c653a20756e737570706f72746564207061796d656e7420746f6b656e00604482015290519081900360640190fd5b600060001982146124dd575060006123ec565b6007546000906124f79085906001600160a01b031661298e565b604086015160075460a088015192935060009261251e92916001600160a01b0316906115a9565b9050600061254f876080015161254984611717670de0b6b3a76400008861239390919063ffffffff16565b90612393565b604080516002808252606082018352929350919060208301908036833750505060e08801819052805186919060009061258457fe5b6020026020010181815250508160001b8760e001516001815181106125a557fe5b602090810291909101015260c08701525060019150509392505050565b6000828152600184016020526040812054806126275750506040805180820182528381526020808201848152865460018181018955600089815284812095516002909302909501918255915190820155865486845281880190925292909120556123ec565b8285600001600183038154811061263a57fe5b90600052602060002090600202016001018190555060009150506123ec565b6000828211156126b0576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052611a6e908590612a1e565b600080826001600160a01b0316846001600160a01b031614156127a8576040805162461bcd60e51b815260206004820152601960248201527f556e697377617056323a2073616d652061646472657373657300000000000000604482015290519081900360640190fd5b826001600160a01b0316846001600160a01b0316106127c85782846127cb565b83835b90925090506001600160a01b03821661122e576040805162461bcd60e51b815260206004820152601760248201527f556e697377617056323a207a65726f2061646472657373000000000000000000604482015290519081900360640190fd5b600080600061283a858561273e565b91509150600860009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561288c57600080fd5b505afa1580156128a0573d6000803e3d6000fd5b505050506040513d60208110156128b657600080fd5b5051604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606095861b811660208381019190915294861b81166034830152825160288184030181526048830184528051908601207fff0000000000000000000000000000000000000000000000000000000000000060688401529390951b9094166069850152607d8401919091527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f609d808501919091528151808503909101815260bd909301905281519101209392505050565b6000818152600183016020526040812054806129f1576040805162461bcd60e51b815260206004820152601860248201527f456e756d4d61703a206e6f6e6578697374656e74206b65790000000000000000604482015290519081900360640190fd5b836000016001820381548110612a0357fe5b90600052602060002090600202016001015491505092915050565b81612a316001600160a01b038216612c26565b612a82576040805162461bcd60e51b815260206004820152601a60248201527f4552433230577261707065723a206e6f6e2d636f6e7472616374000000000000604482015290519081900360640190fd5b600080826001600160a01b0316846040518082805190602001908083835b60208310612add57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612aa0565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612b3f576040519150601f19603f3d011682016040523d82523d6000602084013e612b44565b606091505b50915091508115612bc357805115612bbe57808060200190516020811015612b6b57600080fd5b5051612bbe576040805162461bcd60e51b815260206004820152601e60248201527f4552433230577261707065723a206f7065726174696f6e206661696c65640000604482015290519081900360640190fd5b612c1f565b8051612c16576040805162461bcd60e51b815260206004820152601e60248201527f4552433230577261707065723a206f7065726174696f6e206661696c65640000604482015290519081900360640190fd5b80518082602001fd5b5050505050565b3b151590565b60405180610140016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160008019168152602001600081526020016060815260200160008152602001606081526020016060815260200160608152509056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220d7bfe72990982df55cd5ca67efed556bd04518d4d15e801f5b2d15ba4957913964736f6c63430007060033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x15F JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8456CB59 GT PUSH2 0xC0 JUMPI DUP1 PUSH4 0xA963B257 GT PUSH2 0x74 JUMPI DUP1 PUSH4 0xC7B778DB GT PUSH2 0x59 JUMPI DUP1 PUSH4 0xC7B778DB EQ PUSH2 0x6C7 JUMPI DUP1 PUSH4 0xF21F537D EQ PUSH2 0x796 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x7AB JUMPI PUSH2 0x15F JUMP JUMPDEST DUP1 PUSH4 0xA963B257 EQ PUSH2 0x61D JUMPI DUP1 PUSH4 0xBE9A6555 EQ PUSH2 0x6B2 JUMPI PUSH2 0x15F JUMP JUMPDEST DUP1 PUSH4 0x8DA5CB5B GT PUSH2 0xA5 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x5E1 JUMPI DUP1 PUSH4 0x9865BCC8 EQ PUSH2 0x5F6 JUMPI DUP1 PUSH4 0x9E049545 EQ PUSH2 0x5F6 JUMPI PUSH2 0x15F JUMP JUMPDEST DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x5B7 JUMPI DUP1 PUSH4 0x8488BB4E EQ PUSH2 0x5CC JUMPI PUSH2 0x15F JUMP JUMPDEST DUP1 PUSH4 0x5C4FAFC7 GT PUSH2 0x117 JUMPI DUP1 PUSH4 0x5E6E9F70 GT PUSH2 0xFC JUMPI DUP1 PUSH4 0x5E6E9F70 EQ PUSH2 0x3E4 JUMPI DUP1 PUSH4 0x61BD3851 EQ PUSH2 0x51F JUMPI DUP1 PUSH4 0x6B8F9C43 EQ PUSH2 0x584 JUMPI PUSH2 0x15F JUMP JUMPDEST DUP1 PUSH4 0x5C4FAFC7 EQ PUSH2 0x3A6 JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x3BB JUMPI PUSH2 0x15F JUMP JUMPDEST DUP1 PUSH4 0x1694505E GT PUSH2 0x148 JUMPI DUP1 PUSH4 0x1694505E EQ PUSH2 0x292 JUMPI DUP1 PUSH4 0x2A8A45BC EQ PUSH2 0x2A7 JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x38F JUMPI PUSH2 0x15F JUMP JUMPDEST DUP1 PUSH4 0x1265B651 EQ PUSH2 0x164 JUMPI DUP1 PUSH4 0x1323B066 EQ PUSH2 0x195 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x170 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x179 PUSH2 0x7DE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1A1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x237 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x1B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x1F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x20A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x22C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x7ED JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x27D JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x265 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP4 POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x29E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x179 PUSH2 0x8E2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2D1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2CA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x8F1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x336 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x31E JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x375 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x35D JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP9 POP POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x39B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3A4 PUSH2 0xA96 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x179 PUSH2 0xB04 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D0 PUSH2 0xB1C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3A4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x407 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x429 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x43B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x45D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 SWAP5 SWAP4 PUSH1 0x20 DUP2 ADD SWAP4 POP CALLDATALOAD SWAP2 POP POP PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x4AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x4BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x4E1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0xB25 SWAP5 POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x52B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x534 PUSH2 0xD02 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 DUP2 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x570 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x558 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x590 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3A4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x5A7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xD5D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3A4 PUSH2 0xE35 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x179 PUSH2 0xE9C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x179 PUSH2 0xEAB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x602 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x60B PUSH2 0xEBA JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x3A4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x633 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x673 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x685 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x6A7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0xEC0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3A4 PUSH2 0xFA6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x534 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x6EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x705 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x717 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x739 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH1 0x20 DUP2 ADD SWAP1 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x757 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x769 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x78B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0xFB9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7A2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x60B PUSH2 0x10A5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3A4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x7CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x10AB JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x2 SLOAD PUSH1 0x0 EQ ISZERO PUSH2 0x849 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x851 PUSH2 0x111C JUMP JUMPDEST PUSH2 0x859 PUSH2 0x2C2C JUMP JUMPDEST PUSH2 0x861 PUSH2 0x1174 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP10 DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP10 AND PUSH1 0x40 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD DUP10 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP9 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x1F DUP8 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD SWAP1 SWAP2 MSTORE DUP6 DUP2 MSTORE SWAP1 DUP7 SWAP1 DUP7 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP POP PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x8D2 DUP2 PUSH2 0x1178 JUMP JUMPDEST SWAP3 POP SWAP3 POP POP SWAP7 POP SWAP7 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP2 SWAP1 DUP2 SWAP1 DUP2 SWAP1 PUSH1 0x60 SWAP1 DUP2 SWAP1 DUP4 PUSH2 0x917 PUSH1 0x4 DUP4 ADD PUSH2 0x119F JUMP JUMPDEST DUP3 SLOAD SWAP9 POP SWAP1 POP DUP8 PUSH2 0x96F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7500000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x3 DUP5 ADD SLOAD SWAP2 SWAP9 POP SWAP7 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP5 POP DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x9A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x9CF JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP4 POP DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x9E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xA13 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xA8A JUMPI PUSH1 0x0 DUP1 PUSH2 0xA31 PUSH1 0x4 DUP7 ADD DUP5 PUSH2 0x11A3 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP2 PUSH1 0x0 SHR DUP8 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0xA45 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP DUP1 PUSH1 0x0 SHR DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0xA75 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP POP PUSH1 0x1 ADD PUSH2 0xA19 JUMP JUMPDEST POP POP POP SWAP2 SWAP4 SWAP6 POP SWAP2 SWAP4 SWAP6 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0xAEA JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0xAFA PUSH2 0xAF5 PUSH2 0x1174 JUMP JUMPDEST PUSH2 0x1235 JUMP JUMPDEST PUSH2 0xB02 PUSH2 0x12FC JUMP JUMPDEST JUMP JUMPDEST PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0xB30 PUSH2 0xAF5 PUSH2 0x1174 JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD DUP2 EQ PUSH2 0xB87 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E636F6E73697374656E742061727261797300000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0xBE8 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7500000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP2 ADD DUP3 PUSH2 0xC33 JUMPI PUSH1 0x0 PUSH2 0xBFC DUP3 PUSH2 0x119F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xC2C JUMPI PUSH1 0x0 PUSH2 0xC15 DUP5 DUP3 PUSH2 0x11A3 JUMP JUMPDEST POP SWAP1 POP PUSH2 0xC22 DUP5 DUP3 PUSH2 0x1354 JUMP JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0xC01 JUMP JUMPDEST POP POP PUSH2 0xC3E JUMP JUMPDEST PUSH2 0xC3E DUP2 DUP7 DUP7 PUSH2 0x1434 JUMP JUMPDEST DUP6 PUSH32 0xCB3FE5489E0CD43D0F4A33D1E09A4A0463A03D0D38F56165530854E5540DB143 DUP7 DUP7 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xCA6 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xC8E JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xCE5 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xCCD JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x4 PUSH1 0x0 ADD DUP1 SLOAD DUP1 PUSH1 0x20 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 DUP1 ISZERO PUSH2 0xD53 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0xD3F JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0xD68 PUSH2 0xAF5 PUSH2 0x1174 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xDC3 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061796F75743A207A65726F2061646472657373000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 SWAP1 SWAP2 OR SWAP2 DUP3 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD SWAP3 SWAP1 SWAP2 AND DUP3 MSTORE MLOAD PUSH32 0xDD880D24A789958A6398C99C2E54CE31BC10A638CBC42F7DD34285479AE0F855 SWAP2 PUSH1 0x20 SWAP1 DUP3 SWAP1 SUB ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0xE89 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0xE94 PUSH2 0xAF5 PUSH2 0x1174 JUMP JUMPDEST PUSH2 0xB02 PUSH2 0x14BC JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 NOT DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0xF14 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0xF1C PUSH2 0x111C JUMP JUMPDEST PUSH2 0xF24 PUSH2 0x2C2C JUMP JUMPDEST PUSH2 0xF2C PUSH2 0x1174 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP8 DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP8 AND PUSH1 0x40 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD DUP8 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP7 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x1F DUP6 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD SWAP1 SWAP2 MSTORE DUP4 DUP2 MSTORE SWAP1 DUP5 SWAP1 DUP5 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP POP PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0xF9D DUP2 PUSH2 0x14FA JUMP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0xFB1 PUSH2 0xAF5 PUSH2 0x1174 JUMP JUMPDEST PUSH2 0xAFA PUSH2 0x1527 JUMP JUMPDEST PUSH1 0x60 DUP4 DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0xFD3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xFFD JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x109B JUMPI PUSH2 0x107C DUP8 DUP8 DUP4 DUP2 DUP2 LT PUSH2 0x101A JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x7 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 DUP8 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x15A9 SWAP3 POP POP POP JUMP JUMPDEST DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1088 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x1003 JUMP JUMPDEST POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x10B6 PUSH2 0xAF5 PUSH2 0x1174 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 DUP3 OR DUP1 DUP5 SSTORE PUSH1 0x40 MLOAD SWAP3 SWAP4 SWAP2 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xB02 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061757361626C653A2070617573656400000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x1185 DUP4 PUSH2 0x1727 JUMP JUMPDEST PUSH2 0x118E DUP4 PUSH2 0x19D1 JUMP JUMPDEST POP POP PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xE0 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP2 JUMP JUMPDEST SLOAD SWAP1 JUMP JUMPDEST DUP2 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP4 LT PUSH2 0x11FD JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x456E756D4D61703A20696E646578206F7574206F6620626F756E647300000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 PUSH1 0x0 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x120E JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD SWAP1 POP DUP1 PUSH1 0x0 ADD SLOAD DUP2 PUSH1 0x1 ADD SLOAD SWAP3 POP SWAP3 POP POP JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8DA5CB5B 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 PUSH2 0x126E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1282 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1298 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ PUSH2 0x12F9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6F7420746865206F776E657200000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0x1304 PUSH2 0x1A74 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA PUSH2 0x1337 PUSH2 0x1174 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0x1428 JUMPI DUP4 SLOAD PUSH1 0x0 NOT DUP1 DUP4 ADD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x0 SWAP1 DUP8 SWAP1 DUP4 SWAP1 DUP2 LT PUSH2 0x1387 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD SWAP1 POP DUP1 DUP8 PUSH1 0x0 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x13A7 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 DUP5 SLOAD PUSH1 0x2 SWAP1 SWAP4 MUL ADD SWAP2 DUP3 SSTORE PUSH1 0x1 SWAP4 DUP5 ADD SLOAD SWAP2 DUP5 ADD SWAP2 SWAP1 SWAP2 SSTORE DUP4 SLOAD DUP3 MSTORE DUP10 DUP4 ADD SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP1 DUP5 ADD SWAP1 SSTORE DUP7 SLOAD DUP8 SWAP1 DUP1 PUSH2 0x13E6 JUMPI INVALID JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 PUSH1 0x2 PUSH1 0x0 NOT SWAP1 SWAP5 ADD SWAP4 DUP5 MUL ADD DUP3 DUP2 SSTORE PUSH1 0x1 SWAP1 DUP2 ADD DUP4 SWAP1 SSTORE SWAP3 SWAP1 SWAP4 SSTORE DUP9 DUP2 MSTORE DUP10 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x40 DUP3 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE SWAP5 POP PUSH2 0x142E SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SWAP2 POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x143F DUP4 DUP4 DUP4 PUSH2 0x1ACB JUMP JUMPDEST PUSH2 0x1448 DUP4 PUSH2 0x119F JUMP JUMPDEST ISZERO DUP1 PUSH2 0x1466 JUMPI POP PUSH1 0x7 SLOAD PUSH2 0x1466 SWAP1 DUP5 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1C2F JUMP JUMPDEST PUSH2 0x14B7 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F207265666572656E636520746F6B656E0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x14C4 PUSH2 0x111C JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH2 0x1337 PUSH2 0x1174 JUMP JUMPDEST PUSH2 0x1503 DUP2 PUSH2 0x1727 JUMP JUMPDEST PUSH2 0x150C DUP2 PUSH2 0x19D1 JUMP JUMPDEST PUSH2 0x1515 DUP2 PUSH2 0x1C47 JUMP JUMPDEST PUSH2 0x151E DUP2 PUSH2 0x1D96 JUMP JUMPDEST PUSH2 0x12F9 DUP2 PUSH2 0x1DE2 JUMP JUMPDEST PUSH1 0x2 SLOAD ISZERO PUSH2 0x157C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A20737461727465640000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST TIMESTAMP PUSH1 0x2 SSTORE PUSH32 0x27029695AA5F602A4EE81F4C32DFA86E562F200A17966496F3A7C3F2EC0F9417 PUSH2 0x1337 PUSH2 0x1174 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x164D JUMPI PUSH1 0x8 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND 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 PUSH2 0x161E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1632 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1648 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP4 POP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x16EF JUMPI PUSH1 0x8 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND 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 PUSH2 0x16C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x16D4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x16EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP3 POP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x16FC DUP7 DUP7 PUSH2 0x22C7 JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x171D DUP3 PUSH2 0x1717 DUP4 PUSH8 0xDE0B6B3A7640000 PUSH2 0x2393 JUMP JUMPDEST SWAP1 PUSH2 0x23F3 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1786 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F206164647265737320726563697069656E7400000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x17E5 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F206164647265737320746F6B656E0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x80 DUP2 ADD MLOAD PUSH2 0x183B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F207175616E7469747920707572636861736500000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0x18A1 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7500000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x80 ADD MLOAD DUP2 PUSH1 0x2 ADD SLOAD LT ISZERO PUSH2 0x18FE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A2061626F7665206D6178207175616E746974790000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 SLOAD PUSH1 0x0 NOT EQ PUSH2 0x1965 JUMPI DUP2 PUSH1 0x80 ADD MLOAD DUP2 PUSH1 0x1 ADD SLOAD LT ISZERO PUSH2 0x1965 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E73756666696369656E7420737570706C7900000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1980 PUSH1 0x4 DUP4 ADD DUP3 PUSH2 0x1C2F JUMP JUMPDEST PUSH2 0x14B7 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7520746F6B656E00000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0x1A37 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20756E737570706F7274656420534B550000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP2 ADD PUSH1 0x0 PUSH2 0x1A47 DUP5 DUP4 PUSH2 0x245A JUMP JUMPDEST SWAP1 POP PUSH2 0x1A54 DUP5 DUP4 DUP4 PUSH2 0x24CA JUMP JUMPDEST PUSH2 0x1A6E JUMPI PUSH1 0x80 DUP5 ADD MLOAD PUSH2 0x1A68 SWAP1 DUP3 SWAP1 PUSH2 0x2393 JUMP JUMPDEST PUSH1 0xC0 DUP6 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND PUSH2 0xB02 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061757361626C653A206E6F7420706175736564000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x1BB1 JUMPI PUSH1 0x0 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1AE5 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1B57 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F206164647265737320746F6B656E0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1B65 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP DUP1 PUSH1 0x0 EQ ISZERO PUSH2 0x1B91 JUMPI PUSH2 0x1B8B DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x1354 JUMP JUMPDEST POP PUSH2 0x1BA7 JUMP JUMPDEST PUSH2 0x1BA5 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP4 PUSH2 0x25C2 JUMP JUMPDEST POP JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x1ACE JUMP JUMPDEST POP PUSH32 0x0 PUSH2 0x1BDC DUP5 PUSH2 0x119F JUMP JUMPDEST GT ISZERO PUSH2 0x14B7 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20746F6F206D616E7920746F6B656E730000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x1D6A JUMPI DUP1 PUSH1 0xC0 ADD MLOAD CALLVALUE LT ISZERO PUSH2 0x1CC9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E73756666696369656E742045544800000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xC0 DUP3 ADD MLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 DUP2 ISZERO PUSH2 0x8FC MUL SWAP2 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x1D07 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x0 PUSH2 0x1D21 DUP3 PUSH1 0xC0 ADD MLOAD CALLVALUE PUSH2 0x2659 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x1D64 JUMPI DUP2 MLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 DUP3 ISZERO PUSH2 0x8FC MUL SWAP1 DUP4 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x1D62 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP JUMPDEST POP PUSH2 0x12F9 JUMP JUMPDEST PUSH2 0x12F9 PUSH2 0x1D75 PUSH2 0x1174 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xC0 DUP5 ADD MLOAD PUSH1 0x40 DUP6 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP4 SWAP3 AND SWAP1 PUSH2 0x26B6 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x0 NOT EQ PUSH2 0x1DDE JUMPI PUSH1 0x80 DUP3 ADD MLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH2 0x1DC6 SWAP2 PUSH2 0x2659 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SSTORE JUMPDEST POP POP JUMP JUMPDEST DUP1 PUSH1 0x60 ADD MLOAD DUP2 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x29F844483CA6B10B5C0611D039AFC15CE8F6380E905307B381C3A8EE4E90E11E DUP5 PUSH1 0x20 ADD MLOAD DUP6 PUSH1 0x80 ADD MLOAD DUP7 PUSH1 0xA0 ADD MLOAD DUP8 PUSH1 0xC0 ADD MLOAD DUP9 PUSH1 0xE0 ADD MLOAD DUP10 PUSH2 0x100 ADD MLOAD DUP11 PUSH2 0x120 ADD MLOAD PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP5 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1E79 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1E61 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1EA9 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1E91 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1ED9 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1EC1 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP4 POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP7 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1F50 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1F38 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1F7D JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP DUP4 DUP2 SUB DUP3 MSTORE DUP5 MLOAD DUP2 MSTORE DUP5 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP7 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1FB0 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1F98 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1FDD JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP8 POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 ISZERO PUSH2 0x1DDE JUMPI PUSH4 0x61ECEAE8 PUSH1 0xE0 SHL PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x61ECEAE8 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD DUP7 PUSH1 0x40 ADD MLOAD DUP8 PUSH1 0x60 ADD MLOAD DUP9 PUSH1 0x80 ADD MLOAD DUP10 PUSH1 0xA0 ADD MLOAD DUP11 PUSH1 0xC0 ADD MLOAD DUP12 PUSH1 0xE0 ADD MLOAD DUP13 PUSH2 0x100 ADD MLOAD DUP14 PUSH2 0x120 ADD MLOAD PUSH1 0x40 MLOAD DUP12 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP6 DUP2 SUB DUP6 MSTORE DUP11 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2116 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x20FE JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x2143 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP DUP6 DUP2 SUB DUP5 MSTORE DUP9 MLOAD DUP2 MSTORE DUP9 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP1 DUP12 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2178 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2160 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP6 DUP2 SUB DUP4 MSTORE DUP8 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x21B7 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x219F JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP6 DUP2 SUB DUP3 MSTORE DUP7 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x21F6 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x21DE JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP15 POP POP POP POP POP POP POP POP POP POP POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2227 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x223B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2251 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND EQ PUSH2 0x1DDE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F74696669636174696F6E2072656675736564000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x22D6 DUP6 DUP6 PUSH2 0x273E JUMP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP1 PUSH2 0x22E6 DUP8 DUP8 PUSH2 0x282B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x902F1AC PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x231E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2332 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x2348 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND SWAP4 POP AND SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND SWAP1 DUP5 AND EQ PUSH2 0x2382 JUMPI DUP1 DUP3 PUSH2 0x2385 JUMP JUMPDEST DUP2 DUP2 JUMPDEST SWAP1 SWAP9 SWAP1 SWAP8 POP SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x23A2 JUMPI POP PUSH1 0x0 PUSH2 0x142E JUMP JUMPDEST DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 PUSH2 0x23AF JUMPI INVALID JUMPDEST DIV EQ PUSH2 0x23EC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2C9E PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 GT PUSH2 0x2449 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206469766973696F6E206279207A65726F000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 DUP4 DUP2 PUSH2 0x2452 JUMPI INVALID JUMPDEST DIV SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x0 SWAP1 PUSH2 0x2476 SWAP1 DUP4 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x298E JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x142E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20756E737570706F72746564207061796D656E7420746F6B656E00 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x0 NOT DUP3 EQ PUSH2 0x24DD JUMPI POP PUSH1 0x0 PUSH2 0x23EC JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x24F7 SWAP1 DUP6 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x298E JUMP JUMPDEST PUSH1 0x40 DUP7 ADD MLOAD PUSH1 0x7 SLOAD PUSH1 0xA0 DUP9 ADD MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 PUSH2 0x251E SWAP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH2 0x15A9 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x254F DUP8 PUSH1 0x80 ADD MLOAD PUSH2 0x2549 DUP5 PUSH2 0x1717 PUSH8 0xDE0B6B3A7640000 DUP9 PUSH2 0x2393 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 PUSH2 0x2393 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x2 DUP1 DUP3 MSTORE PUSH1 0x60 DUP3 ADD DUP4 MSTORE SWAP3 SWAP4 POP SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP POP POP PUSH1 0xE0 DUP9 ADD DUP2 SWAP1 MSTORE DUP1 MLOAD DUP7 SWAP2 SWAP1 PUSH1 0x0 SWAP1 PUSH2 0x2584 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP2 PUSH1 0x0 SHL DUP8 PUSH1 0xE0 ADD MLOAD PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x25A5 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0xC0 DUP8 ADD MSTORE POP PUSH1 0x1 SWAP2 POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x1 DUP5 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 PUSH2 0x2627 JUMPI POP POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE DUP4 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD DUP5 DUP2 MSTORE DUP7 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP10 SSTORE PUSH1 0x0 DUP10 DUP2 MSTORE DUP5 DUP2 KECCAK256 SWAP6 MLOAD PUSH1 0x2 SWAP1 SWAP4 MUL SWAP1 SWAP6 ADD SWAP2 DUP3 SSTORE SWAP2 MLOAD SWAP1 DUP3 ADD SSTORE DUP7 SLOAD DUP7 DUP5 MSTORE DUP2 DUP9 ADD SWAP1 SWAP3 MSTORE SWAP3 SWAP1 SWAP2 KECCAK256 SSTORE PUSH2 0x23EC JUMP JUMPDEST DUP3 DUP6 PUSH1 0x0 ADD PUSH1 0x1 DUP4 SUB DUP2 SLOAD DUP2 LT PUSH2 0x263A JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD PUSH1 0x1 ADD DUP2 SWAP1 SSTORE POP PUSH1 0x0 SWAP2 POP POP PUSH2 0x23EC JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 GT ISZERO PUSH2 0x26B0 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x24 DUP4 ADD MSTORE DUP5 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x84 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 OR SWAP1 MSTORE PUSH2 0x1A6E SWAP1 DUP6 SWAP1 PUSH2 0x2A1E JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x27A8 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x556E697377617056323A2073616D652061646472657373657300000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH2 0x27C8 JUMPI DUP3 DUP5 PUSH2 0x27CB JUMP JUMPDEST DUP4 DUP4 JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x122E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x556E697377617056323A207A65726F2061646472657373000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x283A DUP6 DUP6 PUSH2 0x273E JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x8 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND 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 PUSH2 0x288C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x28A0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x28B6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 PUSH1 0x60 SWAP6 DUP7 SHL DUP2 AND PUSH1 0x20 DUP4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP5 DUP7 SHL DUP2 AND PUSH1 0x34 DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x28 DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH1 0x48 DUP4 ADD DUP5 MSTORE DUP1 MLOAD SWAP1 DUP7 ADD KECCAK256 PUSH32 0xFF00000000000000000000000000000000000000000000000000000000000000 PUSH1 0x68 DUP5 ADD MSTORE SWAP4 SWAP1 SWAP6 SHL SWAP1 SWAP5 AND PUSH1 0x69 DUP6 ADD MSTORE PUSH1 0x7D DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x96E8AC4277198FF8B6F785478AA9A39F403CB768DD02CBEE326C3E7DA348845F PUSH1 0x9D DUP1 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MLOAD DUP1 DUP6 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xBD SWAP1 SWAP4 ADD SWAP1 MSTORE DUP2 MLOAD SWAP2 ADD KECCAK256 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 PUSH2 0x29F1 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x456E756D4D61703A206E6F6E6578697374656E74206B65790000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP4 PUSH1 0x0 ADD PUSH1 0x1 DUP3 SUB DUP2 SLOAD DUP2 LT PUSH2 0x2A03 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD PUSH1 0x1 ADD SLOAD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 PUSH2 0x2A31 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x2C26 JUMP JUMPDEST PUSH2 0x2A82 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433230577261707065723A206E6F6E2D636F6E7472616374000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x2ADD JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x2AA0 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x2B3F JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x2B44 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 ISZERO PUSH2 0x2BC3 JUMPI DUP1 MLOAD ISZERO PUSH2 0x2BBE JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2B6B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x2BBE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433230577261707065723A206F7065726174696F6E206661696C65640000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x2C1F JUMP JUMPDEST DUP1 MLOAD PUSH2 0x2C16 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433230577261707065723A206F7065726174696F6E206661696C65640000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 MLOAD DUP1 DUP3 PUSH1 0x20 ADD REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x140 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP1 NOT AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE POP SWAP1 JUMP INVALID MSTORE8 PUSH2 0x6665 0x4D PUSH2 0x7468 GASPRICE KECCAK256 PUSH14 0x756C7469706C69636174696F6E20 PUSH16 0x766572666C6F77A26469706673582212 KECCAK256 0xD7 0xBF 0xE7 0x29 SWAP1 SWAP9 0x2D CREATE2 0x5C 0xD5 0xCA PUSH8 0xEFED556BD04518D4 0xD1 0x5E DUP1 0x1F JUMPDEST 0x2D ISZERO 0xBA 0x49 JUMPI SWAP2 CODECOPY PUSH5 0x736F6C6343 STOP SMOD MOD STOP CALLER ","sourceMap":"704:2102:27:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;941:29:29;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;941:29:29;;;;;;;;;;;;;;9044:610:32;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9044:610:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9044:610:32;;-1:-1:-1;9044:610:32;-1:-1:-1;9044:610:32;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;491:39:22;;;;;;;;;;;;;:::i;10463:1027:32:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10463:1027:32;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10463:1027:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4169:114;;;;;;;;;;;;;:::i;:::-;;1698:98;;;;;;;;;;;;;:::i;482:18:5:-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;5032:943:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5032:943:32;;;;;;;;-1:-1:-1;5032:943:32;;-1:-1:-1;;5032:943:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5032:943:32;;-1:-1:-1;5032:943:32;;-1:-1:-1;;;;;5032:943:32:i;11621:110::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;660:263:8;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;660:263:8;-1:-1:-1;;;;;660:263:8;;:::i;3787:110:32:-;;;;;;;;;;;;;:::i;379:35:8:-;;;;;;;;;;;;;:::i;1114:94:1:-;;;;;;;;;;;;;:::i;857:77:29:-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;6962:537:32;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6962:537:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6962:537:32;;-1:-1:-1;6962:537:32;-1:-1:-1;6962:537:32;:::i;3396:118::-;;;;;;;;;;;;;:::i;3632:353:29:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3632:353:29;;-1:-1:-1;3632:353:29;-1:-1:-1;3632:353:29;:::i;1276:85:6:-;;;;;;;;;;;;;:::i;1448:197:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1448:197:1;-1:-1:-1;;;;;1448:197:1;;:::i;941:29:29:-;;;-1:-1:-1;;;;;941:29:29;;:::o;9044:610:32:-;9266:18;9286:28;988:10:6;;1002:1;988:15;;980:50;;;;;-1:-1:-1;;;980:50:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;9326:19:32::1;:17;:19::i;:::-;9355:28;;:::i;:::-;9414:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;9393:33:32;;::::1;::::0;;9436:30;;::::1;:18;::::0;;::::1;:30:::0;;;;9476:22;;::::1;:14;::::0;;::::1;:22:::0;;;;9508:12:::1;::::0;::::1;:18:::0;;;9536:17:::1;::::0;::::1;:28:::0;;;9574;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;;;9594:8;;;;;;9574:28;::::1;9594:8:::0;;;;9574:28;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;;;;9574:17:32::1;::::0;::::1;:28:::0;9620:27:::1;9574:8:::0;9620:17:::1;:27::i;:::-;9613:34;;;;;9044:610:::0;;;;;;;;;:::o;491:39:22:-;;;-1:-1:-1;;;;;491:39:22;;:::o;10463:1027:32:-;10573:19;10841:14;;;:9;:14;;;;;10573:19;;;;;;10730:23;;;;10573:19;10882:23;:14;;;:21;:23::i;:::-;10930:19;;;-1:-1:-1;10865:40:32;-1:-1:-1;10967:16:32;10959:51;;;;;-1:-1:-1;;;10959:51:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;11038:23;;;;11096:30;;;;11160:29;;;;11038:23;;-1:-1:-1;11096:30:32;-1:-1:-1;;;;;;11160:29:32;;-1:-1:-1;11223:6:32;11209:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11209:21:32;;11200:30;;11263:6;11249:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11249:21:32;;11240:30;;11285:9;11280:204;11304:6;11300:1;:10;11280:204;;;11332:13;;11364:20;:14;;;11382:1;11364:17;:20::i;:::-;11331:53;;;;11426:5;11418:14;;11398:6;11405:1;11398:9;;;;;;;;;;;;;:35;-1:-1:-1;;;;;11398:35:32;;;-1:-1:-1;;;;;11398:35:32;;;;;11467:5;11459:14;;11447:6;11454:1;11447:9;;;;;;;;;;;;;;;;;:26;-1:-1:-1;;11312:3:32;;11280:204;;;;10463:1027;;;;;;;;;:::o;4169:114::-;988:10:6;;980:50;;;;;-1:-1:-1;;;980:50:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;4225:31:32::1;4243:12;:10;:12::i;:::-;4225:17;:31::i;:::-;4266:10;:8;:10::i;:::-;4169:114::o:0;1698:98::-;1751:44;1698:98;:::o;482:18:5:-;;;;;;:::o;5032:943:32:-;5176:31;5194:12;:10;:12::i;5176:31::-;5234:13;;5275;;5265:23;;5257:61;;;;;-1:-1:-1;;;5257:61:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;5328:23;5354:14;;;:9;:14;;;;;5386:19;;5378:59;;;;;-1:-1:-1;;;5378:59:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;5482:14;;;5510:11;5506:410;;5537:21;5561:20;:11;:18;:20::i;:::-;5537:44;;5600:9;5595:236;5619:13;5615:1;:17;5595:236;;;5737:13;5756:17;:11;5737:13;5756:14;:17::i;:::-;-1:-1:-1;5736:37:32;-1:-1:-1;5791:25:32;:11;5736:37;5791:18;:25::i;:::-;-1:-1:-1;;5634:3:32;;5595:236;;;;5506:410;;;;5861:44;5877:11;5890:6;5898;5861:15;:44::i;:::-;5948:3;5931:37;5953:6;5961;5931:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5032:943;;;;;;:::o;11621:110::-;11672:21;11712:5;:12;;11705:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11621:110;:::o;660:263:8:-;733:31;751:12;:10;:12::i;733:31::-;-1:-1:-1;;;;;782:27:8;;774:60;;;;;-1:-1:-1;;;774:60:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;844:12;:28;;;;-1:-1:-1;;;;;844:28:8;;;;;;;;;;;887:29;;;903:12;;;;887:29;;;;;;;;;;;;;660:263;:::o;3787:110:32:-;988:10:6;;980:50;;;;;-1:-1:-1;;;980:50:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;3841:31:32::1;3859:12;:10;:12::i;3841:31::-;3882:8;:6;:8::i;379:35:8:-:0;;;-1:-1:-1;;;;;379:35:8;;:::o;1114:94:1:-;1169:7;1195:6;-1:-1:-1;;;;;1195:6:1;1114:94;:::o;857:77:29:-;-1:-1:-1;;857:77:29;:::o;6962:537:32:-;988:10:6;;980:50;;;;;-1:-1:-1;;;980:50:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;7183:19:32::1;:17;:19::i;:::-;7212:28;;:::i;:::-;7271:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;7250:33:32;;::::1;::::0;;7293:30;;::::1;:18;::::0;;::::1;:30:::0;;;;7333:22;;::::1;:14;::::0;;::::1;:22:::0;;;;7365:12:::1;::::0;::::1;:18:::0;;;7393:17:::1;::::0;::::1;:28:::0;;;7431;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;;;7451:8;;;;;;7431:28;::::1;7451:8:::0;;;;7431:28;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;;;;7431:17:32::1;::::0;::::1;:28:::0;7470:22:::1;7431:8:::0;7470:12:::1;:22::i;:::-;1040:1:6;6962:537:32::0;;;;;;:::o;3396:118::-;3438:31;3456:12;:10;:12::i;3438:31::-;3479:8;:6;:8::i;3632:353:29:-;3745:22;3796:6;;3827:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3827:21:29;;3819:29;;3863:9;3858:121;3882:6;3878:1;:10;3858:121;;;3920:48;3936:6;;3943:1;3936:9;;;;;;;;;;;;;-1:-1:-1;;;;;3936:9:29;3947:14;;;;;;;;;-1:-1:-1;;;;;3947:14:29;3963:4;;3920:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3920:15:29;;-1:-1:-1;;;3920:48:29:i;:::-;3909:5;3915:1;3909:8;;;;;;;;;;;;;;;;;:59;3890:3;;3858:121;;;;3632:353;;;;;;;:::o;1276:85:6:-;1344:10;;1276:85;:::o;1448:197:1:-;1527:31;1545:12;:10;:12::i;1527:31::-;1568:6;:17;;;;-1:-1:-1;;;;;1568:17:1;;;;;;;;;1600:38;;1568:17;;1621:6;;;1600:38;;1568:6;1600:38;1448:197;:::o;572:96:5:-;634:6;;;;633:7;625:36;;;;;-1:-1:-1;;;625:36:5;;;;;;;;;;;;;;;;;;;;;;;;;;;355:104:7;442:10;355:104;:::o;882:291:30:-;970:18;990:28;1030:21;1042:8;1030:11;:21::i;:::-;1061:18;1070:8;1061;:18::i;:::-;-1:-1:-1;;1103:19:30;;;;1146:20;;;;;1103:19;;882:291::o;4367:107:2:-;4449:18;;4367:107::o;4827:264::-;4930:18;;4894:7;;;;4930:26;-1:-1:-1;4922:67:2;;;;;-1:-1:-1;;;4922:67:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;5000:22;5025:3;:11;;5037:5;5025:18;;;;;;;;;;;;;;;;;;5000:43;;5061:5;:9;;;5072:5;:11;;;5053:31;;;;;4827:264;;;;;;:::o;1770:136:1:-;1860:4;-1:-1:-1;;;;;1860:10:1;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1860:12:1;-1:-1:-1;;;;;1849:23:1;;;;;;1841:58;;;;;-1:-1:-1;;;1841:58:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;1770:136;:::o;1166:131:5:-;1213:16;:14;:16::i;:::-;1239:6;:14;;-1:-1:-1;;1239:14:5;;;1268:22;1277:12;:10;:12::i;:::-;1268:22;;;-1:-1:-1;;;;;1268:22:5;;;;;;;;;;;;;;1166:131::o;2556:1520:2:-;2620:4;2753:16;;;:11;;;:16;;;;;;2784:13;;2780:1290;;3221:18;;-1:-1:-1;;3175:12:2;;;;3221:22;;;;3151:21;;3221:3;;:22;;3512;;;;;;;;;;;;;;;;3483:51;;3655:9;3626:3;:11;;3638:13;3626:26;;;;;;;;;;;;;;;;:38;;:26;;;;;:38;;;;;;;;;;;;;;;3742:13;;3730:26;;:11;;;:26;;;;;3759:17;;;3730:46;;3882:17;;3730:3;;3882:17;;;;;;;;;;;;;;-1:-1:-1;;3882:17:2;;;;;;;;;;;;;;;;;;;;;3974:16;;;:11;;;:16;;;;;;3967:23;;;;3882:17;-1:-1:-1;4005:11:2;;-1:-1:-1;;;;4005:11:2;2780:1290;4054:5;4047:12;;;2556:1520;;;;;:::o;4676:361:29:-;4850:50;4872:11;4885:6;4893;4850:21;:50::i;:::-;4918:20;:11;:18;:20::i;:::-;:25;;:83;;-1:-1:-1;4984:14:29;;4947:54;;:11;;-1:-1:-1;;;;;4984:14:29;4947:20;:54::i;:::-;4910:120;;;;;-1:-1:-1;;;4910:120:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;4676:361;;;:::o;905:129:5:-;950:19;:17;:19::i;:::-;979:6;:13;;-1:-1:-1;;979:13:5;988:4;979:13;;;1007:20;1014:12;:10;:12::i;1275:225:30:-;1354:21;1366:8;1354:11;:21::i;:::-;1385:18;1394:8;1385;:18::i;:::-;1413;1422:8;1413;:18::i;:::-;1441:19;1451:8;1441:9;:19::i;:::-;1470:23;1484:8;1470:13;:23::i;1496:131:6:-;789:10;;:15;781:46;;;;;-1:-1:-1;;;781:46:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;1569:15:::1;1556:10;:28:::0;1599:21:::1;1607:12;:10;:12::i;2299:505:27:-:0;2453:12;-1:-1:-1;;;;;2481:22:27;;1751:44:32;2481:22:27;2477:87;;;2531:15;;;;;;;;;-1:-1:-1;;;;;2531:15:27;-1:-1:-1;;;;;2531:20:27;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2531:22:27;;-1:-1:-1;2477:87:27;-1:-1:-1;;;;;2578:20:27;;1751:44:32;2578:20:27;2574:83;;;2624:15;;;;;;;;;-1:-1:-1;;;;;2624:15:27;-1:-1:-1;;;;;2624:20:27;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2624:22:27;;-1:-1:-1;2574:83:27;2668:19;2689:17;2710:32;2723:9;2734:7;2710:12;:32::i;:::-;2667:75;;-1:-1:-1;2667:75:27;-1:-1:-1;2759:38:27;2667:75;2759:21;2667:75;2773:6;2759:13;:21::i;:::-;:25;;:38::i;:::-;2752:45;2299:505;-1:-1:-1;;;;;;2299:505:27:o;15465:852:32:-;15565:18;;;;-1:-1:-1;;;;;15565:32:32;15557:73;;;;;-1:-1:-1;;;15557:73:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;15648:14;;;;-1:-1:-1;;;;;15648:28:32;15640:65;;;;;-1:-1:-1;;;15640:65:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;15723:17;;;;15715:63;;;;;-1:-1:-1;;;15715:63:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;15824:12;;;;15788:23;15814;;;:9;:23;;;;;15855:19;;15847:59;;;;;-1:-1:-1;;;15847:59:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;15958:8;:17;;;15924:7;:30;;;:51;;15916:88;;;;;-1:-1:-1;;;15916:88:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;16018:19;;-1:-1:-1;;16018:39:32;16014:152;;16108:8;:17;;;16081:7;:23;;;:44;;16073:82;;;;;-1:-1:-1;;;16073:82:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;16210:14;;;;-1:-1:-1;;;;;16202:23:32;16244:33;:14;;;16202:23;16244;:33::i;:::-;16236:74;;;;;-1:-1:-1;;;16236:74:32;;;;;;;;;;;;;;;;;;;;;;;;;;;2571:463:29;2696:12;;;;2660:23;2686;;;:9;:23;;;;;2727:19;;2719:58;;;;;-1:-1:-1;;;2719:58:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;2816:14;;;2787:26;2860:28;2871:8;2816:14;2860:10;:28::i;:::-;2840:48;;2904:43;2919:8;2929:6;2937:9;2904:14;:43::i;:::-;2899:129;;2999:17;;;;2985:32;;:9;;:13;:32::i;:::-;2963:19;;;:54;2899:129;2571:463;;;;:::o;674:96:5:-;732:6;;;;724:39;;;;;-1:-1:-1;;;724:39:5;;;;;;;;;;;;;;;;;;;;;;;;;;;13862:663:32;14032:9;14027:403;14051:6;:13;14047:1;:17;14027:403;;;14085:13;14101:6;14108:1;14101:9;;;;;;;;;;;;;;14085:25;;14149:1;-1:-1:-1;;;;;14132:19:32;:5;-1:-1:-1;;;;;14132:19:32;;;14124:56;;;;;-1:-1:-1;;;14124:56:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;14194:13;14210:6;14217:1;14210:9;;;;;;;;;;;;;;14194:25;;14237:5;14246:1;14237:10;14233:187;;;14267:43;:11;-1:-1:-1;;;;;14294:14:32;;14267:18;:43::i;:::-;;14233:187;;;14349:56;:11;-1:-1:-1;;;;;14373:14:32;;14398:5;14349:15;:56::i;:::-;;14233:187;-1:-1:-1;;14066:3:32;;14027:403;;;;14471:21;14447:20;:11;:18;:20::i;:::-;:45;;14439:79;;;;;-1:-1:-1;;;14439:79:32;;;;;;;;;;;;;;;;;;;;;;;;;;;4155:122:2;4226:4;4249:16;;;:11;;;;;:16;;;;;;:21;;;4155:122::o;2637:566:26:-;2725:14;;;;-1:-1:-1;;;;;2725:27:26;1751:44:32;2725:27:26;2721:476;;;2789:8;:19;;;2776:9;:32;;2768:67;;;;;-1:-1:-1;;;2768:67:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;2850:12;;2872:19;;;;2850:42;;-1:-1:-1;;;;;2850:12:26;;;;:42;;;;;2872:19;2850:12;:42;:12;:42;2872:19;2850:12;:42;;;;;;;;;;;;;;;;;;;;;2907:14;2924:34;2938:8;:19;;;2924:9;:13;;:34;;;;:::i;:::-;2907:51;-1:-1:-1;2977:11:26;;2973:85;;3008:18;;:35;;-1:-1:-1;;;;;3008:27:26;;;;:35;;;;;3036:6;;3008:18;:35;:18;:35;3036:6;3008:27;:35;;;;;;;;;;;;;;;;;;;;;2973:85;2721:476;;;;3088:98;3138:12;:10;:12::i;:::-;3152;;3166:19;;;;3102:14;;;;-1:-1:-1;;;;;3088:49:26;;;;:98;3152:12;;3088:49;:98::i;16954:308:32:-;17075:12;;;;17039:23;17065;;;:9;:23;;;;;17102:19;;-1:-1:-1;;17102:39:32;17098:158;;17227:17;;;;17199:23;;;;:46;;:27;:46::i;:::-;17167:12;;;;17157:23;;;;:9;:23;;;;;:39;;:88;17098:158;16954:308;;:::o;17993:1293::-;18201:8;:12;;;18173:8;:14;;;-1:-1:-1;;;;;18087:328:32;18109:8;:18;;;-1:-1:-1;;;;;18087:328:32;;18141:8;:18;;;18227:8;:17;;;18258:8;:17;;;18289:8;:19;;;18339:8;:20;;;18361:8;:20;;;18383:8;:21;;;18322:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18087:328;;;;-1:-1:-1;;;;;18087:328:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18087:328:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18468:12;;;;18426:29;18458:23;;;:9;:23;;;;;:45;;;-1:-1:-1;;;;;18458:45:32;18517:35;;18513:767;;19095:82;;;18593:584;;;18624:21;-1:-1:-1;;;;;18593:84:32;;18699:8;:18;;;18739:8;:18;;;18779:8;:14;;;18815:8;:12;;;18849:8;:17;;;18888:8;:17;;;18927:8;:19;;;18968:8;:20;;;19010:8;:20;;;19052:8;:21;;;18593:498;;;;;;;;;;;;;-1:-1:-1;;;;;18593:498:32;;;;;;-1:-1:-1;;;;;18593:498:32;;;;;;-1:-1:-1;;;;;18593:498:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18593:498:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18593:498:32;:584;;;18568:701;;;;;-1:-1:-1;;;18568:701:32;;;;;;;;;;;;;;;;;;;;;;;;;;;1571:378:22;1648:16;1666;1695:14;1715:27;1727:6;1735;1715:11;:27::i;:::-;1694:48;;;1753:16;1771;1808:24;1817:6;1825;1808:8;:24::i;:::-;-1:-1:-1;;;;;1793:52:22;;:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1793:54:22;;;;;;;1752:95;;;;;-1:-1:-1;1752:95:22;;-1:-1:-1;;;;;;1880:16:22;;;;;;;:62;;1923:8;1933;1880:62;;;1900:8;1910;1880:62;1857:85;;;;-1:-1:-1;1571:378:22;-1:-1:-1;;;;;;1571:378:22:o;3538:215:11:-;3596:7;3619:6;3615:20;;-1:-1:-1;3634:1:11;3627:8;;3615:20;3657:5;;;3661:1;3657;:5;:1;3680:5;;;;;:10;3672:56;;;;-1:-1:-1;;;3672:56:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3745:1;3538:215;-1:-1:-1;;;3538:215:11:o;4217:150::-;4275:7;4306:1;4302;:5;4294:44;;;;;-1:-1:-1;;;4294:44:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;4359:1;4355;:5;;;;;;;4217:150;-1:-1:-1;;;4217:150:11:o;3773:278:26:-;3958:14;;;;3882:17;;3931:44;;:6;;-1:-1:-1;;;;;3950:23:26;3931:10;:44::i;:::-;3923:53;-1:-1:-1;3994:14:26;3986:58;;;;;-1:-1:-1;;;3986:58:26;;;;;;;;;;;;;;;;;;;;;;;;;;;5729:802:29;5896:4;-1:-1:-1;;5916:9:29;:37;5912:80;;-1:-1:-1;5976:5:29;5969:12;;5912:80;6071:14;;6002:26;;6039:49;;:11;;-1:-1:-1;;;;;6071:14:29;6039:15;:49::i;:::-;6141:14;;;;6157;;6173:17;;;;6031:58;;-1:-1:-1;6031:58:29;;6125:66;;6141:14;-1:-1:-1;;;;;6157:14:29;;6125:15;:66::i;:::-;6100:91;;6202:18;6223:73;6278:8;:17;;;6223:50;6258:14;6223:30;6246:6;6223:18;:22;;:30;;;;:::i;:50::-;:54;;:73::i;:::-;6330:16;;;6344:1;6330:16;;;;;;;;6202:94;;-1:-1:-1;6330:16:29;6344:1;6330:16;;;;;;;;-1:-1:-1;;;6307:20:29;;;:39;;;6356:23;;6390:9;;6307:39;6382:18;;6356:23;;;;;;;;;:44;;;;;6444:14;6436:23;;6410:8;:20;;;6431:1;6410:23;;;;;;;;;;;;;;;;;:49;6470:19;;;:32;-1:-1:-1;6520:4:29;;-1:-1:-1;;5729:802:29;;;;;:::o;1678:710:2:-;1784:4;1917:16;;;:11;;;:16;;;;;;1948:13;1944:438;;-1:-1:-1;;2043:34:2;;;;;;;;;;;;;;;;;;2026:52;;;;;;;;:11;:52;;;;;;;;;;;;;;;;;;;;;;;;2232:18;;2213:16;;;:11;;;:16;;;;;;;:37;2264:11;;1944:438;2340:5;2306:3;:11;;2329:1;2318:8;:12;2306:25;;;;;;;;;;;;;;;;;;:31;;:39;;;;2366:5;2359:12;;;;;3136:155:11;3194:7;3226:1;3221;:6;;3213:49;;;;;-1:-1:-1;;;3213:49:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3279:5:11;;;3136:155::o;645:259:9:-;828:68;;;-1:-1:-1;;;;;828:68:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;851:27;828:68;;;793:104;;821:5;;793:27;:104::i;644:327:22:-;720:14;736;780:6;-1:-1:-1;;;;;770:16:22;:6;-1:-1:-1;;;;;770:16:22;;;762:54;;;;;-1:-1:-1;;;762:54:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;854:6;-1:-1:-1;;;;;845:15:22;:6;-1:-1:-1;;;;;845:15:22;;:53;;883:6;891;845:53;;;864:6;872;845:53;826:72;;-1:-1:-1;826:72:22;-1:-1:-1;;;;;;916:20:22;;908:56;;;;;-1:-1:-1;;;908:56:22;;;;;;;;;;;;;;;;;;;;;;;;;;;977:588;1050:12;1075:14;1091;1109:27;1121:6;1129;1109:11;:27::i;:::-;1074:62;;;;1305:15;;;;;;;;;-1:-1:-1;;;;;1305:15:22;-1:-1:-1;;;;;1305:23:22;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1305:25:22;1366:32;;;;;;;;;;1305:25;1366:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1356:43;;;;;;1230:286;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1199:335;;;;;;977:588;-1:-1:-1;;;977:588:22:o;5243:298:2:-;5309:7;5347:16;;;:11;;;:16;;;;;;5381:13;5373:50;;;;;-1:-1:-1;;;5373:50:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;5476:3;:11;;5499:1;5488:8;:12;5476:25;;;;;;;;;;;;;;;;;;:31;;;5469:38;;;5243:298;;;;:::o;1147:870:9:-;1272:5;1296:19;-1:-1:-1;;;;;1296:17:9;;;:19::i;:::-;1288:58;;;;;-1:-1:-1;;;1288:58:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;1417:12;1431:17;1452:6;-1:-1:-1;;;;;1452:11:9;1464:8;1452:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1416:57;;;;1487:7;1483:528;;;1514:11;;:16;1510:122;;1569:4;1558:24;;;;;;;;;;;;;;;-1:-1:-1;1558:24:9;1550:67;;;;;-1:-1:-1;;;1550:67:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;1483:528;;;1720:11;;1716:95;;1756:40;;;-1:-1:-1;;;1756:40:9;;;;;;;;;;;;;;;;;;;;;;;;;;;1716:95;1938:4;1932:11;1982:4;1975;1971:2;1967:13;1960:27;1902:99;1147:870;;;;;:::o;913:377:10:-;1229:20;1275:8;;;913:377::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o"},"methodIdentifiers":{"PRICE_CONVERT_VIA_ORACLE()":"9865bcc8","SUPPLY_UNLIMITED()":"9e049545","TOKEN_ETH()":"5c4fafc7","conversionRates(address[],bytes)":"c7b778db","estimatePurchase(address,address,bytes32,uint256,bytes)":"1323b066","getSkuInfo(bytes32)":"2a8a45bc","getSkus()":"61bd3851","owner()":"8da5cb5b","pause()":"8456cb59","paused()":"5c975abb","payoutWallet()":"8488bb4e","purchaseFor(address,address,bytes32,uint256,bytes)":"a963b257","referenceToken()":"1265b651","setPayoutWallet(address)":"6b8f9c43","start()":"be9a6555","startedAt()":"f21f537d","transferOwnership(address)":"f2fde38b","uniswapV2Router()":"1694505e","unpause()":"3f4ba83a","updateSkuPricing(bytes32,address[],uint256[])":"5e6e9f70"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"payoutWallet_\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"skusCapacity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensPerSkuCapacity\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"referenceToken\",\"type\":\"address\"},{\"internalType\":\"contract IUniswapV2Router\",\"name\":\"uniswapV2Router\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32[]\",\"name\":\"names\",\"type\":\"bytes32[]\"},{\"indexed\":false,\"internalType\":\"bytes32[]\",\"name\":\"values\",\"type\":\"bytes32[]\"}],\"name\":\"MagicValues\",\"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\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"payoutWallet_\",\"type\":\"address\"}],\"name\":\"PayoutWalletSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"purchaser\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalPrice\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extData\",\"type\":\"bytes\"}],\"name\":\"Purchase\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"maxQuantityPerPurchase\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"notificationsReceiver\",\"type\":\"address\"}],\"name\":\"SkuCreation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"prices\",\"type\":\"uint256[]\"}],\"name\":\"SkuPricingUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Started\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contract IUniswapV2Router\",\"name\":\"uniswapV2Router\",\"type\":\"address\"}],\"name\":\"UniswapV2RouterSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"PRICE_CONVERT_VIA_ORACLE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SUPPLY_UNLIMITED\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TOKEN_ETH\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"conversionRates\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"rates\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"estimatePurchase\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalPrice\",\"type\":\"uint256\"},{\"internalType\":\"bytes32[]\",\"name\":\"pricingData\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"}],\"name\":\"getSkuInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"remainingSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxQuantityPerPurchase\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"notificationsReceiver\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"prices\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSkus\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"skus\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"payoutWallet\",\"outputs\":[{\"internalType\":\"address payable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"purchaseFor\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"referenceToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"payoutWallet_\",\"type\":\"address\"}],\"name\":\"setPayoutWallet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"start\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"uniswapV2Router\",\"outputs\":[{\"internalType\":\"contract IUniswapV2Router\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"prices\",\"type\":\"uint256[]\"}],\"name\":\"updateSkuPricing\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Emits the `MagicValues` event.Emits the `Paused` event.\",\"params\":{\"payoutWallet_\":\"The payout wallet.\",\"referenceToken\":\"The token to use for oracle-based conversions.\",\"skusCapacity\":\"The cap for the number of managed SKUs.\",\"tokensPerSkuCapacity\":\"The cap for the number of tokens managed per SKU.\",\"uniswapV2Router\":\"The UniswapV2 router contract used to facilitate operations against the Uniswap network.\"}},\"conversionRates(address[],bytes)\":{\"details\":\"Reverts if the oracle does not provide a conversion rate for one of the token pairs.\",\"params\":{\"data\":\"Additional data with no specified format for deriving the conversion rates.\",\"tokens\":\"The list of tokens to retrieve the conversion rates for.\"},\"returns\":{\"rates\":\"The conversion rates for the `tokens`/`referenceToken` pairs, retrieved via the oracle.\"}},\"estimatePurchase(address,address,bytes32,uint256,bytes)\":{\"details\":\"This function MUST compute the same price as `purchaseFor` would in identical conditions (same arguments, same point in time).If an implementer contract uses the `pricingData` field, it SHOULD document how to interpret the values.Reverts if the sale has not started.Reverts if the sale is paused.Reverts if `recipient` is the zero address.Reverts if `token` is the zero address.Reverts if `quantity` is zero.Reverts if `quantity` is greater than the maximum purchase quantity.Reverts if `quantity` is greater than the remaining supply.Reverts if `sku` does not exist.Reverts if `sku` exists but does not have a price set for `token`.\",\"params\":{\"quantity\":\"The quantity used to calculate the total price amount.\",\"recipient\":\"The recipient of the purchase used to calculate the total price amount.\",\"sku\":\"The identifier of the SKU used to calculate the total price amount.\",\"token\":\"The payment token used to calculate the total price amount.\",\"userData\":\"Optional extra user input data.\"},\"returns\":{\"pricingData\":\"Implementation-specific extra pricing data, such as details about discounts applied.  If not empty, the implementer MUST document how to interepret the values.\",\"totalPrice\":\"The computed total price.\"}},\"getSkuInfo(bytes32)\":{\"details\":\"WARNING: it is the responsibility of the implementer to ensure that the number of payment tokens is bounded, so that this function does not run out of gas.Reverts if `sku` does not exist.\",\"params\":{\"sku\":\"The SKU identifier.\"},\"returns\":{\"maxQuantityPerPurchase\":\"The maximum allowed quantity for a single purchase.\",\"notificationsReceiver\":\"The address of a contract on which to call the `onPurchaseNotificationReceived` function.\",\"prices\":\"The list of associated prices for each of the `tokens`.\",\"remainingSupply\":\"The remaining supply for sale.\",\"tokens\":\"The list of supported payment tokens.\",\"totalSupply\":\"The initial total supply for sale.\"}},\"getSkus()\":{\"returns\":{\"skus\":\"the list of created SKU identifiers.\"}},\"pause()\":{\"details\":\"Emits the `Paused` event.Reverts if called by any other than the contract owner.Reverts if the contract has not been started yet.Reverts if the contract is already paused.\"},\"purchaseFor(address,address,bytes32,uint256,bytes)\":{\"details\":\"Reverts if the sale has not started.Reverts if the sale is paused.Reverts if `recipient` is the zero address.Reverts if `token` is the zero address.Reverts if `quantity` is zero.Reverts if `quantity` is greater than the maximum purchase quantity.Reverts if `quantity` is greater than the remaining supply.Reverts if `sku` does not exist.Reverts if `sku` exists but does not have a price set for `token`.Emits the Purchase event.\",\"params\":{\"quantity\":\"The quantity to purchase.\",\"recipient\":\"The recipient of the purchase.\",\"sku\":\"The identifier of the SKU to purchase.\",\"token\":\"The token to use as the payment currency.\",\"userData\":\"Optional extra user input data.\"}},\"start()\":{\"details\":\"Emits the `Started` event.Emits the `Unpaused` event.Reverts if called by any other than the contract owner.Reverts if the contract has already been started.Reverts if the contract is not paused.\"},\"startedAt()\":{\"returns\":{\"_0\":\"The timestamp when the contract entered the started state.\"}},\"transferOwnership(address)\":{\"details\":\"Reverts if the sender is not the current contract owner.\",\"params\":{\"newOwner\":\"the address of the new owner. Use the zero address to renounce the ownership.\"}},\"unpause()\":{\"details\":\"Emits the `Unpaused` event.Reverts if called by any other than the contract owner.Reverts if the contract has not been started yet.Reverts if the contract is not paused.\"},\"updateSkuPricing(bytes32,address[],uint256[])\":{\"details\":\"Reverts if called by any other than the contract owner.Reverts if `tokens` and `prices` have different lengths.Reverts if `sku` does not exist.Reverts if one of the `tokens` is the zero address.Reverts if the update results in too many tokens for the SKU.Emits the `SkuPricingUpdate` event.\",\"params\":{\"prices\":\"The list of prices to apply for each payment token.  Zero price values are used to disable a payment token.\",\"sku\":\"The identifier of the SKU.\",\"tokens\":\"The list of payment tokens to update.  If empty, disable all the existing payment tokens.\"}}},\"title\":\"UniswapOracleSale An OracleSale which implements a Uniswap-based token conversion pricing strategy. The final  implementer is responsible for implementing any additional pricing and/or delivery logic. PurchaseData.pricingData:  - a non-zero length array indicates Uniswap-based pricing, otherwise indicates fixed pricing.  - [0] uint256: the token conversion rate used for Uniswap-based pricing.\",\"version\":1},\"userdoc\":{\"events\":{\"MagicValues(bytes32[],bytes32[])\":{\"notice\":\"Event emitted to notify about the magic values necessary for interfacing with this contract.\"},\"OwnershipTransferred(address,address)\":{\"notice\":\"Event emited when ownership of a contract changes.\"},\"Purchase(address,address,address,bytes32,uint256,bytes,uint256,bytes)\":{\"notice\":\"Event emitted to notify about a purchase.\"},\"SkuCreation(bytes32,uint256,uint256,address)\":{\"notice\":\"Event emitted to notify about the creation of a SKU.\"},\"SkuPricingUpdate(bytes32,address[],uint256[])\":{\"notice\":\"Event emitted to notify about a change in the pricing of a SKU.\"}},\"kind\":\"user\",\"methods\":{\"PRICE_CONVERT_VIA_ORACLE()\":{\"notice\":\"Returns the price magic value used to represent an oracle-based token conversion pricing.\"},\"SUPPLY_UNLIMITED()\":{\"notice\":\"Returns the magic value used to represent an infinite, never-decreasing SKU's supply.\"},\"TOKEN_ETH()\":{\"notice\":\"Returns the magic value used to represent the ETH payment token.\"},\"constructor\":{\"notice\":\"Constructor.\"},\"conversionRates(address[],bytes)\":{\"notice\":\"Retrieves the token conversion rates for the `tokens`/`referenceToken` pairs via the oracle.\"},\"estimatePurchase(address,address,bytes32,uint256,bytes)\":{\"notice\":\"Estimates the computed final total amount to pay for a purchase, including any potential discount.\"},\"getSkuInfo(bytes32)\":{\"notice\":\"Returns the information relative to a SKU.\"},\"getSkus()\":{\"notice\":\"Returns the list of created SKU identifiers.\"},\"owner()\":{\"notice\":\"Gets the address of the current contract owner.\"},\"pause()\":{\"notice\":\"Pauses the contract.\"},\"purchaseFor(address,address,bytes32,uint256,bytes)\":{\"notice\":\"Performs a purchase.\"},\"start()\":{\"notice\":\"Actvates, or 'starts', the contract.\"},\"startedAt()\":{\"notice\":\"Returns the timestamp when the contract entered the started state.\"},\"transferOwnership(address)\":{\"notice\":\"See {IERC173-transferOwnership(address)}\"},\"unpause()\":{\"notice\":\"Resumes the contract.\"},\"updateSkuPricing(bytes32,address[],uint256[])\":{\"notice\":\"Sets the token prices for the specified product SKU.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/sale/UniswapOracleSale.sol\":\"UniswapOracleSale\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":2000},\"remappings\":[]},\"sources\":{\"@animoca/ethereum-contracts-core-1.1.2/contracts/access/IERC173.sol\":{\"keccak256\":\"0xeb8a2c766577e782ad66ce8591a8d206b0f37b657754cc7a43beeb2d9343873b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3b404032cb4e21bae47b5e9af1290e41117040b10f69e3b2f93522b97e329b59\",\"dweb:/ipfs/QmRJHYkkvWcXGuFJdbqV18yh9QUk5g4zETrrxD2HnU3iRw\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/access/Ownable.sol\":{\"keccak256\":\"0xbfd1129669bb7c154ee84b3aa1484e421ca68cb725c1039a897629631fd8b096\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://edc634aeae7272726745b1cbbf116dfdde51833b71a143e94fe7de89e9b14566\",\"dweb:/ipfs/QmXtXckxdFM3VeLvsjMWhqt44WAf7XKVYKt9bUT7pyWbjH\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/algo/EnumMap.sol\":{\"keccak256\":\"0x12716c299c0965f4f87c2792cda2bd6029ba629c1172cdfef08d95cb2d7c283f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8d17c9bcb9bb0b9f399f6366f85b4db981df6e319f90b1b84910d6c44a79d032\",\"dweb:/ipfs/QmcqU3Gj8BP88yRV571GyCcW2UAjxq2xiqRofXFKYzkRXT\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/algo/EnumSet.sol\":{\"keccak256\":\"0x0aaea4634a7c64ef61b1ee8380912084427b45b6b4fc254b76d4b78e39f92d35\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://356a344f770d238dd864e8530d2ee05e350f269346cdf02432bc767e90520ce1\",\"dweb:/ipfs/QmfQfasYUY69X4wnzizPqT8P24YZTAPQGgFQErsSzV5sva\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/lifecycle/Pausable.sol\":{\"keccak256\":\"0xaa32d2e66a8edb68c64ffab1db69925248cf3f774c40b062e1e8ff2f4d5eebed\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://37451b151d862be6413ee1d18e3500a9100128f09926a2260d0ea058c3148d8a\",\"dweb:/ipfs/QmNLsaNioeA4LK8fVpqvSkQrCob1DkENcqQUurqDQbQK3G\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/lifecycle/Startable.sol\":{\"keccak256\":\"0x87e273577d4716cbbb325f03ec91207e1022bb7f56cdcda56593c603d2b4592f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d305d7c885971e1b82a363b4c9237c4201390610621a67605b89694ca9680e35\",\"dweb:/ipfs/QmWZX1cEfsfQSoEjBgBaBn3rKJxfyaJMpJyofpM9LG4tEp\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/metatx/ManagedIdentity.sol\":{\"keccak256\":\"0xe544b34375f19f9d1ad6e309f2fc56849263cc3c3c77009f6b38782f7dea9971\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3eb04bbf1c13ca82971c1cb2fdd96a23e2dfaa5df6a7d3b7e773dd3a760cf4e4\",\"dweb:/ipfs/QmXArzbKQgsMebfYVSQtaCLAs3rp3FYp6MKjSQnZoGDnjf\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/payment/PayoutWallet.sol\":{\"keccak256\":\"0x45ef7f68177cb61463f0ac759782f490821917fac3a71a18263c38193a9c6229\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://67839b4cc5897d723099ebfd8e0593e809b02cf422056efc1497f88dd7abb415\",\"dweb:/ipfs/QmYFRXvggoT8RzWB7SSJmfaBY3xkoVYNaGotTLBxjXqqxx\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/utils/ERC20Wrapper.sol\":{\"keccak256\":\"0x57922168ce32d2260022c0c7075137940e7d3cf0bb0d2213e62194050fbcf392\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b2dbba2defa32aa9edb54797f9b3f4ec1c1e5f71193deb99289136fa2f02ad79\",\"dweb:/ipfs/QmbUbzdwyWwjw3VW1o5oBKyuG9cFN7n8j55P8MDAg3sCuK\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/utils/types/AddressIsContract.sol\":{\"keccak256\":\"0x08373f750eedc1226b22b8ab1e156b0689c463590fa7dc40e99329b2da7b5d47\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fac8cdd7be4a83b47b18c8a48c1b1779a2590118049734665a6de91e77f27d35\",\"dweb:/ipfs/QmcAobvMpD5TisPTQSihPhywmVbPv1jDhffJCaZptM7YLv\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0xcc78a17dd88fa5a2edc60c8489e2f405c0913b377216a5b26b35656b2d0dab52\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://526dc85e1f9b9b45830e202568d267d93dde7a4fcccf4ad7798dadcd92304d3c\",\"dweb:/ipfs/QmaoXMB972J3cSDLtBq3xBo4jLwqD2uzXTwujtSPqkYVhR\"]},\"contracts/oracle/UniswapV2Adapter.sol\":{\"keccak256\":\"0x1b347929faf3ddee2568b011fe50bc921bdfe23bceea7022d47259d195860a99\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://364cd66a80a90ec5ac4f1688ffb40825d5ae31197a9104d0271783f9e892f5e5\",\"dweb:/ipfs/QmaAL7GUBRRYc6U96uX7E91AFo9vz9xDqRBYX8SvZGmMg4\"]},\"contracts/oracle/interfaces/IUniswapV2Pair.sol\":{\"keccak256\":\"0xd0762fd9035a7ffa6f70623a464aee4d5c85e9e2bb07e24021af45f738a493af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3ce4fc6e82b116ca7fda0e83df93a4de8adb13e2c72f24390b63b326f01ccc3d\",\"dweb:/ipfs/QmVAZFgd7cEGdxUFTsoz7MUQvCrkqjaFtBB2oZmGd3LA1H\"]},\"contracts/oracle/interfaces/IUniswapV2Router.sol\":{\"keccak256\":\"0x0f8cb0c1e71543770defc0f19a08b62e64b7e19101b8e45643bf7ceb8416c149\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://b14aedff9a94b564366790c1720d1c55472e5d13106c1b89a0d479715dc3c3bd\",\"dweb:/ipfs/QmQQyrKigBpar2uJGLVXFY799e5cNxTX6dFQW3myFAs8Kn\"]},\"contracts/sale/FixedPricesSale.sol\":{\"keccak256\":\"0xad902ccee0e2a42eea07b4c1e011202096daff92b43158a1569d139caf93b3f0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a702cc102db63b18e0581da5d6c01ee9320cec4b690c3117b4f77316fce45185\",\"dweb:/ipfs/QmWL7kh3kBSxDYjVoq9gN79UpKLrRBgJCHqquyaCE8UWhe\"]},\"contracts/sale/UniswapOracleSale.sol\":{\"keccak256\":\"0xe2b1578d62ac17539575ec80ae3835336698f7e381a4f3c4441f3981e343c73e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://00c35b230aa4027c46aeafc11746e4fd9085a7704aa1d1602ef138abedf19c57\",\"dweb:/ipfs/QmcbfPEq4s7NP2swt56cAey41pVRxGYcLmQQtkeNAD9E7J\"]},\"contracts/sale/abstract/OracleSale.sol\":{\"keccak256\":\"0x7a5dae50fe750564347bfcd4eef33b552b901d7c688db6fae8c8e2dd442cce54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e3388afb44cf6b074cf58820e142b43ce4614bed6a004c4275f6ab05da984449\",\"dweb:/ipfs/QmbucAD5Q7cSh4Ryz8cFt7Yx4KdsXMhqcHofR75oLBuMW2\"]},\"contracts/sale/abstract/PurchaseLifeCycles.sol\":{\"keccak256\":\"0xaa18c1de5628dbd5ff281f06354b0156cb8bd24a6f5b490a787931c374266f6a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2e0731a0100fc1bda747176f169cacc5d61d89df1c78884d8843a834d58f7dcd\",\"dweb:/ipfs/QmZRDAxcvQ9QySqnmQLVM1i797NCqSJrJjKUneEmTufXBQ\"]},\"contracts/sale/abstract/Sale.sol\":{\"keccak256\":\"0x32dd01f3ca07c26e834f5784b4f2434c9cf309e3e30b2421a26da16ccf5d0e26\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://009418ea08f714b3f536d09e04d65ec39d3a4e9ba33e554ac8a26036cff8335b\",\"dweb:/ipfs/QmQvMXpCaaAwtHE4qxXYn2rxPgPzqzJM6aGuyz4nut5CH5\"]},\"contracts/sale/interfaces/IOracleSale.sol\":{\"keccak256\":\"0x754fdf88f73519515a9d3748ea136b0e1137095969e91bf7e7b4cf9afb78d164\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://04a0f5ae476580e9a4011d7b6f6e00940498de2be550da0df88fc35ca3b5241c\",\"dweb:/ipfs/QmSjaAFzMbR38ofQtgvyxYKN8N4b7nY4hZAfXkNxe3HSyq\"]},\"contracts/sale/interfaces/IPurchaseNotificationsReceiver.sol\":{\"keccak256\":\"0xa85dcec80f528757a52dd66f88ae14845477e3ec733cb4d22af6db71d19e90f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://36e14e08666d5fd2af5b78848a84a11c666c65c94ca46f88e896c041da1dc1c7\",\"dweb:/ipfs/QmYiHM2DBVuX4adJfJMSvdrdfmDooHxhwGtmhNP7k2DY9n\"]},\"contracts/sale/interfaces/ISale.sol\":{\"keccak256\":\"0x0d731f242662465b2aa3ea9fe3581d0e77e3f61601390f68e4c9c75fc2103f5f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2a04d527397a7f75bd1d701fa7af263cb0799ef4d2f32dc44bb6c9598cee3625\",\"dweb:/ipfs/QmRnsakvvkU1yJyviEM8eytdCTUvjqsw1aqzdntycoG2aV\"]}},\"version\":1}"}},"contracts/sale/UniswapSwapSale.sol":{"UniswapSwapSale":{"abi":[{"inputs":[{"internalType":"address payable","name":"payoutWallet_","type":"address"},{"internalType":"uint256","name":"skusCapacity","type":"uint256"},{"internalType":"uint256","name":"tokensPerSkuCapacity","type":"uint256"},{"internalType":"address","name":"referenceToken","type":"address"},{"internalType":"contract IUniswapV2Router","name":"uniswapV2Router","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32[]","name":"names","type":"bytes32[]"},{"indexed":false,"internalType":"bytes32[]","name":"values","type":"bytes32[]"}],"name":"MagicValues","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":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"payoutWallet_","type":"address"}],"name":"PayoutWalletSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"purchaser","type":"address"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"bytes32","name":"sku","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"quantity","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"userData","type":"bytes"},{"indexed":false,"internalType":"uint256","name":"totalPrice","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"extData","type":"bytes"}],"name":"Purchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"sku","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxQuantityPerPurchase","type":"uint256"},{"indexed":false,"internalType":"address","name":"notificationsReceiver","type":"address"}],"name":"SkuCreation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"sku","type":"bytes32"},{"indexed":false,"internalType":"address[]","name":"tokens","type":"address[]"},{"indexed":false,"internalType":"uint256[]","name":"prices","type":"uint256[]"}],"name":"SkuPricingUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Started","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract IUniswapV2Router","name":"uniswapV2Router","type":"address"}],"name":"UniswapV2RouterSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"PRICE_CONVERT_VIA_ORACLE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE_SWAP_VIA_ORACLE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SUPPLY_UNLIMITED","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOKEN_ETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"conversionRates","outputs":[{"internalType":"uint256[]","name":"rates","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"estimatePurchase","outputs":[{"internalType":"uint256","name":"totalPrice","type":"uint256"},{"internalType":"bytes32[]","name":"pricingData","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"sku","type":"bytes32"}],"name":"getSkuInfo","outputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"uint256","name":"remainingSupply","type":"uint256"},{"internalType":"uint256","name":"maxQuantityPerPurchase","type":"uint256"},{"internalType":"address","name":"notificationsReceiver","type":"address"},{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"prices","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSkus","outputs":[{"internalType":"bytes32[]","name":"skus","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payoutWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"purchaseFor","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"referenceToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"payoutWallet_","type":"address"}],"name":"setPayoutWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"start","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256","name":"referenceAmount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"swapRates","outputs":[{"internalType":"uint256[]","name":"rates","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"prices","type":"uint256[]"}],"name":"updateSkuPricing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}],"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"60c06040523480156200001157600080fd5b506040516200476a3803806200476a833981810160405260a08110156200003757600080fd5b50805160208201516040808401516060850151608090950151600080546001600160a01b0319163390811782559351959694959294939192839288928892889288928692869286928692869286928692859285928592600192918691839182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001600160a01b03811662000119576040805162461bcd60e51b815260206004820152601460248201527f5061796f75743a207a65726f2061646472657373000000000000000000000000604482015290519081900360640190fd5b600180546001600160a01b0383166001600160a01b0319909116811790915560408051918252517fdd880d24a789958a6398c99c2e54ce31bc10a638cbc42f7dd34285479ae0f8559181900360200190a150506003805460ff1916911515919091179055608082905260a081905260408051600280825260608201835260009260208301908036833750506040805160028082526060820183529394506000939092509060208301908036833750508351919250680a89e968a9cbe8aa8960bb1b9173eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee91508490600090620001fe57fe5b60200260200101836000815181106200021357fe5b602002602001018281525082815250505060001960001b6f14d55414131657d5539312535255115160821b90836001815181106200024d57fe5b60200260200101836001815181106200026257fe5b60200260200101828152508281525050506000805160206200474a8339815191528282604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015620002cb578181015183820152602001620002b1565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156200030c578181015183820152602001620002f2565b5050505090500194505050505060405180910390a15050600780546001600160a01b0319166001600160a01b03891617905550600094506001935084925062000353915050565b506040519080825280602002602001820160405280156200037e578160200160208202803683370190505b50604080516001808252818301909252919250600091906020808301908036833701905050905060001960001b7f50524943455f434f4e564552545f5649415f4f5241434c4500000000000000009083600081518110620003db57fe5b6020026020010183600081518110620003f057fe5b60200260200101828152508281525050506000805160206200474a8339815191528282604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015620004595781810151838201526020016200043f565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156200049a57818101518382015260200162000480565b5050505090500194505050505060405180910390a1505050505050600060016001600160401b0381118015620004cf57600080fd5b50604051908082528060200260200182016040528015620004fa578160200160208202803683370190505b506040805160018082528183019092529192506000919060208083019080368337505083519192507f50524943455f535741505f5649415f4f5241434c45000000000000000000000091600119915084906000906200055557fe5b60200260200101836000815181106200056a57fe5b60200260200101828152508281525050506000805160206200474a8339815191528282604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015620005d3578181015183820152602001620005b9565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101562000614578181015183820152602001620005fa565b5050505090500194505050505060405180910390a150505050505062000640816200064c60201b60201c565b505050505050620006a0565b600880546001600160a01b0383166001600160a01b0319909116811790915560408051918252517ffe70995e26c62b71bbd53a5b9e09215c42e2006fad72ba845051faa8de1510ba9181900360200190a150565b60805160a05161408b620006bf60003980611e1452505061408b6000f3fe6080604052600436106101795760003560e01c80638456cb59116100cb578063a963b2571161007f578063c7b778db11610059578063c7b778db1461083d578063f21f537d1461090c578063f2fde38b14610921576101ef565b8063a963b257146106c0578063bda4c5ab14610755578063be9a655514610828576101ef565b80638da5cb5b116100b05780638da5cb5b146106965780639865bcc8146106ab5780639e049545146106ab576101ef565b80638456cb591461066c5780638488bb4e14610681576101ef565b8063579f2c771161012d5780635e6e9f70116101075780635e6e9f701461049957806361bd3851146105d45780636b8f9c4314610639576101ef565b8063579f2c77146104345780635c4fafc71461045b5780635c975abb14610470576101ef565b80631694505e1161015e5780631694505e146103225780632a8a45bc146103375780633f4ba83a1461041f576101ef565b80631265b651146101f45780631323b06614610225576101ef565b366101ef576008546001600160a01b0316610192610954565b6001600160a01b0316146101ed576040805162461bcd60e51b815260206004820152601860248201527f53616c653a20496e76616c6964204554482073656e6465720000000000000000604482015290519081900360640190fd5b005b600080fd5b34801561020057600080fd5b50610209610958565b604080516001600160a01b039092168252519081900360200190f35b34801561023157600080fd5b506102c7600480360360a081101561024857600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a08101608082013564010000000081111561028857600080fd5b82018360208201111561029a57600080fd5b803590602001918460018302840111640100000000831117156102bc57600080fd5b509092509050610967565b6040518083815260200180602001828103825283818151815260200191508051906020019060200280838360005b8381101561030d5781810151838201526020016102f5565b50505050905001935050505060405180910390f35b34801561032e57600080fd5b50610209610a5c565b34801561034357600080fd5b506103616004803603602081101561035a57600080fd5b5035610a6b565b60405180878152602001868152602001858152602001846001600160a01b031681526020018060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156103c65781810151838201526020016103ae565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156104055781810151838201526020016103ed565b505050509050019850505050505050505060405180910390f35b34801561042b57600080fd5b506101ed610c10565b34801561044057600080fd5b50610449610c7e565b60408051918252519081900360200190f35b34801561046757600080fd5b50610209610c84565b34801561047c57600080fd5b50610485610c9c565b604080519115158252519081900360200190f35b3480156104a557600080fd5b506101ed600480360360608110156104bc57600080fd5b813591908101906040810160208201356401000000008111156104de57600080fd5b8201836020820111156104f057600080fd5b8035906020019184602083028401116401000000008311171561051257600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561056257600080fd5b82018360208201111561057457600080fd5b8035906020019184602083028401116401000000008311171561059657600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610ca5945050505050565b3480156105e057600080fd5b506105e9610e82565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561062557818101518382015260200161060d565b505050509050019250505060405180910390f35b34801561064557600080fd5b506101ed6004803603602081101561065c57600080fd5b50356001600160a01b0316610edd565b34801561067857600080fd5b506101ed610fb5565b34801561068d57600080fd5b5061020961101c565b3480156106a257600080fd5b5061020961102b565b3480156106b757600080fd5b5061044961103a565b6101ed600480360360a08110156106d657600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a08101608082013564010000000081111561071657600080fd5b82018360208201111561072857600080fd5b8035906020019184600183028401116401000000008311171561074a57600080fd5b509092509050611040565b34801561076157600080fd5b506105e96004803603606081101561077857600080fd5b81019060208101813564010000000081111561079357600080fd5b8201836020820111156107a557600080fd5b803590602001918460208302840111640100000000831117156107c757600080fd5b919390928235926040810190602001356401000000008111156107e957600080fd5b8201836020820111156107fb57600080fd5b8035906020019184600183028401116401000000008311171561081d57600080fd5b509092509050611126565b34801561083457600080fd5b506101ed611235565b34801561084957600080fd5b506105e96004803603604081101561086057600080fd5b81019060208101813564010000000081111561087b57600080fd5b82018360208201111561088d57600080fd5b803590602001918460208302840111640100000000831117156108af57600080fd5b9193909290916020810190356401000000008111156108cd57600080fd5b8201836020820111156108df57600080fd5b8035906020019184600183028401116401000000008311171561090157600080fd5b509092509050611248565b34801561091857600080fd5b50610449611334565b34801561092d57600080fd5b506101ed6004803603602081101561094457600080fd5b50356001600160a01b031661133a565b3390565b6007546001600160a01b031681565b60006060600254600014156109c3576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b6109cb6113ab565b6109d3613fc3565b6109db610954565b6001600160a01b03908116825289811660208084019190915290891660408084019190915260608301899052608083018890528051601f870183900483028101830190915285815290869086908190840183828082843760009201919091525050505060a0820152610a4c81611403565b9250925050965096945050505050565b6008546001600160a01b031681565b6000818152600660205260408120819081908190606090819083610a916004830161142a565b82549850905087610ae9576040805162461bcd60e51b815260206004820152601660248201527f53616c653a206e6f6e2d6578697374656e7420736b7500000000000000000000604482015290519081900360640190fd5b60018201546002830154600384015491985096506001600160a01b031694508067ffffffffffffffff81118015610b1f57600080fd5b50604051908082528060200260200182016040528015610b49578160200160208202803683370190505b5093508067ffffffffffffffff81118015610b6357600080fd5b50604051908082528060200260200182016040528015610b8d578160200160208202803683370190505b50925060005b81811015610c0457600080610bab600486018461142e565b915091508160001c878481518110610bbf57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508060001c868481518110610bef57fe5b60209081029190910101525050600101610b93565b50505091939550919395565b600254610c64576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b610c74610c6f610954565b6114c0565b610c7c611587565b565b60011981565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b60035460ff1681565b610cb0610c6f610954565b815181518114610d07576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20696e636f6e73697374656e742061727261797300000000000000604482015290519081900360640190fd5b60008481526006602052604090208054610d68576040805162461bcd60e51b815260206004820152601660248201527f53616c653a206e6f6e2d6578697374656e7420736b7500000000000000000000604482015290519081900360640190fd5b6004810182610db3576000610d7c8261142a565b905060005b81811015610dac576000610d95848261142e565b509050610da284826115df565b5050600101610d81565b5050610dbe565b610dbe8186866116bf565b857fcb3fe5489e0cd43d0f4a33d1e09a4a0463a03d0d38f56165530854e5540db1438686604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015610e26578181015183820152602001610e0e565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015610e65578181015183820152602001610e4d565b5050505090500194505050505060405180910390a2505050505050565b60606004600001805480602002602001604051908101604052809291908181526020018280548015610ed357602002820191906000526020600020905b815481526020019060010190808311610ebf575b5050505050905090565b610ee8610c6f610954565b6001600160a01b038116610f43576040805162461bcd60e51b815260206004820152601460248201527f5061796f75743a207a65726f2061646472657373000000000000000000000000604482015290519081900360640190fd5b600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03838116919091179182905560408051929091168252517fdd880d24a789958a6398c99c2e54ce31bc10a638cbc42f7dd34285479ae0f855916020908290030190a150565b600254611009576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b611014610c6f610954565b610c7c611747565b6001546001600160a01b031681565b6000546001600160a01b031690565b60001981565b600254611094576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b61109c6113ab565b6110a4613fc3565b6110ac610954565b6001600160a01b03908116825287811660208084019190915290871660408084019190915260608301879052608083018690528051601f850183900483028101830190915283815290849084908190840183828082843760009201919091525050505060a082015261111d81611785565b50505050505050565b6060848067ffffffffffffffff8111801561114057600080fd5b5060405190808252806020026020018201604052801561116a578160200160208202803683370190505b50915060005b8181101561122a5760006111ec89898481811061118957fe5b905060200201356001600160a01b0316600760009054906101000a90046001600160a01b03168989898080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506117b292505050565b905061120a8161120489670de0b6b3a764000061190c565b9061196c565b84838151811061121657fe5b602090810291909101015250600101611170565b505095945050505050565b611240610c6f610954565b610c746119d3565b6060838067ffffffffffffffff8111801561126257600080fd5b5060405190808252806020026020018201604052801561128c578160200160208202803683370190505b50915060005b8181101561132a5761130b8787838181106112a957fe5b905060200201356001600160a01b0316600760009054906101000a90046001600160a01b031687878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a5592505050565b83828151811061131757fe5b6020908102919091010152600101611292565b5050949350505050565b60025490565b611345610c6f610954565b600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383811691821780845560405192939116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b60035460ff1615610c7c576040805162461bcd60e51b815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b6000606061141083611bcd565b61141983611c31565b505060c081015160e0909101519091565b5490565b815460009081908310611488576040805162461bcd60e51b815260206004820152601c60248201527f456e756d4d61703a20696e646578206f7574206f6620626f756e647300000000604482015290519081900360640190fd5b600084600001848154811061149957fe5b906000526020600020906002020190508060000154816001015492509250505b9250929050565b306001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156114f957600080fd5b505afa15801561150d573d6000803e3d6000fd5b505050506040513d602081101561152357600080fd5b50516001600160a01b03828116911614611584576040805162461bcd60e51b815260206004820152601660248201527f4f776e61626c653a206e6f7420746865206f776e657200000000000000000000604482015290519081900360640190fd5b50565b61158f611cd4565b6003805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6115c2610954565b604080516001600160a01b039092168252519081900360200190a1565b600081815260018301602052604081205480156116b3578354600019808301919081019060009087908390811061161257fe5b906000526020600020906002020190508087600001848154811061163257fe5b60009182526020808320845460029093020191825560019384015491840191909155835482528983019052604090209084019055865487908061167157fe5b60008281526020808220600260001990940193840201828155600190810183905592909355888152898201909252604082209190915594506116b99350505050565b60009150505b92915050565b6116ca838383611d2b565b6116d38361142a565b15806116f157506007546116f19084906001600160a01b0316611e8f565b611742576040805162461bcd60e51b815260206004820152601860248201527f53616c653a206e6f207265666572656e636520746f6b656e0000000000000000604482015290519081900360640190fd5b505050565b61174f6113ab565b6003805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586115c2610954565b61178e81611bcd565b61179781611c31565b6117a081611ea7565b6117a981611f20565b61158481611f6c565b60006001600160a01b03851673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561185657600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561182757600080fd5b505afa15801561183b573d6000803e3d6000fd5b505050506040513d602081101561185157600080fd5b505194505b6001600160a01b03841673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14156118f857600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156118c957600080fd5b505afa1580156118dd573d6000803e3d6000fd5b505050506040513d60208110156118f357600080fd5b505193505b611903858585612451565b95945050505050565b60008261191b575060006116b9565b8282028284828161192857fe5b04146119655760405162461bcd60e51b81526004018080602001828103825260218152602001806140356021913960400191505060405180910390fd5b9392505050565b60008082116119c2576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b8183816119cb57fe5b049392505050565b60025415611a28576040805162461bcd60e51b815260206004820152601260248201527f537461727461626c653a20737461727465640000000000000000000000000000604482015290519081900360640190fd5b426002557f27029695aa5f602a4ee81f4c32dfa86e562f200a17966496f3a7c3f2ec0f94176115c2610954565b60006001600160a01b03841673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415611af957600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611aca57600080fd5b505afa158015611ade573d6000803e3d6000fd5b505050506040513d6020811015611af457600080fd5b505193505b6001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415611b9b57600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611b6c57600080fd5b505afa158015611b80573d6000803e3d6000fd5b505050506040513d6020811015611b9657600080fd5b505192505b600080611ba88686612658565b9092509050611bc38261120483670de0b6b3a764000061190c565b9695505050505050565b611bd681612724565b60408160a00151511015611584576040805162461bcd60e51b815260206004820152601760248201527f53616c653a206d697373696e6720757365722064617461000000000000000000604482015290519081900360640190fd5b606081015160009081526006602052604090208054611c97576040805162461bcd60e51b815260206004820152601560248201527f53616c653a20756e737570706f7274656420534b550000000000000000000000604482015290519081900360640190fd5b600481016000611ca784836129ce565b9050611cb4848383612a3e565b611cce576080840151611cc890829061190c565b60c08501525b50505050565b60035460ff16610c7c576040805162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604482015290519081900360640190fd5b60005b8251811015611e11576000838281518110611d4557fe5b6020026020010151905060006001600160a01b0316816001600160a01b03161415611db7576040805162461bcd60e51b815260206004820152601860248201527f53616c653a207a65726f206164647265737320746f6b656e0000000000000000604482015290519081900360640190fd5b6000838381518110611dc557fe5b602002602001015190508060001415611df157611deb866001600160a01b0384166115df565b50611e07565b611e05866001600160a01b03841683612b42565b505b5050600101611d2e565b507f0000000000000000000000000000000000000000000000000000000000000000611e3c8461142a565b1115611742576040805162461bcd60e51b815260206004820152601560248201527f53616c653a20746f6f206d616e7920746f6b656e730000000000000000000000604482015290519081900360640190fd5b60009081526001919091016020526040902054151590565b60e08101515115801590611edc575060408101516001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14155b15611f175760a0810151602081015180611ef557506000195b6008546040840151611f14916001600160a01b03918216911683612bd9565b50505b61158481612c59565b60608101516000908152600660205260409020805460001914611f685760808201516001820154611f5091612ef8565b60608301516000908152600660205260409020600101555b5050565b806060015181604001516001600160a01b031682600001516001600160a01b03167f29f844483ca6b10b5c0611d039afc15ce8f6380e905307b381c3a8ee4e90e11e846020015185608001518660a001518760c001518860e001518961010001518a610120015160405160200180848051906020019060200280838360005b83811015612003578181015183820152602001611feb565b50505050905001838051906020019060200280838360005b8381101561203357818101518382015260200161201b565b50505050905001828051906020019060200280838360005b8381101561206357818101518382015260200161204b565b50505050905001935050505060405160208183030381529060405260405180866001600160a01b031681526020018581526020018060200184815260200180602001838103835286818151815260200191508051906020019080838360005b838110156120da5781810151838201526020016120c2565b50505050905090810190601f1680156121075780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b8381101561213a578181015183820152602001612122565b50505050905090810190601f1680156121675780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390a460608101516000908152600660205260409020600301546001600160a01b03168015611f68576361eceae860e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916816001600160a01b03166361eceae8846000015185602001518660400151876060015188608001518960a001518a60c001518b60e001518c61010001518d61012001516040518b63ffffffff1660e01b8152600401808b6001600160a01b031681526020018a6001600160a01b03168152602001896001600160a01b031681526020018881526020018781526020018060200186815260200180602001806020018060200185810385528a818151815260200191508051906020019080838360005b838110156122a0578181015183820152602001612288565b50505050905090810190601f1680156122cd5780820380516001836020036101000a031916815260200191505b508581038452885181528851602091820191808b01910280838360005b838110156123025781810151838201526020016122ea565b50505050905001858103835287818151815260200191508051906020019060200280838360005b83811015612341578181015183820152602001612329565b50505050905001858103825286818151815260200191508051906020019060200280838360005b83811015612380578181015183820152602001612368565b505050509050019e505050505050505050505050505050602060405180830381600087803b1580156123b157600080fd5b505af11580156123c5573d6000803e3d6000fd5b505050506040513d60208110156123db57600080fd5b50517fffffffff000000000000000000000000000000000000000000000000000000001614611f68576040805162461bcd60e51b815260206004820152601a60248201527f53616c653a206e6f74696669636174696f6e2072656675736564000000000000604482015290519081900360640190fd5b60408051600280825260608201835260009283929190602083019080368337019050509050848160008151811061248457fe5b60200260200101906001600160a01b031690816001600160a01b03168152505083816001815181106124b257fe5b6001600160a01b03928316602091820292909201810191909152600854604080517f1f00ca7400000000000000000000000000000000000000000000000000000000815260048101888152602482019283528651604483015286516000969490941694631f00ca74948a948994909260649091019185820191028083838c5b83811015612549578181015183820152602001612531565b50505050905001935050505060006040518083038186803b15801561256d57600080fd5b505afa158015612581573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156125aa57600080fd5b81019080805160405193929190846401000000008211156125ca57600080fd5b9083019060208201858111156125df57600080fd5b82518660208202830111640100000000821117156125fc57600080fd5b82525081516020918201928201910280838360005b83811015612629578181015183820152602001612611565b5050505090500160405250505090508060008151811061264557fe5b6020026020010151925050509392505050565b60008060006126678585612f55565b5090506000806126778787613042565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156126af57600080fd5b505afa1580156126c3573d6000803e3d6000fd5b505050506040513d60608110156126d957600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506001600160a01b0387811690841614612713578082612716565b81815b909890975095505050505050565b60208101516001600160a01b0316612783576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a207a65726f206164647265737320726563697069656e7400000000604482015290519081900360640190fd5b60408101516001600160a01b03166127e2576040805162461bcd60e51b815260206004820152601860248201527f53616c653a207a65726f206164647265737320746f6b656e0000000000000000604482015290519081900360640190fd5b6080810151612838576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a207a65726f207175616e7469747920707572636861736500000000604482015290519081900360640190fd5b60608101516000908152600660205260409020805461289e576040805162461bcd60e51b815260206004820152601660248201527f53616c653a206e6f6e2d6578697374656e7420736b7500000000000000000000604482015290519081900360640190fd5b8160800151816002015410156128fb576040805162461bcd60e51b815260206004820152601860248201527f53616c653a2061626f7665206d6178207175616e746974790000000000000000604482015290519081900360640190fd5b80546000191461296257816080015181600101541015612962576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20696e73756666696369656e7420737570706c7900000000000000604482015290519081900360640190fd5b60408201516001600160a01b031661297d6004830182611e8f565b611742576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a206e6f6e2d6578697374656e7420736b7520746f6b656e00000000604482015290519081900360640190fd5b60408201516000906129ea9083906001600160a01b03166131a5565b9050806116b9576040805162461bcd60e51b815260206004820152601f60248201527f53616c653a20756e737570706f72746564207061796d656e7420746f6b656e00604482015290519081900360640190fd5b60006001198214612a5b57612a54848484613235565b9050611965565b600754600090612a759085906001600160a01b03166131a5565b6080860151909150600090612a8b90839061190c565b604087015160075460a0890151929350600092612ab492916001600160a01b03169085906117b2565b90506000612ace8261120485670de0b6b3a764000061190c565b604080516002808252606082018352929350919060208301908036833750505060e089018190528051879190600090612b0357fe5b6020026020010181815250508060001b8860e00151600181518110612b2457fe5b60209081029190910101525060c08701525060019150509392505050565b600082815260018401602052604081205480612ba7575050604080518082018252838152602080820184815286546001818101895560008981528481209551600290930290950191825591519082015586548684528188019092529290912055611965565b82856000016001830381548110612bba57fe5b9060005260206000209060020201600101819055506000915050611965565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b30000000000000000000000000000000000000000000000000000000017905261174290849061332d565b60e0810151511580612c8b57506001600019038160e00151600081518110612c7d57fe5b602002602001015160001c14155b15612c9e57612c9981613517565b611584565b60408101516001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415612d25578060c00151341015612d20576040805162461bcd60e51b815260206004820152601660248201527f53616c653a20696e73756666696369656e742045544800000000000000000000604482015290519081900360640190fd5b612d4c565b612d4c612d30610954565b60c083015160408401516001600160a01b031691903090613662565b60008160e00151600181518110612d5f57fe5b602002602001015160001c90506000612d91670de0b6b3a76400006112048560c001518561190c90919063ffffffff16565b604084015160075460a0860151929350600092612dba92916001600160a01b03169085906136ea565b60408501519091506001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415612e3b576000612df23483612ef8565b90508015612e355784516040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612e33573d6000803e3d6000fd5b505b50612e74565b60c0840151600090612e4d9083612ef8565b90508015612e725784516040860151612e72916001600160a01b039091169083613897565b505b6007546001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415612edb576001546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612ed5573d6000803e3d6000fd5b50611cce565b600154600754611cce916001600160a01b03918216911683613897565b600082821115612f4f576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b600080826001600160a01b0316846001600160a01b03161415612fbf576040805162461bcd60e51b815260206004820152601960248201527f556e697377617056323a2073616d652061646472657373657300000000000000604482015290519081900360640190fd5b826001600160a01b0316846001600160a01b031610612fdf578284612fe2565b83835b90925090506001600160a01b0382166114b9576040805162461bcd60e51b815260206004820152601760248201527f556e697377617056323a207a65726f2061646472657373000000000000000000604482015290519081900360640190fd5b60008060006130518585612f55565b91509150600860009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156130a357600080fd5b505afa1580156130b7573d6000803e3d6000fd5b505050506040513d60208110156130cd57600080fd5b5051604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606095861b811660208381019190915294861b81166034830152825160288184030181526048830184528051908601207fff0000000000000000000000000000000000000000000000000000000000000060688401529390951b9094166069850152607d8401919091527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f609d808501919091528151808503909101815260bd909301905281519101209392505050565b600081815260018301602052604081205480613208576040805162461bcd60e51b815260206004820152601860248201527f456e756d4d61703a206e6f6e6578697374656e74206b65790000000000000000604482015290519081900360640190fd5b83600001600182038154811061321a57fe5b90600052602060002090600202016001015491505092915050565b6000600019821461324857506000611965565b6007546000906132629085906001600160a01b03166131a5565b604086015160075460a088015192935060009261328992916001600160a01b031690611a55565b905060006132ba87608001516132b484611204670de0b6b3a76400008861190c90919063ffffffff16565b9061190c565b604080516002808252606082018352929350919060208301908036833750505060e0880181905280518691906000906132ef57fe5b6020026020010181815250508160001b8760e0015160018151811061331057fe5b602090810291909101015260c08701525060019150509392505050565b816133406001600160a01b038216613917565b613391576040805162461bcd60e51b815260206004820152601a60248201527f4552433230577261707065723a206e6f6e2d636f6e7472616374000000000000604482015290519081900360640190fd5b600080826001600160a01b0316846040518082805190602001908083835b602083106133ce5780518252601f1990920191602091820191016133af565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613430576040519150601f19603f3d011682016040523d82523d6000602084013e613435565b606091505b509150915081156134b4578051156134af5780806020019051602081101561345c57600080fd5b50516134af576040805162461bcd60e51b815260206004820152601e60248201527f4552433230577261707065723a206f7065726174696f6e206661696c65640000604482015290519081900360640190fd5b613510565b8051613507576040805162461bcd60e51b815260206004820152601e60248201527f4552433230577261707065723a206f7065726174696f6e206661696c65640000604482015290519081900360640190fd5b80518082602001fd5b5050505050565b60408101516001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561363a578060c00151341015613599576040805162461bcd60e51b815260206004820152601660248201527f53616c653a20696e73756666696369656e742045544800000000000000000000604482015290519081900360640190fd5b60015460c08201516040516001600160a01b039092169181156108fc0291906000818181858888f193505050501580156135d7573d6000803e3d6000fd5b5060006135f18260c0015134612ef890919063ffffffff16565b905080156136345781516040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015613632573d6000803e3d6000fd5b505b50611584565b611584613645610954565b60015460c084015160408501516001600160a01b03908116939216905b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052611cce90859061332d565b602081015160408201516000919081613730576001600160a01b03871673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561372a57349150613730565b60001991505b8061373a57506000195b6001600160a01b03871673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14156137dc57600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156137ad57600080fd5b505afa1580156137c1573d6000803e3d6000fd5b505050506040513d60208110156137d757600080fd5b505196505b6001600160a01b03861673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561387e57600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561384f57600080fd5b505afa158015613863573d6000803e3d6000fd5b505050506040513d602081101561387957600080fd5b505195505b61388c87878785308661391d565b979650505050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905261174290849061332d565b3b151590565b6000856001600160a01b0316876001600160a01b03161415613986576040805162461bcd60e51b815260206004820152601960248201527f556e697377617056323a2073616d652061646472657373657300000000000000604482015290519081900360640190fd5b60408051600280825260608201835260009260208301908036833701905050905087816000815181106139b557fe5b60200260200101906001600160a01b031690816001600160a01b03168152505086816001815181106139e357fe5b6001600160a01b03928316602091820292909201810191909152600854604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051606094929092169263ad5c464892600480840193829003018186803b158015613a5157600080fd5b505afa158015613a65573d6000803e3d6000fd5b505050506040513d6020811015613a7b57600080fd5b50516001600160a01b038a811691161415613c7657348614613ae4576040805162461bcd60e51b815260206004820152601e60248201527f556e697377617056323a20696e76616c6964206d6178416d6f756e74496e0000604482015290519081900360640190fd5b6008546040517ffb3bdb41000000000000000000000000000000000000000000000000000000008152600481018981526001600160a01b03888116604484015260648301889052608060248401908152865160848501528651919094169363fb3bdb419334938d9389938d938d939260a4909101906020808801910280838360005b83811015613b7e578181015183820152602001613b66565b50505050905001955050505050506000604051808303818588803b158015613ba557600080fd5b505af1158015613bb9573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526020811015613be357600080fd5b8101908080516040519392919084640100000000821115613c0357600080fd5b908301906020820185811115613c1857600080fd5b8251866020820283011164010000000082111715613c3557600080fd5b82525081516020918201928201910280838360005b83811015613c62578181015183820152602001613c4a565b505050509050016040525050509050613fa0565b600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613cc457600080fd5b505afa158015613cd8573d6000803e3d6000fd5b505050506040513d6020811015613cee57600080fd5b50516001600160a01b0389811691161415613e0a576008546040517f4a25d94a00000000000000000000000000000000000000000000000000000000815260048101898152602482018990526001600160a01b0388811660648401526084830188905260a060448401908152865160a485015286519190941693634a25d94a938c938c9389938d938d939260c4909101906020808801910280838360005b83811015613da4578181015183820152602001613d8c565b505050509050019650505050505050600060405180830381600087803b158015613dcd57600080fd5b505af1158015613de1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015613be357600080fd5b6008546040517f8803dbee00000000000000000000000000000000000000000000000000000000815260048101898152602482018990526001600160a01b0388811660648401526084830188905260a060448401908152865160a485015286519190941693638803dbee938c938c9389938d938d939260c4909101906020808801910280838360005b83811015613eab578181015183820152602001613e93565b505050509050019650505050505050600060405180830381600087803b158015613ed457600080fd5b505af1158015613ee8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015613f1157600080fd5b8101908080516040519392919084640100000000821115613f3157600080fd5b908301906020820185811115613f4657600080fd5b8251866020820283011164010000000082111715613f6357600080fd5b82525081516020918201928201910280838360005b83811015613f90578181015183820152602001613f78565b5050505090500160405250505090505b80600081518110613fad57fe5b6020026020010151925050509695505050505050565b60405180610140016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160008019168152602001600081526020016060815260200160008152602001606081526020016060815260200160608152509056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a26469706673582212203601a32fe0603e2e8da36055101edece7b0b08ecfb08e4ed1475e9aadc690bac64736f6c63430007060033abb92614f53337043b55dc996a83ebb09adce78ec336ca188ea02180b61d1c14","opcodes":"PUSH1 0xC0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x476A CODESIZE SUB DUP1 PUSH3 0x476A DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0xA0 DUP2 LT ISZERO PUSH3 0x37 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 DUP1 DUP5 ADD MLOAD PUSH1 0x60 DUP6 ADD MLOAD PUSH1 0x80 SWAP1 SWAP6 ADD MLOAD PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND CALLER SWAP1 DUP2 OR DUP3 SSTORE SWAP4 MLOAD SWAP6 SWAP7 SWAP5 SWAP6 SWAP3 SWAP5 SWAP4 SWAP2 SWAP3 DUP4 SWAP3 DUP9 SWAP3 DUP9 SWAP3 DUP9 SWAP3 DUP9 SWAP3 DUP7 SWAP3 DUP7 SWAP3 DUP7 SWAP3 DUP7 SWAP3 DUP7 SWAP3 DUP7 SWAP3 DUP7 SWAP3 DUP6 SWAP3 DUP6 SWAP3 DUP6 SWAP3 PUSH1 0x1 SWAP3 SWAP2 DUP7 SWAP2 DUP4 SWAP2 DUP3 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP3 SWAP1 LOG3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH3 0x119 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061796F75743A207A65726F2061646472657373000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 SWAP2 AND DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD PUSH32 0xDD880D24A789958A6398C99C2E54CE31BC10A638CBC42F7DD34285479AE0F855 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP POP PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x80 DUP3 SWAP1 MSTORE PUSH1 0xA0 DUP2 SWAP1 MSTORE 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 POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x2 DUP1 DUP3 MSTORE PUSH1 0x60 DUP3 ADD DUP4 MSTORE SWAP4 SWAP5 POP PUSH1 0x0 SWAP4 SWAP1 SWAP3 POP SWAP1 PUSH1 0x20 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP POP DUP4 MLOAD SWAP2 SWAP3 POP PUSH9 0xA89E968A9CBE8AA89 PUSH1 0xBB SHL SWAP2 PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE SWAP2 POP DUP5 SWAP1 PUSH1 0x0 SWAP1 PUSH3 0x1FE JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP4 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH3 0x213 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP3 DUP2 MSTORE POP DUP3 DUP2 MSTORE POP POP POP PUSH1 0x0 NOT PUSH1 0x0 SHL PUSH16 0x14D55414131657D55393125352551151 PUSH1 0x82 SHL SWAP1 DUP4 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH3 0x24D JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP4 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH3 0x262 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP3 DUP2 MSTORE POP DUP3 DUP2 MSTORE POP POP POP PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x474A DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP3 DUP3 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x2CB JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x2B1 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x30C JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x2F2 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP PUSH1 0x7 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND OR SWAP1 SSTORE POP PUSH1 0x0 SWAP5 POP PUSH1 0x1 SWAP4 POP DUP5 SWAP3 POP PUSH3 0x353 SWAP2 POP POP JUMP JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH3 0x37E JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 DUP1 DUP3 MSTORE DUP2 DUP4 ADD SWAP1 SWAP3 MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 SWAP1 PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP PUSH1 0x0 NOT PUSH1 0x0 SHL PUSH32 0x50524943455F434F4E564552545F5649415F4F5241434C450000000000000000 SWAP1 DUP4 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH3 0x3DB JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP4 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH3 0x3F0 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP3 DUP2 MSTORE POP DUP3 DUP2 MSTORE POP POP POP PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x474A DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP3 DUP3 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x459 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x43F JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x49A JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x480 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP POP POP PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP1 ISZERO PUSH3 0x4CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH3 0x4FA JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 DUP1 DUP3 MSTORE DUP2 DUP4 ADD SWAP1 SWAP3 MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 SWAP1 PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP POP DUP4 MLOAD SWAP2 SWAP3 POP PUSH32 0x50524943455F535741505F5649415F4F5241434C450000000000000000000000 SWAP2 PUSH1 0x1 NOT SWAP2 POP DUP5 SWAP1 PUSH1 0x0 SWAP1 PUSH3 0x555 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP4 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH3 0x56A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP3 DUP2 MSTORE POP DUP3 DUP2 MSTORE POP POP POP PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x474A DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP3 DUP3 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x5D3 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x5B9 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x614 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x5FA JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP POP POP PUSH3 0x640 DUP2 PUSH3 0x64C PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST POP POP POP POP POP POP PUSH3 0x6A0 JUMP JUMPDEST PUSH1 0x8 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 SWAP2 AND DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD PUSH32 0xFE70995E26C62B71BBD53A5B9E09215C42E2006FAD72BA845051FAA8DE1510BA SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH2 0x408B PUSH3 0x6BF PUSH1 0x0 CODECOPY DUP1 PUSH2 0x1E14 MSTORE POP POP PUSH2 0x408B PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x179 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8456CB59 GT PUSH2 0xCB JUMPI DUP1 PUSH4 0xA963B257 GT PUSH2 0x7F JUMPI DUP1 PUSH4 0xC7B778DB GT PUSH2 0x59 JUMPI DUP1 PUSH4 0xC7B778DB EQ PUSH2 0x83D JUMPI DUP1 PUSH4 0xF21F537D EQ PUSH2 0x90C JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x921 JUMPI PUSH2 0x1EF JUMP JUMPDEST DUP1 PUSH4 0xA963B257 EQ PUSH2 0x6C0 JUMPI DUP1 PUSH4 0xBDA4C5AB EQ PUSH2 0x755 JUMPI DUP1 PUSH4 0xBE9A6555 EQ PUSH2 0x828 JUMPI PUSH2 0x1EF JUMP JUMPDEST DUP1 PUSH4 0x8DA5CB5B GT PUSH2 0xB0 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x696 JUMPI DUP1 PUSH4 0x9865BCC8 EQ PUSH2 0x6AB JUMPI DUP1 PUSH4 0x9E049545 EQ PUSH2 0x6AB JUMPI PUSH2 0x1EF JUMP JUMPDEST DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x66C JUMPI DUP1 PUSH4 0x8488BB4E EQ PUSH2 0x681 JUMPI PUSH2 0x1EF JUMP JUMPDEST DUP1 PUSH4 0x579F2C77 GT PUSH2 0x12D JUMPI DUP1 PUSH4 0x5E6E9F70 GT PUSH2 0x107 JUMPI DUP1 PUSH4 0x5E6E9F70 EQ PUSH2 0x499 JUMPI DUP1 PUSH4 0x61BD3851 EQ PUSH2 0x5D4 JUMPI DUP1 PUSH4 0x6B8F9C43 EQ PUSH2 0x639 JUMPI PUSH2 0x1EF JUMP JUMPDEST DUP1 PUSH4 0x579F2C77 EQ PUSH2 0x434 JUMPI DUP1 PUSH4 0x5C4FAFC7 EQ PUSH2 0x45B JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x470 JUMPI PUSH2 0x1EF JUMP JUMPDEST DUP1 PUSH4 0x1694505E GT PUSH2 0x15E JUMPI DUP1 PUSH4 0x1694505E EQ PUSH2 0x322 JUMPI DUP1 PUSH4 0x2A8A45BC EQ PUSH2 0x337 JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x41F JUMPI PUSH2 0x1EF JUMP JUMPDEST DUP1 PUSH4 0x1265B651 EQ PUSH2 0x1F4 JUMPI DUP1 PUSH4 0x1323B066 EQ PUSH2 0x225 JUMPI PUSH2 0x1EF JUMP JUMPDEST CALLDATASIZE PUSH2 0x1EF JUMPI PUSH1 0x8 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x192 PUSH2 0x954 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x1ED JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20496E76616C6964204554482073656E6465720000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x200 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x209 PUSH2 0x958 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x231 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2C7 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x248 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x288 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x29A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x2BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x967 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x30D JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2F5 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP4 POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x32E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x209 PUSH2 0xA5C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x343 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x361 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x35A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0xA6B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3C6 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3AE JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x405 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3ED JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP9 POP POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x42B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1ED PUSH2 0xC10 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x440 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x449 PUSH2 0xC7E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x467 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x209 PUSH2 0xC84 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x47C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x485 PUSH2 0xC9C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1ED PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x4BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x4DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x4F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x512 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 SWAP5 SWAP4 PUSH1 0x20 DUP2 ADD SWAP4 POP CALLDATALOAD SWAP2 POP POP PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x562 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x574 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x596 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0xCA5 SWAP5 POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5E9 PUSH2 0xE82 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 DUP2 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x625 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x60D JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x645 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1ED PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x65C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xEDD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x678 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1ED PUSH2 0xFB5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x68D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x209 PUSH2 0x101C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6A2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x209 PUSH2 0x102B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x449 PUSH2 0x103A JUMP JUMPDEST PUSH2 0x1ED PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x6D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x716 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x728 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x74A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x1040 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x761 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5E9 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x778 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x793 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x7A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x7C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 DUP3 CALLDATALOAD SWAP3 PUSH1 0x40 DUP2 ADD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x7E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x7FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x81D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x1126 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x834 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1ED PUSH2 0x1235 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x849 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5E9 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x860 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x87B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x88D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x8AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH1 0x20 DUP2 ADD SWAP1 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x8CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x8DF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x901 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x1248 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x918 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x449 PUSH2 0x1334 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x92D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1ED PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x944 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x133A JUMP JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x2 SLOAD PUSH1 0x0 EQ ISZERO PUSH2 0x9C3 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x9CB PUSH2 0x13AB JUMP JUMPDEST PUSH2 0x9D3 PUSH2 0x3FC3 JUMP JUMPDEST PUSH2 0x9DB PUSH2 0x954 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP10 DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP10 AND PUSH1 0x40 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD DUP10 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP9 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x1F DUP8 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD SWAP1 SWAP2 MSTORE DUP6 DUP2 MSTORE SWAP1 DUP7 SWAP1 DUP7 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP POP PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0xA4C DUP2 PUSH2 0x1403 JUMP JUMPDEST SWAP3 POP SWAP3 POP POP SWAP7 POP SWAP7 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP2 SWAP1 DUP2 SWAP1 DUP2 SWAP1 PUSH1 0x60 SWAP1 DUP2 SWAP1 DUP4 PUSH2 0xA91 PUSH1 0x4 DUP4 ADD PUSH2 0x142A JUMP JUMPDEST DUP3 SLOAD SWAP9 POP SWAP1 POP DUP8 PUSH2 0xAE9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7500000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x3 DUP5 ADD SLOAD SWAP2 SWAP9 POP SWAP7 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP5 POP DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0xB1F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xB49 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP4 POP DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0xB63 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xB8D JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xC04 JUMPI PUSH1 0x0 DUP1 PUSH2 0xBAB PUSH1 0x4 DUP7 ADD DUP5 PUSH2 0x142E JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP2 PUSH1 0x0 SHR DUP8 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0xBBF JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP DUP1 PUSH1 0x0 SHR DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0xBEF JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP POP PUSH1 0x1 ADD PUSH2 0xB93 JUMP JUMPDEST POP POP POP SWAP2 SWAP4 SWAP6 POP SWAP2 SWAP4 SWAP6 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0xC64 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0xC74 PUSH2 0xC6F PUSH2 0x954 JUMP JUMPDEST PUSH2 0x14C0 JUMP JUMPDEST PUSH2 0xC7C PUSH2 0x1587 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x1 NOT DUP2 JUMP JUMPDEST PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0xCB0 PUSH2 0xC6F PUSH2 0x954 JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD DUP2 EQ PUSH2 0xD07 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E636F6E73697374656E742061727261797300000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0xD68 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7500000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP2 ADD DUP3 PUSH2 0xDB3 JUMPI PUSH1 0x0 PUSH2 0xD7C DUP3 PUSH2 0x142A JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xDAC JUMPI PUSH1 0x0 PUSH2 0xD95 DUP5 DUP3 PUSH2 0x142E JUMP JUMPDEST POP SWAP1 POP PUSH2 0xDA2 DUP5 DUP3 PUSH2 0x15DF JUMP JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0xD81 JUMP JUMPDEST POP POP PUSH2 0xDBE JUMP JUMPDEST PUSH2 0xDBE DUP2 DUP7 DUP7 PUSH2 0x16BF JUMP JUMPDEST DUP6 PUSH32 0xCB3FE5489E0CD43D0F4A33D1E09A4A0463A03D0D38F56165530854E5540DB143 DUP7 DUP7 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xE26 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xE0E JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xE65 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xE4D JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x4 PUSH1 0x0 ADD DUP1 SLOAD DUP1 PUSH1 0x20 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 DUP1 ISZERO PUSH2 0xED3 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0xEBF JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0xEE8 PUSH2 0xC6F PUSH2 0x954 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xF43 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061796F75743A207A65726F2061646472657373000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 SWAP1 SWAP2 OR SWAP2 DUP3 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD SWAP3 SWAP1 SWAP2 AND DUP3 MSTORE MLOAD PUSH32 0xDD880D24A789958A6398C99C2E54CE31BC10A638CBC42F7DD34285479AE0F855 SWAP2 PUSH1 0x20 SWAP1 DUP3 SWAP1 SUB ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x1009 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x1014 PUSH2 0xC6F PUSH2 0x954 JUMP JUMPDEST PUSH2 0xC7C PUSH2 0x1747 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 NOT DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x1094 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x109C PUSH2 0x13AB JUMP JUMPDEST PUSH2 0x10A4 PUSH2 0x3FC3 JUMP JUMPDEST PUSH2 0x10AC PUSH2 0x954 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP8 DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP8 AND PUSH1 0x40 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD DUP8 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP7 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x1F DUP6 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD SWAP1 SWAP2 MSTORE DUP4 DUP2 MSTORE SWAP1 DUP5 SWAP1 DUP5 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP POP PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x111D DUP2 PUSH2 0x1785 JUMP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP5 DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x1140 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x116A JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x122A JUMPI PUSH1 0x0 PUSH2 0x11EC DUP10 DUP10 DUP5 DUP2 DUP2 LT PUSH2 0x1189 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x7 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP10 DUP10 DUP10 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x17B2 SWAP3 POP POP POP JUMP JUMPDEST SWAP1 POP PUSH2 0x120A DUP2 PUSH2 0x1204 DUP10 PUSH8 0xDE0B6B3A7640000 PUSH2 0x190C JUMP JUMPDEST SWAP1 PUSH2 0x196C JUMP JUMPDEST DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1216 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP PUSH1 0x1 ADD PUSH2 0x1170 JUMP JUMPDEST POP POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x1240 PUSH2 0xC6F PUSH2 0x954 JUMP JUMPDEST PUSH2 0xC74 PUSH2 0x19D3 JUMP JUMPDEST PUSH1 0x60 DUP4 DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x1262 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x128C JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x132A JUMPI PUSH2 0x130B DUP8 DUP8 DUP4 DUP2 DUP2 LT PUSH2 0x12A9 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x7 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 DUP8 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1A55 SWAP3 POP POP POP JUMP JUMPDEST DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1317 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x1292 JUMP JUMPDEST POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x1345 PUSH2 0xC6F PUSH2 0x954 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 DUP3 OR DUP1 DUP5 SSTORE PUSH1 0x40 MLOAD SWAP3 SWAP4 SWAP2 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xC7C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061757361626C653A2070617573656400000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x1410 DUP4 PUSH2 0x1BCD JUMP JUMPDEST PUSH2 0x1419 DUP4 PUSH2 0x1C31 JUMP JUMPDEST POP POP PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xE0 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP2 JUMP JUMPDEST SLOAD SWAP1 JUMP JUMPDEST DUP2 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP4 LT PUSH2 0x1488 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x456E756D4D61703A20696E646578206F7574206F6620626F756E647300000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 PUSH1 0x0 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x1499 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD SWAP1 POP DUP1 PUSH1 0x0 ADD SLOAD DUP2 PUSH1 0x1 ADD SLOAD SWAP3 POP SWAP3 POP POP JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8DA5CB5B 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 PUSH2 0x14F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x150D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1523 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ PUSH2 0x1584 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6F7420746865206F776E657200000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0x158F PUSH2 0x1CD4 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA PUSH2 0x15C2 PUSH2 0x954 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0x16B3 JUMPI DUP4 SLOAD PUSH1 0x0 NOT DUP1 DUP4 ADD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x0 SWAP1 DUP8 SWAP1 DUP4 SWAP1 DUP2 LT PUSH2 0x1612 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD SWAP1 POP DUP1 DUP8 PUSH1 0x0 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x1632 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 DUP5 SLOAD PUSH1 0x2 SWAP1 SWAP4 MUL ADD SWAP2 DUP3 SSTORE PUSH1 0x1 SWAP4 DUP5 ADD SLOAD SWAP2 DUP5 ADD SWAP2 SWAP1 SWAP2 SSTORE DUP4 SLOAD DUP3 MSTORE DUP10 DUP4 ADD SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP1 DUP5 ADD SWAP1 SSTORE DUP7 SLOAD DUP8 SWAP1 DUP1 PUSH2 0x1671 JUMPI INVALID JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 PUSH1 0x2 PUSH1 0x0 NOT SWAP1 SWAP5 ADD SWAP4 DUP5 MUL ADD DUP3 DUP2 SSTORE PUSH1 0x1 SWAP1 DUP2 ADD DUP4 SWAP1 SSTORE SWAP3 SWAP1 SWAP4 SSTORE DUP9 DUP2 MSTORE DUP10 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x40 DUP3 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE SWAP5 POP PUSH2 0x16B9 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SWAP2 POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x16CA DUP4 DUP4 DUP4 PUSH2 0x1D2B JUMP JUMPDEST PUSH2 0x16D3 DUP4 PUSH2 0x142A JUMP JUMPDEST ISZERO DUP1 PUSH2 0x16F1 JUMPI POP PUSH1 0x7 SLOAD PUSH2 0x16F1 SWAP1 DUP5 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1E8F JUMP JUMPDEST PUSH2 0x1742 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F207265666572656E636520746F6B656E0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x174F PUSH2 0x13AB JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH2 0x15C2 PUSH2 0x954 JUMP JUMPDEST PUSH2 0x178E DUP2 PUSH2 0x1BCD JUMP JUMPDEST PUSH2 0x1797 DUP2 PUSH2 0x1C31 JUMP JUMPDEST PUSH2 0x17A0 DUP2 PUSH2 0x1EA7 JUMP JUMPDEST PUSH2 0x17A9 DUP2 PUSH2 0x1F20 JUMP JUMPDEST PUSH2 0x1584 DUP2 PUSH2 0x1F6C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x1856 JUMPI PUSH1 0x8 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND 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 PUSH2 0x1827 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x183B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1851 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP5 POP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x18F8 JUMPI PUSH1 0x8 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND 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 PUSH2 0x18C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x18DD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x18F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP4 POP JUMPDEST PUSH2 0x1903 DUP6 DUP6 DUP6 PUSH2 0x2451 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x191B JUMPI POP PUSH1 0x0 PUSH2 0x16B9 JUMP JUMPDEST DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 PUSH2 0x1928 JUMPI INVALID JUMPDEST DIV EQ PUSH2 0x1965 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x4035 PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 GT PUSH2 0x19C2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206469766973696F6E206279207A65726F000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 DUP4 DUP2 PUSH2 0x19CB JUMPI INVALID JUMPDEST DIV SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD ISZERO PUSH2 0x1A28 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A20737461727465640000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST TIMESTAMP PUSH1 0x2 SSTORE PUSH32 0x27029695AA5F602A4EE81F4C32DFA86E562F200A17966496F3A7C3F2EC0F9417 PUSH2 0x15C2 PUSH2 0x954 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x1AF9 JUMPI PUSH1 0x8 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND 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 PUSH2 0x1ACA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1ADE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1AF4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP4 POP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x1B9B JUMPI PUSH1 0x8 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND 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 PUSH2 0x1B6C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1B80 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1B96 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP3 POP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1BA8 DUP7 DUP7 PUSH2 0x2658 JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x1BC3 DUP3 PUSH2 0x1204 DUP4 PUSH8 0xDE0B6B3A7640000 PUSH2 0x190C JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x1BD6 DUP2 PUSH2 0x2724 JUMP JUMPDEST PUSH1 0x40 DUP2 PUSH1 0xA0 ADD MLOAD MLOAD LT ISZERO PUSH2 0x1584 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206D697373696E6720757365722064617461000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0x1C97 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20756E737570706F7274656420534B550000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP2 ADD PUSH1 0x0 PUSH2 0x1CA7 DUP5 DUP4 PUSH2 0x29CE JUMP JUMPDEST SWAP1 POP PUSH2 0x1CB4 DUP5 DUP4 DUP4 PUSH2 0x2A3E JUMP JUMPDEST PUSH2 0x1CCE JUMPI PUSH1 0x80 DUP5 ADD MLOAD PUSH2 0x1CC8 SWAP1 DUP3 SWAP1 PUSH2 0x190C JUMP JUMPDEST PUSH1 0xC0 DUP6 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND PUSH2 0xC7C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061757361626C653A206E6F7420706175736564000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x1E11 JUMPI PUSH1 0x0 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1D45 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1DB7 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F206164647265737320746F6B656E0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1DC5 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP DUP1 PUSH1 0x0 EQ ISZERO PUSH2 0x1DF1 JUMPI PUSH2 0x1DEB DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x15DF JUMP JUMPDEST POP PUSH2 0x1E07 JUMP JUMPDEST PUSH2 0x1E05 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP4 PUSH2 0x2B42 JUMP JUMPDEST POP JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x1D2E JUMP JUMPDEST POP PUSH32 0x0 PUSH2 0x1E3C DUP5 PUSH2 0x142A JUMP JUMPDEST GT ISZERO PUSH2 0x1742 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20746F6F206D616E7920746F6B656E730000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0xE0 DUP2 ADD MLOAD MLOAD ISZERO DUP1 ISZERO SWAP1 PUSH2 0x1EDC JUMPI POP PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO JUMPDEST ISZERO PUSH2 0x1F17 JUMPI PUSH1 0xA0 DUP2 ADD MLOAD PUSH1 0x20 DUP2 ADD MLOAD DUP1 PUSH2 0x1EF5 JUMPI POP PUSH1 0x0 NOT JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x40 DUP5 ADD MLOAD PUSH2 0x1F14 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND SWAP2 AND DUP4 PUSH2 0x2BD9 JUMP JUMPDEST POP POP JUMPDEST PUSH2 0x1584 DUP2 PUSH2 0x2C59 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x0 NOT EQ PUSH2 0x1F68 JUMPI PUSH1 0x80 DUP3 ADD MLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH2 0x1F50 SWAP2 PUSH2 0x2EF8 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SSTORE JUMPDEST POP POP JUMP JUMPDEST DUP1 PUSH1 0x60 ADD MLOAD DUP2 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x29F844483CA6B10B5C0611D039AFC15CE8F6380E905307B381C3A8EE4E90E11E DUP5 PUSH1 0x20 ADD MLOAD DUP6 PUSH1 0x80 ADD MLOAD DUP7 PUSH1 0xA0 ADD MLOAD DUP8 PUSH1 0xC0 ADD MLOAD DUP9 PUSH1 0xE0 ADD MLOAD DUP10 PUSH2 0x100 ADD MLOAD DUP11 PUSH2 0x120 ADD MLOAD PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP5 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2003 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1FEB JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2033 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x201B JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2063 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x204B JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP4 POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP7 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x20DA JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x20C2 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x2107 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP DUP4 DUP2 SUB DUP3 MSTORE DUP5 MLOAD DUP2 MSTORE DUP5 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP7 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x213A JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2122 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x2167 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP8 POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 ISZERO PUSH2 0x1F68 JUMPI PUSH4 0x61ECEAE8 PUSH1 0xE0 SHL PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x61ECEAE8 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD DUP7 PUSH1 0x40 ADD MLOAD DUP8 PUSH1 0x60 ADD MLOAD DUP9 PUSH1 0x80 ADD MLOAD DUP10 PUSH1 0xA0 ADD MLOAD DUP11 PUSH1 0xC0 ADD MLOAD DUP12 PUSH1 0xE0 ADD MLOAD DUP13 PUSH2 0x100 ADD MLOAD DUP14 PUSH2 0x120 ADD MLOAD PUSH1 0x40 MLOAD DUP12 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP6 DUP2 SUB DUP6 MSTORE DUP11 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x22A0 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2288 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x22CD JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP DUP6 DUP2 SUB DUP5 MSTORE DUP9 MLOAD DUP2 MSTORE DUP9 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP1 DUP12 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2302 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x22EA JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP6 DUP2 SUB DUP4 MSTORE DUP8 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2341 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2329 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP6 DUP2 SUB DUP3 MSTORE DUP7 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2380 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2368 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP15 POP POP POP POP POP POP POP POP POP POP POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x23B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x23C5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x23DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND EQ PUSH2 0x1F68 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F74696669636174696F6E2072656675736564000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x2 DUP1 DUP3 MSTORE PUSH1 0x60 DUP3 ADD DUP4 MSTORE PUSH1 0x0 SWAP3 DUP4 SWAP3 SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP DUP5 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x2484 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP DUP4 DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x24B2 JUMPI INVALID 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 0x8 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x1F00CA7400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP9 DUP2 MSTORE PUSH1 0x24 DUP3 ADD SWAP3 DUP4 MSTORE DUP7 MLOAD PUSH1 0x44 DUP4 ADD MSTORE DUP7 MLOAD PUSH1 0x0 SWAP7 SWAP5 SWAP1 SWAP5 AND SWAP5 PUSH4 0x1F00CA74 SWAP5 DUP11 SWAP5 DUP10 SWAP5 SWAP1 SWAP3 PUSH1 0x64 SWAP1 SWAP2 ADD SWAP2 DUP6 DUP3 ADD SWAP2 MUL DUP1 DUP4 DUP4 DUP13 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2549 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2531 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP4 POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x256D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2581 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x25AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH2 0x25CA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x25DF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD DUP7 PUSH1 0x20 DUP3 MUL DUP4 ADD GT PUSH5 0x100000000 DUP3 GT OR ISZERO PUSH2 0x25FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 DUP3 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2629 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2611 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD PUSH1 0x40 MSTORE POP POP POP SWAP1 POP DUP1 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x2645 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP3 POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x2667 DUP6 DUP6 PUSH2 0x2F55 JUMP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP1 PUSH2 0x2677 DUP8 DUP8 PUSH2 0x3042 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x902F1AC PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x26AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x26C3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x26D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND SWAP4 POP AND SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND SWAP1 DUP5 AND EQ PUSH2 0x2713 JUMPI DUP1 DUP3 PUSH2 0x2716 JUMP JUMPDEST DUP2 DUP2 JUMPDEST SWAP1 SWAP9 SWAP1 SWAP8 POP SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2783 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F206164647265737320726563697069656E7400000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x27E2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F206164647265737320746F6B656E0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x80 DUP2 ADD MLOAD PUSH2 0x2838 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F207175616E7469747920707572636861736500000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0x289E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7500000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x80 ADD MLOAD DUP2 PUSH1 0x2 ADD SLOAD LT ISZERO PUSH2 0x28FB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A2061626F7665206D6178207175616E746974790000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 SLOAD PUSH1 0x0 NOT EQ PUSH2 0x2962 JUMPI DUP2 PUSH1 0x80 ADD MLOAD DUP2 PUSH1 0x1 ADD SLOAD LT ISZERO PUSH2 0x2962 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E73756666696369656E7420737570706C7900000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x297D PUSH1 0x4 DUP4 ADD DUP3 PUSH2 0x1E8F JUMP JUMPDEST PUSH2 0x1742 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7520746F6B656E00000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x0 SWAP1 PUSH2 0x29EA SWAP1 DUP4 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x31A5 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x16B9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20756E737570706F72746564207061796D656E7420746F6B656E00 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 NOT DUP3 EQ PUSH2 0x2A5B JUMPI PUSH2 0x2A54 DUP5 DUP5 DUP5 PUSH2 0x3235 JUMP JUMPDEST SWAP1 POP PUSH2 0x1965 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x2A75 SWAP1 DUP6 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x31A5 JUMP JUMPDEST PUSH1 0x80 DUP7 ADD MLOAD SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH2 0x2A8B SWAP1 DUP4 SWAP1 PUSH2 0x190C JUMP JUMPDEST PUSH1 0x40 DUP8 ADD MLOAD PUSH1 0x7 SLOAD PUSH1 0xA0 DUP10 ADD MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 PUSH2 0x2AB4 SWAP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP6 SWAP1 PUSH2 0x17B2 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2ACE DUP3 PUSH2 0x1204 DUP6 PUSH8 0xDE0B6B3A7640000 PUSH2 0x190C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x2 DUP1 DUP3 MSTORE PUSH1 0x60 DUP3 ADD DUP4 MSTORE SWAP3 SWAP4 POP SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP POP POP PUSH1 0xE0 DUP10 ADD DUP2 SWAP1 MSTORE DUP1 MLOAD DUP8 SWAP2 SWAP1 PUSH1 0x0 SWAP1 PUSH2 0x2B03 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x0 SHL DUP9 PUSH1 0xE0 ADD MLOAD PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x2B24 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP PUSH1 0xC0 DUP8 ADD MSTORE POP PUSH1 0x1 SWAP2 POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x1 DUP5 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 PUSH2 0x2BA7 JUMPI POP POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE DUP4 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD DUP5 DUP2 MSTORE DUP7 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP10 SSTORE PUSH1 0x0 DUP10 DUP2 MSTORE DUP5 DUP2 KECCAK256 SWAP6 MLOAD PUSH1 0x2 SWAP1 SWAP4 MUL SWAP1 SWAP6 ADD SWAP2 DUP3 SSTORE SWAP2 MLOAD SWAP1 DUP3 ADD SSTORE DUP7 SLOAD DUP7 DUP5 MSTORE DUP2 DUP9 ADD SWAP1 SWAP3 MSTORE SWAP3 SWAP1 SWAP2 KECCAK256 SSTORE PUSH2 0x1965 JUMP JUMPDEST DUP3 DUP6 PUSH1 0x0 ADD PUSH1 0x1 DUP4 SUB DUP2 SLOAD DUP2 LT PUSH2 0x2BBA JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD PUSH1 0x1 ADD DUP2 SWAP1 SSTORE POP PUSH1 0x0 SWAP2 POP POP PUSH2 0x1965 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 OR SWAP1 MSTORE PUSH2 0x1742 SWAP1 DUP5 SWAP1 PUSH2 0x332D JUMP JUMPDEST PUSH1 0xE0 DUP2 ADD MLOAD MLOAD ISZERO DUP1 PUSH2 0x2C8B JUMPI POP PUSH1 0x1 PUSH1 0x0 NOT SUB DUP2 PUSH1 0xE0 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x2C7D JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 SHR EQ ISZERO JUMPDEST ISZERO PUSH2 0x2C9E JUMPI PUSH2 0x2C99 DUP2 PUSH2 0x3517 JUMP JUMPDEST PUSH2 0x1584 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x2D25 JUMPI DUP1 PUSH1 0xC0 ADD MLOAD CALLVALUE LT ISZERO PUSH2 0x2D20 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E73756666696369656E742045544800000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x2D4C JUMP JUMPDEST PUSH2 0x2D4C PUSH2 0x2D30 PUSH2 0x954 JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD MLOAD PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 SWAP1 ADDRESS SWAP1 PUSH2 0x3662 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0xE0 ADD MLOAD PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x2D5F JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 SHR SWAP1 POP PUSH1 0x0 PUSH2 0x2D91 PUSH8 0xDE0B6B3A7640000 PUSH2 0x1204 DUP6 PUSH1 0xC0 ADD MLOAD DUP6 PUSH2 0x190C SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0x7 SLOAD PUSH1 0xA0 DUP7 ADD MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 PUSH2 0x2DBA SWAP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP6 SWAP1 PUSH2 0x36EA JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MLOAD SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x2E3B JUMPI PUSH1 0x0 PUSH2 0x2DF2 CALLVALUE DUP4 PUSH2 0x2EF8 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x2E35 JUMPI DUP5 MLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 DUP3 ISZERO PUSH2 0x8FC MUL SWAP1 DUP4 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x2E33 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP JUMPDEST POP PUSH2 0x2E74 JUMP JUMPDEST PUSH1 0xC0 DUP5 ADD MLOAD PUSH1 0x0 SWAP1 PUSH2 0x2E4D SWAP1 DUP4 PUSH2 0x2EF8 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x2E72 JUMPI DUP5 MLOAD PUSH1 0x40 DUP7 ADD MLOAD PUSH2 0x2E72 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 DUP4 PUSH2 0x3897 JUMP JUMPDEST POP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x2EDB JUMPI PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 DUP3 ISZERO PUSH2 0x8FC MUL SWAP1 DUP4 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x2ED5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x1CCE JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x7 SLOAD PUSH2 0x1CCE SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND SWAP2 AND DUP4 PUSH2 0x3897 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 GT ISZERO PUSH2 0x2F4F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x2FBF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x556E697377617056323A2073616D652061646472657373657300000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH2 0x2FDF JUMPI DUP3 DUP5 PUSH2 0x2FE2 JUMP JUMPDEST DUP4 DUP4 JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x14B9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x556E697377617056323A207A65726F2061646472657373000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x3051 DUP6 DUP6 PUSH2 0x2F55 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x8 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND 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 PUSH2 0x30A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x30B7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x30CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 PUSH1 0x60 SWAP6 DUP7 SHL DUP2 AND PUSH1 0x20 DUP4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP5 DUP7 SHL DUP2 AND PUSH1 0x34 DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x28 DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH1 0x48 DUP4 ADD DUP5 MSTORE DUP1 MLOAD SWAP1 DUP7 ADD KECCAK256 PUSH32 0xFF00000000000000000000000000000000000000000000000000000000000000 PUSH1 0x68 DUP5 ADD MSTORE SWAP4 SWAP1 SWAP6 SHL SWAP1 SWAP5 AND PUSH1 0x69 DUP6 ADD MSTORE PUSH1 0x7D DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x96E8AC4277198FF8B6F785478AA9A39F403CB768DD02CBEE326C3E7DA348845F PUSH1 0x9D DUP1 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MLOAD DUP1 DUP6 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xBD SWAP1 SWAP4 ADD SWAP1 MSTORE DUP2 MLOAD SWAP2 ADD KECCAK256 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 PUSH2 0x3208 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x456E756D4D61703A206E6F6E6578697374656E74206B65790000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP4 PUSH1 0x0 ADD PUSH1 0x1 DUP3 SUB DUP2 SLOAD DUP2 LT PUSH2 0x321A JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD PUSH1 0x1 ADD SLOAD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x0 NOT DUP3 EQ PUSH2 0x3248 JUMPI POP PUSH1 0x0 PUSH2 0x1965 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x3262 SWAP1 DUP6 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x31A5 JUMP JUMPDEST PUSH1 0x40 DUP7 ADD MLOAD PUSH1 0x7 SLOAD PUSH1 0xA0 DUP9 ADD MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 PUSH2 0x3289 SWAP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH2 0x1A55 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x32BA DUP8 PUSH1 0x80 ADD MLOAD PUSH2 0x32B4 DUP5 PUSH2 0x1204 PUSH8 0xDE0B6B3A7640000 DUP9 PUSH2 0x190C SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 PUSH2 0x190C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x2 DUP1 DUP3 MSTORE PUSH1 0x60 DUP3 ADD DUP4 MSTORE SWAP3 SWAP4 POP SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP POP POP PUSH1 0xE0 DUP9 ADD DUP2 SWAP1 MSTORE DUP1 MLOAD DUP7 SWAP2 SWAP1 PUSH1 0x0 SWAP1 PUSH2 0x32EF JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP2 PUSH1 0x0 SHL DUP8 PUSH1 0xE0 ADD MLOAD PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x3310 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0xC0 DUP8 ADD MSTORE POP PUSH1 0x1 SWAP2 POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP2 PUSH2 0x3340 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x3917 JUMP JUMPDEST PUSH2 0x3391 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433230577261707065723A206E6F6E2D636F6E7472616374000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x33CE JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x33AF JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x3430 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x3435 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 ISZERO PUSH2 0x34B4 JUMPI DUP1 MLOAD ISZERO PUSH2 0x34AF JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x345C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x34AF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433230577261707065723A206F7065726174696F6E206661696C65640000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x3510 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x3507 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433230577261707065723A206F7065726174696F6E206661696C65640000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 MLOAD DUP1 DUP3 PUSH1 0x20 ADD REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x363A JUMPI DUP1 PUSH1 0xC0 ADD MLOAD CALLVALUE LT ISZERO PUSH2 0x3599 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E73756666696369656E742045544800000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xC0 DUP3 ADD MLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 DUP2 ISZERO PUSH2 0x8FC MUL SWAP2 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x35D7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x0 PUSH2 0x35F1 DUP3 PUSH1 0xC0 ADD MLOAD CALLVALUE PUSH2 0x2EF8 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x3634 JUMPI DUP2 MLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 DUP3 ISZERO PUSH2 0x8FC MUL SWAP1 DUP4 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x3632 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP JUMPDEST POP PUSH2 0x1584 JUMP JUMPDEST PUSH2 0x1584 PUSH2 0x3645 PUSH2 0x954 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xC0 DUP5 ADD MLOAD PUSH1 0x40 DUP6 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP4 SWAP3 AND SWAP1 JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x24 DUP4 ADD MSTORE DUP5 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x84 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 OR SWAP1 MSTORE PUSH2 0x1CCE SWAP1 DUP6 SWAP1 PUSH2 0x332D JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x0 SWAP2 SWAP1 DUP2 PUSH2 0x3730 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x372A JUMPI CALLVALUE SWAP2 POP PUSH2 0x3730 JUMP JUMPDEST PUSH1 0x0 NOT SWAP2 POP JUMPDEST DUP1 PUSH2 0x373A JUMPI POP PUSH1 0x0 NOT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x37DC JUMPI PUSH1 0x8 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND 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 PUSH2 0x37AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x37C1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x37D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP7 POP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x387E JUMPI PUSH1 0x8 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND 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 PUSH2 0x384F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3863 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3879 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP6 POP JUMPDEST PUSH2 0x388C DUP8 DUP8 DUP8 DUP6 ADDRESS DUP7 PUSH2 0x391D JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 OR SWAP1 MSTORE PUSH2 0x1742 SWAP1 DUP5 SWAP1 PUSH2 0x332D JUMP JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x3986 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x556E697377617056323A2073616D652061646472657373657300000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT 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 DUP8 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x39B5 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP DUP7 DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x39E3 JUMPI INVALID 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 0x8 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0xAD5C464800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x60 SWAP5 SWAP3 SWAP1 SWAP3 AND SWAP3 PUSH4 0xAD5C4648 SWAP3 PUSH1 0x4 DUP1 DUP5 ADD SWAP4 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3A51 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3A65 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3A7B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0x3C76 JUMPI CALLVALUE DUP7 EQ PUSH2 0x3AE4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x556E697377617056323A20696E76616C6964206D6178416D6F756E74496E0000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x40 MLOAD PUSH32 0xFB3BDB4100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP10 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND PUSH1 0x44 DUP5 ADD MSTORE PUSH1 0x64 DUP4 ADD DUP9 SWAP1 MSTORE PUSH1 0x80 PUSH1 0x24 DUP5 ADD SWAP1 DUP2 MSTORE DUP7 MLOAD PUSH1 0x84 DUP6 ADD MSTORE DUP7 MLOAD SWAP2 SWAP1 SWAP5 AND SWAP4 PUSH4 0xFB3BDB41 SWAP4 CALLVALUE SWAP4 DUP14 SWAP4 DUP10 SWAP4 DUP14 SWAP4 DUP14 SWAP4 SWAP3 PUSH1 0xA4 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 DUP1 DUP9 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3B7E JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3B66 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP6 POP POP POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3BA5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3BB9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3BE3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH2 0x3C03 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x3C18 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD DUP7 PUSH1 0x20 DUP3 MUL DUP4 ADD GT PUSH5 0x100000000 DUP3 GT OR ISZERO PUSH2 0x3C35 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 DUP3 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3C62 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3C4A JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD PUSH1 0x40 MSTORE POP POP POP SWAP1 POP PUSH2 0x3FA0 JUMP JUMPDEST PUSH1 0x8 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND 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 PUSH2 0x3CC4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3CD8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3CEE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0x3E0A JUMPI PUSH1 0x8 SLOAD PUSH1 0x40 MLOAD PUSH32 0x4A25D94A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP10 DUP2 MSTORE PUSH1 0x24 DUP3 ADD DUP10 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND PUSH1 0x64 DUP5 ADD MSTORE PUSH1 0x84 DUP4 ADD DUP9 SWAP1 MSTORE PUSH1 0xA0 PUSH1 0x44 DUP5 ADD SWAP1 DUP2 MSTORE DUP7 MLOAD PUSH1 0xA4 DUP6 ADD MSTORE DUP7 MLOAD SWAP2 SWAP1 SWAP5 AND SWAP4 PUSH4 0x4A25D94A SWAP4 DUP13 SWAP4 DUP13 SWAP4 DUP10 SWAP4 DUP14 SWAP4 DUP14 SWAP4 SWAP3 PUSH1 0xC4 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 DUP1 DUP9 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3DA4 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3D8C JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP7 POP POP POP POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3DCD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3DE1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3BE3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x40 MLOAD PUSH32 0x8803DBEE00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP10 DUP2 MSTORE PUSH1 0x24 DUP3 ADD DUP10 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND PUSH1 0x64 DUP5 ADD MSTORE PUSH1 0x84 DUP4 ADD DUP9 SWAP1 MSTORE PUSH1 0xA0 PUSH1 0x44 DUP5 ADD SWAP1 DUP2 MSTORE DUP7 MLOAD PUSH1 0xA4 DUP6 ADD MSTORE DUP7 MLOAD SWAP2 SWAP1 SWAP5 AND SWAP4 PUSH4 0x8803DBEE SWAP4 DUP13 SWAP4 DUP13 SWAP4 DUP10 SWAP4 DUP14 SWAP4 DUP14 SWAP4 SWAP3 PUSH1 0xC4 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 DUP1 DUP9 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3EAB JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3E93 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP7 POP POP POP POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3ED4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3EE8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3F11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH2 0x3F31 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x3F46 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD DUP7 PUSH1 0x20 DUP3 MUL DUP4 ADD GT PUSH5 0x100000000 DUP3 GT OR ISZERO PUSH2 0x3F63 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 DUP3 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3F90 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3F78 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD PUSH1 0x40 MSTORE POP POP POP SWAP1 POP JUMPDEST DUP1 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x3FAD JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP3 POP POP POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x140 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP1 NOT AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE POP SWAP1 JUMP INVALID MSTORE8 PUSH2 0x6665 0x4D PUSH2 0x7468 GASPRICE KECCAK256 PUSH14 0x756C7469706C69636174696F6E20 PUSH16 0x766572666C6F77A26469706673582212 KECCAK256 CALLDATASIZE ADD LOG3 0x2F 0xE0 PUSH1 0x3E 0x2E DUP14 LOG3 PUSH1 0x55 LT 0x1E 0xDE 0xCE PUSH28 0xB08ECFB08E4ED1475E9AADC690BAC64736F6C63430007060033ABB9 0x26 EQ CREATE2 CALLER CALLDATACOPY DIV EXTCODESIZE SSTORE 0xDC SWAP10 PUSH11 0x83EBB09ADCE78EC336CA18 DUP15 LOG0 0x21 DUP1 0xB6 SAR SHR EQ ","sourceMap":"1260:6698:28:-:0;;;1907:311;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1907:311:28;;;;;;;;;;;;;;;;;;;;960:6:1;:15;;-1:-1:-1;;;;;;960:15:1;2518:10:32;960:15:1;;;;;990:40;;1907:311:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2554:4:32;;2518:10;1907:311:28;;2518:10:32;;;;990:40:1;;960:6;;990:40;-1:-1:-1;;;;;;512:27:8;::::1;504:60;;;::::0;;-1:-1:-1;;;504:60:8;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;574:12;:28:::0;;-1:-1:-1;;;;;574:28:8;::::1;-1:-1:-1::0;;;;;;574:28:8;;::::1;::::0;::::1;::::0;;;617:30:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;-1:-1:-1::0;;543:6:5;:16;;-1:-1:-1;;543:16:5;;;;;;;;;;2570:28:32::2;::::0;;;2608:44:::2;::::0;;;2687:16:::2;::::0;;2701:1:::2;2687:16:::0;;;;;::::2;::::0;;-1:-1:-1;;2687:16:32::2;::::0;::::2;::::0;;::::2;::::0;::::2;-1:-1:-1::0;;2739:16:32::2;::::0;;2753:1:::2;2739:16:::0;;;;;::::2;::::0;;2662:41;;-1:-1:-1;2713:23:32::2;::::0;2739:16;;-1:-1:-1;2753:1:32;2739:16:::2;::::0;::::2;::::0;;::::2;::::0;::::2;-1:-1:-1::0;;2766:8:32;;2713:42;;-1:-1:-1;;;;2765:66:32;1751:44:::2;::::0;-1:-1:-1;2766:5:32;;2803:27:::2;::::0;2766:8:::2;;;;;;;;;2776:6;2783:1;2776:9;;;;;;;;;;;;;2765:66;;;::::0;::::2;;;::::0;::::2;;-1:-1:-1::0;;2886:34:32::2;;-1:-1:-1::0;;;2841:80:32::2;2842:5;2848:1;2842:8;;;;;;;;;;;;;2852:6;2859:1;2852:9;;;;;;;;;;;;;2841:80;;;::::0;::::2;;;::::0;::::2;;-1:-1:-1::0;;;;;;;;;;;2948:5:32::2;2955:6;2936:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::2;::::0;;;::::2;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::2;::::0;;;::::2;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;1605:14:29::1;:32:::0;;-1:-1:-1;;;;;;1605:32:29::1;-1:-1:-1::0;;;;;1605:32:29;::::1;;::::0;;-1:-1:-1;;;;;;;;;;1672:16:29::1;::::0;-1:-1:-1;;1672:16:29;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;1672:16:29::1;-1:-1:-1::0;1724:16:29::1;::::0;;1738:1:::1;1724:16:::0;;;;;::::1;::::0;;;1647:41;;-1:-1:-1;1698:23:29::1;::::0;1724:16;::::1;::::0;;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;1724:16:29::1;1698:42;;-1:-1:-1::0;;1803:33:29::1;;1750:87;;1751:5;1757:1;1751:8;;;;;;;;;;;;;1761:6;1768:1;1761:9;;;;;;;;;;;;;1750:87;;;::::0;::::1;;;::::0;::::1;;-1:-1:-1::0;;;;;;;;;;;1864:5:29::1;1871:6;1852:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;1370:515;;::::0;;;;1800:22:33::1;1839:1;-1:-1:-1::0;;;;;1825:16:33::1;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;1825:16:33::1;-1:-1:-1::0;1877:16:33::1;::::0;;1891:1:::1;1877:16:::0;;;;;::::1;::::0;;;1800:41;;-1:-1:-1;1851:23:33::1;::::0;1877:16;::::1;::::0;;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;1904:8:33;;1851:42;;-1:-1:-1;1903:81:33::1;::::0;-1:-1:-1;;1128:28:33;-1:-1:-1;1904:5:33;;1953:30:::1;::::0;1904:8:::1;;;;;;;;;1914:6;1921:1;1914:9;;;;;;;;;;;;;1903:81;;;::::0;::::1;;;::::0;::::1;;-1:-1:-1::0;;;;;;;;;;;2011:5:33::1;2018:6;1999:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;1555:477;;::::0;;;;594:37:22;614:16;594:19;;;:37;;:::i;:::-;537:101;1907:311:28;;;;;1260:6698;;1955:175:22;2038:15;:34;;-1:-1:-1;;;;;2038:34:22;;-1:-1:-1;;;;;;2038:34:22;;;;;;;;2087:36;;;;;;;;;;;;;;;;1955:175;:::o;1260:6698:28:-;;;;;;;;;;;;;"},"deployedBytecode":{"generatedSources":[],"immutableReferences":{"5787":[{"length":32,"start":7700}]},"linkReferences":{},"object":"6080604052600436106101795760003560e01c80638456cb59116100cb578063a963b2571161007f578063c7b778db11610059578063c7b778db1461083d578063f21f537d1461090c578063f2fde38b14610921576101ef565b8063a963b257146106c0578063bda4c5ab14610755578063be9a655514610828576101ef565b80638da5cb5b116100b05780638da5cb5b146106965780639865bcc8146106ab5780639e049545146106ab576101ef565b80638456cb591461066c5780638488bb4e14610681576101ef565b8063579f2c771161012d5780635e6e9f70116101075780635e6e9f701461049957806361bd3851146105d45780636b8f9c4314610639576101ef565b8063579f2c77146104345780635c4fafc71461045b5780635c975abb14610470576101ef565b80631694505e1161015e5780631694505e146103225780632a8a45bc146103375780633f4ba83a1461041f576101ef565b80631265b651146101f45780631323b06614610225576101ef565b366101ef576008546001600160a01b0316610192610954565b6001600160a01b0316146101ed576040805162461bcd60e51b815260206004820152601860248201527f53616c653a20496e76616c6964204554482073656e6465720000000000000000604482015290519081900360640190fd5b005b600080fd5b34801561020057600080fd5b50610209610958565b604080516001600160a01b039092168252519081900360200190f35b34801561023157600080fd5b506102c7600480360360a081101561024857600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a08101608082013564010000000081111561028857600080fd5b82018360208201111561029a57600080fd5b803590602001918460018302840111640100000000831117156102bc57600080fd5b509092509050610967565b6040518083815260200180602001828103825283818151815260200191508051906020019060200280838360005b8381101561030d5781810151838201526020016102f5565b50505050905001935050505060405180910390f35b34801561032e57600080fd5b50610209610a5c565b34801561034357600080fd5b506103616004803603602081101561035a57600080fd5b5035610a6b565b60405180878152602001868152602001858152602001846001600160a01b031681526020018060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156103c65781810151838201526020016103ae565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156104055781810151838201526020016103ed565b505050509050019850505050505050505060405180910390f35b34801561042b57600080fd5b506101ed610c10565b34801561044057600080fd5b50610449610c7e565b60408051918252519081900360200190f35b34801561046757600080fd5b50610209610c84565b34801561047c57600080fd5b50610485610c9c565b604080519115158252519081900360200190f35b3480156104a557600080fd5b506101ed600480360360608110156104bc57600080fd5b813591908101906040810160208201356401000000008111156104de57600080fd5b8201836020820111156104f057600080fd5b8035906020019184602083028401116401000000008311171561051257600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561056257600080fd5b82018360208201111561057457600080fd5b8035906020019184602083028401116401000000008311171561059657600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610ca5945050505050565b3480156105e057600080fd5b506105e9610e82565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561062557818101518382015260200161060d565b505050509050019250505060405180910390f35b34801561064557600080fd5b506101ed6004803603602081101561065c57600080fd5b50356001600160a01b0316610edd565b34801561067857600080fd5b506101ed610fb5565b34801561068d57600080fd5b5061020961101c565b3480156106a257600080fd5b5061020961102b565b3480156106b757600080fd5b5061044961103a565b6101ed600480360360a08110156106d657600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a08101608082013564010000000081111561071657600080fd5b82018360208201111561072857600080fd5b8035906020019184600183028401116401000000008311171561074a57600080fd5b509092509050611040565b34801561076157600080fd5b506105e96004803603606081101561077857600080fd5b81019060208101813564010000000081111561079357600080fd5b8201836020820111156107a557600080fd5b803590602001918460208302840111640100000000831117156107c757600080fd5b919390928235926040810190602001356401000000008111156107e957600080fd5b8201836020820111156107fb57600080fd5b8035906020019184600183028401116401000000008311171561081d57600080fd5b509092509050611126565b34801561083457600080fd5b506101ed611235565b34801561084957600080fd5b506105e96004803603604081101561086057600080fd5b81019060208101813564010000000081111561087b57600080fd5b82018360208201111561088d57600080fd5b803590602001918460208302840111640100000000831117156108af57600080fd5b9193909290916020810190356401000000008111156108cd57600080fd5b8201836020820111156108df57600080fd5b8035906020019184600183028401116401000000008311171561090157600080fd5b509092509050611248565b34801561091857600080fd5b50610449611334565b34801561092d57600080fd5b506101ed6004803603602081101561094457600080fd5b50356001600160a01b031661133a565b3390565b6007546001600160a01b031681565b60006060600254600014156109c3576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b6109cb6113ab565b6109d3613fc3565b6109db610954565b6001600160a01b03908116825289811660208084019190915290891660408084019190915260608301899052608083018890528051601f870183900483028101830190915285815290869086908190840183828082843760009201919091525050505060a0820152610a4c81611403565b9250925050965096945050505050565b6008546001600160a01b031681565b6000818152600660205260408120819081908190606090819083610a916004830161142a565b82549850905087610ae9576040805162461bcd60e51b815260206004820152601660248201527f53616c653a206e6f6e2d6578697374656e7420736b7500000000000000000000604482015290519081900360640190fd5b60018201546002830154600384015491985096506001600160a01b031694508067ffffffffffffffff81118015610b1f57600080fd5b50604051908082528060200260200182016040528015610b49578160200160208202803683370190505b5093508067ffffffffffffffff81118015610b6357600080fd5b50604051908082528060200260200182016040528015610b8d578160200160208202803683370190505b50925060005b81811015610c0457600080610bab600486018461142e565b915091508160001c878481518110610bbf57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508060001c868481518110610bef57fe5b60209081029190910101525050600101610b93565b50505091939550919395565b600254610c64576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b610c74610c6f610954565b6114c0565b610c7c611587565b565b60011981565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b60035460ff1681565b610cb0610c6f610954565b815181518114610d07576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20696e636f6e73697374656e742061727261797300000000000000604482015290519081900360640190fd5b60008481526006602052604090208054610d68576040805162461bcd60e51b815260206004820152601660248201527f53616c653a206e6f6e2d6578697374656e7420736b7500000000000000000000604482015290519081900360640190fd5b6004810182610db3576000610d7c8261142a565b905060005b81811015610dac576000610d95848261142e565b509050610da284826115df565b5050600101610d81565b5050610dbe565b610dbe8186866116bf565b857fcb3fe5489e0cd43d0f4a33d1e09a4a0463a03d0d38f56165530854e5540db1438686604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015610e26578181015183820152602001610e0e565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015610e65578181015183820152602001610e4d565b5050505090500194505050505060405180910390a2505050505050565b60606004600001805480602002602001604051908101604052809291908181526020018280548015610ed357602002820191906000526020600020905b815481526020019060010190808311610ebf575b5050505050905090565b610ee8610c6f610954565b6001600160a01b038116610f43576040805162461bcd60e51b815260206004820152601460248201527f5061796f75743a207a65726f2061646472657373000000000000000000000000604482015290519081900360640190fd5b600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03838116919091179182905560408051929091168252517fdd880d24a789958a6398c99c2e54ce31bc10a638cbc42f7dd34285479ae0f855916020908290030190a150565b600254611009576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b611014610c6f610954565b610c7c611747565b6001546001600160a01b031681565b6000546001600160a01b031690565b60001981565b600254611094576040805162461bcd60e51b815260206004820152601660248201527f537461727461626c653a206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b61109c6113ab565b6110a4613fc3565b6110ac610954565b6001600160a01b03908116825287811660208084019190915290871660408084019190915260608301879052608083018690528051601f850183900483028101830190915283815290849084908190840183828082843760009201919091525050505060a082015261111d81611785565b50505050505050565b6060848067ffffffffffffffff8111801561114057600080fd5b5060405190808252806020026020018201604052801561116a578160200160208202803683370190505b50915060005b8181101561122a5760006111ec89898481811061118957fe5b905060200201356001600160a01b0316600760009054906101000a90046001600160a01b03168989898080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506117b292505050565b905061120a8161120489670de0b6b3a764000061190c565b9061196c565b84838151811061121657fe5b602090810291909101015250600101611170565b505095945050505050565b611240610c6f610954565b610c746119d3565b6060838067ffffffffffffffff8111801561126257600080fd5b5060405190808252806020026020018201604052801561128c578160200160208202803683370190505b50915060005b8181101561132a5761130b8787838181106112a957fe5b905060200201356001600160a01b0316600760009054906101000a90046001600160a01b031687878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a5592505050565b83828151811061131757fe5b6020908102919091010152600101611292565b5050949350505050565b60025490565b611345610c6f610954565b600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383811691821780845560405192939116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b60035460ff1615610c7c576040805162461bcd60e51b815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b6000606061141083611bcd565b61141983611c31565b505060c081015160e0909101519091565b5490565b815460009081908310611488576040805162461bcd60e51b815260206004820152601c60248201527f456e756d4d61703a20696e646578206f7574206f6620626f756e647300000000604482015290519081900360640190fd5b600084600001848154811061149957fe5b906000526020600020906002020190508060000154816001015492509250505b9250929050565b306001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156114f957600080fd5b505afa15801561150d573d6000803e3d6000fd5b505050506040513d602081101561152357600080fd5b50516001600160a01b03828116911614611584576040805162461bcd60e51b815260206004820152601660248201527f4f776e61626c653a206e6f7420746865206f776e657200000000000000000000604482015290519081900360640190fd5b50565b61158f611cd4565b6003805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6115c2610954565b604080516001600160a01b039092168252519081900360200190a1565b600081815260018301602052604081205480156116b3578354600019808301919081019060009087908390811061161257fe5b906000526020600020906002020190508087600001848154811061163257fe5b60009182526020808320845460029093020191825560019384015491840191909155835482528983019052604090209084019055865487908061167157fe5b60008281526020808220600260001990940193840201828155600190810183905592909355888152898201909252604082209190915594506116b99350505050565b60009150505b92915050565b6116ca838383611d2b565b6116d38361142a565b15806116f157506007546116f19084906001600160a01b0316611e8f565b611742576040805162461bcd60e51b815260206004820152601860248201527f53616c653a206e6f207265666572656e636520746f6b656e0000000000000000604482015290519081900360640190fd5b505050565b61174f6113ab565b6003805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586115c2610954565b61178e81611bcd565b61179781611c31565b6117a081611ea7565b6117a981611f20565b61158481611f6c565b60006001600160a01b03851673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561185657600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561182757600080fd5b505afa15801561183b573d6000803e3d6000fd5b505050506040513d602081101561185157600080fd5b505194505b6001600160a01b03841673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14156118f857600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156118c957600080fd5b505afa1580156118dd573d6000803e3d6000fd5b505050506040513d60208110156118f357600080fd5b505193505b611903858585612451565b95945050505050565b60008261191b575060006116b9565b8282028284828161192857fe5b04146119655760405162461bcd60e51b81526004018080602001828103825260218152602001806140356021913960400191505060405180910390fd5b9392505050565b60008082116119c2576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b8183816119cb57fe5b049392505050565b60025415611a28576040805162461bcd60e51b815260206004820152601260248201527f537461727461626c653a20737461727465640000000000000000000000000000604482015290519081900360640190fd5b426002557f27029695aa5f602a4ee81f4c32dfa86e562f200a17966496f3a7c3f2ec0f94176115c2610954565b60006001600160a01b03841673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415611af957600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611aca57600080fd5b505afa158015611ade573d6000803e3d6000fd5b505050506040513d6020811015611af457600080fd5b505193505b6001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415611b9b57600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611b6c57600080fd5b505afa158015611b80573d6000803e3d6000fd5b505050506040513d6020811015611b9657600080fd5b505192505b600080611ba88686612658565b9092509050611bc38261120483670de0b6b3a764000061190c565b9695505050505050565b611bd681612724565b60408160a00151511015611584576040805162461bcd60e51b815260206004820152601760248201527f53616c653a206d697373696e6720757365722064617461000000000000000000604482015290519081900360640190fd5b606081015160009081526006602052604090208054611c97576040805162461bcd60e51b815260206004820152601560248201527f53616c653a20756e737570706f7274656420534b550000000000000000000000604482015290519081900360640190fd5b600481016000611ca784836129ce565b9050611cb4848383612a3e565b611cce576080840151611cc890829061190c565b60c08501525b50505050565b60035460ff16610c7c576040805162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604482015290519081900360640190fd5b60005b8251811015611e11576000838281518110611d4557fe5b6020026020010151905060006001600160a01b0316816001600160a01b03161415611db7576040805162461bcd60e51b815260206004820152601860248201527f53616c653a207a65726f206164647265737320746f6b656e0000000000000000604482015290519081900360640190fd5b6000838381518110611dc557fe5b602002602001015190508060001415611df157611deb866001600160a01b0384166115df565b50611e07565b611e05866001600160a01b03841683612b42565b505b5050600101611d2e565b507f0000000000000000000000000000000000000000000000000000000000000000611e3c8461142a565b1115611742576040805162461bcd60e51b815260206004820152601560248201527f53616c653a20746f6f206d616e7920746f6b656e730000000000000000000000604482015290519081900360640190fd5b60009081526001919091016020526040902054151590565b60e08101515115801590611edc575060408101516001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14155b15611f175760a0810151602081015180611ef557506000195b6008546040840151611f14916001600160a01b03918216911683612bd9565b50505b61158481612c59565b60608101516000908152600660205260409020805460001914611f685760808201516001820154611f5091612ef8565b60608301516000908152600660205260409020600101555b5050565b806060015181604001516001600160a01b031682600001516001600160a01b03167f29f844483ca6b10b5c0611d039afc15ce8f6380e905307b381c3a8ee4e90e11e846020015185608001518660a001518760c001518860e001518961010001518a610120015160405160200180848051906020019060200280838360005b83811015612003578181015183820152602001611feb565b50505050905001838051906020019060200280838360005b8381101561203357818101518382015260200161201b565b50505050905001828051906020019060200280838360005b8381101561206357818101518382015260200161204b565b50505050905001935050505060405160208183030381529060405260405180866001600160a01b031681526020018581526020018060200184815260200180602001838103835286818151815260200191508051906020019080838360005b838110156120da5781810151838201526020016120c2565b50505050905090810190601f1680156121075780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b8381101561213a578181015183820152602001612122565b50505050905090810190601f1680156121675780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390a460608101516000908152600660205260409020600301546001600160a01b03168015611f68576361eceae860e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916816001600160a01b03166361eceae8846000015185602001518660400151876060015188608001518960a001518a60c001518b60e001518c61010001518d61012001516040518b63ffffffff1660e01b8152600401808b6001600160a01b031681526020018a6001600160a01b03168152602001896001600160a01b031681526020018881526020018781526020018060200186815260200180602001806020018060200185810385528a818151815260200191508051906020019080838360005b838110156122a0578181015183820152602001612288565b50505050905090810190601f1680156122cd5780820380516001836020036101000a031916815260200191505b508581038452885181528851602091820191808b01910280838360005b838110156123025781810151838201526020016122ea565b50505050905001858103835287818151815260200191508051906020019060200280838360005b83811015612341578181015183820152602001612329565b50505050905001858103825286818151815260200191508051906020019060200280838360005b83811015612380578181015183820152602001612368565b505050509050019e505050505050505050505050505050602060405180830381600087803b1580156123b157600080fd5b505af11580156123c5573d6000803e3d6000fd5b505050506040513d60208110156123db57600080fd5b50517fffffffff000000000000000000000000000000000000000000000000000000001614611f68576040805162461bcd60e51b815260206004820152601a60248201527f53616c653a206e6f74696669636174696f6e2072656675736564000000000000604482015290519081900360640190fd5b60408051600280825260608201835260009283929190602083019080368337019050509050848160008151811061248457fe5b60200260200101906001600160a01b031690816001600160a01b03168152505083816001815181106124b257fe5b6001600160a01b03928316602091820292909201810191909152600854604080517f1f00ca7400000000000000000000000000000000000000000000000000000000815260048101888152602482019283528651604483015286516000969490941694631f00ca74948a948994909260649091019185820191028083838c5b83811015612549578181015183820152602001612531565b50505050905001935050505060006040518083038186803b15801561256d57600080fd5b505afa158015612581573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156125aa57600080fd5b81019080805160405193929190846401000000008211156125ca57600080fd5b9083019060208201858111156125df57600080fd5b82518660208202830111640100000000821117156125fc57600080fd5b82525081516020918201928201910280838360005b83811015612629578181015183820152602001612611565b5050505090500160405250505090508060008151811061264557fe5b6020026020010151925050509392505050565b60008060006126678585612f55565b5090506000806126778787613042565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156126af57600080fd5b505afa1580156126c3573d6000803e3d6000fd5b505050506040513d60608110156126d957600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506001600160a01b0387811690841614612713578082612716565b81815b909890975095505050505050565b60208101516001600160a01b0316612783576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a207a65726f206164647265737320726563697069656e7400000000604482015290519081900360640190fd5b60408101516001600160a01b03166127e2576040805162461bcd60e51b815260206004820152601860248201527f53616c653a207a65726f206164647265737320746f6b656e0000000000000000604482015290519081900360640190fd5b6080810151612838576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a207a65726f207175616e7469747920707572636861736500000000604482015290519081900360640190fd5b60608101516000908152600660205260409020805461289e576040805162461bcd60e51b815260206004820152601660248201527f53616c653a206e6f6e2d6578697374656e7420736b7500000000000000000000604482015290519081900360640190fd5b8160800151816002015410156128fb576040805162461bcd60e51b815260206004820152601860248201527f53616c653a2061626f7665206d6178207175616e746974790000000000000000604482015290519081900360640190fd5b80546000191461296257816080015181600101541015612962576040805162461bcd60e51b815260206004820152601960248201527f53616c653a20696e73756666696369656e7420737570706c7900000000000000604482015290519081900360640190fd5b60408201516001600160a01b031661297d6004830182611e8f565b611742576040805162461bcd60e51b815260206004820152601c60248201527f53616c653a206e6f6e2d6578697374656e7420736b7520746f6b656e00000000604482015290519081900360640190fd5b60408201516000906129ea9083906001600160a01b03166131a5565b9050806116b9576040805162461bcd60e51b815260206004820152601f60248201527f53616c653a20756e737570706f72746564207061796d656e7420746f6b656e00604482015290519081900360640190fd5b60006001198214612a5b57612a54848484613235565b9050611965565b600754600090612a759085906001600160a01b03166131a5565b6080860151909150600090612a8b90839061190c565b604087015160075460a0890151929350600092612ab492916001600160a01b03169085906117b2565b90506000612ace8261120485670de0b6b3a764000061190c565b604080516002808252606082018352929350919060208301908036833750505060e089018190528051879190600090612b0357fe5b6020026020010181815250508060001b8860e00151600181518110612b2457fe5b60209081029190910101525060c08701525060019150509392505050565b600082815260018401602052604081205480612ba7575050604080518082018252838152602080820184815286546001818101895560008981528481209551600290930290950191825591519082015586548684528188019092529290912055611965565b82856000016001830381548110612bba57fe5b9060005260206000209060020201600101819055506000915050611965565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b30000000000000000000000000000000000000000000000000000000017905261174290849061332d565b60e0810151511580612c8b57506001600019038160e00151600081518110612c7d57fe5b602002602001015160001c14155b15612c9e57612c9981613517565b611584565b60408101516001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415612d25578060c00151341015612d20576040805162461bcd60e51b815260206004820152601660248201527f53616c653a20696e73756666696369656e742045544800000000000000000000604482015290519081900360640190fd5b612d4c565b612d4c612d30610954565b60c083015160408401516001600160a01b031691903090613662565b60008160e00151600181518110612d5f57fe5b602002602001015160001c90506000612d91670de0b6b3a76400006112048560c001518561190c90919063ffffffff16565b604084015160075460a0860151929350600092612dba92916001600160a01b03169085906136ea565b60408501519091506001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415612e3b576000612df23483612ef8565b90508015612e355784516040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612e33573d6000803e3d6000fd5b505b50612e74565b60c0840151600090612e4d9083612ef8565b90508015612e725784516040860151612e72916001600160a01b039091169083613897565b505b6007546001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415612edb576001546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612ed5573d6000803e3d6000fd5b50611cce565b600154600754611cce916001600160a01b03918216911683613897565b600082821115612f4f576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b600080826001600160a01b0316846001600160a01b03161415612fbf576040805162461bcd60e51b815260206004820152601960248201527f556e697377617056323a2073616d652061646472657373657300000000000000604482015290519081900360640190fd5b826001600160a01b0316846001600160a01b031610612fdf578284612fe2565b83835b90925090506001600160a01b0382166114b9576040805162461bcd60e51b815260206004820152601760248201527f556e697377617056323a207a65726f2061646472657373000000000000000000604482015290519081900360640190fd5b60008060006130518585612f55565b91509150600860009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156130a357600080fd5b505afa1580156130b7573d6000803e3d6000fd5b505050506040513d60208110156130cd57600080fd5b5051604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606095861b811660208381019190915294861b81166034830152825160288184030181526048830184528051908601207fff0000000000000000000000000000000000000000000000000000000000000060688401529390951b9094166069850152607d8401919091527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f609d808501919091528151808503909101815260bd909301905281519101209392505050565b600081815260018301602052604081205480613208576040805162461bcd60e51b815260206004820152601860248201527f456e756d4d61703a206e6f6e6578697374656e74206b65790000000000000000604482015290519081900360640190fd5b83600001600182038154811061321a57fe5b90600052602060002090600202016001015491505092915050565b6000600019821461324857506000611965565b6007546000906132629085906001600160a01b03166131a5565b604086015160075460a088015192935060009261328992916001600160a01b031690611a55565b905060006132ba87608001516132b484611204670de0b6b3a76400008861190c90919063ffffffff16565b9061190c565b604080516002808252606082018352929350919060208301908036833750505060e0880181905280518691906000906132ef57fe5b6020026020010181815250508160001b8760e0015160018151811061331057fe5b602090810291909101015260c08701525060019150509392505050565b816133406001600160a01b038216613917565b613391576040805162461bcd60e51b815260206004820152601a60248201527f4552433230577261707065723a206e6f6e2d636f6e7472616374000000000000604482015290519081900360640190fd5b600080826001600160a01b0316846040518082805190602001908083835b602083106133ce5780518252601f1990920191602091820191016133af565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613430576040519150601f19603f3d011682016040523d82523d6000602084013e613435565b606091505b509150915081156134b4578051156134af5780806020019051602081101561345c57600080fd5b50516134af576040805162461bcd60e51b815260206004820152601e60248201527f4552433230577261707065723a206f7065726174696f6e206661696c65640000604482015290519081900360640190fd5b613510565b8051613507576040805162461bcd60e51b815260206004820152601e60248201527f4552433230577261707065723a206f7065726174696f6e206661696c65640000604482015290519081900360640190fd5b80518082602001fd5b5050505050565b60408101516001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561363a578060c00151341015613599576040805162461bcd60e51b815260206004820152601660248201527f53616c653a20696e73756666696369656e742045544800000000000000000000604482015290519081900360640190fd5b60015460c08201516040516001600160a01b039092169181156108fc0291906000818181858888f193505050501580156135d7573d6000803e3d6000fd5b5060006135f18260c0015134612ef890919063ffffffff16565b905080156136345781516040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015613632573d6000803e3d6000fd5b505b50611584565b611584613645610954565b60015460c084015160408501516001600160a01b03908116939216905b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052611cce90859061332d565b602081015160408201516000919081613730576001600160a01b03871673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561372a57349150613730565b60001991505b8061373a57506000195b6001600160a01b03871673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14156137dc57600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156137ad57600080fd5b505afa1580156137c1573d6000803e3d6000fd5b505050506040513d60208110156137d757600080fd5b505196505b6001600160a01b03861673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561387e57600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561384f57600080fd5b505afa158015613863573d6000803e3d6000fd5b505050506040513d602081101561387957600080fd5b505195505b61388c87878785308661391d565b979650505050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905261174290849061332d565b3b151590565b6000856001600160a01b0316876001600160a01b03161415613986576040805162461bcd60e51b815260206004820152601960248201527f556e697377617056323a2073616d652061646472657373657300000000000000604482015290519081900360640190fd5b60408051600280825260608201835260009260208301908036833701905050905087816000815181106139b557fe5b60200260200101906001600160a01b031690816001600160a01b03168152505086816001815181106139e357fe5b6001600160a01b03928316602091820292909201810191909152600854604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051606094929092169263ad5c464892600480840193829003018186803b158015613a5157600080fd5b505afa158015613a65573d6000803e3d6000fd5b505050506040513d6020811015613a7b57600080fd5b50516001600160a01b038a811691161415613c7657348614613ae4576040805162461bcd60e51b815260206004820152601e60248201527f556e697377617056323a20696e76616c6964206d6178416d6f756e74496e0000604482015290519081900360640190fd5b6008546040517ffb3bdb41000000000000000000000000000000000000000000000000000000008152600481018981526001600160a01b03888116604484015260648301889052608060248401908152865160848501528651919094169363fb3bdb419334938d9389938d938d939260a4909101906020808801910280838360005b83811015613b7e578181015183820152602001613b66565b50505050905001955050505050506000604051808303818588803b158015613ba557600080fd5b505af1158015613bb9573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526020811015613be357600080fd5b8101908080516040519392919084640100000000821115613c0357600080fd5b908301906020820185811115613c1857600080fd5b8251866020820283011164010000000082111715613c3557600080fd5b82525081516020918201928201910280838360005b83811015613c62578181015183820152602001613c4a565b505050509050016040525050509050613fa0565b600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613cc457600080fd5b505afa158015613cd8573d6000803e3d6000fd5b505050506040513d6020811015613cee57600080fd5b50516001600160a01b0389811691161415613e0a576008546040517f4a25d94a00000000000000000000000000000000000000000000000000000000815260048101898152602482018990526001600160a01b0388811660648401526084830188905260a060448401908152865160a485015286519190941693634a25d94a938c938c9389938d938d939260c4909101906020808801910280838360005b83811015613da4578181015183820152602001613d8c565b505050509050019650505050505050600060405180830381600087803b158015613dcd57600080fd5b505af1158015613de1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015613be357600080fd5b6008546040517f8803dbee00000000000000000000000000000000000000000000000000000000815260048101898152602482018990526001600160a01b0388811660648401526084830188905260a060448401908152865160a485015286519190941693638803dbee938c938c9389938d938d939260c4909101906020808801910280838360005b83811015613eab578181015183820152602001613e93565b505050509050019650505050505050600060405180830381600087803b158015613ed457600080fd5b505af1158015613ee8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015613f1157600080fd5b8101908080516040519392919084640100000000821115613f3157600080fd5b908301906020820185811115613f4657600080fd5b8251866020820283011164010000000082111715613f6357600080fd5b82525081516020918201928201910280838360005b83811015613f90578181015183820152602001613f78565b5050505090500160405250505090505b80600081518110613fad57fe5b6020026020010151925050509695505050505050565b60405180610140016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160008019168152602001600081526020016060815260200160008152602001606081526020016060815260200160608152509056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a26469706673582212203601a32fe0603e2e8da36055101edece7b0b08ecfb08e4ed1475e9aadc690bac64736f6c63430007060033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x179 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8456CB59 GT PUSH2 0xCB JUMPI DUP1 PUSH4 0xA963B257 GT PUSH2 0x7F JUMPI DUP1 PUSH4 0xC7B778DB GT PUSH2 0x59 JUMPI DUP1 PUSH4 0xC7B778DB EQ PUSH2 0x83D JUMPI DUP1 PUSH4 0xF21F537D EQ PUSH2 0x90C JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x921 JUMPI PUSH2 0x1EF JUMP JUMPDEST DUP1 PUSH4 0xA963B257 EQ PUSH2 0x6C0 JUMPI DUP1 PUSH4 0xBDA4C5AB EQ PUSH2 0x755 JUMPI DUP1 PUSH4 0xBE9A6555 EQ PUSH2 0x828 JUMPI PUSH2 0x1EF JUMP JUMPDEST DUP1 PUSH4 0x8DA5CB5B GT PUSH2 0xB0 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x696 JUMPI DUP1 PUSH4 0x9865BCC8 EQ PUSH2 0x6AB JUMPI DUP1 PUSH4 0x9E049545 EQ PUSH2 0x6AB JUMPI PUSH2 0x1EF JUMP JUMPDEST DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x66C JUMPI DUP1 PUSH4 0x8488BB4E EQ PUSH2 0x681 JUMPI PUSH2 0x1EF JUMP JUMPDEST DUP1 PUSH4 0x579F2C77 GT PUSH2 0x12D JUMPI DUP1 PUSH4 0x5E6E9F70 GT PUSH2 0x107 JUMPI DUP1 PUSH4 0x5E6E9F70 EQ PUSH2 0x499 JUMPI DUP1 PUSH4 0x61BD3851 EQ PUSH2 0x5D4 JUMPI DUP1 PUSH4 0x6B8F9C43 EQ PUSH2 0x639 JUMPI PUSH2 0x1EF JUMP JUMPDEST DUP1 PUSH4 0x579F2C77 EQ PUSH2 0x434 JUMPI DUP1 PUSH4 0x5C4FAFC7 EQ PUSH2 0x45B JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x470 JUMPI PUSH2 0x1EF JUMP JUMPDEST DUP1 PUSH4 0x1694505E GT PUSH2 0x15E JUMPI DUP1 PUSH4 0x1694505E EQ PUSH2 0x322 JUMPI DUP1 PUSH4 0x2A8A45BC EQ PUSH2 0x337 JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x41F JUMPI PUSH2 0x1EF JUMP JUMPDEST DUP1 PUSH4 0x1265B651 EQ PUSH2 0x1F4 JUMPI DUP1 PUSH4 0x1323B066 EQ PUSH2 0x225 JUMPI PUSH2 0x1EF JUMP JUMPDEST CALLDATASIZE PUSH2 0x1EF JUMPI PUSH1 0x8 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x192 PUSH2 0x954 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x1ED JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20496E76616C6964204554482073656E6465720000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x200 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x209 PUSH2 0x958 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x231 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2C7 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x248 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x288 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x29A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x2BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x967 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x30D JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2F5 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP4 POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x32E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x209 PUSH2 0xA5C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x343 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x361 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x35A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0xA6B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3C6 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3AE JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x405 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3ED JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP9 POP POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x42B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1ED PUSH2 0xC10 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x440 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x449 PUSH2 0xC7E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x467 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x209 PUSH2 0xC84 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x47C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x485 PUSH2 0xC9C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1ED PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x4BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x4DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x4F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x512 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 SWAP5 SWAP4 PUSH1 0x20 DUP2 ADD SWAP4 POP CALLDATALOAD SWAP2 POP POP PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x562 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x574 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x596 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0xCA5 SWAP5 POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5E9 PUSH2 0xE82 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 DUP2 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x625 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x60D JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x645 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1ED PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x65C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xEDD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x678 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1ED PUSH2 0xFB5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x68D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x209 PUSH2 0x101C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6A2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x209 PUSH2 0x102B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x449 PUSH2 0x103A JUMP JUMPDEST PUSH2 0x1ED PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x6D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x716 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x728 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x74A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x1040 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x761 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5E9 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x778 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x793 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x7A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x7C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 DUP3 CALLDATALOAD SWAP3 PUSH1 0x40 DUP2 ADD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x7E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x7FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x81D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x1126 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x834 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1ED PUSH2 0x1235 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x849 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5E9 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x860 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x87B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x88D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x8AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH1 0x20 DUP2 ADD SWAP1 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x8CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x8DF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x901 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x1248 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x918 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x449 PUSH2 0x1334 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x92D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1ED PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x944 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x133A JUMP JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x2 SLOAD PUSH1 0x0 EQ ISZERO PUSH2 0x9C3 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x9CB PUSH2 0x13AB JUMP JUMPDEST PUSH2 0x9D3 PUSH2 0x3FC3 JUMP JUMPDEST PUSH2 0x9DB PUSH2 0x954 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP10 DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP10 AND PUSH1 0x40 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD DUP10 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP9 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x1F DUP8 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD SWAP1 SWAP2 MSTORE DUP6 DUP2 MSTORE SWAP1 DUP7 SWAP1 DUP7 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP POP PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0xA4C DUP2 PUSH2 0x1403 JUMP JUMPDEST SWAP3 POP SWAP3 POP POP SWAP7 POP SWAP7 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP2 SWAP1 DUP2 SWAP1 DUP2 SWAP1 PUSH1 0x60 SWAP1 DUP2 SWAP1 DUP4 PUSH2 0xA91 PUSH1 0x4 DUP4 ADD PUSH2 0x142A JUMP JUMPDEST DUP3 SLOAD SWAP9 POP SWAP1 POP DUP8 PUSH2 0xAE9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7500000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x3 DUP5 ADD SLOAD SWAP2 SWAP9 POP SWAP7 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP5 POP DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0xB1F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xB49 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP4 POP DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0xB63 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xB8D JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xC04 JUMPI PUSH1 0x0 DUP1 PUSH2 0xBAB PUSH1 0x4 DUP7 ADD DUP5 PUSH2 0x142E JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP2 PUSH1 0x0 SHR DUP8 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0xBBF JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP DUP1 PUSH1 0x0 SHR DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0xBEF JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP POP PUSH1 0x1 ADD PUSH2 0xB93 JUMP JUMPDEST POP POP POP SWAP2 SWAP4 SWAP6 POP SWAP2 SWAP4 SWAP6 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0xC64 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0xC74 PUSH2 0xC6F PUSH2 0x954 JUMP JUMPDEST PUSH2 0x14C0 JUMP JUMPDEST PUSH2 0xC7C PUSH2 0x1587 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x1 NOT DUP2 JUMP JUMPDEST PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0xCB0 PUSH2 0xC6F PUSH2 0x954 JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD DUP2 EQ PUSH2 0xD07 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E636F6E73697374656E742061727261797300000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0xD68 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7500000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP2 ADD DUP3 PUSH2 0xDB3 JUMPI PUSH1 0x0 PUSH2 0xD7C DUP3 PUSH2 0x142A JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xDAC JUMPI PUSH1 0x0 PUSH2 0xD95 DUP5 DUP3 PUSH2 0x142E JUMP JUMPDEST POP SWAP1 POP PUSH2 0xDA2 DUP5 DUP3 PUSH2 0x15DF JUMP JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0xD81 JUMP JUMPDEST POP POP PUSH2 0xDBE JUMP JUMPDEST PUSH2 0xDBE DUP2 DUP7 DUP7 PUSH2 0x16BF JUMP JUMPDEST DUP6 PUSH32 0xCB3FE5489E0CD43D0F4A33D1E09A4A0463A03D0D38F56165530854E5540DB143 DUP7 DUP7 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xE26 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xE0E JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xE65 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xE4D JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x4 PUSH1 0x0 ADD DUP1 SLOAD DUP1 PUSH1 0x20 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 DUP1 ISZERO PUSH2 0xED3 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0xEBF JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0xEE8 PUSH2 0xC6F PUSH2 0x954 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xF43 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061796F75743A207A65726F2061646472657373000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 SWAP1 SWAP2 OR SWAP2 DUP3 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD SWAP3 SWAP1 SWAP2 AND DUP3 MSTORE MLOAD PUSH32 0xDD880D24A789958A6398C99C2E54CE31BC10A638CBC42F7DD34285479AE0F855 SWAP2 PUSH1 0x20 SWAP1 DUP3 SWAP1 SUB ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x1009 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x1014 PUSH2 0xC6F PUSH2 0x954 JUMP JUMPDEST PUSH2 0xC7C PUSH2 0x1747 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 NOT DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x1094 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A206E6F74207374617274656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x109C PUSH2 0x13AB JUMP JUMPDEST PUSH2 0x10A4 PUSH2 0x3FC3 JUMP JUMPDEST PUSH2 0x10AC PUSH2 0x954 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP8 DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP8 AND PUSH1 0x40 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD DUP8 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP7 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x1F DUP6 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD SWAP1 SWAP2 MSTORE DUP4 DUP2 MSTORE SWAP1 DUP5 SWAP1 DUP5 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP POP PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x111D DUP2 PUSH2 0x1785 JUMP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP5 DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x1140 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x116A JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x122A JUMPI PUSH1 0x0 PUSH2 0x11EC DUP10 DUP10 DUP5 DUP2 DUP2 LT PUSH2 0x1189 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x7 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP10 DUP10 DUP10 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x17B2 SWAP3 POP POP POP JUMP JUMPDEST SWAP1 POP PUSH2 0x120A DUP2 PUSH2 0x1204 DUP10 PUSH8 0xDE0B6B3A7640000 PUSH2 0x190C JUMP JUMPDEST SWAP1 PUSH2 0x196C JUMP JUMPDEST DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1216 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP PUSH1 0x1 ADD PUSH2 0x1170 JUMP JUMPDEST POP POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x1240 PUSH2 0xC6F PUSH2 0x954 JUMP JUMPDEST PUSH2 0xC74 PUSH2 0x19D3 JUMP JUMPDEST PUSH1 0x60 DUP4 DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x1262 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x128C JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x132A JUMPI PUSH2 0x130B DUP8 DUP8 DUP4 DUP2 DUP2 LT PUSH2 0x12A9 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x7 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 DUP8 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1A55 SWAP3 POP POP POP JUMP JUMPDEST DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1317 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x1292 JUMP JUMPDEST POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x1345 PUSH2 0xC6F PUSH2 0x954 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 DUP3 OR DUP1 DUP5 SSTORE PUSH1 0x40 MLOAD SWAP3 SWAP4 SWAP2 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xC7C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061757361626C653A2070617573656400000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x1410 DUP4 PUSH2 0x1BCD JUMP JUMPDEST PUSH2 0x1419 DUP4 PUSH2 0x1C31 JUMP JUMPDEST POP POP PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xE0 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP2 JUMP JUMPDEST SLOAD SWAP1 JUMP JUMPDEST DUP2 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP4 LT PUSH2 0x1488 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x456E756D4D61703A20696E646578206F7574206F6620626F756E647300000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 PUSH1 0x0 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x1499 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD SWAP1 POP DUP1 PUSH1 0x0 ADD SLOAD DUP2 PUSH1 0x1 ADD SLOAD SWAP3 POP SWAP3 POP POP JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8DA5CB5B 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 PUSH2 0x14F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x150D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1523 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ PUSH2 0x1584 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6F7420746865206F776E657200000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0x158F PUSH2 0x1CD4 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA PUSH2 0x15C2 PUSH2 0x954 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0x16B3 JUMPI DUP4 SLOAD PUSH1 0x0 NOT DUP1 DUP4 ADD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x0 SWAP1 DUP8 SWAP1 DUP4 SWAP1 DUP2 LT PUSH2 0x1612 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD SWAP1 POP DUP1 DUP8 PUSH1 0x0 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x1632 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 DUP5 SLOAD PUSH1 0x2 SWAP1 SWAP4 MUL ADD SWAP2 DUP3 SSTORE PUSH1 0x1 SWAP4 DUP5 ADD SLOAD SWAP2 DUP5 ADD SWAP2 SWAP1 SWAP2 SSTORE DUP4 SLOAD DUP3 MSTORE DUP10 DUP4 ADD SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP1 DUP5 ADD SWAP1 SSTORE DUP7 SLOAD DUP8 SWAP1 DUP1 PUSH2 0x1671 JUMPI INVALID JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 PUSH1 0x2 PUSH1 0x0 NOT SWAP1 SWAP5 ADD SWAP4 DUP5 MUL ADD DUP3 DUP2 SSTORE PUSH1 0x1 SWAP1 DUP2 ADD DUP4 SWAP1 SSTORE SWAP3 SWAP1 SWAP4 SSTORE DUP9 DUP2 MSTORE DUP10 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x40 DUP3 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE SWAP5 POP PUSH2 0x16B9 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SWAP2 POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x16CA DUP4 DUP4 DUP4 PUSH2 0x1D2B JUMP JUMPDEST PUSH2 0x16D3 DUP4 PUSH2 0x142A JUMP JUMPDEST ISZERO DUP1 PUSH2 0x16F1 JUMPI POP PUSH1 0x7 SLOAD PUSH2 0x16F1 SWAP1 DUP5 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1E8F JUMP JUMPDEST PUSH2 0x1742 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F207265666572656E636520746F6B656E0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x174F PUSH2 0x13AB JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH2 0x15C2 PUSH2 0x954 JUMP JUMPDEST PUSH2 0x178E DUP2 PUSH2 0x1BCD JUMP JUMPDEST PUSH2 0x1797 DUP2 PUSH2 0x1C31 JUMP JUMPDEST PUSH2 0x17A0 DUP2 PUSH2 0x1EA7 JUMP JUMPDEST PUSH2 0x17A9 DUP2 PUSH2 0x1F20 JUMP JUMPDEST PUSH2 0x1584 DUP2 PUSH2 0x1F6C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x1856 JUMPI PUSH1 0x8 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND 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 PUSH2 0x1827 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x183B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1851 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP5 POP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x18F8 JUMPI PUSH1 0x8 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND 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 PUSH2 0x18C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x18DD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x18F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP4 POP JUMPDEST PUSH2 0x1903 DUP6 DUP6 DUP6 PUSH2 0x2451 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x191B JUMPI POP PUSH1 0x0 PUSH2 0x16B9 JUMP JUMPDEST DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 PUSH2 0x1928 JUMPI INVALID JUMPDEST DIV EQ PUSH2 0x1965 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x4035 PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 GT PUSH2 0x19C2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206469766973696F6E206279207A65726F000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 DUP4 DUP2 PUSH2 0x19CB JUMPI INVALID JUMPDEST DIV SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD ISZERO PUSH2 0x1A28 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537461727461626C653A20737461727465640000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST TIMESTAMP PUSH1 0x2 SSTORE PUSH32 0x27029695AA5F602A4EE81F4C32DFA86E562F200A17966496F3A7C3F2EC0F9417 PUSH2 0x15C2 PUSH2 0x954 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x1AF9 JUMPI PUSH1 0x8 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND 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 PUSH2 0x1ACA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1ADE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1AF4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP4 POP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x1B9B JUMPI PUSH1 0x8 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND 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 PUSH2 0x1B6C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1B80 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1B96 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP3 POP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1BA8 DUP7 DUP7 PUSH2 0x2658 JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x1BC3 DUP3 PUSH2 0x1204 DUP4 PUSH8 0xDE0B6B3A7640000 PUSH2 0x190C JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x1BD6 DUP2 PUSH2 0x2724 JUMP JUMPDEST PUSH1 0x40 DUP2 PUSH1 0xA0 ADD MLOAD MLOAD LT ISZERO PUSH2 0x1584 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206D697373696E6720757365722064617461000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0x1C97 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20756E737570706F7274656420534B550000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP2 ADD PUSH1 0x0 PUSH2 0x1CA7 DUP5 DUP4 PUSH2 0x29CE JUMP JUMPDEST SWAP1 POP PUSH2 0x1CB4 DUP5 DUP4 DUP4 PUSH2 0x2A3E JUMP JUMPDEST PUSH2 0x1CCE JUMPI PUSH1 0x80 DUP5 ADD MLOAD PUSH2 0x1CC8 SWAP1 DUP3 SWAP1 PUSH2 0x190C JUMP JUMPDEST PUSH1 0xC0 DUP6 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND PUSH2 0xC7C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5061757361626C653A206E6F7420706175736564000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x1E11 JUMPI PUSH1 0x0 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1D45 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1DB7 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F206164647265737320746F6B656E0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1DC5 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP DUP1 PUSH1 0x0 EQ ISZERO PUSH2 0x1DF1 JUMPI PUSH2 0x1DEB DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x15DF JUMP JUMPDEST POP PUSH2 0x1E07 JUMP JUMPDEST PUSH2 0x1E05 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP4 PUSH2 0x2B42 JUMP JUMPDEST POP JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x1D2E JUMP JUMPDEST POP PUSH32 0x0 PUSH2 0x1E3C DUP5 PUSH2 0x142A JUMP JUMPDEST GT ISZERO PUSH2 0x1742 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20746F6F206D616E7920746F6B656E730000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0xE0 DUP2 ADD MLOAD MLOAD ISZERO DUP1 ISZERO SWAP1 PUSH2 0x1EDC JUMPI POP PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO JUMPDEST ISZERO PUSH2 0x1F17 JUMPI PUSH1 0xA0 DUP2 ADD MLOAD PUSH1 0x20 DUP2 ADD MLOAD DUP1 PUSH2 0x1EF5 JUMPI POP PUSH1 0x0 NOT JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x40 DUP5 ADD MLOAD PUSH2 0x1F14 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND SWAP2 AND DUP4 PUSH2 0x2BD9 JUMP JUMPDEST POP POP JUMPDEST PUSH2 0x1584 DUP2 PUSH2 0x2C59 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x0 NOT EQ PUSH2 0x1F68 JUMPI PUSH1 0x80 DUP3 ADD MLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH2 0x1F50 SWAP2 PUSH2 0x2EF8 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SSTORE JUMPDEST POP POP JUMP JUMPDEST DUP1 PUSH1 0x60 ADD MLOAD DUP2 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x29F844483CA6B10B5C0611D039AFC15CE8F6380E905307B381C3A8EE4E90E11E DUP5 PUSH1 0x20 ADD MLOAD DUP6 PUSH1 0x80 ADD MLOAD DUP7 PUSH1 0xA0 ADD MLOAD DUP8 PUSH1 0xC0 ADD MLOAD DUP9 PUSH1 0xE0 ADD MLOAD DUP10 PUSH2 0x100 ADD MLOAD DUP11 PUSH2 0x120 ADD MLOAD PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP5 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2003 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1FEB JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2033 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x201B JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2063 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x204B JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP4 POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP7 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x20DA JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x20C2 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x2107 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP DUP4 DUP2 SUB DUP3 MSTORE DUP5 MLOAD DUP2 MSTORE DUP5 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP7 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x213A JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2122 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x2167 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP8 POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 ISZERO PUSH2 0x1F68 JUMPI PUSH4 0x61ECEAE8 PUSH1 0xE0 SHL PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x61ECEAE8 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD DUP7 PUSH1 0x40 ADD MLOAD DUP8 PUSH1 0x60 ADD MLOAD DUP9 PUSH1 0x80 ADD MLOAD DUP10 PUSH1 0xA0 ADD MLOAD DUP11 PUSH1 0xC0 ADD MLOAD DUP12 PUSH1 0xE0 ADD MLOAD DUP13 PUSH2 0x100 ADD MLOAD DUP14 PUSH2 0x120 ADD MLOAD PUSH1 0x40 MLOAD DUP12 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP6 DUP2 SUB DUP6 MSTORE DUP11 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x22A0 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2288 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x22CD JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP DUP6 DUP2 SUB DUP5 MSTORE DUP9 MLOAD DUP2 MSTORE DUP9 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP1 DUP12 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2302 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x22EA JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP6 DUP2 SUB DUP4 MSTORE DUP8 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2341 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2329 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP6 DUP2 SUB DUP3 MSTORE DUP7 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2380 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2368 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP15 POP POP POP POP POP POP POP POP POP POP POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x23B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x23C5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x23DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND EQ PUSH2 0x1F68 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F74696669636174696F6E2072656675736564000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x2 DUP1 DUP3 MSTORE PUSH1 0x60 DUP3 ADD DUP4 MSTORE PUSH1 0x0 SWAP3 DUP4 SWAP3 SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP DUP5 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x2484 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP DUP4 DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x24B2 JUMPI INVALID 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 0x8 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x1F00CA7400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP9 DUP2 MSTORE PUSH1 0x24 DUP3 ADD SWAP3 DUP4 MSTORE DUP7 MLOAD PUSH1 0x44 DUP4 ADD MSTORE DUP7 MLOAD PUSH1 0x0 SWAP7 SWAP5 SWAP1 SWAP5 AND SWAP5 PUSH4 0x1F00CA74 SWAP5 DUP11 SWAP5 DUP10 SWAP5 SWAP1 SWAP3 PUSH1 0x64 SWAP1 SWAP2 ADD SWAP2 DUP6 DUP3 ADD SWAP2 MUL DUP1 DUP4 DUP4 DUP13 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2549 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2531 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP4 POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x256D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2581 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x25AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH2 0x25CA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x25DF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD DUP7 PUSH1 0x20 DUP3 MUL DUP4 ADD GT PUSH5 0x100000000 DUP3 GT OR ISZERO PUSH2 0x25FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 DUP3 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2629 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2611 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD PUSH1 0x40 MSTORE POP POP POP SWAP1 POP DUP1 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x2645 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP3 POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x2667 DUP6 DUP6 PUSH2 0x2F55 JUMP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP1 PUSH2 0x2677 DUP8 DUP8 PUSH2 0x3042 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x902F1AC PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x26AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x26C3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x26D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND SWAP4 POP AND SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND SWAP1 DUP5 AND EQ PUSH2 0x2713 JUMPI DUP1 DUP3 PUSH2 0x2716 JUMP JUMPDEST DUP2 DUP2 JUMPDEST SWAP1 SWAP9 SWAP1 SWAP8 POP SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2783 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F206164647265737320726563697069656E7400000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x27E2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F206164647265737320746F6B656E0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x80 DUP2 ADD MLOAD PUSH2 0x2838 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A207A65726F207175616E7469747920707572636861736500000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0x289E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7500000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x80 ADD MLOAD DUP2 PUSH1 0x2 ADD SLOAD LT ISZERO PUSH2 0x28FB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A2061626F7665206D6178207175616E746974790000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 SLOAD PUSH1 0x0 NOT EQ PUSH2 0x2962 JUMPI DUP2 PUSH1 0x80 ADD MLOAD DUP2 PUSH1 0x1 ADD SLOAD LT ISZERO PUSH2 0x2962 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E73756666696369656E7420737570706C7900000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x297D PUSH1 0x4 DUP4 ADD DUP3 PUSH2 0x1E8F JUMP JUMPDEST PUSH2 0x1742 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A206E6F6E2D6578697374656E7420736B7520746F6B656E00000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x0 SWAP1 PUSH2 0x29EA SWAP1 DUP4 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x31A5 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x16B9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20756E737570706F72746564207061796D656E7420746F6B656E00 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 NOT DUP3 EQ PUSH2 0x2A5B JUMPI PUSH2 0x2A54 DUP5 DUP5 DUP5 PUSH2 0x3235 JUMP JUMPDEST SWAP1 POP PUSH2 0x1965 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x2A75 SWAP1 DUP6 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x31A5 JUMP JUMPDEST PUSH1 0x80 DUP7 ADD MLOAD SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH2 0x2A8B SWAP1 DUP4 SWAP1 PUSH2 0x190C JUMP JUMPDEST PUSH1 0x40 DUP8 ADD MLOAD PUSH1 0x7 SLOAD PUSH1 0xA0 DUP10 ADD MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 PUSH2 0x2AB4 SWAP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP6 SWAP1 PUSH2 0x17B2 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2ACE DUP3 PUSH2 0x1204 DUP6 PUSH8 0xDE0B6B3A7640000 PUSH2 0x190C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x2 DUP1 DUP3 MSTORE PUSH1 0x60 DUP3 ADD DUP4 MSTORE SWAP3 SWAP4 POP SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP POP POP PUSH1 0xE0 DUP10 ADD DUP2 SWAP1 MSTORE DUP1 MLOAD DUP8 SWAP2 SWAP1 PUSH1 0x0 SWAP1 PUSH2 0x2B03 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x0 SHL DUP9 PUSH1 0xE0 ADD MLOAD PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x2B24 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP PUSH1 0xC0 DUP8 ADD MSTORE POP PUSH1 0x1 SWAP2 POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x1 DUP5 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 PUSH2 0x2BA7 JUMPI POP POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE DUP4 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD DUP5 DUP2 MSTORE DUP7 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP10 SSTORE PUSH1 0x0 DUP10 DUP2 MSTORE DUP5 DUP2 KECCAK256 SWAP6 MLOAD PUSH1 0x2 SWAP1 SWAP4 MUL SWAP1 SWAP6 ADD SWAP2 DUP3 SSTORE SWAP2 MLOAD SWAP1 DUP3 ADD SSTORE DUP7 SLOAD DUP7 DUP5 MSTORE DUP2 DUP9 ADD SWAP1 SWAP3 MSTORE SWAP3 SWAP1 SWAP2 KECCAK256 SSTORE PUSH2 0x1965 JUMP JUMPDEST DUP3 DUP6 PUSH1 0x0 ADD PUSH1 0x1 DUP4 SUB DUP2 SLOAD DUP2 LT PUSH2 0x2BBA JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD PUSH1 0x1 ADD DUP2 SWAP1 SSTORE POP PUSH1 0x0 SWAP2 POP POP PUSH2 0x1965 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 OR SWAP1 MSTORE PUSH2 0x1742 SWAP1 DUP5 SWAP1 PUSH2 0x332D JUMP JUMPDEST PUSH1 0xE0 DUP2 ADD MLOAD MLOAD ISZERO DUP1 PUSH2 0x2C8B JUMPI POP PUSH1 0x1 PUSH1 0x0 NOT SUB DUP2 PUSH1 0xE0 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x2C7D JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 SHR EQ ISZERO JUMPDEST ISZERO PUSH2 0x2C9E JUMPI PUSH2 0x2C99 DUP2 PUSH2 0x3517 JUMP JUMPDEST PUSH2 0x1584 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x2D25 JUMPI DUP1 PUSH1 0xC0 ADD MLOAD CALLVALUE LT ISZERO PUSH2 0x2D20 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E73756666696369656E742045544800000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x2D4C JUMP JUMPDEST PUSH2 0x2D4C PUSH2 0x2D30 PUSH2 0x954 JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD MLOAD PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 SWAP1 ADDRESS SWAP1 PUSH2 0x3662 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0xE0 ADD MLOAD PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x2D5F JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 SHR SWAP1 POP PUSH1 0x0 PUSH2 0x2D91 PUSH8 0xDE0B6B3A7640000 PUSH2 0x1204 DUP6 PUSH1 0xC0 ADD MLOAD DUP6 PUSH2 0x190C SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0x7 SLOAD PUSH1 0xA0 DUP7 ADD MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 PUSH2 0x2DBA SWAP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP6 SWAP1 PUSH2 0x36EA JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MLOAD SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x2E3B JUMPI PUSH1 0x0 PUSH2 0x2DF2 CALLVALUE DUP4 PUSH2 0x2EF8 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x2E35 JUMPI DUP5 MLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 DUP3 ISZERO PUSH2 0x8FC MUL SWAP1 DUP4 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x2E33 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP JUMPDEST POP PUSH2 0x2E74 JUMP JUMPDEST PUSH1 0xC0 DUP5 ADD MLOAD PUSH1 0x0 SWAP1 PUSH2 0x2E4D SWAP1 DUP4 PUSH2 0x2EF8 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x2E72 JUMPI DUP5 MLOAD PUSH1 0x40 DUP7 ADD MLOAD PUSH2 0x2E72 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 DUP4 PUSH2 0x3897 JUMP JUMPDEST POP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x2EDB JUMPI PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 DUP3 ISZERO PUSH2 0x8FC MUL SWAP1 DUP4 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x2ED5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x1CCE JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x7 SLOAD PUSH2 0x1CCE SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND SWAP2 AND DUP4 PUSH2 0x3897 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 GT ISZERO PUSH2 0x2F4F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x2FBF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x556E697377617056323A2073616D652061646472657373657300000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH2 0x2FDF JUMPI DUP3 DUP5 PUSH2 0x2FE2 JUMP JUMPDEST DUP4 DUP4 JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x14B9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x556E697377617056323A207A65726F2061646472657373000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x3051 DUP6 DUP6 PUSH2 0x2F55 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x8 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND 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 PUSH2 0x30A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x30B7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x30CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 PUSH1 0x60 SWAP6 DUP7 SHL DUP2 AND PUSH1 0x20 DUP4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP5 DUP7 SHL DUP2 AND PUSH1 0x34 DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x28 DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH1 0x48 DUP4 ADD DUP5 MSTORE DUP1 MLOAD SWAP1 DUP7 ADD KECCAK256 PUSH32 0xFF00000000000000000000000000000000000000000000000000000000000000 PUSH1 0x68 DUP5 ADD MSTORE SWAP4 SWAP1 SWAP6 SHL SWAP1 SWAP5 AND PUSH1 0x69 DUP6 ADD MSTORE PUSH1 0x7D DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x96E8AC4277198FF8B6F785478AA9A39F403CB768DD02CBEE326C3E7DA348845F PUSH1 0x9D DUP1 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MLOAD DUP1 DUP6 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xBD SWAP1 SWAP4 ADD SWAP1 MSTORE DUP2 MLOAD SWAP2 ADD KECCAK256 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 PUSH2 0x3208 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x456E756D4D61703A206E6F6E6578697374656E74206B65790000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP4 PUSH1 0x0 ADD PUSH1 0x1 DUP3 SUB DUP2 SLOAD DUP2 LT PUSH2 0x321A JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x2 MUL ADD PUSH1 0x1 ADD SLOAD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x0 NOT DUP3 EQ PUSH2 0x3248 JUMPI POP PUSH1 0x0 PUSH2 0x1965 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x3262 SWAP1 DUP6 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x31A5 JUMP JUMPDEST PUSH1 0x40 DUP7 ADD MLOAD PUSH1 0x7 SLOAD PUSH1 0xA0 DUP9 ADD MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 PUSH2 0x3289 SWAP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH2 0x1A55 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x32BA DUP8 PUSH1 0x80 ADD MLOAD PUSH2 0x32B4 DUP5 PUSH2 0x1204 PUSH8 0xDE0B6B3A7640000 DUP9 PUSH2 0x190C SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 PUSH2 0x190C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x2 DUP1 DUP3 MSTORE PUSH1 0x60 DUP3 ADD DUP4 MSTORE SWAP3 SWAP4 POP SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP POP POP PUSH1 0xE0 DUP9 ADD DUP2 SWAP1 MSTORE DUP1 MLOAD DUP7 SWAP2 SWAP1 PUSH1 0x0 SWAP1 PUSH2 0x32EF JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP2 PUSH1 0x0 SHL DUP8 PUSH1 0xE0 ADD MLOAD PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x3310 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0xC0 DUP8 ADD MSTORE POP PUSH1 0x1 SWAP2 POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP2 PUSH2 0x3340 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x3917 JUMP JUMPDEST PUSH2 0x3391 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433230577261707065723A206E6F6E2D636F6E7472616374000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x33CE JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x33AF JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x3430 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x3435 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 ISZERO PUSH2 0x34B4 JUMPI DUP1 MLOAD ISZERO PUSH2 0x34AF JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x345C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x34AF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433230577261707065723A206F7065726174696F6E206661696C65640000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x3510 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x3507 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433230577261707065723A206F7065726174696F6E206661696C65640000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 MLOAD DUP1 DUP3 PUSH1 0x20 ADD REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x363A JUMPI DUP1 PUSH1 0xC0 ADD MLOAD CALLVALUE LT ISZERO PUSH2 0x3599 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616C653A20696E73756666696369656E742045544800000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xC0 DUP3 ADD MLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 DUP2 ISZERO PUSH2 0x8FC MUL SWAP2 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x35D7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x0 PUSH2 0x35F1 DUP3 PUSH1 0xC0 ADD MLOAD CALLVALUE PUSH2 0x2EF8 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x3634 JUMPI DUP2 MLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 DUP3 ISZERO PUSH2 0x8FC MUL SWAP1 DUP4 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x3632 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP JUMPDEST POP PUSH2 0x1584 JUMP JUMPDEST PUSH2 0x1584 PUSH2 0x3645 PUSH2 0x954 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xC0 DUP5 ADD MLOAD PUSH1 0x40 DUP6 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP4 SWAP3 AND SWAP1 JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x24 DUP4 ADD MSTORE DUP5 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x84 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 OR SWAP1 MSTORE PUSH2 0x1CCE SWAP1 DUP6 SWAP1 PUSH2 0x332D JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x0 SWAP2 SWAP1 DUP2 PUSH2 0x3730 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x372A JUMPI CALLVALUE SWAP2 POP PUSH2 0x3730 JUMP JUMPDEST PUSH1 0x0 NOT SWAP2 POP JUMPDEST DUP1 PUSH2 0x373A JUMPI POP PUSH1 0x0 NOT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x37DC JUMPI PUSH1 0x8 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND 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 PUSH2 0x37AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x37C1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x37D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP7 POP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x387E JUMPI PUSH1 0x8 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND 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 PUSH2 0x384F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3863 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3879 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP6 POP JUMPDEST PUSH2 0x388C DUP8 DUP8 DUP8 DUP6 ADDRESS DUP7 PUSH2 0x391D JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 OR SWAP1 MSTORE PUSH2 0x1742 SWAP1 DUP5 SWAP1 PUSH2 0x332D JUMP JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x3986 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x556E697377617056323A2073616D652061646472657373657300000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT 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 DUP8 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x39B5 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP DUP7 DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x39E3 JUMPI INVALID 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 0x8 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0xAD5C464800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x60 SWAP5 SWAP3 SWAP1 SWAP3 AND SWAP3 PUSH4 0xAD5C4648 SWAP3 PUSH1 0x4 DUP1 DUP5 ADD SWAP4 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3A51 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3A65 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3A7B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0x3C76 JUMPI CALLVALUE DUP7 EQ PUSH2 0x3AE4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x556E697377617056323A20696E76616C6964206D6178416D6F756E74496E0000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x40 MLOAD PUSH32 0xFB3BDB4100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP10 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND PUSH1 0x44 DUP5 ADD MSTORE PUSH1 0x64 DUP4 ADD DUP9 SWAP1 MSTORE PUSH1 0x80 PUSH1 0x24 DUP5 ADD SWAP1 DUP2 MSTORE DUP7 MLOAD PUSH1 0x84 DUP6 ADD MSTORE DUP7 MLOAD SWAP2 SWAP1 SWAP5 AND SWAP4 PUSH4 0xFB3BDB41 SWAP4 CALLVALUE SWAP4 DUP14 SWAP4 DUP10 SWAP4 DUP14 SWAP4 DUP14 SWAP4 SWAP3 PUSH1 0xA4 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 DUP1 DUP9 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3B7E JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3B66 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP6 POP POP POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3BA5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3BB9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3BE3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH2 0x3C03 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x3C18 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD DUP7 PUSH1 0x20 DUP3 MUL DUP4 ADD GT PUSH5 0x100000000 DUP3 GT OR ISZERO PUSH2 0x3C35 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 DUP3 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3C62 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3C4A JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD PUSH1 0x40 MSTORE POP POP POP SWAP1 POP PUSH2 0x3FA0 JUMP JUMPDEST PUSH1 0x8 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND 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 PUSH2 0x3CC4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3CD8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3CEE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0x3E0A JUMPI PUSH1 0x8 SLOAD PUSH1 0x40 MLOAD PUSH32 0x4A25D94A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP10 DUP2 MSTORE PUSH1 0x24 DUP3 ADD DUP10 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND PUSH1 0x64 DUP5 ADD MSTORE PUSH1 0x84 DUP4 ADD DUP9 SWAP1 MSTORE PUSH1 0xA0 PUSH1 0x44 DUP5 ADD SWAP1 DUP2 MSTORE DUP7 MLOAD PUSH1 0xA4 DUP6 ADD MSTORE DUP7 MLOAD SWAP2 SWAP1 SWAP5 AND SWAP4 PUSH4 0x4A25D94A SWAP4 DUP13 SWAP4 DUP13 SWAP4 DUP10 SWAP4 DUP14 SWAP4 DUP14 SWAP4 SWAP3 PUSH1 0xC4 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 DUP1 DUP9 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3DA4 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3D8C JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP7 POP POP POP POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3DCD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3DE1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3BE3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x40 MLOAD PUSH32 0x8803DBEE00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP10 DUP2 MSTORE PUSH1 0x24 DUP3 ADD DUP10 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND PUSH1 0x64 DUP5 ADD MSTORE PUSH1 0x84 DUP4 ADD DUP9 SWAP1 MSTORE PUSH1 0xA0 PUSH1 0x44 DUP5 ADD SWAP1 DUP2 MSTORE DUP7 MLOAD PUSH1 0xA4 DUP6 ADD MSTORE DUP7 MLOAD SWAP2 SWAP1 SWAP5 AND SWAP4 PUSH4 0x8803DBEE SWAP4 DUP13 SWAP4 DUP13 SWAP4 DUP10 SWAP4 DUP14 SWAP4 DUP14 SWAP4 SWAP3 PUSH1 0xC4 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 DUP1 DUP9 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3EAB JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3E93 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP7 POP POP POP POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3ED4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3EE8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3F11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH2 0x3F31 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x3F46 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD DUP7 PUSH1 0x20 DUP3 MUL DUP4 ADD GT PUSH5 0x100000000 DUP3 GT OR ISZERO PUSH2 0x3F63 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 DUP3 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3F90 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3F78 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD PUSH1 0x40 MSTORE POP POP POP SWAP1 POP JUMPDEST DUP1 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x3FAD JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP3 POP POP POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x140 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP1 NOT AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE POP SWAP1 JUMP INVALID MSTORE8 PUSH2 0x6665 0x4D PUSH2 0x7468 GASPRICE KECCAK256 PUSH14 0x756C7469706C69636174696F6E20 PUSH16 0x766572666C6F77A26469706673582212 KECCAK256 CALLDATASIZE ADD LOG3 0x2F 0xE0 PUSH1 0x3E 0x2E DUP14 LOG3 PUSH1 0x55 LT 0x1E 0xDE 0xCE PUSH28 0xB08ECFB08E4ED1475E9AADC690BAC64736F6C634300070600330000 ","sourceMap":"1260:6698:28:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2451:15;;-1:-1:-1;;;;;2451:15:28;2427:12;:10;:12::i;:::-;-1:-1:-1;;;;;2427:40:28;;2419:77;;;;;-1:-1:-1;;;2419:77:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;1260:6698;;;;;941:29:29;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;941:29:29;;;;;;;;;;;;;;9044:610:32;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9044:610:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9044:610:32;;-1:-1:-1;9044:610:32;-1:-1:-1;9044:610:32;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;491:39:22;;;;;;;;;;;;;:::i;10463:1027:32:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10463:1027:32;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10463:1027:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4169:114;;;;;;;;;;;;;:::i;1071:85:33:-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;1698:98:32;;;;;;;;;;;;;:::i;482:18:5:-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;5032:943:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5032:943:32;;;;;;;;-1:-1:-1;5032:943:32;;-1:-1:-1;;5032:943:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5032:943:32;;-1:-1:-1;5032:943:32;;-1:-1:-1;;;;;5032:943:32:i;11621:110::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;660:263:8;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;660:263:8;-1:-1:-1;;;;;660:263:8;;:::i;3787:110:32:-;;;;;;;;;;;;;:::i;379:35:8:-;;;;;;;;;;;;;:::i;1114:94:1:-;;;;;;;;;;;;;:::i;857:77:29:-;;;;;;;;;;;;;:::i;6962:537:32:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6962:537:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6962:537:32;;-1:-1:-1;6962:537:32;-1:-1:-1;6962:537:32;:::i;2691:497:33:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2691:497:33;;-1:-1:-1;2691:497:33;-1:-1:-1;2691:497:33;:::i;3396:118:32:-;;;;;;;;;;;;;:::i;3632:353:29:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3632:353:29;;-1:-1:-1;3632:353:29;-1:-1:-1;3632:353:29;:::i;1276:85:6:-;;;;;;;;;;;;;:::i;1448:197:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1448:197:1;-1:-1:-1;;;;;1448:197:1;;:::i;355:104:7:-;442:10;355:104;:::o;941:29:29:-;;;-1:-1:-1;;;;;941:29:29;;:::o;9044:610:32:-;9266:18;9286:28;988:10:6;;1002:1;988:15;;980:50;;;;;-1:-1:-1;;;980:50:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;9326:19:32::1;:17;:19::i;:::-;9355:28;;:::i;:::-;9414:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;9393:33:32;;::::1;::::0;;9436:30;;::::1;:18;::::0;;::::1;:30:::0;;;;9476:22;;::::1;:14;::::0;;::::1;:22:::0;;;;9508:12:::1;::::0;::::1;:18:::0;;;9536:17:::1;::::0;::::1;:28:::0;;;9574;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;;;9594:8;;;;;;9574:28;::::1;9594:8:::0;;;;9574:28;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;;;;9574:17:32::1;::::0;::::1;:28:::0;9620:27:::1;9574:8:::0;9620:17:::1;:27::i;:::-;9613:34;;;;;9044:610:::0;;;;;;;;;:::o;491:39:22:-;;;-1:-1:-1;;;;;491:39:22;;:::o;10463:1027:32:-;10573:19;10841:14;;;:9;:14;;;;;10573:19;;;;;;10730:23;;;;10573:19;10882:23;:14;;;:21;:23::i;:::-;10930:19;;;-1:-1:-1;10865:40:32;-1:-1:-1;10967:16:32;10959:51;;;;;-1:-1:-1;;;10959:51:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;11038:23;;;;11096:30;;;;11160:29;;;;11038:23;;-1:-1:-1;11096:30:32;-1:-1:-1;;;;;;11160:29:32;;-1:-1:-1;11223:6:32;11209:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11209:21:32;;11200:30;;11263:6;11249:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11249:21:32;;11240:30;;11285:9;11280:204;11304:6;11300:1;:10;11280:204;;;11332:13;;11364:20;:14;;;11382:1;11364:17;:20::i;:::-;11331:53;;;;11426:5;11418:14;;11398:6;11405:1;11398:9;;;;;;;;;;;;;:35;-1:-1:-1;;;;;11398:35:32;;;-1:-1:-1;;;;;11398:35:32;;;;;11467:5;11459:14;;11447:6;11454:1;11447:9;;;;;;;;;;;;;;;;;:26;-1:-1:-1;;11312:3:32;;11280:204;;;;10463:1027;;;;;;;;;:::o;4169:114::-;988:10:6;;980:50;;;;;-1:-1:-1;;;980:50:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;4225:31:32::1;4243:12;:10;:12::i;:::-;4225:17;:31::i;:::-;4266:10;:8;:10::i;:::-;4169:114::o:0;1071:85:33:-;-1:-1:-1;;1071:85:33;:::o;1698:98:32:-;1751:44;1698:98;:::o;482:18:5:-;;;;;;:::o;5032:943:32:-;5176:31;5194:12;:10;:12::i;5176:31::-;5234:13;;5275;;5265:23;;5257:61;;;;;-1:-1:-1;;;5257:61:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;5328:23;5354:14;;;:9;:14;;;;;5386:19;;5378:59;;;;;-1:-1:-1;;;5378:59:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;5482:14;;;5510:11;5506:410;;5537:21;5561:20;:11;:18;:20::i;:::-;5537:44;;5600:9;5595:236;5619:13;5615:1;:17;5595:236;;;5737:13;5756:17;:11;5737:13;5756:14;:17::i;:::-;-1:-1:-1;5736:37:32;-1:-1:-1;5791:25:32;:11;5736:37;5791:18;:25::i;:::-;-1:-1:-1;;5634:3:32;;5595:236;;;;5506:410;;;;5861:44;5877:11;5890:6;5898;5861:15;:44::i;:::-;5948:3;5931:37;5953:6;5961;5931:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5032:943;;;;;;:::o;11621:110::-;11672:21;11712:5;:12;;11705:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11621:110;:::o;660:263:8:-;733:31;751:12;:10;:12::i;733:31::-;-1:-1:-1;;;;;782:27:8;;774:60;;;;;-1:-1:-1;;;774:60:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;844:12;:28;;;;-1:-1:-1;;;;;844:28:8;;;;;;;;;;;887:29;;;903:12;;;;887:29;;;;;;;;;;;;;660:263;:::o;3787:110:32:-;988:10:6;;980:50;;;;;-1:-1:-1;;;980:50:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;3841:31:32::1;3859:12;:10;:12::i;3841:31::-;3882:8;:6;:8::i;379:35:8:-:0;;;-1:-1:-1;;;;;379:35:8;;:::o;1114:94:1:-;1169:7;1195:6;-1:-1:-1;;;;;1195:6:1;1114:94;:::o;857:77:29:-;-1:-1:-1;;857:77:29;:::o;6962:537:32:-;988:10:6;;980:50;;;;;-1:-1:-1;;;980:50:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;7183:19:32::1;:17;:19::i;:::-;7212:28;;:::i;:::-;7271:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;7250:33:32;;::::1;::::0;;7293:30;;::::1;:18;::::0;;::::1;:30:::0;;;;7333:22;;::::1;:14;::::0;;::::1;:22:::0;;;;7365:12:::1;::::0;::::1;:18:::0;;;7393:17:::1;::::0;::::1;:28:::0;;;7431;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;;;7451:8;;;;;;7431:28;::::1;7451:8:::0;;;;7431:28;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;;;;7431:17:32::1;::::0;::::1;:28:::0;7470:22:::1;7431:8:::0;7470:12:::1;:22::i;:::-;1040:1:6;6962:537:32::0;;;;;;:::o;2691:497:33:-;2853:22;2904:6;;2935:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2935:21:33;;2927:29;;2971:9;2966:216;2990:6;2986:1;:10;2966:216;;;3017:19;3039:63;3053:6;;3060:1;3053:9;;;;;;;;;;;;;-1:-1:-1;;;;;3053:9:33;3064:14;;;;;;;;;-1:-1:-1;;;;;3064:14:33;3080:15;3097:4;;3039:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3039:13:33;;-1:-1:-1;;;3039:63:33:i;:::-;3017:85;-1:-1:-1;3127:44:33;3017:85;3127:27;:15;3147:6;3127:19;:27::i;:::-;:31;;:44::i;:::-;3116:5;3122:1;3116:8;;;;;;;;;;;;;;;;;:55;-1:-1:-1;2998:3:33;;2966:216;;;;2691:497;;;;;;;;:::o;3396:118:32:-;3438:31;3456:12;:10;:12::i;3438:31::-;3479:8;:6;:8::i;3632:353:29:-;3745:22;3796:6;;3827:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3827:21:29;;3819:29;;3863:9;3858:121;3882:6;3878:1;:10;3858:121;;;3920:48;3936:6;;3943:1;3936:9;;;;;;;;;;;;;-1:-1:-1;;;;;3936:9:29;3947:14;;;;;;;;;-1:-1:-1;;;;;3947:14:29;3963:4;;3920:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3920:15:29;;-1:-1:-1;;;3920:48:29:i;:::-;3909:5;3915:1;3909:8;;;;;;;;;;;;;;;;;:59;3890:3;;3858:121;;;;3632:353;;;;;;;:::o;1276:85:6:-;1344:10;;1276:85;:::o;1448:197:1:-;1527:31;1545:12;:10;:12::i;1527:31::-;1568:6;:17;;;;-1:-1:-1;;;;;1568:17:1;;;;;;;;;1600:38;;1568:17;;1621:6;;;1600:38;;1568:6;1600:38;1448:197;:::o;572:96:5:-;634:6;;;;633:7;625:36;;;;;-1:-1:-1;;;625:36:5;;;;;;;;;;;;;;;;;;;;;;;;;;;882:291:30;970:18;990:28;1030:21;1042:8;1030:11;:21::i;:::-;1061:18;1070:8;1061;:18::i;:::-;-1:-1:-1;;1103:19:30;;;;1146:20;;;;;1103:19;;882:291::o;4367:107:2:-;4449:18;;4367:107::o;4827:264::-;4930:18;;4894:7;;;;4930:26;-1:-1:-1;4922:67:2;;;;;-1:-1:-1;;;4922:67:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;5000:22;5025:3;:11;;5037:5;5025:18;;;;;;;;;;;;;;;;;;5000:43;;5061:5;:9;;;5072:5;:11;;;5053:31;;;;;4827:264;;;;;;:::o;1770:136:1:-;1860:4;-1:-1:-1;;;;;1860:10:1;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1860:12:1;-1:-1:-1;;;;;1849:23:1;;;;;;1841:58;;;;;-1:-1:-1;;;1841:58:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;1770:136;:::o;1166:131:5:-;1213:16;:14;:16::i;:::-;1239:6;:14;;-1:-1:-1;;1239:14:5;;;1268:22;1277:12;:10;:12::i;:::-;1268:22;;;-1:-1:-1;;;;;1268:22:5;;;;;;;;;;;;;;1166:131::o;2556:1520:2:-;2620:4;2753:16;;;:11;;;:16;;;;;;2784:13;;2780:1290;;3221:18;;-1:-1:-1;;3175:12:2;;;;3221:22;;;;3151:21;;3221:3;;:22;;3512;;;;;;;;;;;;;;;;3483:51;;3655:9;3626:3;:11;;3638:13;3626:26;;;;;;;;;;;;;;;;:38;;:26;;;;;:38;;;;;;;;;;;;;;;3742:13;;3730:26;;:11;;;:26;;;;;3759:17;;;3730:46;;3882:17;;3730:3;;3882:17;;;;;;;;;;;;;;-1:-1:-1;;3882:17:2;;;;;;;;;;;;;;;;;;;;;3974:16;;;:11;;;:16;;;;;;3967:23;;;;3882:17;-1:-1:-1;4005:11:2;;-1:-1:-1;;;;4005:11:2;2780:1290;4054:5;4047:12;;;2556:1520;;;;;:::o;4676:361:29:-;4850:50;4872:11;4885:6;4893;4850:21;:50::i;:::-;4918:20;:11;:18;:20::i;:::-;:25;;:83;;-1:-1:-1;4984:14:29;;4947:54;;:11;;-1:-1:-1;;;;;4984:14:29;4947:20;:54::i;:::-;4910:120;;;;;-1:-1:-1;;;4910:120:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;4676:361;;;:::o;905:129:5:-;950:19;:17;:19::i;:::-;979:6;:13;;-1:-1:-1;;979:13:5;988:4;979:13;;;1007:20;1014:12;:10;:12::i;1275:225:30:-;1354:21;1366:8;1354:11;:21::i;:::-;1385:18;1394:8;1385;:18::i;:::-;1413;1422:8;1413;:18::i;:::-;1441:19;1451:8;1441:9;:19::i;:::-;1470:23;1484:8;1470:13;:23::i;5946:461:28:-;6124:18;-1:-1:-1;;;;;6158:22:28;;1751:44:32;6158:22:28;6154:87;;;6208:15;;;;;;;;;-1:-1:-1;;;;;6208:15:28;-1:-1:-1;;;;;6208:20:28;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6208:22:28;;-1:-1:-1;6154:87:28;-1:-1:-1;;;;;6255:20:28;;1751:44:32;6255:20:28;6251:83;;;6301:15;;;;;;;;;-1:-1:-1;;;;;6301:15:28;-1:-1:-1;;;;;6301:20:28;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6301:22:28;;-1:-1:-1;6251:83:28;6357:43;6371:9;6382:7;6391:8;6357:13;:43::i;:::-;6344:56;5946:461;-1:-1:-1;;;;;5946:461:28:o;3538:215:11:-;3596:7;3619:6;3615:20;;-1:-1:-1;3634:1:11;3627:8;;3615:20;3657:5;;;3661:1;3657;:5;:1;3680:5;;;;;:10;3672:56;;;;-1:-1:-1;;;3672:56:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3745:1;3538:215;-1:-1:-1;;;3538:215:11:o;4217:150::-;4275:7;4306:1;4302;:5;4294:44;;;;;-1:-1:-1;;;4294:44:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;4359:1;4355;:5;;;;;;;4217:150;-1:-1:-1;;;4217:150:11:o;1496:131:6:-;789:10;;:15;781:46;;;;;-1:-1:-1;;;781:46:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;1569:15:::1;1556:10;:28:::0;1599:21:::1;1607:12;:10;:12::i;4774:505:28:-:0;4928:12;-1:-1:-1;;;;;4956:22:28;;1751:44:32;4956:22:28;4952:87;;;5006:15;;;;;;;;;-1:-1:-1;;;;;5006:15:28;-1:-1:-1;;;;;5006:20:28;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5006:22:28;;-1:-1:-1;4952:87:28;-1:-1:-1;;;;;5053:20:28;;1751:44:32;5053:20:28;5049:83;;;5099:15;;;;;;;;;-1:-1:-1;;;;;5099:15:28;-1:-1:-1;;;;;5099:20:28;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5099:22:28;;-1:-1:-1;5049:83:28;5143:19;5164:17;5185:32;5198:9;5209:7;5185:12;:32::i;:::-;5142:75;;-1:-1:-1;5142:75:28;-1:-1:-1;5234:38:28;5142:75;5234:21;5142:75;5248:6;5234:13;:21::i;:38::-;5227:45;4774:505;-1:-1:-1;;;;;;4774:505:28:o;2848:202::-;2940:27;2958:8;2940:17;:27::i;:::-;3013:2;2985:8;:17;;;:24;:30;;2977:66;;;;;-1:-1:-1;;;2977:66:28;;;;;;;;;;;;;;;;;;;;;;;;;;;2571:463:29;2696:12;;;;2660:23;2686;;;:9;:23;;;;;2727:19;;2719:58;;;;;-1:-1:-1;;;2719:58:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;2816:14;;;2787:26;2860:28;2871:8;2816:14;2860:10;:28::i;:::-;2840:48;;2904:43;2919:8;2929:6;2937:9;2904:14;:43::i;:::-;2899:129;;2999:17;;;;2985:32;;:9;;:13;:32::i;:::-;2963:19;;;:54;2899:129;2571:463;;;;:::o;674:96:5:-;732:6;;;;724:39;;;;;-1:-1:-1;;;724:39:5;;;;;;;;;;;;;;;;;;;;;;;;;;;13862:663:32;14032:9;14027:403;14051:6;:13;14047:1;:17;14027:403;;;14085:13;14101:6;14108:1;14101:9;;;;;;;;;;;;;;14085:25;;14149:1;-1:-1:-1;;;;;14132:19:32;:5;-1:-1:-1;;;;;14132:19:32;;;14124:56;;;;;-1:-1:-1;;;14124:56:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;14194:13;14210:6;14217:1;14210:9;;;;;;;;;;;;;;14194:25;;14237:5;14246:1;14237:10;14233:187;;;14267:43;:11;-1:-1:-1;;;;;14294:14:32;;14267:18;:43::i;:::-;;14233:187;;;14349:56;:11;-1:-1:-1;;;;;14373:14:32;;14398:5;14349:15;:56::i;:::-;;14233:187;-1:-1:-1;;14066:3:32;;14027:403;;;;14471:21;14447:20;:11;:18;:20::i;:::-;:45;;14439:79;;;;;-1:-1:-1;;;14439:79:32;;;;;;;;;;;;;;;;;;;;;;;;;;;4155:122:2;4226:4;4249:16;;;:11;;;;;:16;;;;;;:21;;;4155:122::o;3511:590:28:-;3600:20;;;;:27;:32;;;;3599:67;;-1:-1:-1;3638:14:28;;;;-1:-1:-1;;;;;3638:27:28;1751:44:32;3638:27:28;;3599:67;3595:466;;;3702:17;;;;3829:2;3819:13;;3813:20;3865:18;3861:90;;-1:-1:-1;;;3861:90:28;4018:15;;3979:14;;;;3965:85;;-1:-1:-1;;;;;3965:44:28;;;;4018:15;4036:13;3965:44;:85::i;:::-;3595:466;;;4070:24;4085:8;4070:14;:24::i;16954:308:32:-;17075:12;;;;17039:23;17065;;;:9;:23;;;;;17102:19;;-1:-1:-1;;17102:39:32;17098:158;;17227:17;;;;17199:23;;;;:46;;:27;:46::i;:::-;17167:12;;;;17157:23;;;;:9;:23;;;;;:39;;:88;17098:158;16954:308;;:::o;17993:1293::-;18201:8;:12;;;18173:8;:14;;;-1:-1:-1;;;;;18087:328:32;18109:8;:18;;;-1:-1:-1;;;;;18087:328:32;;18141:8;:18;;;18227:8;:17;;;18258:8;:17;;;18289:8;:19;;;18339:8;:20;;;18361:8;:20;;;18383:8;:21;;;18322:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18087:328;;;;-1:-1:-1;;;;;18087:328:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18087:328:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18468:12;;;;18426:29;18458:23;;;:9;:23;;;;;:45;;;-1:-1:-1;;;;;18458:45:32;18517:35;;18513:767;;19095:82;;;18593:584;;;18624:21;-1:-1:-1;;;;;18593:84:32;;18699:8;:18;;;18739:8;:18;;;18779:8;:14;;;18815:8;:12;;;18849:8;:17;;;18888:8;:17;;;18927:8;:19;;;18968:8;:20;;;19010:8;:20;;;19052:8;:21;;;18593:498;;;;;;;;;;;;;-1:-1:-1;;;;;18593:498:32;;;;;;-1:-1:-1;;;;;18593:498:32;;;;;;-1:-1:-1;;;;;18593:498:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18593:498:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18593:498:32;:584;;;18568:701;;;;;-1:-1:-1;;;18568:701:32;;;;;;;;;;;;;;;;;;;;;;;;;;;2136:359:22;2311:16;;;2325:1;2311:16;;;;;;;;2261:14;;;;2311:16;2325:1;2311:16;;;;;;;;;;-1:-1:-1;2311:16:22;2287:40;;2347:6;2337:4;2342:1;2337:7;;;;;;;;;;;;;:16;-1:-1:-1;;;;;2337:16:22;;;-1:-1:-1;;;;;2337:16:22;;;;;2373:6;2363:4;2368:1;2363:7;;;;;;;;-1:-1:-1;;;;;2363:16:22;;;:7;;;;;;;;;;:16;;;;2416:15;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;2389:24;;2416:15;;;;;:28;;2445:7;;2454:4;;2416:43;;;;;;;;;;;;;;;2389:24;2416:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2416:43:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2416:43:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2389:70;;2478:7;2486:1;2478:10;;;;;;;;;;;;;;2469:19;;2136:359;;;;;;;:::o;1571:378::-;1648:16;1666;1695:14;1715:27;1727:6;1735;1715:11;:27::i;:::-;1694:48;;;1753:16;1771;1808:24;1817:6;1825;1808:8;:24::i;:::-;-1:-1:-1;;;;;1793:52:22;;:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1793:54:22;;;;;;;1752:95;;;;;-1:-1:-1;1752:95:22;;-1:-1:-1;;;;;;1880:16:22;;;;;;;:62;;1923:8;1933;1880:62;;;1900:8;1910;1880:62;1857:85;;;;-1:-1:-1;1571:378:22;-1:-1:-1;;;;;;1571:378:22:o;15465:852:32:-;15565:18;;;;-1:-1:-1;;;;;15565:32:32;15557:73;;;;;-1:-1:-1;;;15557:73:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;15648:14;;;;-1:-1:-1;;;;;15648:28:32;15640:65;;;;;-1:-1:-1;;;15640:65:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;15723:17;;;;15715:63;;;;;-1:-1:-1;;;15715:63:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;15824:12;;;;15788:23;15814;;;:9;:23;;;;;15855:19;;15847:59;;;;;-1:-1:-1;;;15847:59:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;15958:8;:17;;;15924:7;:30;;;:51;;15916:88;;;;;-1:-1:-1;;;15916:88:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;16018:19;;-1:-1:-1;;16018:39:32;16014:152;;16108:8;:17;;;16081:7;:23;;;:44;;16073:82;;;;;-1:-1:-1;;;16073:82:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;16210:14;;;;-1:-1:-1;;;;;16202:23:32;16244:33;:14;;;16202:23;16244;:33::i;:::-;16236:74;;;;;-1:-1:-1;;;16236:74:32;;;;;;;;;;;;;;;;;;;;;;;;;;;3773:278:26;3958:14;;;;3882:17;;3931:44;;:6;;-1:-1:-1;;;;;3950:23:26;3931:10;:44::i;:::-;3923:53;-1:-1:-1;3994:14:26;3986:58;;;;;-1:-1:-1;;;3986:58:26;;;;;;;;;;;;;;;;;;;;;;;;;;;7581:919:33;7757:4;-1:-1:-1;;7777:34:33;;7773:126;;7834:54;7855:8;7865:11;7878:9;7834:20;:54::i;:::-;7827:61;;;;7773:126;7978:14;;7909:26;;7946:49;;:11;;-1:-1:-1;;;;;7978:14:33;7946:15;:49::i;:::-;8059:17;;;;7938:58;;-1:-1:-1;7938:58:33;;8036:41;;7938:58;;8036:22;:41::i;:::-;8123:14;;;;8139;;8176:17;;;;8006:71;;-1:-1:-1;8088:18:33;;8109:85;;8123:14;-1:-1:-1;;;;;8139:14:33;;8006:71;;8109:13;:85::i;:::-;8088:106;-1:-1:-1;8205:16:33;8224:47;8088:106;8224:31;:19;8248:6;8224:23;:31::i;:47::-;8305:16;;;8319:1;8305:16;;;;;;;;8205:66;;-1:-1:-1;8305:16:33;8319:1;8305:16;;;;;;;;-1:-1:-1;;;8282:20:33;;;:39;;;8331:23;;8365:9;;8282:39;8357:18;;8331:23;;;;;;;;;:44;;;;;8419:8;8411:17;;8385:8;:20;;;8406:1;8385:23;;;;;;;;;;;;;;;;;:43;-1:-1:-1;8439:19:33;;;:32;-1:-1:-1;8489:4:33;;-1:-1:-1;;7581:919:33;;;;;:::o;1678:710:2:-;1784:4;1917:16;;;:11;;;:16;;;;;;1948:13;1944:438;;-1:-1:-1;;2043:34:2;;;;;;;;;;;;;;;;;;2026:52;;;;;;;;:11;:52;;;;;;;;;;;;;;;;;;;;;;;;2232:18;;2213:16;;;:11;;;:16;;;;;;;:37;2264:11;;1944:438;2340:5;2306:3;:11;;2329:1;2318:8;:12;2306:25;;;;;;;;;;;;;;;;;;:31;;:39;;;;2366:5;2359:12;;;;;910:231:9;1071:62;;;-1:-1:-1;;;;;1071:62:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1094:22;1071:62;;;1036:98;;1064:5;;1036:27;:98::i;3750:1456:33:-;3839:20;;;;:27;:32;;3838:97;;;1155:1;-1:-1:-1;;1128:28:33;3885:8;:20;;;3906:1;3885:23;;;;;;;;;;;;;;3877:32;;:57;;3838:97;3834:172;;;3951:24;3966:8;3951:14;:24::i;:::-;3989:7;;3834:172;4020:14;;;;-1:-1:-1;;;;;4020:27:33;1751:44:32;4020:27:33;4016:296;;;4084:8;:19;;;4071:9;:32;;4063:67;;;;;-1:-1:-1;;;4063:67:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;4016:296;;;4202:99;4252:12;:10;:12::i;:::-;4281:19;;;;4216:14;;;;-1:-1:-1;;;;;4202:49:33;;:99;4274:4;;4202:49;:99::i;:::-;4322:16;4349:8;:20;;;4370:1;4349:23;;;;;;;;;;;;;;4341:32;;4322:51;;4383:27;4413:45;4451:6;4413:33;4426:8;:19;;;4413:8;:12;;:33;;;;:::i;:45::-;4496:14;;;;4512;;4549:17;;;;4383:75;;-1:-1:-1;4469:18:33;;4490:77;;4496:14;-1:-1:-1;;;;;4512:14:33;;4383:75;;4490:5;:77::i;:::-;4582:14;;;;4469:98;;-1:-1:-1;;;;;;4582:27:33;1751:44:32;4582:27:33;4578:419;;;4625:14;4642:25;:9;4656:10;4642:13;:25::i;:::-;4625:42;-1:-1:-1;4686:11:33;;4682:85;;4717:18;;:35;;-1:-1:-1;;;;;4717:27:33;;;;:35;;;;;4745:6;;4717:18;:35;:18;:35;4745:6;4717:27;:35;;;;;;;;;;;;;;;;;;;;;4682:85;4578:419;;;;4814:19;;;;4797:14;;4814:35;;4838:10;4814:23;:35::i;:::-;4797:52;-1:-1:-1;4868:11:33;;4864:123;;4945:18;;4913:14;;;;4899:73;;-1:-1:-1;;;;;4899:45:33;;;;4965:6;4899:45;:73::i;:::-;4578:419;;5011:14;;-1:-1:-1;;;;;5011:14:33;1751:44:32;5011:27:33;5007:193;;;5054:12;;:33;;-1:-1:-1;;;;;5054:12:33;;;;:33;;;;;5076:10;;5054:12;:33;:12;:33;5076:10;5054:12;:33;;;;;;;;;;;;;;;;;;;;;5007:193;;;5164:12;;5132:14;;5118:71;;-1:-1:-1;;;;;5132:14:33;;;;5164:12;5178:10;5118:45;:71::i;3136:155:11:-;3194:7;3226:1;3221;:6;;3213:49;;;;;-1:-1:-1;;;3213:49:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3279:5:11;;;3136:155::o;644:327:22:-;720:14;736;780:6;-1:-1:-1;;;;;770:16:22;:6;-1:-1:-1;;;;;770:16:22;;;762:54;;;;;-1:-1:-1;;;762:54:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;854:6;-1:-1:-1;;;;;845:15:22;:6;-1:-1:-1;;;;;845:15:22;;:53;;883:6;891;845:53;;;864:6;872;845:53;826:72;;-1:-1:-1;826:72:22;-1:-1:-1;;;;;;916:20:22;;908:56;;;;;-1:-1:-1;;;908:56:22;;;;;;;;;;;;;;;;;;;;;;;;;;;977:588;1050:12;1075:14;1091;1109:27;1121:6;1129;1109:11;:27::i;:::-;1074:62;;;;1305:15;;;;;;;;;-1:-1:-1;;;;;1305:15:22;-1:-1:-1;;;;;1305:23:22;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1305:25:22;1366:32;;;;;;;;;;1305:25;1366:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1356:43;;;;;;1230:286;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1199:335;;;;;;977:588;-1:-1:-1;;;977:588:22:o;5243:298:2:-;5309:7;5347:16;;;:11;;;:16;;;;;;5381:13;5373:50;;;;;-1:-1:-1;;;5373:50:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;5476:3;:11;;5499:1;5488:8;:12;5476:25;;;;;;;;;;;;;;;;;;:31;;;5469:38;;;5243:298;;;;:::o;5729:802:29:-;5896:4;-1:-1:-1;;5916:9:29;:37;5912:80;;-1:-1:-1;5976:5:29;5969:12;;5912:80;6071:14;;6002:26;;6039:49;;:11;;-1:-1:-1;;;;;6071:14:29;6039:15;:49::i;:::-;6141:14;;;;6157;;6173:17;;;;6031:58;;-1:-1:-1;6031:58:29;;6125:66;;6141:14;-1:-1:-1;;;;;6157:14:29;;6125:15;:66::i;:::-;6100:91;;6202:18;6223:73;6278:8;:17;;;6223:50;6258:14;6223:30;6246:6;6223:18;:22;;:30;;;;:::i;:50::-;:54;;:73::i;:::-;6330:16;;;6344:1;6330:16;;;;;;;;6202:94;;-1:-1:-1;6330:16:29;6344:1;6330:16;;;;;;;;-1:-1:-1;;;6307:20:29;;;:39;;;6356:23;;6390:9;;6307:39;6382:18;;6356:23;;;;;;;;;:44;;;;;6444:14;6436:23;;6410:8;:20;;;6431:1;6410:23;;;;;;;;;;;;;;;;;:49;6470:19;;;:32;-1:-1:-1;6520:4:29;;-1:-1:-1;;5729:802:29;;;;;:::o;1147:870:9:-;1272:5;1296:19;-1:-1:-1;;;;;1296:17:9;;;:19::i;:::-;1288:58;;;;;-1:-1:-1;;;1288:58:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;1417:12;1431:17;1452:6;-1:-1:-1;;;;;1452:11:9;1464:8;1452:21;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1452:21:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1416:57;;;;1487:7;1483:528;;;1514:11;;:16;1510:122;;1569:4;1558:24;;;;;;;;;;;;;;;-1:-1:-1;1558:24:9;1550:67;;;;;-1:-1:-1;;;1550:67:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;1483:528;;;1720:11;;1716:95;;1756:40;;;-1:-1:-1;;;1756:40:9;;;;;;;;;;;;;;;;;;;;;;;;;;;1716:95;1938:4;1932:11;1982:4;1975;1971:2;1967:13;1960:27;1902:99;1147:870;;;;;:::o;2637:566:26:-;2725:14;;;;-1:-1:-1;;;;;2725:27:26;1751:44:32;2725:27:26;2721:476;;;2789:8;:19;;;2776:9;:32;;2768:67;;;;;-1:-1:-1;;;2768:67:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;2850:12;;2872:19;;;;2850:42;;-1:-1:-1;;;;;2850:12:26;;;;:42;;;;;2872:19;2850:12;:42;:12;:42;2872:19;2850:12;:42;;;;;;;;;;;;;;;;;;;;;2907:14;2924:34;2938:8;:19;;;2924:9;:13;;:34;;;;:::i;:::-;2907:51;-1:-1:-1;2977:11:26;;2973:85;;3008:18;;:35;;-1:-1:-1;;;;;3008:27:26;;;;:35;;;;;3036:6;;3008:18;:35;:18;:35;3036:6;3008:27;:35;;;;;;;;;;;;;;;;;;;;;2973:85;2721:476;;;;3088:98;3138:12;:10;:12::i;:::-;3152;;3166:19;;;;3102:14;;;;-1:-1:-1;;;;;3088:49:26;;;;:98;3152:12;;645:259:9;828:68;;;-1:-1:-1;;;;;828:68:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;851:27;828:68;;;793:104;;821:5;;793:27;:104::i;6979:977:28:-;7284:2;7274:13;;7268:20;7329:2;7319:13;;7313:20;7140:18;;7268:20;7357:18;7353:206;;-1:-1:-1;;;;;7395:22:28;;1751:44:32;7395:22:28;7391:158;;;7453:9;7437:25;;7391:158;;;-1:-1:-1;;7501:33:28;;7391:158;7573:13;7569:72;;-1:-1:-1;;;7569:72:28;-1:-1:-1;;;;;7655:22:28;;1751:44:32;7655:22:28;7651:87;;;7705:15;;;;;;;;;-1:-1:-1;;;;;7705:15:28;-1:-1:-1;;;;;7705:20:28;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7705:22:28;;-1:-1:-1;7651:87:28;-1:-1:-1;;;;;7752:20:28;;1751:44:32;7752:20:28;7748:83;;;7798:15;;;;;;;;;-1:-1:-1;;;;;7798:15:28;-1:-1:-1;;;;;7798:20:28;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7798:22:28;;-1:-1:-1;7748:83:28;7854:95;7880:9;7891:7;7900:8;7910:13;7933:4;7940:8;7854:25;:95::i;:::-;7841:108;6979:977;-1:-1:-1;;;;;;;6979:977:28:o;416:223:9:-;573:58;;;-1:-1:-1;;;;;573:58:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;596:23;573:58;;;538:94;;566:5;;538:27;:94::i;913:377:10:-;1229:20;1275:8;;;913:377::o;2501:987:22:-;2707:14;2751:6;-1:-1:-1;;;;;2741:16:22;:6;-1:-1:-1;;;;;2741:16:22;;;2733:54;;;;;-1:-1:-1;;;2733:54:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;2822:16;;;2836:1;2822:16;;;;;;;;2798:21;;2822:16;;;;;;;;;;-1:-1:-1;2822:16:22;2798:40;;2858:6;2848:4;2853:1;2848:7;;;;;;;;;;;;;:16;-1:-1:-1;;;;;2848:16:22;;;-1:-1:-1;;;;;2848:16:22;;;;;2884:6;2874:4;2879:1;2874:7;;;;;;;;-1:-1:-1;;;;;2874:16:22;;;:7;;;;;;;;;;:16;;;;2950:15;;:22;;;;;;;;2901:24;;2950:15;;;;;:20;;:22;;;;;;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2950:22:22;-1:-1:-1;;;;;2940:32:22;;;;;;2936:516;;;3010:9;2996:10;:23;2988:66;;;;;-1:-1:-1;;;2988:66:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;3078:15;;:84;;;;;;;;;;;-1:-1:-1;;;;;3078:84:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;:15;;;;;:37;;3123:9;;3134:7;;3143:4;;3149:2;;3153:8;;3078:84;;;;;;;;;;;;;;;:15;:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3078:84:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3078:84:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3068:94;;2936:516;;;3193:15;;;;;;;;;-1:-1:-1;;;;;3193:15:22;-1:-1:-1;;;;;3193:20:22;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3193:22:22;-1:-1:-1;;;;;3183:32:22;;;;;;3179:273;;;3241:15;;:78;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3241:78:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;:15;;;;;:37;;3279:7;;3288:10;;3300:4;;3306:2;;3310:8;;3241:78;;;;;;;;;;;;;;;:15;:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3241:78:22;;;;;;;;;;;;;;3179:273;3360:15;;:81;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3360:81:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;:15;;;;;:40;;3401:7;;3410:10;;3422:4;;3428:2;;3432:8;;3360:81;;;;;;;;;;;;;;;:15;:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3360:81:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3360:81:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3350:91;;3179:273;3471:7;3479:1;3471:10;;;;;;;;;;;;;;3462:19;;2501:987;;;;;;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o"},"methodIdentifiers":{"PRICE_CONVERT_VIA_ORACLE()":"9865bcc8","PRICE_SWAP_VIA_ORACLE()":"579f2c77","SUPPLY_UNLIMITED()":"9e049545","TOKEN_ETH()":"5c4fafc7","conversionRates(address[],bytes)":"c7b778db","estimatePurchase(address,address,bytes32,uint256,bytes)":"1323b066","getSkuInfo(bytes32)":"2a8a45bc","getSkus()":"61bd3851","owner()":"8da5cb5b","pause()":"8456cb59","paused()":"5c975abb","payoutWallet()":"8488bb4e","purchaseFor(address,address,bytes32,uint256,bytes)":"a963b257","referenceToken()":"1265b651","setPayoutWallet(address)":"6b8f9c43","start()":"be9a6555","startedAt()":"f21f537d","swapRates(address[],uint256,bytes)":"bda4c5ab","transferOwnership(address)":"f2fde38b","uniswapV2Router()":"1694505e","unpause()":"3f4ba83a","updateSkuPricing(bytes32,address[],uint256[])":"5e6e9f70"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"payoutWallet_\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"skusCapacity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensPerSkuCapacity\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"referenceToken\",\"type\":\"address\"},{\"internalType\":\"contract IUniswapV2Router\",\"name\":\"uniswapV2Router\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32[]\",\"name\":\"names\",\"type\":\"bytes32[]\"},{\"indexed\":false,\"internalType\":\"bytes32[]\",\"name\":\"values\",\"type\":\"bytes32[]\"}],\"name\":\"MagicValues\",\"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\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"payoutWallet_\",\"type\":\"address\"}],\"name\":\"PayoutWalletSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"purchaser\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalPrice\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extData\",\"type\":\"bytes\"}],\"name\":\"Purchase\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"maxQuantityPerPurchase\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"notificationsReceiver\",\"type\":\"address\"}],\"name\":\"SkuCreation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"prices\",\"type\":\"uint256[]\"}],\"name\":\"SkuPricingUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Started\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contract IUniswapV2Router\",\"name\":\"uniswapV2Router\",\"type\":\"address\"}],\"name\":\"UniswapV2RouterSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"PRICE_CONVERT_VIA_ORACLE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PRICE_SWAP_VIA_ORACLE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SUPPLY_UNLIMITED\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TOKEN_ETH\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"conversionRates\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"rates\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"estimatePurchase\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalPrice\",\"type\":\"uint256\"},{\"internalType\":\"bytes32[]\",\"name\":\"pricingData\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"}],\"name\":\"getSkuInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"remainingSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxQuantityPerPurchase\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"notificationsReceiver\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"prices\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSkus\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"skus\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"payoutWallet\",\"outputs\":[{\"internalType\":\"address payable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"purchaseFor\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"referenceToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"payoutWallet_\",\"type\":\"address\"}],\"name\":\"setPayoutWallet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"start\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"referenceAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"swapRates\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"rates\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"uniswapV2Router\",\"outputs\":[{\"internalType\":\"contract IUniswapV2Router\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"prices\",\"type\":\"uint256[]\"}],\"name\":\"updateSkuPricing\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Emits the `MagicValues` event.Emits the `Paused` event.\",\"params\":{\"payoutWallet_\":\"The payout wallet.\",\"referenceToken\":\"The token to use for oracle-based conversions.\",\"skusCapacity\":\"The cap for the number of managed SKUs.\",\"tokensPerSkuCapacity\":\"The cap for the number of tokens managed per SKU.\",\"uniswapV2Router\":\"The UniswapV2 router contract used to facilitate operations against the Uniswap network.\"}},\"conversionRates(address[],bytes)\":{\"details\":\"Reverts if the oracle does not provide a conversion rate for one of the token pairs.\",\"params\":{\"data\":\"Additional data with no specified format for deriving the conversion rates.\",\"tokens\":\"The list of tokens to retrieve the conversion rates for.\"},\"returns\":{\"rates\":\"The conversion rates for the `tokens`/`referenceToken` pairs, retrieved via the oracle.\"}},\"estimatePurchase(address,address,bytes32,uint256,bytes)\":{\"details\":\"This function MUST compute the same price as `purchaseFor` would in identical conditions (same arguments, same point in time).If an implementer contract uses the `pricingData` field, it SHOULD document how to interpret the values.Reverts if the sale has not started.Reverts if the sale is paused.Reverts if `recipient` is the zero address.Reverts if `token` is the zero address.Reverts if `quantity` is zero.Reverts if `quantity` is greater than the maximum purchase quantity.Reverts if `quantity` is greater than the remaining supply.Reverts if `sku` does not exist.Reverts if `sku` exists but does not have a price set for `token`.\",\"params\":{\"quantity\":\"The quantity used to calculate the total price amount.\",\"recipient\":\"The recipient of the purchase used to calculate the total price amount.\",\"sku\":\"The identifier of the SKU used to calculate the total price amount.\",\"token\":\"The payment token used to calculate the total price amount.\",\"userData\":\"Optional extra user input data.\"},\"returns\":{\"pricingData\":\"Implementation-specific extra pricing data, such as details about discounts applied.  If not empty, the implementer MUST document how to interepret the values.\",\"totalPrice\":\"The computed total price.\"}},\"getSkuInfo(bytes32)\":{\"details\":\"WARNING: it is the responsibility of the implementer to ensure that the number of payment tokens is bounded, so that this function does not run out of gas.Reverts if `sku` does not exist.\",\"params\":{\"sku\":\"The SKU identifier.\"},\"returns\":{\"maxQuantityPerPurchase\":\"The maximum allowed quantity for a single purchase.\",\"notificationsReceiver\":\"The address of a contract on which to call the `onPurchaseNotificationReceived` function.\",\"prices\":\"The list of associated prices for each of the `tokens`.\",\"remainingSupply\":\"The remaining supply for sale.\",\"tokens\":\"The list of supported payment tokens.\",\"totalSupply\":\"The initial total supply for sale.\"}},\"getSkus()\":{\"returns\":{\"skus\":\"the list of created SKU identifiers.\"}},\"pause()\":{\"details\":\"Emits the `Paused` event.Reverts if called by any other than the contract owner.Reverts if the contract has not been started yet.Reverts if the contract is already paused.\"},\"purchaseFor(address,address,bytes32,uint256,bytes)\":{\"details\":\"Reverts if the sale has not started.Reverts if the sale is paused.Reverts if `recipient` is the zero address.Reverts if `token` is the zero address.Reverts if `quantity` is zero.Reverts if `quantity` is greater than the maximum purchase quantity.Reverts if `quantity` is greater than the remaining supply.Reverts if `sku` does not exist.Reverts if `sku` exists but does not have a price set for `token`.Emits the Purchase event.\",\"params\":{\"quantity\":\"The quantity to purchase.\",\"recipient\":\"The recipient of the purchase.\",\"sku\":\"The identifier of the SKU to purchase.\",\"token\":\"The token to use as the payment currency.\",\"userData\":\"Optional extra user input data.\"}},\"start()\":{\"details\":\"Emits the `Started` event.Emits the `Unpaused` event.Reverts if called by any other than the contract owner.Reverts if the contract has already been started.Reverts if the contract is not paused.\"},\"startedAt()\":{\"returns\":{\"_0\":\"The timestamp when the contract entered the started state.\"}},\"swapRates(address[],uint256,bytes)\":{\"details\":\"Reverts if the oracle does not provide a swap rate for one of the token pairs.\",\"params\":{\"data\":\"Additional data with no specified format for deriving the swap rates.\",\"referenceAmount\":\"The amount of `referenceToken` to retrieve the swap rates for.\",\"tokens\":\"The list of tokens to retrieve the swap rates for.\"},\"returns\":{\"rates\":\"The swap rates for the `tokens`/`referenceToken` pairs, retrieved via the oracle.\"}},\"transferOwnership(address)\":{\"details\":\"Reverts if the sender is not the current contract owner.\",\"params\":{\"newOwner\":\"the address of the new owner. Use the zero address to renounce the ownership.\"}},\"unpause()\":{\"details\":\"Emits the `Unpaused` event.Reverts if called by any other than the contract owner.Reverts if the contract has not been started yet.Reverts if the contract is not paused.\"},\"updateSkuPricing(bytes32,address[],uint256[])\":{\"details\":\"Reverts if called by any other than the contract owner.Reverts if `tokens` and `prices` have different lengths.Reverts if `sku` does not exist.Reverts if one of the `tokens` is the zero address.Reverts if the update results in too many tokens for the SKU.Emits the `SkuPricingUpdate` event.\",\"params\":{\"prices\":\"The list of prices to apply for each payment token.  Zero price values are used to disable a payment token.\",\"sku\":\"The identifier of the SKU.\",\"tokens\":\"The list of payment tokens to update.  If empty, disable all the existing payment tokens.\"}}},\"title\":\"UniswapSwapSale An SwapSale which implements a UniswapV2-based token conversion pricing strategy. The final  implementer is responsible for implementing any additional pricing and/or delivery logic. PurchaseData.pricingData:  - a non-zero length array indicates Uniswap-based pricing, otherwise indicates fixed pricing.  - [0] uint256: the token conversion rate used for Uniswap-based pricing. PurchaseData.userData MUST be encoded in-place as follows:  - uint256: the maximum amount of purchase tokens to swap for reference tokens, in payment for    a purchase. A value of 0 will use the maximum supported amount (default: type(uint256).max).  - uint256: the token swap deadline as a UNIX timestamp. A value of 0 will not apply any    deadline.  - any additional fields may be defined in-place by deriving contracts (to be documented by the    deriving contract).\",\"version\":1},\"userdoc\":{\"events\":{\"MagicValues(bytes32[],bytes32[])\":{\"notice\":\"Event emitted to notify about the magic values necessary for interfacing with this contract.\"},\"OwnershipTransferred(address,address)\":{\"notice\":\"Event emited when ownership of a contract changes.\"},\"Purchase(address,address,address,bytes32,uint256,bytes,uint256,bytes)\":{\"notice\":\"Event emitted to notify about a purchase.\"},\"SkuCreation(bytes32,uint256,uint256,address)\":{\"notice\":\"Event emitted to notify about the creation of a SKU.\"},\"SkuPricingUpdate(bytes32,address[],uint256[])\":{\"notice\":\"Event emitted to notify about a change in the pricing of a SKU.\"}},\"kind\":\"user\",\"methods\":{\"PRICE_CONVERT_VIA_ORACLE()\":{\"notice\":\"Returns the price magic value used to represent an oracle-based token conversion pricing.\"},\"PRICE_SWAP_VIA_ORACLE()\":{\"notice\":\"Returns the price magic value used to represent an oracle-based token swap pricing.\"},\"SUPPLY_UNLIMITED()\":{\"notice\":\"Returns the magic value used to represent an infinite, never-decreasing SKU's supply.\"},\"TOKEN_ETH()\":{\"notice\":\"Returns the magic value used to represent the ETH payment token.\"},\"constructor\":{\"notice\":\"Constructor.\"},\"conversionRates(address[],bytes)\":{\"notice\":\"Retrieves the token conversion rates for the `tokens`/`referenceToken` pairs via the oracle.\"},\"estimatePurchase(address,address,bytes32,uint256,bytes)\":{\"notice\":\"Estimates the computed final total amount to pay for a purchase, including any potential discount.\"},\"getSkuInfo(bytes32)\":{\"notice\":\"Returns the information relative to a SKU.\"},\"getSkus()\":{\"notice\":\"Returns the list of created SKU identifiers.\"},\"owner()\":{\"notice\":\"Gets the address of the current contract owner.\"},\"pause()\":{\"notice\":\"Pauses the contract.\"},\"purchaseFor(address,address,bytes32,uint256,bytes)\":{\"notice\":\"Performs a purchase.\"},\"start()\":{\"notice\":\"Actvates, or 'starts', the contract.\"},\"startedAt()\":{\"notice\":\"Returns the timestamp when the contract entered the started state.\"},\"swapRates(address[],uint256,bytes)\":{\"notice\":\"Retrieves the token swap rates for the `tokens`/`referenceToken` pairs via the oracle.\"},\"transferOwnership(address)\":{\"notice\":\"See {IERC173-transferOwnership(address)}\"},\"unpause()\":{\"notice\":\"Resumes the contract.\"},\"updateSkuPricing(bytes32,address[],uint256[])\":{\"notice\":\"Sets the token prices for the specified product SKU.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/sale/UniswapSwapSale.sol\":\"UniswapSwapSale\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":2000},\"remappings\":[]},\"sources\":{\"@animoca/ethereum-contracts-core-1.1.2/contracts/access/IERC173.sol\":{\"keccak256\":\"0xeb8a2c766577e782ad66ce8591a8d206b0f37b657754cc7a43beeb2d9343873b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3b404032cb4e21bae47b5e9af1290e41117040b10f69e3b2f93522b97e329b59\",\"dweb:/ipfs/QmRJHYkkvWcXGuFJdbqV18yh9QUk5g4zETrrxD2HnU3iRw\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/access/Ownable.sol\":{\"keccak256\":\"0xbfd1129669bb7c154ee84b3aa1484e421ca68cb725c1039a897629631fd8b096\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://edc634aeae7272726745b1cbbf116dfdde51833b71a143e94fe7de89e9b14566\",\"dweb:/ipfs/QmXtXckxdFM3VeLvsjMWhqt44WAf7XKVYKt9bUT7pyWbjH\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/algo/EnumMap.sol\":{\"keccak256\":\"0x12716c299c0965f4f87c2792cda2bd6029ba629c1172cdfef08d95cb2d7c283f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8d17c9bcb9bb0b9f399f6366f85b4db981df6e319f90b1b84910d6c44a79d032\",\"dweb:/ipfs/QmcqU3Gj8BP88yRV571GyCcW2UAjxq2xiqRofXFKYzkRXT\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/algo/EnumSet.sol\":{\"keccak256\":\"0x0aaea4634a7c64ef61b1ee8380912084427b45b6b4fc254b76d4b78e39f92d35\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://356a344f770d238dd864e8530d2ee05e350f269346cdf02432bc767e90520ce1\",\"dweb:/ipfs/QmfQfasYUY69X4wnzizPqT8P24YZTAPQGgFQErsSzV5sva\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/lifecycle/Pausable.sol\":{\"keccak256\":\"0xaa32d2e66a8edb68c64ffab1db69925248cf3f774c40b062e1e8ff2f4d5eebed\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://37451b151d862be6413ee1d18e3500a9100128f09926a2260d0ea058c3148d8a\",\"dweb:/ipfs/QmNLsaNioeA4LK8fVpqvSkQrCob1DkENcqQUurqDQbQK3G\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/lifecycle/Startable.sol\":{\"keccak256\":\"0x87e273577d4716cbbb325f03ec91207e1022bb7f56cdcda56593c603d2b4592f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d305d7c885971e1b82a363b4c9237c4201390610621a67605b89694ca9680e35\",\"dweb:/ipfs/QmWZX1cEfsfQSoEjBgBaBn3rKJxfyaJMpJyofpM9LG4tEp\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/metatx/ManagedIdentity.sol\":{\"keccak256\":\"0xe544b34375f19f9d1ad6e309f2fc56849263cc3c3c77009f6b38782f7dea9971\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3eb04bbf1c13ca82971c1cb2fdd96a23e2dfaa5df6a7d3b7e773dd3a760cf4e4\",\"dweb:/ipfs/QmXArzbKQgsMebfYVSQtaCLAs3rp3FYp6MKjSQnZoGDnjf\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/payment/PayoutWallet.sol\":{\"keccak256\":\"0x45ef7f68177cb61463f0ac759782f490821917fac3a71a18263c38193a9c6229\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://67839b4cc5897d723099ebfd8e0593e809b02cf422056efc1497f88dd7abb415\",\"dweb:/ipfs/QmYFRXvggoT8RzWB7SSJmfaBY3xkoVYNaGotTLBxjXqqxx\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/utils/ERC20Wrapper.sol\":{\"keccak256\":\"0x57922168ce32d2260022c0c7075137940e7d3cf0bb0d2213e62194050fbcf392\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b2dbba2defa32aa9edb54797f9b3f4ec1c1e5f71193deb99289136fa2f02ad79\",\"dweb:/ipfs/QmbUbzdwyWwjw3VW1o5oBKyuG9cFN7n8j55P8MDAg3sCuK\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/utils/types/AddressIsContract.sol\":{\"keccak256\":\"0x08373f750eedc1226b22b8ab1e156b0689c463590fa7dc40e99329b2da7b5d47\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fac8cdd7be4a83b47b18c8a48c1b1779a2590118049734665a6de91e77f27d35\",\"dweb:/ipfs/QmcAobvMpD5TisPTQSihPhywmVbPv1jDhffJCaZptM7YLv\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0xcc78a17dd88fa5a2edc60c8489e2f405c0913b377216a5b26b35656b2d0dab52\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://526dc85e1f9b9b45830e202568d267d93dde7a4fcccf4ad7798dadcd92304d3c\",\"dweb:/ipfs/QmaoXMB972J3cSDLtBq3xBo4jLwqD2uzXTwujtSPqkYVhR\"]},\"contracts/oracle/UniswapV2Adapter.sol\":{\"keccak256\":\"0x1b347929faf3ddee2568b011fe50bc921bdfe23bceea7022d47259d195860a99\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://364cd66a80a90ec5ac4f1688ffb40825d5ae31197a9104d0271783f9e892f5e5\",\"dweb:/ipfs/QmaAL7GUBRRYc6U96uX7E91AFo9vz9xDqRBYX8SvZGmMg4\"]},\"contracts/oracle/interfaces/IUniswapV2Pair.sol\":{\"keccak256\":\"0xd0762fd9035a7ffa6f70623a464aee4d5c85e9e2bb07e24021af45f738a493af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3ce4fc6e82b116ca7fda0e83df93a4de8adb13e2c72f24390b63b326f01ccc3d\",\"dweb:/ipfs/QmVAZFgd7cEGdxUFTsoz7MUQvCrkqjaFtBB2oZmGd3LA1H\"]},\"contracts/oracle/interfaces/IUniswapV2Router.sol\":{\"keccak256\":\"0x0f8cb0c1e71543770defc0f19a08b62e64b7e19101b8e45643bf7ceb8416c149\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://b14aedff9a94b564366790c1720d1c55472e5d13106c1b89a0d479715dc3c3bd\",\"dweb:/ipfs/QmQQyrKigBpar2uJGLVXFY799e5cNxTX6dFQW3myFAs8Kn\"]},\"contracts/sale/FixedPricesSale.sol\":{\"keccak256\":\"0xad902ccee0e2a42eea07b4c1e011202096daff92b43158a1569d139caf93b3f0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a702cc102db63b18e0581da5d6c01ee9320cec4b690c3117b4f77316fce45185\",\"dweb:/ipfs/QmWL7kh3kBSxDYjVoq9gN79UpKLrRBgJCHqquyaCE8UWhe\"]},\"contracts/sale/UniswapSwapSale.sol\":{\"keccak256\":\"0x877e97ce4d1a5e1c774f9b5f796bc70850364ea144c9581a8ac233f8c0d7faf4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e5a48312df2a7e8e8734ad75c8f2b7c8d1c0b3de3ea3ef39c9b9d700e56421ac\",\"dweb:/ipfs/QmUUzqfoRaS9AXSDBhru7ov88jhwiUZ5SQ2KpoDyouEjk1\"]},\"contracts/sale/abstract/OracleSale.sol\":{\"keccak256\":\"0x7a5dae50fe750564347bfcd4eef33b552b901d7c688db6fae8c8e2dd442cce54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e3388afb44cf6b074cf58820e142b43ce4614bed6a004c4275f6ab05da984449\",\"dweb:/ipfs/QmbucAD5Q7cSh4Ryz8cFt7Yx4KdsXMhqcHofR75oLBuMW2\"]},\"contracts/sale/abstract/PurchaseLifeCycles.sol\":{\"keccak256\":\"0xaa18c1de5628dbd5ff281f06354b0156cb8bd24a6f5b490a787931c374266f6a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2e0731a0100fc1bda747176f169cacc5d61d89df1c78884d8843a834d58f7dcd\",\"dweb:/ipfs/QmZRDAxcvQ9QySqnmQLVM1i797NCqSJrJjKUneEmTufXBQ\"]},\"contracts/sale/abstract/Sale.sol\":{\"keccak256\":\"0x32dd01f3ca07c26e834f5784b4f2434c9cf309e3e30b2421a26da16ccf5d0e26\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://009418ea08f714b3f536d09e04d65ec39d3a4e9ba33e554ac8a26036cff8335b\",\"dweb:/ipfs/QmQvMXpCaaAwtHE4qxXYn2rxPgPzqzJM6aGuyz4nut5CH5\"]},\"contracts/sale/abstract/SwapSale.sol\":{\"keccak256\":\"0x29bdb7a4ec88520205f8e01817e5ae0df65bf72f225e02d69b3d15ce8cfdb804\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7ee6b697e3a6c3fb462e18d3cc22ae4d8c16891b817cbe997b96de404a0eb498\",\"dweb:/ipfs/QmUSBpTt98qsnLeNWVVh2U2tNFcmjsaAUjgrYfchw7ZhGR\"]},\"contracts/sale/interfaces/IOracleSale.sol\":{\"keccak256\":\"0x754fdf88f73519515a9d3748ea136b0e1137095969e91bf7e7b4cf9afb78d164\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://04a0f5ae476580e9a4011d7b6f6e00940498de2be550da0df88fc35ca3b5241c\",\"dweb:/ipfs/QmSjaAFzMbR38ofQtgvyxYKN8N4b7nY4hZAfXkNxe3HSyq\"]},\"contracts/sale/interfaces/IPurchaseNotificationsReceiver.sol\":{\"keccak256\":\"0xa85dcec80f528757a52dd66f88ae14845477e3ec733cb4d22af6db71d19e90f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://36e14e08666d5fd2af5b78848a84a11c666c65c94ca46f88e896c041da1dc1c7\",\"dweb:/ipfs/QmYiHM2DBVuX4adJfJMSvdrdfmDooHxhwGtmhNP7k2DY9n\"]},\"contracts/sale/interfaces/ISale.sol\":{\"keccak256\":\"0x0d731f242662465b2aa3ea9fe3581d0e77e3f61601390f68e4c9c75fc2103f5f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2a04d527397a7f75bd1d701fa7af263cb0799ef4d2f32dc44bb6c9598cee3625\",\"dweb:/ipfs/QmRnsakvvkU1yJyviEM8eytdCTUvjqsw1aqzdntycoG2aV\"]},\"contracts/sale/interfaces/ISwapSale.sol\":{\"keccak256\":\"0x262f0514039e101fdf36f273cfc28bc9000bcc46e53dc7bc7a2dd744075ef820\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://698bcc5dec5dc61277bc847b18a97a869a3657f2943f03f56e01089fa2f2c70f\",\"dweb:/ipfs/QmdAeUYY28Z1biqHPrR9yBLHdKQTm3VFECWJ1Cquxxs4zQ\"]}},\"version\":1}"}},"contracts/sale/abstract/OracleSale.sol":{"OracleSale":{"abi":[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32[]","name":"names","type":"bytes32[]"},{"indexed":false,"internalType":"bytes32[]","name":"values","type":"bytes32[]"}],"name":"MagicValues","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":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"payoutWallet_","type":"address"}],"name":"PayoutWalletSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"purchaser","type":"address"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"bytes32","name":"sku","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"quantity","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"userData","type":"bytes"},{"indexed":false,"internalType":"uint256","name":"totalPrice","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"extData","type":"bytes"}],"name":"Purchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"sku","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxQuantityPerPurchase","type":"uint256"},{"indexed":false,"internalType":"address","name":"notificationsReceiver","type":"address"}],"name":"SkuCreation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"sku","type":"bytes32"},{"indexed":false,"internalType":"address[]","name":"tokens","type":"address[]"},{"indexed":false,"internalType":"uint256[]","name":"prices","type":"uint256[]"}],"name":"SkuPricingUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Started","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"PRICE_CONVERT_VIA_ORACLE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SUPPLY_UNLIMITED","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOKEN_ETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"conversionRates","outputs":[{"internalType":"uint256[]","name":"rates","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"estimatePurchase","outputs":[{"internalType":"uint256","name":"totalPrice","type":"uint256"},{"internalType":"bytes32[]","name":"pricingData","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"sku","type":"bytes32"}],"name":"getSkuInfo","outputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"uint256","name":"remainingSupply","type":"uint256"},{"internalType":"uint256","name":"maxQuantityPerPurchase","type":"uint256"},{"internalType":"address","name":"notificationsReceiver","type":"address"},{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"prices","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSkus","outputs":[{"internalType":"bytes32[]","name":"skus","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payoutWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"purchaseFor","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"referenceToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"payoutWallet_","type":"address"}],"name":"setPayoutWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"start","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"prices","type":"uint256[]"}],"name":"updateSkuPricing","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"PRICE_CONVERT_VIA_ORACLE()":"9865bcc8","SUPPLY_UNLIMITED()":"9e049545","TOKEN_ETH()":"5c4fafc7","conversionRates(address[],bytes)":"c7b778db","estimatePurchase(address,address,bytes32,uint256,bytes)":"1323b066","getSkuInfo(bytes32)":"2a8a45bc","getSkus()":"61bd3851","owner()":"8da5cb5b","pause()":"8456cb59","paused()":"5c975abb","payoutWallet()":"8488bb4e","purchaseFor(address,address,bytes32,uint256,bytes)":"a963b257","referenceToken()":"1265b651","setPayoutWallet(address)":"6b8f9c43","start()":"be9a6555","startedAt()":"f21f537d","transferOwnership(address)":"f2fde38b","unpause()":"3f4ba83a","updateSkuPricing(bytes32,address[],uint256[])":"5e6e9f70"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32[]\",\"name\":\"names\",\"type\":\"bytes32[]\"},{\"indexed\":false,\"internalType\":\"bytes32[]\",\"name\":\"values\",\"type\":\"bytes32[]\"}],\"name\":\"MagicValues\",\"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\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"payoutWallet_\",\"type\":\"address\"}],\"name\":\"PayoutWalletSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"purchaser\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalPrice\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extData\",\"type\":\"bytes\"}],\"name\":\"Purchase\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"maxQuantityPerPurchase\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"notificationsReceiver\",\"type\":\"address\"}],\"name\":\"SkuCreation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"prices\",\"type\":\"uint256[]\"}],\"name\":\"SkuPricingUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Started\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"PRICE_CONVERT_VIA_ORACLE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SUPPLY_UNLIMITED\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TOKEN_ETH\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"conversionRates\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"rates\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"estimatePurchase\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalPrice\",\"type\":\"uint256\"},{\"internalType\":\"bytes32[]\",\"name\":\"pricingData\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"}],\"name\":\"getSkuInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"remainingSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxQuantityPerPurchase\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"notificationsReceiver\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"prices\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSkus\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"skus\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"payoutWallet\",\"outputs\":[{\"internalType\":\"address payable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"purchaseFor\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"referenceToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"payoutWallet_\",\"type\":\"address\"}],\"name\":\"setPayoutWallet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"start\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"prices\",\"type\":\"uint256[]\"}],\"name\":\"updateSkuPricing\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Emits the `MagicValues` event.Emits the `Paused` event.\",\"params\":{\"payoutWallet_\":\"the payout wallet.\",\"referenceToken_\":\"the token to use for oracle-based conversions.\",\"skusCapacity\":\"the cap for the number of managed SKUs.\",\"tokensPerSkuCapacity\":\"the cap for the number of tokens managed per SKU.\"}},\"conversionRates(address[],bytes)\":{\"details\":\"Reverts if the oracle does not provide a conversion rate for one of the token pairs.\",\"params\":{\"data\":\"Additional data with no specified format for deriving the conversion rates.\",\"tokens\":\"The list of tokens to retrieve the conversion rates for.\"},\"returns\":{\"rates\":\"The conversion rates for the `tokens`/`referenceToken` pairs, retrieved via the oracle.\"}},\"estimatePurchase(address,address,bytes32,uint256,bytes)\":{\"details\":\"This function MUST compute the same price as `purchaseFor` would in identical conditions (same arguments, same point in time).If an implementer contract uses the `pricingData` field, it SHOULD document how to interpret the values.Reverts if the sale has not started.Reverts if the sale is paused.Reverts if `recipient` is the zero address.Reverts if `token` is the zero address.Reverts if `quantity` is zero.Reverts if `quantity` is greater than the maximum purchase quantity.Reverts if `quantity` is greater than the remaining supply.Reverts if `sku` does not exist.Reverts if `sku` exists but does not have a price set for `token`.\",\"params\":{\"quantity\":\"The quantity used to calculate the total price amount.\",\"recipient\":\"The recipient of the purchase used to calculate the total price amount.\",\"sku\":\"The identifier of the SKU used to calculate the total price amount.\",\"token\":\"The payment token used to calculate the total price amount.\",\"userData\":\"Optional extra user input data.\"},\"returns\":{\"pricingData\":\"Implementation-specific extra pricing data, such as details about discounts applied.  If not empty, the implementer MUST document how to interepret the values.\",\"totalPrice\":\"The computed total price.\"}},\"getSkuInfo(bytes32)\":{\"details\":\"WARNING: it is the responsibility of the implementer to ensure that the number of payment tokens is bounded, so that this function does not run out of gas.Reverts if `sku` does not exist.\",\"params\":{\"sku\":\"The SKU identifier.\"},\"returns\":{\"maxQuantityPerPurchase\":\"The maximum allowed quantity for a single purchase.\",\"notificationsReceiver\":\"The address of a contract on which to call the `onPurchaseNotificationReceived` function.\",\"prices\":\"The list of associated prices for each of the `tokens`.\",\"remainingSupply\":\"The remaining supply for sale.\",\"tokens\":\"The list of supported payment tokens.\",\"totalSupply\":\"The initial total supply for sale.\"}},\"getSkus()\":{\"returns\":{\"skus\":\"the list of created SKU identifiers.\"}},\"pause()\":{\"details\":\"Emits the `Paused` event.Reverts if called by any other than the contract owner.Reverts if the contract has not been started yet.Reverts if the contract is already paused.\"},\"purchaseFor(address,address,bytes32,uint256,bytes)\":{\"details\":\"Reverts if the sale has not started.Reverts if the sale is paused.Reverts if `recipient` is the zero address.Reverts if `token` is the zero address.Reverts if `quantity` is zero.Reverts if `quantity` is greater than the maximum purchase quantity.Reverts if `quantity` is greater than the remaining supply.Reverts if `sku` does not exist.Reverts if `sku` exists but does not have a price set for `token`.Emits the Purchase event.\",\"params\":{\"quantity\":\"The quantity to purchase.\",\"recipient\":\"The recipient of the purchase.\",\"sku\":\"The identifier of the SKU to purchase.\",\"token\":\"The token to use as the payment currency.\",\"userData\":\"Optional extra user input data.\"}},\"start()\":{\"details\":\"Emits the `Started` event.Emits the `Unpaused` event.Reverts if called by any other than the contract owner.Reverts if the contract has already been started.Reverts if the contract is not paused.\"},\"startedAt()\":{\"returns\":{\"_0\":\"The timestamp when the contract entered the started state.\"}},\"transferOwnership(address)\":{\"details\":\"Reverts if the sender is not the current contract owner.\",\"params\":{\"newOwner\":\"the address of the new owner. Use the zero address to renounce the ownership.\"}},\"unpause()\":{\"details\":\"Emits the `Unpaused` event.Reverts if called by any other than the contract owner.Reverts if the contract has not been started yet.Reverts if the contract is not paused.\"},\"updateSkuPricing(bytes32,address[],uint256[])\":{\"details\":\"Reverts if called by any other than the contract owner.Reverts if `tokens` and `prices` have different lengths.Reverts if `sku` does not exist.Reverts if one of the `tokens` is the zero address.Reverts if the update results in too many tokens for the SKU.Emits the `SkuPricingUpdate` event.\",\"params\":{\"prices\":\"The list of prices to apply for each payment token.  Zero price values are used to disable a payment token.\",\"sku\":\"The identifier of the SKU.\",\"tokens\":\"The list of payment tokens to update.  If empty, disable all the existing payment tokens.\"}}},\"stateVariables\":{\"PRICE_CONVERT_VIA_ORACLE\":{\"details\":\"MUST NOT be zero. SHOULD BE a prohibitively big value, so that it doesn\\u2019t collide with a possible price value.\",\"return\":\"The price magic value used to represent an oracle-based token conversion pricing.\"}},\"title\":\"OracleSale A FixedPricesSale which implements support for an oracle-based token conversion pricing strategy.  The final implementer is responsible for implementing any additional pricing and/or delivery logic. PurchaseData.pricingData:  - a zero length array for fixed pricing data.  - a non-zero length array for oracle-based pricing data  - [0] uint256: the uninterpolated unit price (i.e. magic value).  - [1] uint256: the token conversion rate used for oracle-based pricing.\",\"version\":1},\"userdoc\":{\"events\":{\"MagicValues(bytes32[],bytes32[])\":{\"notice\":\"Event emitted to notify about the magic values necessary for interfacing with this contract.\"},\"OwnershipTransferred(address,address)\":{\"notice\":\"Event emited when ownership of a contract changes.\"},\"Purchase(address,address,address,bytes32,uint256,bytes,uint256,bytes)\":{\"notice\":\"Event emitted to notify about a purchase.\"},\"SkuCreation(bytes32,uint256,uint256,address)\":{\"notice\":\"Event emitted to notify about the creation of a SKU.\"},\"SkuPricingUpdate(bytes32,address[],uint256[])\":{\"notice\":\"Event emitted to notify about a change in the pricing of a SKU.\"}},\"kind\":\"user\",\"methods\":{\"PRICE_CONVERT_VIA_ORACLE()\":{\"notice\":\"Returns the price magic value used to represent an oracle-based token conversion pricing.\"},\"SUPPLY_UNLIMITED()\":{\"notice\":\"Returns the magic value used to represent an infinite, never-decreasing SKU's supply.\"},\"TOKEN_ETH()\":{\"notice\":\"Returns the magic value used to represent the ETH payment token.\"},\"constructor\":{\"notice\":\"Constructor.\"},\"conversionRates(address[],bytes)\":{\"notice\":\"Retrieves the token conversion rates for the `tokens`/`referenceToken` pairs via the oracle.\"},\"estimatePurchase(address,address,bytes32,uint256,bytes)\":{\"notice\":\"Estimates the computed final total amount to pay for a purchase, including any potential discount.\"},\"getSkuInfo(bytes32)\":{\"notice\":\"Returns the information relative to a SKU.\"},\"getSkus()\":{\"notice\":\"Returns the list of created SKU identifiers.\"},\"owner()\":{\"notice\":\"Gets the address of the current contract owner.\"},\"pause()\":{\"notice\":\"Pauses the contract.\"},\"purchaseFor(address,address,bytes32,uint256,bytes)\":{\"notice\":\"Performs a purchase.\"},\"start()\":{\"notice\":\"Actvates, or 'starts', the contract.\"},\"startedAt()\":{\"notice\":\"Returns the timestamp when the contract entered the started state.\"},\"transferOwnership(address)\":{\"notice\":\"See {IERC173-transferOwnership(address)}\"},\"unpause()\":{\"notice\":\"Resumes the contract.\"},\"updateSkuPricing(bytes32,address[],uint256[])\":{\"notice\":\"Sets the token prices for the specified product SKU.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/sale/abstract/OracleSale.sol\":\"OracleSale\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":2000},\"remappings\":[]},\"sources\":{\"@animoca/ethereum-contracts-core-1.1.2/contracts/access/IERC173.sol\":{\"keccak256\":\"0xeb8a2c766577e782ad66ce8591a8d206b0f37b657754cc7a43beeb2d9343873b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3b404032cb4e21bae47b5e9af1290e41117040b10f69e3b2f93522b97e329b59\",\"dweb:/ipfs/QmRJHYkkvWcXGuFJdbqV18yh9QUk5g4zETrrxD2HnU3iRw\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/access/Ownable.sol\":{\"keccak256\":\"0xbfd1129669bb7c154ee84b3aa1484e421ca68cb725c1039a897629631fd8b096\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://edc634aeae7272726745b1cbbf116dfdde51833b71a143e94fe7de89e9b14566\",\"dweb:/ipfs/QmXtXckxdFM3VeLvsjMWhqt44WAf7XKVYKt9bUT7pyWbjH\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/algo/EnumMap.sol\":{\"keccak256\":\"0x12716c299c0965f4f87c2792cda2bd6029ba629c1172cdfef08d95cb2d7c283f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8d17c9bcb9bb0b9f399f6366f85b4db981df6e319f90b1b84910d6c44a79d032\",\"dweb:/ipfs/QmcqU3Gj8BP88yRV571GyCcW2UAjxq2xiqRofXFKYzkRXT\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/algo/EnumSet.sol\":{\"keccak256\":\"0x0aaea4634a7c64ef61b1ee8380912084427b45b6b4fc254b76d4b78e39f92d35\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://356a344f770d238dd864e8530d2ee05e350f269346cdf02432bc767e90520ce1\",\"dweb:/ipfs/QmfQfasYUY69X4wnzizPqT8P24YZTAPQGgFQErsSzV5sva\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/lifecycle/Pausable.sol\":{\"keccak256\":\"0xaa32d2e66a8edb68c64ffab1db69925248cf3f774c40b062e1e8ff2f4d5eebed\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://37451b151d862be6413ee1d18e3500a9100128f09926a2260d0ea058c3148d8a\",\"dweb:/ipfs/QmNLsaNioeA4LK8fVpqvSkQrCob1DkENcqQUurqDQbQK3G\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/lifecycle/Startable.sol\":{\"keccak256\":\"0x87e273577d4716cbbb325f03ec91207e1022bb7f56cdcda56593c603d2b4592f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d305d7c885971e1b82a363b4c9237c4201390610621a67605b89694ca9680e35\",\"dweb:/ipfs/QmWZX1cEfsfQSoEjBgBaBn3rKJxfyaJMpJyofpM9LG4tEp\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/metatx/ManagedIdentity.sol\":{\"keccak256\":\"0xe544b34375f19f9d1ad6e309f2fc56849263cc3c3c77009f6b38782f7dea9971\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3eb04bbf1c13ca82971c1cb2fdd96a23e2dfaa5df6a7d3b7e773dd3a760cf4e4\",\"dweb:/ipfs/QmXArzbKQgsMebfYVSQtaCLAs3rp3FYp6MKjSQnZoGDnjf\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/payment/PayoutWallet.sol\":{\"keccak256\":\"0x45ef7f68177cb61463f0ac759782f490821917fac3a71a18263c38193a9c6229\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://67839b4cc5897d723099ebfd8e0593e809b02cf422056efc1497f88dd7abb415\",\"dweb:/ipfs/QmYFRXvggoT8RzWB7SSJmfaBY3xkoVYNaGotTLBxjXqqxx\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/utils/ERC20Wrapper.sol\":{\"keccak256\":\"0x57922168ce32d2260022c0c7075137940e7d3cf0bb0d2213e62194050fbcf392\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b2dbba2defa32aa9edb54797f9b3f4ec1c1e5f71193deb99289136fa2f02ad79\",\"dweb:/ipfs/QmbUbzdwyWwjw3VW1o5oBKyuG9cFN7n8j55P8MDAg3sCuK\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/utils/types/AddressIsContract.sol\":{\"keccak256\":\"0x08373f750eedc1226b22b8ab1e156b0689c463590fa7dc40e99329b2da7b5d47\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fac8cdd7be4a83b47b18c8a48c1b1779a2590118049734665a6de91e77f27d35\",\"dweb:/ipfs/QmcAobvMpD5TisPTQSihPhywmVbPv1jDhffJCaZptM7YLv\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0xcc78a17dd88fa5a2edc60c8489e2f405c0913b377216a5b26b35656b2d0dab52\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://526dc85e1f9b9b45830e202568d267d93dde7a4fcccf4ad7798dadcd92304d3c\",\"dweb:/ipfs/QmaoXMB972J3cSDLtBq3xBo4jLwqD2uzXTwujtSPqkYVhR\"]},\"contracts/sale/FixedPricesSale.sol\":{\"keccak256\":\"0xad902ccee0e2a42eea07b4c1e011202096daff92b43158a1569d139caf93b3f0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a702cc102db63b18e0581da5d6c01ee9320cec4b690c3117b4f77316fce45185\",\"dweb:/ipfs/QmWL7kh3kBSxDYjVoq9gN79UpKLrRBgJCHqquyaCE8UWhe\"]},\"contracts/sale/abstract/OracleSale.sol\":{\"keccak256\":\"0x7a5dae50fe750564347bfcd4eef33b552b901d7c688db6fae8c8e2dd442cce54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e3388afb44cf6b074cf58820e142b43ce4614bed6a004c4275f6ab05da984449\",\"dweb:/ipfs/QmbucAD5Q7cSh4Ryz8cFt7Yx4KdsXMhqcHofR75oLBuMW2\"]},\"contracts/sale/abstract/PurchaseLifeCycles.sol\":{\"keccak256\":\"0xaa18c1de5628dbd5ff281f06354b0156cb8bd24a6f5b490a787931c374266f6a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2e0731a0100fc1bda747176f169cacc5d61d89df1c78884d8843a834d58f7dcd\",\"dweb:/ipfs/QmZRDAxcvQ9QySqnmQLVM1i797NCqSJrJjKUneEmTufXBQ\"]},\"contracts/sale/abstract/Sale.sol\":{\"keccak256\":\"0x32dd01f3ca07c26e834f5784b4f2434c9cf309e3e30b2421a26da16ccf5d0e26\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://009418ea08f714b3f536d09e04d65ec39d3a4e9ba33e554ac8a26036cff8335b\",\"dweb:/ipfs/QmQvMXpCaaAwtHE4qxXYn2rxPgPzqzJM6aGuyz4nut5CH5\"]},\"contracts/sale/interfaces/IOracleSale.sol\":{\"keccak256\":\"0x754fdf88f73519515a9d3748ea136b0e1137095969e91bf7e7b4cf9afb78d164\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://04a0f5ae476580e9a4011d7b6f6e00940498de2be550da0df88fc35ca3b5241c\",\"dweb:/ipfs/QmSjaAFzMbR38ofQtgvyxYKN8N4b7nY4hZAfXkNxe3HSyq\"]},\"contracts/sale/interfaces/IPurchaseNotificationsReceiver.sol\":{\"keccak256\":\"0xa85dcec80f528757a52dd66f88ae14845477e3ec733cb4d22af6db71d19e90f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://36e14e08666d5fd2af5b78848a84a11c666c65c94ca46f88e896c041da1dc1c7\",\"dweb:/ipfs/QmYiHM2DBVuX4adJfJMSvdrdfmDooHxhwGtmhNP7k2DY9n\"]},\"contracts/sale/interfaces/ISale.sol\":{\"keccak256\":\"0x0d731f242662465b2aa3ea9fe3581d0e77e3f61601390f68e4c9c75fc2103f5f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2a04d527397a7f75bd1d701fa7af263cb0799ef4d2f32dc44bb6c9598cee3625\",\"dweb:/ipfs/QmRnsakvvkU1yJyviEM8eytdCTUvjqsw1aqzdntycoG2aV\"]}},\"version\":1}"}},"contracts/sale/abstract/PurchaseLifeCycles.sol":{"PurchaseLifeCycles":{"abi":[],"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"title\":\"PurchaseLifeCycles An abstract contract which define the life cycles for a purchase implementer.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/sale/abstract/PurchaseLifeCycles.sol\":\"PurchaseLifeCycles\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":2000},\"remappings\":[]},\"sources\":{\"contracts/sale/abstract/PurchaseLifeCycles.sol\":{\"keccak256\":\"0xaa18c1de5628dbd5ff281f06354b0156cb8bd24a6f5b490a787931c374266f6a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2e0731a0100fc1bda747176f169cacc5d61d89df1c78884d8843a834d58f7dcd\",\"dweb:/ipfs/QmZRDAxcvQ9QySqnmQLVM1i797NCqSJrJjKUneEmTufXBQ\"]}},\"version\":1}"}},"contracts/sale/abstract/PurchaseNotificationsReceiver.sol":{"PurchaseNotificationsReceiver":{"abi":[{"inputs":[{"internalType":"address","name":"purchaser","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"},{"internalType":"uint256","name":"totalPrice","type":"uint256"},{"internalType":"bytes32[]","name":"pricingData","type":"bytes32[]"},{"internalType":"bytes32[]","name":"paymentData","type":"bytes32[]"},{"internalType":"bytes32[]","name":"deliveryData","type":"bytes32[]"}],"name":"onPurchaseNotificationReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"onPurchaseNotificationReceived(address,address,address,bytes32,uint256,bytes,uint256,bytes32[],bytes32[],bytes32[])":"61eceae8","supportsInterface(bytes4)":"01ffc9a7"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"purchaser\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"totalPrice\",\"type\":\"uint256\"},{\"internalType\":\"bytes32[]\",\"name\":\"pricingData\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"paymentData\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"deliveryData\",\"type\":\"bytes32[]\"}],\"name\":\"onPurchaseNotificationReceived\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"onPurchaseNotificationReceived(address,address,address,bytes32,uint256,bytes,uint256,bytes32[],bytes32[],bytes32[])\":{\"details\":\"This function MUST return the function selector, otherwise the caller will revert the transaction.  The selector to be returned can be obtained as `this.onPurchaseNotificationReceived.selector`This function MAY throw.\",\"params\":{\"deliveryData\":\"Implementation-specific extra delivery data, such as purchase receipts.\",\"paymentData\":\"Implementation-specific extra payment data, such as conversion rates.\",\"pricingData\":\"Implementation-specific extra pricing data, such as details about discounts applied.\",\"purchaser\":\"The purchaser of the purchase.\",\"quantity\":\"The quantity to purchase.\",\"recipient\":\"The recipient of the purchase.\",\"sku\":\"The identifier of the SKU to purchase.\",\"token\":\"The token to use as the payment currency.\",\"totalPrice\":\"The total price paid.\",\"userData\":\"Optional extra user input data.\"},\"returns\":{\"_0\":\"`bytes4(keccak256(  \\\"onPurchaseNotificationReceived(address,address,address,bytes32,uint256,bytes,uint256,bytes32[],bytes32[],bytes32[])\\\"))`\"}},\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"}},\"title\":\"PurchaseNotificationsReceiver Abstract base IPurchaseNotificationsReceiver implementation.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"onPurchaseNotificationReceived(address,address,address,bytes32,uint256,bytes,uint256,bytes32[],bytes32[],bytes32[])\":{\"notice\":\"Handles the receipt of a purchase notification.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/sale/abstract/PurchaseNotificationsReceiver.sol\":\"PurchaseNotificationsReceiver\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":2000},\"remappings\":[]},\"sources\":{\"@animoca/ethereum-contracts-core-1.1.2/contracts/introspection/IERC165.sol\":{\"keccak256\":\"0x75d489886feb4c87ca958da5b414fe5ea3c089cc3b9fe629acd44ce0628d2abe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4891221c8bff2b6800fa6e8c8815f5e22983a472075aac05cf691ee8db0ac861\",\"dweb:/ipfs/QmYP8kP9hMqfF6xAimG7wd8xM47WzU7PS1yG5hQ5k1joFH\"]},\"contracts/sale/abstract/PurchaseNotificationsReceiver.sol\":{\"keccak256\":\"0x96eef6b06d5b9a77c4816377eb9cb7711a1a18a19ceb9dd3fa1ddb1b946b937e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3ff0bf31280a4d0e3cf27c7f0e3dc16f9219592d6853726142ccf0847d6a99e2\",\"dweb:/ipfs/QmP2u9w5Kdo736no9RmfJePSq7hd2c6549QVYEpkWNNt6D\"]},\"contracts/sale/interfaces/IPurchaseNotificationsReceiver.sol\":{\"keccak256\":\"0xa85dcec80f528757a52dd66f88ae14845477e3ec733cb4d22af6db71d19e90f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://36e14e08666d5fd2af5b78848a84a11c666c65c94ca46f88e896c041da1dc1c7\",\"dweb:/ipfs/QmYiHM2DBVuX4adJfJMSvdrdfmDooHxhwGtmhNP7k2DY9n\"]}},\"version\":1}"}},"contracts/sale/abstract/Sale.sol":{"Sale":{"abi":[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32[]","name":"names","type":"bytes32[]"},{"indexed":false,"internalType":"bytes32[]","name":"values","type":"bytes32[]"}],"name":"MagicValues","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":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"payoutWallet_","type":"address"}],"name":"PayoutWalletSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"purchaser","type":"address"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"bytes32","name":"sku","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"quantity","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"userData","type":"bytes"},{"indexed":false,"internalType":"uint256","name":"totalPrice","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"extData","type":"bytes"}],"name":"Purchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"sku","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxQuantityPerPurchase","type":"uint256"},{"indexed":false,"internalType":"address","name":"notificationsReceiver","type":"address"}],"name":"SkuCreation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"sku","type":"bytes32"},{"indexed":false,"internalType":"address[]","name":"tokens","type":"address[]"},{"indexed":false,"internalType":"uint256[]","name":"prices","type":"uint256[]"}],"name":"SkuPricingUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Started","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"SUPPLY_UNLIMITED","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOKEN_ETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"estimatePurchase","outputs":[{"internalType":"uint256","name":"totalPrice","type":"uint256"},{"internalType":"bytes32[]","name":"pricingData","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"sku","type":"bytes32"}],"name":"getSkuInfo","outputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"uint256","name":"remainingSupply","type":"uint256"},{"internalType":"uint256","name":"maxQuantityPerPurchase","type":"uint256"},{"internalType":"address","name":"notificationsReceiver","type":"address"},{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"prices","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSkus","outputs":[{"internalType":"bytes32[]","name":"skus","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payoutWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"purchaseFor","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address payable","name":"payoutWallet_","type":"address"}],"name":"setPayoutWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"start","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"prices","type":"uint256[]"}],"name":"updateSkuPricing","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"SUPPLY_UNLIMITED()":"9e049545","TOKEN_ETH()":"5c4fafc7","estimatePurchase(address,address,bytes32,uint256,bytes)":"1323b066","getSkuInfo(bytes32)":"2a8a45bc","getSkus()":"61bd3851","owner()":"8da5cb5b","pause()":"8456cb59","paused()":"5c975abb","payoutWallet()":"8488bb4e","purchaseFor(address,address,bytes32,uint256,bytes)":"a963b257","setPayoutWallet(address)":"6b8f9c43","start()":"be9a6555","startedAt()":"f21f537d","transferOwnership(address)":"f2fde38b","unpause()":"3f4ba83a","updateSkuPricing(bytes32,address[],uint256[])":"5e6e9f70"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32[]\",\"name\":\"names\",\"type\":\"bytes32[]\"},{\"indexed\":false,\"internalType\":\"bytes32[]\",\"name\":\"values\",\"type\":\"bytes32[]\"}],\"name\":\"MagicValues\",\"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\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"payoutWallet_\",\"type\":\"address\"}],\"name\":\"PayoutWalletSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"purchaser\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalPrice\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extData\",\"type\":\"bytes\"}],\"name\":\"Purchase\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"maxQuantityPerPurchase\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"notificationsReceiver\",\"type\":\"address\"}],\"name\":\"SkuCreation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"prices\",\"type\":\"uint256[]\"}],\"name\":\"SkuPricingUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Started\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"SUPPLY_UNLIMITED\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TOKEN_ETH\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"estimatePurchase\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalPrice\",\"type\":\"uint256\"},{\"internalType\":\"bytes32[]\",\"name\":\"pricingData\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"}],\"name\":\"getSkuInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"remainingSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxQuantityPerPurchase\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"notificationsReceiver\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"prices\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSkus\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"skus\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"payoutWallet\",\"outputs\":[{\"internalType\":\"address payable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"purchaseFor\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"payoutWallet_\",\"type\":\"address\"}],\"name\":\"setPayoutWallet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"start\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"prices\",\"type\":\"uint256[]\"}],\"name\":\"updateSkuPricing\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Emits the `MagicValues` event.Emits the `Paused` event.\",\"params\":{\"payoutWallet_\":\"the payout wallet.\",\"skusCapacity\":\"the cap for the number of managed SKUs.\",\"tokensPerSkuCapacity\":\"the cap for the number of tokens managed per SKU.\"}},\"estimatePurchase(address,address,bytes32,uint256,bytes)\":{\"details\":\"This function MUST compute the same price as `purchaseFor` would in identical conditions (same arguments, same point in time).If an implementer contract uses the `pricingData` field, it SHOULD document how to interpret the values.Reverts if the sale has not started.Reverts if the sale is paused.Reverts if `recipient` is the zero address.Reverts if `token` is the zero address.Reverts if `quantity` is zero.Reverts if `quantity` is greater than the maximum purchase quantity.Reverts if `quantity` is greater than the remaining supply.Reverts if `sku` does not exist.Reverts if `sku` exists but does not have a price set for `token`.\",\"params\":{\"quantity\":\"The quantity used to calculate the total price amount.\",\"recipient\":\"The recipient of the purchase used to calculate the total price amount.\",\"sku\":\"The identifier of the SKU used to calculate the total price amount.\",\"token\":\"The payment token used to calculate the total price amount.\",\"userData\":\"Optional extra user input data.\"},\"returns\":{\"pricingData\":\"Implementation-specific extra pricing data, such as details about discounts applied.  If not empty, the implementer MUST document how to interepret the values.\",\"totalPrice\":\"The computed total price.\"}},\"getSkuInfo(bytes32)\":{\"details\":\"WARNING: it is the responsibility of the implementer to ensure that the number of payment tokens is bounded, so that this function does not run out of gas.Reverts if `sku` does not exist.\",\"params\":{\"sku\":\"The SKU identifier.\"},\"returns\":{\"maxQuantityPerPurchase\":\"The maximum allowed quantity for a single purchase.\",\"notificationsReceiver\":\"The address of a contract on which to call the `onPurchaseNotificationReceived` function.\",\"prices\":\"The list of associated prices for each of the `tokens`.\",\"remainingSupply\":\"The remaining supply for sale.\",\"tokens\":\"The list of supported payment tokens.\",\"totalSupply\":\"The initial total supply for sale.\"}},\"getSkus()\":{\"returns\":{\"skus\":\"the list of created SKU identifiers.\"}},\"pause()\":{\"details\":\"Emits the `Paused` event.Reverts if called by any other than the contract owner.Reverts if the contract has not been started yet.Reverts if the contract is already paused.\"},\"purchaseFor(address,address,bytes32,uint256,bytes)\":{\"details\":\"Reverts if the sale has not started.Reverts if the sale is paused.Reverts if `recipient` is the zero address.Reverts if `token` is the zero address.Reverts if `quantity` is zero.Reverts if `quantity` is greater than the maximum purchase quantity.Reverts if `quantity` is greater than the remaining supply.Reverts if `sku` does not exist.Reverts if `sku` exists but does not have a price set for `token`.Emits the Purchase event.\",\"params\":{\"quantity\":\"The quantity to purchase.\",\"recipient\":\"The recipient of the purchase.\",\"sku\":\"The identifier of the SKU to purchase.\",\"token\":\"The token to use as the payment currency.\",\"userData\":\"Optional extra user input data.\"}},\"start()\":{\"details\":\"Emits the `Started` event.Emits the `Unpaused` event.Reverts if called by any other than the contract owner.Reverts if the contract has already been started.Reverts if the contract is not paused.\"},\"startedAt()\":{\"returns\":{\"_0\":\"The timestamp when the contract entered the started state.\"}},\"transferOwnership(address)\":{\"details\":\"Reverts if the sender is not the current contract owner.\",\"params\":{\"newOwner\":\"the address of the new owner. Use the zero address to renounce the ownership.\"}},\"unpause()\":{\"details\":\"Emits the `Unpaused` event.Reverts if called by any other than the contract owner.Reverts if the contract has not been started yet.Reverts if the contract is not paused.\"},\"updateSkuPricing(bytes32,address[],uint256[])\":{\"details\":\"Reverts if called by any other than the contract owner.Reverts if `tokens` and `prices` have different lengths.Reverts if `sku` does not exist.Reverts if one of the `tokens` is the zero address.Reverts if the update results in too many tokens for the SKU.Emits the `SkuPricingUpdate` event.\",\"params\":{\"prices\":\"The list of prices to apply for each payment token.  Zero price values are used to disable a payment token.\",\"sku\":\"The identifier of the SKU.\",\"tokens\":\"The list of payment tokens to update.  If empty, disable all the existing payment tokens.\"}}},\"stateVariables\":{\"SUPPLY_UNLIMITED\":{\"details\":\"MUST NOT be zero.\",\"return\":\"the magic value used to represent an infinite, never-decreasing SKU's supply.\"},\"TOKEN_ETH\":{\"details\":\"MUST NOT be the zero address.\",\"return\":\"the magic value used to represent the ETH payment token.\"}},\"title\":\"Sale An abstract base sale contract with a minimal implementation of ISale and administration functions.  A minimal implementation of the `_validation`, `_delivery` and `notification` life cycle step functions  are provided, but the inheriting contract must implement `_pricing` and `_payment`.\",\"version\":1},\"userdoc\":{\"events\":{\"MagicValues(bytes32[],bytes32[])\":{\"notice\":\"Event emitted to notify about the magic values necessary for interfacing with this contract.\"},\"OwnershipTransferred(address,address)\":{\"notice\":\"Event emited when ownership of a contract changes.\"},\"Purchase(address,address,address,bytes32,uint256,bytes,uint256,bytes)\":{\"notice\":\"Event emitted to notify about a purchase.\"},\"SkuCreation(bytes32,uint256,uint256,address)\":{\"notice\":\"Event emitted to notify about the creation of a SKU.\"},\"SkuPricingUpdate(bytes32,address[],uint256[])\":{\"notice\":\"Event emitted to notify about a change in the pricing of a SKU.\"}},\"kind\":\"user\",\"methods\":{\"SUPPLY_UNLIMITED()\":{\"notice\":\"Returns the magic value used to represent an infinite, never-decreasing SKU's supply.\"},\"TOKEN_ETH()\":{\"notice\":\"Returns the magic value used to represent the ETH payment token.\"},\"constructor\":{\"notice\":\"Constructor.\"},\"estimatePurchase(address,address,bytes32,uint256,bytes)\":{\"notice\":\"Estimates the computed final total amount to pay for a purchase, including any potential discount.\"},\"getSkuInfo(bytes32)\":{\"notice\":\"Returns the information relative to a SKU.\"},\"getSkus()\":{\"notice\":\"Returns the list of created SKU identifiers.\"},\"owner()\":{\"notice\":\"Gets the address of the current contract owner.\"},\"pause()\":{\"notice\":\"Pauses the contract.\"},\"purchaseFor(address,address,bytes32,uint256,bytes)\":{\"notice\":\"Performs a purchase.\"},\"start()\":{\"notice\":\"Actvates, or 'starts', the contract.\"},\"startedAt()\":{\"notice\":\"Returns the timestamp when the contract entered the started state.\"},\"transferOwnership(address)\":{\"notice\":\"See {IERC173-transferOwnership(address)}\"},\"unpause()\":{\"notice\":\"Resumes the contract.\"},\"updateSkuPricing(bytes32,address[],uint256[])\":{\"notice\":\"Sets the token prices for the specified product SKU.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/sale/abstract/Sale.sol\":\"Sale\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":2000},\"remappings\":[]},\"sources\":{\"@animoca/ethereum-contracts-core-1.1.2/contracts/access/IERC173.sol\":{\"keccak256\":\"0xeb8a2c766577e782ad66ce8591a8d206b0f37b657754cc7a43beeb2d9343873b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3b404032cb4e21bae47b5e9af1290e41117040b10f69e3b2f93522b97e329b59\",\"dweb:/ipfs/QmRJHYkkvWcXGuFJdbqV18yh9QUk5g4zETrrxD2HnU3iRw\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/access/Ownable.sol\":{\"keccak256\":\"0xbfd1129669bb7c154ee84b3aa1484e421ca68cb725c1039a897629631fd8b096\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://edc634aeae7272726745b1cbbf116dfdde51833b71a143e94fe7de89e9b14566\",\"dweb:/ipfs/QmXtXckxdFM3VeLvsjMWhqt44WAf7XKVYKt9bUT7pyWbjH\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/algo/EnumMap.sol\":{\"keccak256\":\"0x12716c299c0965f4f87c2792cda2bd6029ba629c1172cdfef08d95cb2d7c283f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8d17c9bcb9bb0b9f399f6366f85b4db981df6e319f90b1b84910d6c44a79d032\",\"dweb:/ipfs/QmcqU3Gj8BP88yRV571GyCcW2UAjxq2xiqRofXFKYzkRXT\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/algo/EnumSet.sol\":{\"keccak256\":\"0x0aaea4634a7c64ef61b1ee8380912084427b45b6b4fc254b76d4b78e39f92d35\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://356a344f770d238dd864e8530d2ee05e350f269346cdf02432bc767e90520ce1\",\"dweb:/ipfs/QmfQfasYUY69X4wnzizPqT8P24YZTAPQGgFQErsSzV5sva\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/lifecycle/Pausable.sol\":{\"keccak256\":\"0xaa32d2e66a8edb68c64ffab1db69925248cf3f774c40b062e1e8ff2f4d5eebed\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://37451b151d862be6413ee1d18e3500a9100128f09926a2260d0ea058c3148d8a\",\"dweb:/ipfs/QmNLsaNioeA4LK8fVpqvSkQrCob1DkENcqQUurqDQbQK3G\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/lifecycle/Startable.sol\":{\"keccak256\":\"0x87e273577d4716cbbb325f03ec91207e1022bb7f56cdcda56593c603d2b4592f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d305d7c885971e1b82a363b4c9237c4201390610621a67605b89694ca9680e35\",\"dweb:/ipfs/QmWZX1cEfsfQSoEjBgBaBn3rKJxfyaJMpJyofpM9LG4tEp\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/metatx/ManagedIdentity.sol\":{\"keccak256\":\"0xe544b34375f19f9d1ad6e309f2fc56849263cc3c3c77009f6b38782f7dea9971\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3eb04bbf1c13ca82971c1cb2fdd96a23e2dfaa5df6a7d3b7e773dd3a760cf4e4\",\"dweb:/ipfs/QmXArzbKQgsMebfYVSQtaCLAs3rp3FYp6MKjSQnZoGDnjf\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/payment/PayoutWallet.sol\":{\"keccak256\":\"0x45ef7f68177cb61463f0ac759782f490821917fac3a71a18263c38193a9c6229\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://67839b4cc5897d723099ebfd8e0593e809b02cf422056efc1497f88dd7abb415\",\"dweb:/ipfs/QmYFRXvggoT8RzWB7SSJmfaBY3xkoVYNaGotTLBxjXqqxx\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/utils/types/AddressIsContract.sol\":{\"keccak256\":\"0x08373f750eedc1226b22b8ab1e156b0689c463590fa7dc40e99329b2da7b5d47\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fac8cdd7be4a83b47b18c8a48c1b1779a2590118049734665a6de91e77f27d35\",\"dweb:/ipfs/QmcAobvMpD5TisPTQSihPhywmVbPv1jDhffJCaZptM7YLv\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0xcc78a17dd88fa5a2edc60c8489e2f405c0913b377216a5b26b35656b2d0dab52\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://526dc85e1f9b9b45830e202568d267d93dde7a4fcccf4ad7798dadcd92304d3c\",\"dweb:/ipfs/QmaoXMB972J3cSDLtBq3xBo4jLwqD2uzXTwujtSPqkYVhR\"]},\"contracts/sale/abstract/PurchaseLifeCycles.sol\":{\"keccak256\":\"0xaa18c1de5628dbd5ff281f06354b0156cb8bd24a6f5b490a787931c374266f6a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2e0731a0100fc1bda747176f169cacc5d61d89df1c78884d8843a834d58f7dcd\",\"dweb:/ipfs/QmZRDAxcvQ9QySqnmQLVM1i797NCqSJrJjKUneEmTufXBQ\"]},\"contracts/sale/abstract/Sale.sol\":{\"keccak256\":\"0x32dd01f3ca07c26e834f5784b4f2434c9cf309e3e30b2421a26da16ccf5d0e26\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://009418ea08f714b3f536d09e04d65ec39d3a4e9ba33e554ac8a26036cff8335b\",\"dweb:/ipfs/QmQvMXpCaaAwtHE4qxXYn2rxPgPzqzJM6aGuyz4nut5CH5\"]},\"contracts/sale/interfaces/IPurchaseNotificationsReceiver.sol\":{\"keccak256\":\"0xa85dcec80f528757a52dd66f88ae14845477e3ec733cb4d22af6db71d19e90f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://36e14e08666d5fd2af5b78848a84a11c666c65c94ca46f88e896c041da1dc1c7\",\"dweb:/ipfs/QmYiHM2DBVuX4adJfJMSvdrdfmDooHxhwGtmhNP7k2DY9n\"]},\"contracts/sale/interfaces/ISale.sol\":{\"keccak256\":\"0x0d731f242662465b2aa3ea9fe3581d0e77e3f61601390f68e4c9c75fc2103f5f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2a04d527397a7f75bd1d701fa7af263cb0799ef4d2f32dc44bb6c9598cee3625\",\"dweb:/ipfs/QmRnsakvvkU1yJyviEM8eytdCTUvjqsw1aqzdntycoG2aV\"]}},\"version\":1}"}},"contracts/sale/abstract/SwapSale.sol":{"SwapSale":{"abi":[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32[]","name":"names","type":"bytes32[]"},{"indexed":false,"internalType":"bytes32[]","name":"values","type":"bytes32[]"}],"name":"MagicValues","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":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"payoutWallet_","type":"address"}],"name":"PayoutWalletSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"purchaser","type":"address"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"bytes32","name":"sku","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"quantity","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"userData","type":"bytes"},{"indexed":false,"internalType":"uint256","name":"totalPrice","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"extData","type":"bytes"}],"name":"Purchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"sku","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxQuantityPerPurchase","type":"uint256"},{"indexed":false,"internalType":"address","name":"notificationsReceiver","type":"address"}],"name":"SkuCreation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"sku","type":"bytes32"},{"indexed":false,"internalType":"address[]","name":"tokens","type":"address[]"},{"indexed":false,"internalType":"uint256[]","name":"prices","type":"uint256[]"}],"name":"SkuPricingUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Started","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"PRICE_CONVERT_VIA_ORACLE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE_SWAP_VIA_ORACLE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SUPPLY_UNLIMITED","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOKEN_ETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"conversionRates","outputs":[{"internalType":"uint256[]","name":"rates","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"estimatePurchase","outputs":[{"internalType":"uint256","name":"totalPrice","type":"uint256"},{"internalType":"bytes32[]","name":"pricingData","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"sku","type":"bytes32"}],"name":"getSkuInfo","outputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"uint256","name":"remainingSupply","type":"uint256"},{"internalType":"uint256","name":"maxQuantityPerPurchase","type":"uint256"},{"internalType":"address","name":"notificationsReceiver","type":"address"},{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"prices","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSkus","outputs":[{"internalType":"bytes32[]","name":"skus","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payoutWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"purchaseFor","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"referenceToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"payoutWallet_","type":"address"}],"name":"setPayoutWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"start","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256","name":"referenceAmount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"swapRates","outputs":[{"internalType":"uint256[]","name":"rates","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"prices","type":"uint256[]"}],"name":"updateSkuPricing","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"PRICE_CONVERT_VIA_ORACLE()":"9865bcc8","PRICE_SWAP_VIA_ORACLE()":"579f2c77","SUPPLY_UNLIMITED()":"9e049545","TOKEN_ETH()":"5c4fafc7","conversionRates(address[],bytes)":"c7b778db","estimatePurchase(address,address,bytes32,uint256,bytes)":"1323b066","getSkuInfo(bytes32)":"2a8a45bc","getSkus()":"61bd3851","owner()":"8da5cb5b","pause()":"8456cb59","paused()":"5c975abb","payoutWallet()":"8488bb4e","purchaseFor(address,address,bytes32,uint256,bytes)":"a963b257","referenceToken()":"1265b651","setPayoutWallet(address)":"6b8f9c43","start()":"be9a6555","startedAt()":"f21f537d","swapRates(address[],uint256,bytes)":"bda4c5ab","transferOwnership(address)":"f2fde38b","unpause()":"3f4ba83a","updateSkuPricing(bytes32,address[],uint256[])":"5e6e9f70"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32[]\",\"name\":\"names\",\"type\":\"bytes32[]\"},{\"indexed\":false,\"internalType\":\"bytes32[]\",\"name\":\"values\",\"type\":\"bytes32[]\"}],\"name\":\"MagicValues\",\"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\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"payoutWallet_\",\"type\":\"address\"}],\"name\":\"PayoutWalletSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"purchaser\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalPrice\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extData\",\"type\":\"bytes\"}],\"name\":\"Purchase\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"maxQuantityPerPurchase\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"notificationsReceiver\",\"type\":\"address\"}],\"name\":\"SkuCreation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"prices\",\"type\":\"uint256[]\"}],\"name\":\"SkuPricingUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Started\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"PRICE_CONVERT_VIA_ORACLE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PRICE_SWAP_VIA_ORACLE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SUPPLY_UNLIMITED\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TOKEN_ETH\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"conversionRates\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"rates\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"estimatePurchase\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalPrice\",\"type\":\"uint256\"},{\"internalType\":\"bytes32[]\",\"name\":\"pricingData\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"}],\"name\":\"getSkuInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"remainingSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxQuantityPerPurchase\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"notificationsReceiver\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"prices\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSkus\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"skus\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"payoutWallet\",\"outputs\":[{\"internalType\":\"address payable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"purchaseFor\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"referenceToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"payoutWallet_\",\"type\":\"address\"}],\"name\":\"setPayoutWallet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"start\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"referenceAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"swapRates\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"rates\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"prices\",\"type\":\"uint256[]\"}],\"name\":\"updateSkuPricing\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Emits the `MagicValues` event.Emits the `Paused` event.\",\"params\":{\"payoutWallet_\":\"The payout wallet.\",\"referenceToken\":\"The token to use for oracle-based token swaps.\",\"skusCapacity\":\"The cap for the number of managed SKUs.\",\"tokensPerSkuCapacity\":\"The cap for the number of tokens managed per SKU.\"}},\"conversionRates(address[],bytes)\":{\"details\":\"Reverts if the oracle does not provide a conversion rate for one of the token pairs.\",\"params\":{\"data\":\"Additional data with no specified format for deriving the conversion rates.\",\"tokens\":\"The list of tokens to retrieve the conversion rates for.\"},\"returns\":{\"rates\":\"The conversion rates for the `tokens`/`referenceToken` pairs, retrieved via the oracle.\"}},\"estimatePurchase(address,address,bytes32,uint256,bytes)\":{\"details\":\"This function MUST compute the same price as `purchaseFor` would in identical conditions (same arguments, same point in time).If an implementer contract uses the `pricingData` field, it SHOULD document how to interpret the values.Reverts if the sale has not started.Reverts if the sale is paused.Reverts if `recipient` is the zero address.Reverts if `token` is the zero address.Reverts if `quantity` is zero.Reverts if `quantity` is greater than the maximum purchase quantity.Reverts if `quantity` is greater than the remaining supply.Reverts if `sku` does not exist.Reverts if `sku` exists but does not have a price set for `token`.\",\"params\":{\"quantity\":\"The quantity used to calculate the total price amount.\",\"recipient\":\"The recipient of the purchase used to calculate the total price amount.\",\"sku\":\"The identifier of the SKU used to calculate the total price amount.\",\"token\":\"The payment token used to calculate the total price amount.\",\"userData\":\"Optional extra user input data.\"},\"returns\":{\"pricingData\":\"Implementation-specific extra pricing data, such as details about discounts applied.  If not empty, the implementer MUST document how to interepret the values.\",\"totalPrice\":\"The computed total price.\"}},\"getSkuInfo(bytes32)\":{\"details\":\"WARNING: it is the responsibility of the implementer to ensure that the number of payment tokens is bounded, so that this function does not run out of gas.Reverts if `sku` does not exist.\",\"params\":{\"sku\":\"The SKU identifier.\"},\"returns\":{\"maxQuantityPerPurchase\":\"The maximum allowed quantity for a single purchase.\",\"notificationsReceiver\":\"The address of a contract on which to call the `onPurchaseNotificationReceived` function.\",\"prices\":\"The list of associated prices for each of the `tokens`.\",\"remainingSupply\":\"The remaining supply for sale.\",\"tokens\":\"The list of supported payment tokens.\",\"totalSupply\":\"The initial total supply for sale.\"}},\"getSkus()\":{\"returns\":{\"skus\":\"the list of created SKU identifiers.\"}},\"pause()\":{\"details\":\"Emits the `Paused` event.Reverts if called by any other than the contract owner.Reverts if the contract has not been started yet.Reverts if the contract is already paused.\"},\"purchaseFor(address,address,bytes32,uint256,bytes)\":{\"details\":\"Reverts if the sale has not started.Reverts if the sale is paused.Reverts if `recipient` is the zero address.Reverts if `token` is the zero address.Reverts if `quantity` is zero.Reverts if `quantity` is greater than the maximum purchase quantity.Reverts if `quantity` is greater than the remaining supply.Reverts if `sku` does not exist.Reverts if `sku` exists but does not have a price set for `token`.Emits the Purchase event.\",\"params\":{\"quantity\":\"The quantity to purchase.\",\"recipient\":\"The recipient of the purchase.\",\"sku\":\"The identifier of the SKU to purchase.\",\"token\":\"The token to use as the payment currency.\",\"userData\":\"Optional extra user input data.\"}},\"start()\":{\"details\":\"Emits the `Started` event.Emits the `Unpaused` event.Reverts if called by any other than the contract owner.Reverts if the contract has already been started.Reverts if the contract is not paused.\"},\"startedAt()\":{\"returns\":{\"_0\":\"The timestamp when the contract entered the started state.\"}},\"swapRates(address[],uint256,bytes)\":{\"details\":\"Reverts if the oracle does not provide a swap rate for one of the token pairs.\",\"params\":{\"data\":\"Additional data with no specified format for deriving the swap rates.\",\"referenceAmount\":\"The amount of `referenceToken` to retrieve the swap rates for.\",\"tokens\":\"The list of tokens to retrieve the swap rates for.\"},\"returns\":{\"rates\":\"The swap rates for the `tokens`/`referenceToken` pairs, retrieved via the oracle.\"}},\"transferOwnership(address)\":{\"details\":\"Reverts if the sender is not the current contract owner.\",\"params\":{\"newOwner\":\"the address of the new owner. Use the zero address to renounce the ownership.\"}},\"unpause()\":{\"details\":\"Emits the `Unpaused` event.Reverts if called by any other than the contract owner.Reverts if the contract has not been started yet.Reverts if the contract is not paused.\"},\"updateSkuPricing(bytes32,address[],uint256[])\":{\"details\":\"Reverts if called by any other than the contract owner.Reverts if `tokens` and `prices` have different lengths.Reverts if `sku` does not exist.Reverts if one of the `tokens` is the zero address.Reverts if the update results in too many tokens for the SKU.Emits the `SkuPricingUpdate` event.\",\"params\":{\"prices\":\"The list of prices to apply for each payment token.  Zero price values are used to disable a payment token.\",\"sku\":\"The identifier of the SKU.\",\"tokens\":\"The list of payment tokens to update.  If empty, disable all the existing payment tokens.\"}}},\"stateVariables\":{\"PRICE_SWAP_VIA_ORACLE\":{\"details\":\"MUST NOT be zero. SHOULD BE a prohibitively big value, so that it doesn\\u2019t collide with a possible price value.\",\"return\":\"The price magic value used to represent an oracle-based token swap pricing.\"}},\"title\":\"SwapSale An OracleSale which implements support for an oracle-based token swap pricing strategy. The  final implementer is responsible for implementing any additional pricing and/or delivery logic. PurchaseData.pricingData:  - a zero length array for fixed pricing data.  - a non-zero length array for oracle-based pricing data  - [0] uint256: the uninterpolated unit price (i.e. magic value).  - [1] uint256: the token conversion/swap rate used for oracle-based pricing. PurchaseData.paymentData:  - [0] uint256: the actual payment price in terms of the purchase token.\",\"version\":1},\"userdoc\":{\"events\":{\"MagicValues(bytes32[],bytes32[])\":{\"notice\":\"Event emitted to notify about the magic values necessary for interfacing with this contract.\"},\"OwnershipTransferred(address,address)\":{\"notice\":\"Event emited when ownership of a contract changes.\"},\"Purchase(address,address,address,bytes32,uint256,bytes,uint256,bytes)\":{\"notice\":\"Event emitted to notify about a purchase.\"},\"SkuCreation(bytes32,uint256,uint256,address)\":{\"notice\":\"Event emitted to notify about the creation of a SKU.\"},\"SkuPricingUpdate(bytes32,address[],uint256[])\":{\"notice\":\"Event emitted to notify about a change in the pricing of a SKU.\"}},\"kind\":\"user\",\"methods\":{\"PRICE_CONVERT_VIA_ORACLE()\":{\"notice\":\"Returns the price magic value used to represent an oracle-based token conversion pricing.\"},\"PRICE_SWAP_VIA_ORACLE()\":{\"notice\":\"Returns the price magic value used to represent an oracle-based token swap pricing.\"},\"SUPPLY_UNLIMITED()\":{\"notice\":\"Returns the magic value used to represent an infinite, never-decreasing SKU's supply.\"},\"TOKEN_ETH()\":{\"notice\":\"Returns the magic value used to represent the ETH payment token.\"},\"constructor\":{\"notice\":\"Constructor.\"},\"conversionRates(address[],bytes)\":{\"notice\":\"Retrieves the token conversion rates for the `tokens`/`referenceToken` pairs via the oracle.\"},\"estimatePurchase(address,address,bytes32,uint256,bytes)\":{\"notice\":\"Estimates the computed final total amount to pay for a purchase, including any potential discount.\"},\"getSkuInfo(bytes32)\":{\"notice\":\"Returns the information relative to a SKU.\"},\"getSkus()\":{\"notice\":\"Returns the list of created SKU identifiers.\"},\"owner()\":{\"notice\":\"Gets the address of the current contract owner.\"},\"pause()\":{\"notice\":\"Pauses the contract.\"},\"purchaseFor(address,address,bytes32,uint256,bytes)\":{\"notice\":\"Performs a purchase.\"},\"start()\":{\"notice\":\"Actvates, or 'starts', the contract.\"},\"startedAt()\":{\"notice\":\"Returns the timestamp when the contract entered the started state.\"},\"swapRates(address[],uint256,bytes)\":{\"notice\":\"Retrieves the token swap rates for the `tokens`/`referenceToken` pairs via the oracle.\"},\"transferOwnership(address)\":{\"notice\":\"See {IERC173-transferOwnership(address)}\"},\"unpause()\":{\"notice\":\"Resumes the contract.\"},\"updateSkuPricing(bytes32,address[],uint256[])\":{\"notice\":\"Sets the token prices for the specified product SKU.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/sale/abstract/SwapSale.sol\":\"SwapSale\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":2000},\"remappings\":[]},\"sources\":{\"@animoca/ethereum-contracts-core-1.1.2/contracts/access/IERC173.sol\":{\"keccak256\":\"0xeb8a2c766577e782ad66ce8591a8d206b0f37b657754cc7a43beeb2d9343873b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3b404032cb4e21bae47b5e9af1290e41117040b10f69e3b2f93522b97e329b59\",\"dweb:/ipfs/QmRJHYkkvWcXGuFJdbqV18yh9QUk5g4zETrrxD2HnU3iRw\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/access/Ownable.sol\":{\"keccak256\":\"0xbfd1129669bb7c154ee84b3aa1484e421ca68cb725c1039a897629631fd8b096\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://edc634aeae7272726745b1cbbf116dfdde51833b71a143e94fe7de89e9b14566\",\"dweb:/ipfs/QmXtXckxdFM3VeLvsjMWhqt44WAf7XKVYKt9bUT7pyWbjH\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/algo/EnumMap.sol\":{\"keccak256\":\"0x12716c299c0965f4f87c2792cda2bd6029ba629c1172cdfef08d95cb2d7c283f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8d17c9bcb9bb0b9f399f6366f85b4db981df6e319f90b1b84910d6c44a79d032\",\"dweb:/ipfs/QmcqU3Gj8BP88yRV571GyCcW2UAjxq2xiqRofXFKYzkRXT\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/algo/EnumSet.sol\":{\"keccak256\":\"0x0aaea4634a7c64ef61b1ee8380912084427b45b6b4fc254b76d4b78e39f92d35\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://356a344f770d238dd864e8530d2ee05e350f269346cdf02432bc767e90520ce1\",\"dweb:/ipfs/QmfQfasYUY69X4wnzizPqT8P24YZTAPQGgFQErsSzV5sva\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/lifecycle/Pausable.sol\":{\"keccak256\":\"0xaa32d2e66a8edb68c64ffab1db69925248cf3f774c40b062e1e8ff2f4d5eebed\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://37451b151d862be6413ee1d18e3500a9100128f09926a2260d0ea058c3148d8a\",\"dweb:/ipfs/QmNLsaNioeA4LK8fVpqvSkQrCob1DkENcqQUurqDQbQK3G\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/lifecycle/Startable.sol\":{\"keccak256\":\"0x87e273577d4716cbbb325f03ec91207e1022bb7f56cdcda56593c603d2b4592f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d305d7c885971e1b82a363b4c9237c4201390610621a67605b89694ca9680e35\",\"dweb:/ipfs/QmWZX1cEfsfQSoEjBgBaBn3rKJxfyaJMpJyofpM9LG4tEp\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/metatx/ManagedIdentity.sol\":{\"keccak256\":\"0xe544b34375f19f9d1ad6e309f2fc56849263cc3c3c77009f6b38782f7dea9971\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3eb04bbf1c13ca82971c1cb2fdd96a23e2dfaa5df6a7d3b7e773dd3a760cf4e4\",\"dweb:/ipfs/QmXArzbKQgsMebfYVSQtaCLAs3rp3FYp6MKjSQnZoGDnjf\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/payment/PayoutWallet.sol\":{\"keccak256\":\"0x45ef7f68177cb61463f0ac759782f490821917fac3a71a18263c38193a9c6229\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://67839b4cc5897d723099ebfd8e0593e809b02cf422056efc1497f88dd7abb415\",\"dweb:/ipfs/QmYFRXvggoT8RzWB7SSJmfaBY3xkoVYNaGotTLBxjXqqxx\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/utils/ERC20Wrapper.sol\":{\"keccak256\":\"0x57922168ce32d2260022c0c7075137940e7d3cf0bb0d2213e62194050fbcf392\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b2dbba2defa32aa9edb54797f9b3f4ec1c1e5f71193deb99289136fa2f02ad79\",\"dweb:/ipfs/QmbUbzdwyWwjw3VW1o5oBKyuG9cFN7n8j55P8MDAg3sCuK\"]},\"@animoca/ethereum-contracts-core-1.1.2/contracts/utils/types/AddressIsContract.sol\":{\"keccak256\":\"0x08373f750eedc1226b22b8ab1e156b0689c463590fa7dc40e99329b2da7b5d47\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fac8cdd7be4a83b47b18c8a48c1b1779a2590118049734665a6de91e77f27d35\",\"dweb:/ipfs/QmcAobvMpD5TisPTQSihPhywmVbPv1jDhffJCaZptM7YLv\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0xcc78a17dd88fa5a2edc60c8489e2f405c0913b377216a5b26b35656b2d0dab52\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://526dc85e1f9b9b45830e202568d267d93dde7a4fcccf4ad7798dadcd92304d3c\",\"dweb:/ipfs/QmaoXMB972J3cSDLtBq3xBo4jLwqD2uzXTwujtSPqkYVhR\"]},\"contracts/sale/FixedPricesSale.sol\":{\"keccak256\":\"0xad902ccee0e2a42eea07b4c1e011202096daff92b43158a1569d139caf93b3f0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a702cc102db63b18e0581da5d6c01ee9320cec4b690c3117b4f77316fce45185\",\"dweb:/ipfs/QmWL7kh3kBSxDYjVoq9gN79UpKLrRBgJCHqquyaCE8UWhe\"]},\"contracts/sale/abstract/OracleSale.sol\":{\"keccak256\":\"0x7a5dae50fe750564347bfcd4eef33b552b901d7c688db6fae8c8e2dd442cce54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e3388afb44cf6b074cf58820e142b43ce4614bed6a004c4275f6ab05da984449\",\"dweb:/ipfs/QmbucAD5Q7cSh4Ryz8cFt7Yx4KdsXMhqcHofR75oLBuMW2\"]},\"contracts/sale/abstract/PurchaseLifeCycles.sol\":{\"keccak256\":\"0xaa18c1de5628dbd5ff281f06354b0156cb8bd24a6f5b490a787931c374266f6a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2e0731a0100fc1bda747176f169cacc5d61d89df1c78884d8843a834d58f7dcd\",\"dweb:/ipfs/QmZRDAxcvQ9QySqnmQLVM1i797NCqSJrJjKUneEmTufXBQ\"]},\"contracts/sale/abstract/Sale.sol\":{\"keccak256\":\"0x32dd01f3ca07c26e834f5784b4f2434c9cf309e3e30b2421a26da16ccf5d0e26\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://009418ea08f714b3f536d09e04d65ec39d3a4e9ba33e554ac8a26036cff8335b\",\"dweb:/ipfs/QmQvMXpCaaAwtHE4qxXYn2rxPgPzqzJM6aGuyz4nut5CH5\"]},\"contracts/sale/abstract/SwapSale.sol\":{\"keccak256\":\"0x29bdb7a4ec88520205f8e01817e5ae0df65bf72f225e02d69b3d15ce8cfdb804\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7ee6b697e3a6c3fb462e18d3cc22ae4d8c16891b817cbe997b96de404a0eb498\",\"dweb:/ipfs/QmUSBpTt98qsnLeNWVVh2U2tNFcmjsaAUjgrYfchw7ZhGR\"]},\"contracts/sale/interfaces/IOracleSale.sol\":{\"keccak256\":\"0x754fdf88f73519515a9d3748ea136b0e1137095969e91bf7e7b4cf9afb78d164\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://04a0f5ae476580e9a4011d7b6f6e00940498de2be550da0df88fc35ca3b5241c\",\"dweb:/ipfs/QmSjaAFzMbR38ofQtgvyxYKN8N4b7nY4hZAfXkNxe3HSyq\"]},\"contracts/sale/interfaces/IPurchaseNotificationsReceiver.sol\":{\"keccak256\":\"0xa85dcec80f528757a52dd66f88ae14845477e3ec733cb4d22af6db71d19e90f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://36e14e08666d5fd2af5b78848a84a11c666c65c94ca46f88e896c041da1dc1c7\",\"dweb:/ipfs/QmYiHM2DBVuX4adJfJMSvdrdfmDooHxhwGtmhNP7k2DY9n\"]},\"contracts/sale/interfaces/ISale.sol\":{\"keccak256\":\"0x0d731f242662465b2aa3ea9fe3581d0e77e3f61601390f68e4c9c75fc2103f5f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2a04d527397a7f75bd1d701fa7af263cb0799ef4d2f32dc44bb6c9598cee3625\",\"dweb:/ipfs/QmRnsakvvkU1yJyviEM8eytdCTUvjqsw1aqzdntycoG2aV\"]},\"contracts/sale/interfaces/ISwapSale.sol\":{\"keccak256\":\"0x262f0514039e101fdf36f273cfc28bc9000bcc46e53dc7bc7a2dd744075ef820\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://698bcc5dec5dc61277bc847b18a97a869a3657f2943f03f56e01089fa2f2c70f\",\"dweb:/ipfs/QmdAeUYY28Z1biqHPrR9yBLHdKQTm3VFECWJ1Cquxxs4zQ\"]}},\"version\":1}"}},"contracts/sale/interfaces/IOracleSale.sol":{"IOracleSale":{"abi":[{"inputs":[],"name":"PRICE_CONVERT_VIA_ORACLE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"conversionRates","outputs":[{"internalType":"uint256[]","name":"rates","type":"uint256[]"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"PRICE_CONVERT_VIA_ORACLE()":"9865bcc8","conversionRates(address[],bytes)":"c7b778db"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"PRICE_CONVERT_VIA_ORACLE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"conversionRates\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"rates\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"PRICE_CONVERT_VIA_ORACLE()\":{\"details\":\"MUST NOT be zero. SHOULD BE a prohibitively big value, so that it doesn\\u2019t collide with a possible price value.\",\"returns\":{\"_0\":\"The price magic value used to represent an oracle-based token conversion pricing.\"}},\"conversionRates(address[],bytes)\":{\"details\":\"Reverts if the oracle does not provide a conversion rate for one of the token pairs.\",\"params\":{\"data\":\"Additional data with no specified format for deriving the conversion rates.\",\"tokens\":\"The list of tokens to retrieve the conversion rates for.\"},\"returns\":{\"rates\":\"The conversion rates for the `tokens`/`referenceToken` pairs, retrieved via the oracle.\"}}},\"title\":\"IOracleSale An ISale which can manage token conversion rates through an oracle.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"PRICE_CONVERT_VIA_ORACLE()\":{\"notice\":\"Returns the price magic value used to represent an oracle-based token conversion pricing.\"},\"conversionRates(address[],bytes)\":{\"notice\":\"Retrieves the token conversion rates for the `tokens`/`referenceToken` pairs via the oracle.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/sale/interfaces/IOracleSale.sol\":\"IOracleSale\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":2000},\"remappings\":[]},\"sources\":{\"contracts/sale/interfaces/IOracleSale.sol\":{\"keccak256\":\"0x754fdf88f73519515a9d3748ea136b0e1137095969e91bf7e7b4cf9afb78d164\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://04a0f5ae476580e9a4011d7b6f6e00940498de2be550da0df88fc35ca3b5241c\",\"dweb:/ipfs/QmSjaAFzMbR38ofQtgvyxYKN8N4b7nY4hZAfXkNxe3HSyq\"]}},\"version\":1}"}},"contracts/sale/interfaces/IPurchaseNotificationsReceiver.sol":{"IPurchaseNotificationsReceiver":{"abi":[{"inputs":[{"internalType":"address","name":"purchaser","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"},{"internalType":"uint256","name":"totalPrice","type":"uint256"},{"internalType":"bytes32[]","name":"pricingData","type":"bytes32[]"},{"internalType":"bytes32[]","name":"paymentData","type":"bytes32[]"},{"internalType":"bytes32[]","name":"deliveryData","type":"bytes32[]"}],"name":"onPurchaseNotificationReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"onPurchaseNotificationReceived(address,address,address,bytes32,uint256,bytes,uint256,bytes32[],bytes32[],bytes32[])":"61eceae8"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"purchaser\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"totalPrice\",\"type\":\"uint256\"},{\"internalType\":\"bytes32[]\",\"name\":\"pricingData\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"paymentData\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"deliveryData\",\"type\":\"bytes32[]\"}],\"name\":\"onPurchaseNotificationReceived\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"onPurchaseNotificationReceived(address,address,address,bytes32,uint256,bytes,uint256,bytes32[],bytes32[],bytes32[])\":{\"details\":\"This function MUST return the function selector, otherwise the caller will revert the transaction.  The selector to be returned can be obtained as `this.onPurchaseNotificationReceived.selector`This function MAY throw.\",\"params\":{\"deliveryData\":\"Implementation-specific extra delivery data, such as purchase receipts.\",\"paymentData\":\"Implementation-specific extra payment data, such as conversion rates.\",\"pricingData\":\"Implementation-specific extra pricing data, such as details about discounts applied.\",\"purchaser\":\"The purchaser of the purchase.\",\"quantity\":\"The quantity to purchase.\",\"recipient\":\"The recipient of the purchase.\",\"sku\":\"The identifier of the SKU to purchase.\",\"token\":\"The token to use as the payment currency.\",\"totalPrice\":\"The total price paid.\",\"userData\":\"Optional extra user input data.\"},\"returns\":{\"_0\":\"`bytes4(keccak256(  \\\"onPurchaseNotificationReceived(address,address,address,bytes32,uint256,bytes,uint256,bytes32[],bytes32[],bytes32[])\\\"))`\"}}},\"title\":\"IPurchaseNotificationsReceiver Interface for any contract that wants to support purchase notifications from a Sale contract.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"onPurchaseNotificationReceived(address,address,address,bytes32,uint256,bytes,uint256,bytes32[],bytes32[],bytes32[])\":{\"notice\":\"Handles the receipt of a purchase notification.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/sale/interfaces/IPurchaseNotificationsReceiver.sol\":\"IPurchaseNotificationsReceiver\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":2000},\"remappings\":[]},\"sources\":{\"contracts/sale/interfaces/IPurchaseNotificationsReceiver.sol\":{\"keccak256\":\"0xa85dcec80f528757a52dd66f88ae14845477e3ec733cb4d22af6db71d19e90f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://36e14e08666d5fd2af5b78848a84a11c666c65c94ca46f88e896c041da1dc1c7\",\"dweb:/ipfs/QmYiHM2DBVuX4adJfJMSvdrdfmDooHxhwGtmhNP7k2DY9n\"]}},\"version\":1}"}},"contracts/sale/interfaces/ISale.sol":{"ISale":{"abi":[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32[]","name":"names","type":"bytes32[]"},{"indexed":false,"internalType":"bytes32[]","name":"values","type":"bytes32[]"}],"name":"MagicValues","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"purchaser","type":"address"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"bytes32","name":"sku","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"quantity","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"userData","type":"bytes"},{"indexed":false,"internalType":"uint256","name":"totalPrice","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"extData","type":"bytes"}],"name":"Purchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"sku","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxQuantityPerPurchase","type":"uint256"},{"indexed":false,"internalType":"address","name":"notificationsReceiver","type":"address"}],"name":"SkuCreation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"sku","type":"bytes32"},{"indexed":false,"internalType":"address[]","name":"tokens","type":"address[]"},{"indexed":false,"internalType":"uint256[]","name":"prices","type":"uint256[]"}],"name":"SkuPricingUpdate","type":"event"},{"inputs":[],"name":"SUPPLY_UNLIMITED","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"TOKEN_ETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"estimatePurchase","outputs":[{"internalType":"uint256","name":"totalPrice","type":"uint256"},{"internalType":"bytes32[]","name":"pricingData","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"sku","type":"bytes32"}],"name":"getSkuInfo","outputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"uint256","name":"remainingSupply","type":"uint256"},{"internalType":"uint256","name":"maxQuantityPerPurchase","type":"uint256"},{"internalType":"address","name":"notificationsReceiver","type":"address"},{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"prices","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSkus","outputs":[{"internalType":"bytes32[]","name":"skus","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"bytes32","name":"sku","type":"bytes32"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"purchaseFor","outputs":[],"stateMutability":"payable","type":"function"}],"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"SUPPLY_UNLIMITED()":"9e049545","TOKEN_ETH()":"5c4fafc7","estimatePurchase(address,address,bytes32,uint256,bytes)":"1323b066","getSkuInfo(bytes32)":"2a8a45bc","getSkus()":"61bd3851","purchaseFor(address,address,bytes32,uint256,bytes)":"a963b257"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32[]\",\"name\":\"names\",\"type\":\"bytes32[]\"},{\"indexed\":false,\"internalType\":\"bytes32[]\",\"name\":\"values\",\"type\":\"bytes32[]\"}],\"name\":\"MagicValues\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"purchaser\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalPrice\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extData\",\"type\":\"bytes\"}],\"name\":\"Purchase\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"maxQuantityPerPurchase\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"notificationsReceiver\",\"type\":\"address\"}],\"name\":\"SkuCreation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"prices\",\"type\":\"uint256[]\"}],\"name\":\"SkuPricingUpdate\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"SUPPLY_UNLIMITED\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TOKEN_ETH\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"estimatePurchase\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalPrice\",\"type\":\"uint256\"},{\"internalType\":\"bytes32[]\",\"name\":\"pricingData\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"}],\"name\":\"getSkuInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"remainingSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxQuantityPerPurchase\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"notificationsReceiver\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"prices\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSkus\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"skus\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sku\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"purchaseFor\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"MagicValues(bytes32[],bytes32[])\":{\"params\":{\"names\":\"An array of names for the magic values used by the contract.\",\"values\":\"An array of values for the magic values used by the contract.\"}},\"Purchase(address,address,address,bytes32,uint256,bytes,uint256,bytes)\":{\"params\":{\"extData\":\"Implementation-specific extra purchase data, such as  details about discounts applied, conversion rates, purchase receipts, etc.\",\"purchaser\":\"The initiater and buyer of the purchase.\",\"quantity\":\"The purchased quantity.\",\"recipient\":\"The recipient of the purchase.\",\"sku\":\"The identifier of the purchased SKU.\",\"token\":\"The token used as the currency for the payment.\",\"totalPrice\":\"The amount of `token` paid.\",\"userData\":\"Optional extra user input data.\"}},\"SkuCreation(bytes32,uint256,uint256,address)\":{\"params\":{\"maxQuantityPerPurchase\":\"The maximum allowed quantity for a single purchase.\",\"notificationsReceiver\":\"If not the zero address, the address of a contract on which `onPurchaseNotificationReceived` will be called after  each purchase. If this is the zero address, the call is not enabled.\",\"sku\":\"The identifier of the created SKU.\",\"totalSupply\":\"The initial total supply for sale.\"}},\"SkuPricingUpdate(bytes32,address[],uint256[])\":{\"details\":\"`tokens` and `prices` arrays MUST have the same length.\",\"params\":{\"prices\":\"An array of updated prices for each of the payment tokens.  Zero price values are used for payment tokens being disabled.\",\"sku\":\"The identifier of the updated SKU.\",\"tokens\":\"An array of updated payment tokens. If empty, interpret as all payment tokens being disabled.\"}}},\"kind\":\"dev\",\"methods\":{\"SUPPLY_UNLIMITED()\":{\"details\":\"MUST NOT be zero.\",\"returns\":{\"_0\":\"the magic value used to represent an infinite, never-decreasing SKU's supply.\"}},\"TOKEN_ETH()\":{\"details\":\"MUST NOT be the zero address.\",\"returns\":{\"_0\":\"the magic value used to represent the ETH payment token.\"}},\"estimatePurchase(address,address,bytes32,uint256,bytes)\":{\"details\":\"This function MUST compute the same price as `purchaseFor` would in identical conditions (same arguments, same point in time).If an implementer contract uses the `pricingData` field, it SHOULD document how to interpret the values.Reverts if `recipient` is the zero address.Reverts if `token` is the zero address.Reverts if `quantity` is zero.Reverts if `quantity` is greater than the maximum purchase quantity.Reverts if `quantity` is greater than the remaining supply.Reverts if `sku` does not exist.Reverts if `sku` exists but does not have a price set for `token`.\",\"params\":{\"quantity\":\"The quantity used to calculate the total price amount.\",\"recipient\":\"The recipient of the purchase used to calculate the total price amount.\",\"sku\":\"The identifier of the SKU used to calculate the total price amount.\",\"token\":\"The payment token used to calculate the total price amount.\",\"userData\":\"Optional extra user input data.\"},\"returns\":{\"pricingData\":\"Implementation-specific extra pricing data, such as details about discounts applied.  If not empty, the implementer MUST document how to interepret the values.\",\"totalPrice\":\"The computed total price to pay.\"}},\"getSkuInfo(bytes32)\":{\"details\":\"WARNING: it is the responsibility of the implementer to ensure that the  number of payment tokens is bounded, so that this function does not run out of gas.Reverts if `sku` does not exist.\",\"params\":{\"sku\":\"The SKU identifier.\"},\"returns\":{\"maxQuantityPerPurchase\":\"The maximum allowed quantity for a single purchase.\",\"notificationsReceiver\":\"The address of a contract on which to call the `onPurchaseNotificationReceived` function.\",\"prices\":\"The list of associated prices for each of the `tokens`.\",\"remainingSupply\":\"The remaining supply for sale.\",\"tokens\":\"The list of supported payment tokens.\",\"totalSupply\":\"The initial total supply for sale.\"}},\"getSkus()\":{\"details\":\"WARNING: it is the responsibility of the implementer to ensure that the  number of SKUs is bounded, so that this function does not run out of gas.\",\"returns\":{\"skus\":\"the list of created SKU identifiers.\"}},\"purchaseFor(address,address,bytes32,uint256,bytes)\":{\"details\":\"Reverts if `recipient` is the zero address.Reverts if `token` is the address zero.Reverts if `quantity` is zero.Reverts if `quantity` is greater than the maximum purchase quantity.Reverts if `quantity` is greater than the remaining supply.Reverts if `sku` does not exist.Reverts if `sku` exists but does not have a price set for `token`.Emits the Purchase event.\",\"params\":{\"quantity\":\"The quantity to purchase.\",\"recipient\":\"The recipient of the purchase.\",\"sku\":\"The identifier of the SKU to purchase.\",\"token\":\"The token to use as the payment currency.\",\"userData\":\"Optional extra user input data.\"}}},\"title\":\"ISale An interface for a contract which allows merchants to display products and customers to purchase them.  Products, designated as SKUs, are represented by bytes32 identifiers so that an identifier can carry an  explicit name under the form of a fixed-length string. Each SKU can be priced via up to several payment  tokens which can be ETH and/or ERC20(s). ETH token is represented by the magic value TOKEN_ETH, which means  this value can be used as the 'token' argument of the purchase-related functions to indicate ETH payment.  The total available supply for a SKU is fixed at its creation. The magic value SUPPLY_UNLIMITED is used  to represent a SKU with an infinite, never-decreasing supply. An optional purchase notifications receiver  contract address can be set for a SKU at its creation: if the value is different from the zero address,  the function `onPurchaseNotificationReceived` will be called on this address upon every purchase of the SKU.  This interface is designed to be consistent while managing a variety of implementation scenarios. It is  also intended to be developer-friendly: all vital information is consistently deductible from the events  (backend-oriented), as well as retrievable through calls to public functions (frontend-oriented).\",\"version\":1},\"userdoc\":{\"events\":{\"MagicValues(bytes32[],bytes32[])\":{\"notice\":\"Event emitted to notify about the magic values necessary for interfacing with this contract.\"},\"Purchase(address,address,address,bytes32,uint256,bytes,uint256,bytes)\":{\"notice\":\"Event emitted to notify about a purchase.\"},\"SkuCreation(bytes32,uint256,uint256,address)\":{\"notice\":\"Event emitted to notify about the creation of a SKU.\"},\"SkuPricingUpdate(bytes32,address[],uint256[])\":{\"notice\":\"Event emitted to notify about a change in the pricing of a SKU.\"}},\"kind\":\"user\",\"methods\":{\"SUPPLY_UNLIMITED()\":{\"notice\":\"Returns the magic value used to represent an infinite, never-decreasing SKU's supply.\"},\"TOKEN_ETH()\":{\"notice\":\"Returns the magic value used to represent the ETH payment token.\"},\"estimatePurchase(address,address,bytes32,uint256,bytes)\":{\"notice\":\"Estimates the computed final total amount to pay for a purchase, including any potential discount.\"},\"getSkuInfo(bytes32)\":{\"notice\":\"Returns the information relative to a SKU.\"},\"getSkus()\":{\"notice\":\"Returns the list of created SKU identifiers.\"},\"purchaseFor(address,address,bytes32,uint256,bytes)\":{\"notice\":\"Performs a purchase.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/sale/interfaces/ISale.sol\":\"ISale\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":2000},\"remappings\":[]},\"sources\":{\"contracts/sale/interfaces/ISale.sol\":{\"keccak256\":\"0x0d731f242662465b2aa3ea9fe3581d0e77e3f61601390f68e4c9c75fc2103f5f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2a04d527397a7f75bd1d701fa7af263cb0799ef4d2f32dc44bb6c9598cee3625\",\"dweb:/ipfs/QmRnsakvvkU1yJyviEM8eytdCTUvjqsw1aqzdntycoG2aV\"]}},\"version\":1}"}},"contracts/sale/interfaces/ISwapSale.sol":{"ISwapSale":{"abi":[{"inputs":[],"name":"PRICE_SWAP_VIA_ORACLE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256","name":"referenceAmount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"swapRates","outputs":[{"internalType":"uint256[]","name":"rates","type":"uint256[]"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"PRICE_SWAP_VIA_ORACLE()":"579f2c77","swapRates(address[],uint256,bytes)":"bda4c5ab"}},"metadata":"{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"PRICE_SWAP_VIA_ORACLE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"referenceAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"swapRates\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"rates\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"PRICE_SWAP_VIA_ORACLE()\":{\"details\":\"MUST NOT be zero. SHOULD BE a prohibitively big value, so that it doesn\\u2019t collide with a possible price value.\",\"returns\":{\"_0\":\"The price magic value used to represent an oracle-based token swap pricing.\"}},\"swapRates(address[],uint256,bytes)\":{\"details\":\"Reverts if the oracle does not provide a swap rate for one of the token pairs.\",\"params\":{\"data\":\"Additional data with no specified format for deriving the swap rates.\",\"referenceAmount\":\"The amount of `referenceToken` to retrieve the swap rates for.\",\"tokens\":\"The list of tokens to retrieve the swap rates for.\"},\"returns\":{\"rates\":\"The swap rates for the `tokens`/`referenceToken` pairs, retrieved via the oracle.\"}}},\"title\":\"ISwapSale An IOracleSale which can manage token swaps through an oracle.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"PRICE_SWAP_VIA_ORACLE()\":{\"notice\":\"Returns the price magic value used to represent an oracle-based token swap pricing.\"},\"swapRates(address[],uint256,bytes)\":{\"notice\":\"Retrieves the token swap rates for the `tokens`/`referenceToken` pairs via the oracle.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/sale/interfaces/ISwapSale.sol\":\"ISwapSale\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":2000},\"remappings\":[]},\"sources\":{\"contracts/sale/interfaces/ISwapSale.sol\":{\"keccak256\":\"0x262f0514039e101fdf36f273cfc28bc9000bcc46e53dc7bc7a2dd744075ef820\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://698bcc5dec5dc61277bc847b18a97a869a3657f2943f03f56e01089fa2f2c70f\",\"dweb:/ipfs/QmdAeUYY28Z1biqHPrR9yBLHdKQTm3VFECWJ1Cquxxs4zQ\"]}},\"version\":1}"}}}}}