Skip to content

Instantly share code, notes, and snippets.

@hrkrshnn
Created September 8, 2020 14:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hrkrshnn/d6f1178ec2fcc21f3b40cd2af32edbfc to your computer and use it in GitHub Desktop.
Save hrkrshnn/d6f1178ec2fcc21f3b40cd2af32edbfc to your computer and use it in GitHub Desktop.
Optimized IR:
/*******************************************************
,* WARNING *
,* Solidity to Yul compilation is still EXPERIMENTAL *
,* It can result in LOSS OF FUNDS or worse *
,* !USE AT YOUR OWN RISK! *
,*******************************************************/
object "C_164" {
code {
{
mstore(64, 128)
if callvalue() { revert(0, 0) }
let _1 := datasize("C_164_deployed")
codecopy(0, dataoffset("C_164_deployed"), _1)
return(0, _1)
}
}
object "C_164_deployed" {
code {
{
mstore(64, 128)
let _1 := 4
if iszero(lt(calldatasize(), _1))
{
let _2 := 0
switch shr(224, calldataload(_2))
case 0x0dbe671f {
if callvalue() { revert(_2, _2) }
abi_decode_tuple_(_1, calldatasize())
let _3 := sload(_2)
let memPos := allocateMemory(_2)
return(memPos, sub(abi_encode_tuple_t_uint256__to_t_uint256__fromStack(memPos, _3), memPos))
}
case 0x19da7652 {
if callvalue() { revert(_2, _2) }
let param, param_1, param_2, param_3 := abi_decode_tuple_t_array$_t_uint256_$30_memory_ptrt_array$_t_string_memory_ptr_$dyn_memory_ptrt_uint16t_address(_1, calldatasize())
let vloc__114_mpos, vloc__117_mpos := fun_f6_120()
let memPos_1 := allocateMemory(_2)
return(memPos_1, sub(abi_encode_tuple_t_array$_t_uint16_$200_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__to_t_array$_t_uint16_$200_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__fromStack(memPos_1, vloc__114_mpos, vloc__117_mpos), memPos_1))
}
case 0x3a69a8c8 {
if callvalue() { revert(_2, _2) }
let param_4, param_5, param_6, param_7 := abi_decode_tuple_t_array$_t_uint16_$dyn_memory_ptrt_array$_t_string_memory_ptr_$dyn_memory_ptrt_uint16t_address(_1, calldatasize())
let memPos_2 := allocateMemory(_2)
return(memPos_2, sub(abi_encode_tuple_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__to_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__fromStack(memPos_2, 96, 96), memPos_2))
}
case 0x40b9ccd0 {
if callvalue() { revert(_2, _2) }
let param_8, param_9, param_10, param_11 := abi_decode_tuple_t_array$_t_uint32_$dyn_memory_ptrt_array$_t_string_memory_ptr_$12_memory_ptrt_array$_t_array$_t_bytes_memory_ptr_$2_memory_ptr_$dyn_memory_ptrt_address(_1, calldatasize())
let memPos_3 := allocateMemory(_2)
return(memPos_3, sub(abi_encode_tuple_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__to_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__fromStack(memPos_3, 96, 96), memPos_3))
}
case 0x66941981 {
if callvalue() { revert(_2, _2) }
let param_12, param_13, param_14, param_15 := abi_decode_tuple_t_array$_t_address_$dyn_memory_ptrt_array$_t_string_memory_ptr_$dyn_memory_ptrt_bytes_memory_ptrt_address(_1, calldatasize())
let memPos_4 := allocateMemory(_2)
return(memPos_4, sub(abi_encode_tuple_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__to_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__fromStack(memPos_4, 96, 96), memPos_4))
}
case 0x8f448bde {
if callvalue() { revert(_2, _2) }
let param_16, param_17, param_18, param_19 := abi_decode_tuple_t_array$_t_uint256_$31_memory_ptrt_array$_t_string_memory_ptr_$20_memory_ptrt_contract$_C_$164t_address(_1, calldatasize())
let memPos_5 := allocateMemory(_2)
return(memPos_5, sub(abi_encode_tuple_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__to_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__fromStack(memPos_5, 96, 96), memPos_5))
}
case 0x931538b4 {
if callvalue() { revert(_2, _2) }
let param_20, param_21, param_22, param_23 := abi_decode_tuple_t_array$_t_uint256_$dyn_memory_ptrt_array$_t_string_memory_ptr_$dyn_memory_ptrt_uint16t_address(_1, calldatasize())
let memPos_6 := allocateMemory(_2)
return(memPos_6, sub(abi_encode_tuple_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__to_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__fromStack(memPos_6, 96, 96), memPos_6))
}
case 0x9adbf691 {
if callvalue() { revert(_2, _2) }
pop(abi_decode_tuple_t_uint256(_1, calldatasize()))
let memPos_7 := allocateMemory(_2)
return(memPos_7, sub(abi_encode_tuple_t_uint256__to_t_uint256__fromStack(memPos_7, _2), memPos_7))
}
case 0xc94cc147 {
if callvalue() { revert(_2, _2) }
let param_24, param_25, param_26, param_27 := abi_decode_tuple_t_array$_t_uint256_$32_memory_ptrt_array$_t_string_memory_ptr_$dyn_memory_ptrt_uint32t_address(_1, calldatasize())
let memPos_8 := allocateMemory(_2)
return(memPos_8, sub(abi_encode_tuple_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__to_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__fromStack(memPos_8, 96, 96), memPos_8))
}
case 0xcd580ff3 {
if callvalue() { revert(_2, _2) }
let ret := getter_fun_b_6(abi_decode_tuple_t_uint256(_1, calldatasize()))
let memPos_9 := allocateMemory(_2)
return(memPos_9, sub(abi_encode_tuple_t_uint256__to_t_uint256__fromStack(memPos_9, ret), memPos_9))
}
}
revert(0, 0)
}
function abi_decode_t_address(offset) -> value
{
value := calldataload(offset)
validator_revert_t_address(value)
}
function abi_decode_t_array$_t_array$_t_bytes_memory_ptr_$2_memory_ptr_$dyn_memory_ptr(offset, end) -> array
{
if iszero(slt(add(offset, 0x1f), end)) { revert(array, array) }
let length := calldataload(offset)
array := allocateMemory(array_allocation_size_t_array$_t_address_$dyn_memory_ptr(length))
let dst := array
mstore(array, length)
let _1 := 0x20
dst := add(array, _1)
let src := add(offset, _1)
let i := 0
for { } lt(i, length) { i := add(i, 1) }
{
let _2 := add(offset, calldataload(src))
if iszero(slt(add(_2, 63), end)) { revert(0, 0) }
let _3 := 0x02
let dst_1 := allocateMemory(array_allocation_size_t_array$_t_bytes_memory_ptr_$2_memory_ptr(_3))
let dst_2 := dst_1
let src_1 := add(_2, _1)
let i_1 := 0
for { } lt(i_1, _3) { i_1 := add(i_1, 1) }
{
mstore(dst_1, abi_decode_t_bytes_memory_ptr(add(add(_2, calldataload(src_1)), _1), end))
dst_1 := add(dst_1, _1)
src_1 := add(src_1, _1)
}
mstore(dst, dst_2)
dst := add(dst, _1)
src := add(src, _1)
}
}
function abi_decode_t_array$_t_string_memory_ptr_$12_memory_ptr(offset, end) -> array
{
if iszero(slt(add(offset, 0x1f), end)) { revert(array, array) }
array := allocateMemory(384)
let dst := array
let src := offset
let i := 0
for { } lt(i, 0x0c) { i := add(i, 1) }
{
mstore(dst, abi_decode_t_bytes_memory_ptr(add(offset, calldataload(src)), end))
let _1 := 0x20
dst := add(dst, _1)
src := add(src, _1)
}
}
function abi_decode_t_array$_t_string_memory_ptr_$20_memory_ptr(offset, end) -> array
{
if iszero(slt(add(offset, 0x1f), end)) { revert(array, array) }
array := allocateMemory(640)
let dst := array
let src := offset
let i := 0
for { } lt(i, 0x14) { i := add(i, 1) }
{
mstore(dst, abi_decode_t_bytes_memory_ptr(add(offset, calldataload(src)), end))
let _1 := 0x20
dst := add(dst, _1)
src := add(src, _1)
}
}
function abi_decode_t_array$_t_string_memory_ptr_$dyn_memory_ptr(offset, end) -> array
{
if iszero(slt(add(offset, 0x1f), end)) { revert(array, array) }
let length := calldataload(offset)
array := allocateMemory(array_allocation_size_t_array$_t_address_$dyn_memory_ptr(length))
let dst := array
mstore(array, length)
let _1 := 0x20
dst := add(array, _1)
let src := add(offset, _1)
let i := 0
for { } lt(i, length) { i := add(i, 1) }
{
mstore(dst, abi_decode_t_bytes_memory_ptr(add(add(offset, calldataload(src)), _1), end))
dst := add(dst, _1)
src := add(src, _1)
}
}
function abi_decode_t_bytes_memory_ptr(offset, end) -> array
{
if iszero(slt(add(offset, 0x1f), end)) { revert(array, array) }
let length := calldataload(offset)
if gt(length, 0xffffffffffffffff) { revert(array, array) }
array := allocateMemory(add(and(add(length, 0x1f), not(31)), 0x20))
mstore(array, length)
if gt(add(add(offset, length), 0x20), end) { revert(0, 0) }
calldatacopy(add(array, 0x20), add(offset, 0x20), length)
mstore(add(add(array, length), 0x20), 0)
}
function abi_decode_t_uint16(offset) -> value
{
value := calldataload(offset)
if iszero(eq(value, and(value, 0xffff))) { revert(0, 0) }
}
function abi_decode_t_uint32(offset) -> value
{
value := calldataload(offset)
if iszero(eq(value, and(value, 0xffffffff))) { revert(0, 0) }
}
function abi_decode_tuple_(headStart, dataEnd)
{
if slt(sub(dataEnd, headStart), 0) { revert(0, 0) }
}
function abi_decode_tuple_t_array$_t_address_$dyn_memory_ptrt_array$_t_string_memory_ptr_$dyn_memory_ptrt_bytes_memory_ptrt_address(headStart, dataEnd) -> value0, value1, value2, value3
{
if slt(sub(dataEnd, headStart), 128) { revert(value0, value0) }
let offset := calldataload(headStart)
let _1 := 0xffffffffffffffff
if gt(offset, _1) { revert(value0, value0) }
let _2 := add(headStart, offset)
if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(value0, value0) }
let length := calldataload(_2)
let dst := allocateMemory(array_allocation_size_t_array$_t_address_$dyn_memory_ptr(length))
let dst_1 := dst
mstore(dst, length)
let _3 := 0x20
dst := add(dst, _3)
let src := add(_2, _3)
if gt(add(add(_2, mul(length, _3)), _3), dataEnd) { revert(value0, value0) }
let i := value0
for { } lt(i, length) { i := add(i, 1) }
{
let value := calldataload(src)
validator_revert_t_address(value)
mstore(dst, value)
dst := add(dst, _3)
src := add(src, _3)
}
value0 := dst_1
let offset_1 := calldataload(add(headStart, _3))
if gt(offset_1, _1) { revert(value1, value1) }
value1 := abi_decode_t_array$_t_string_memory_ptr_$dyn_memory_ptr(add(headStart, offset_1), dataEnd)
let offset_2 := calldataload(add(headStart, 64))
if gt(offset_2, _1) { revert(value2, value2) }
value2 := abi_decode_t_bytes_memory_ptr(add(headStart, offset_2), dataEnd)
value3 := abi_decode_t_address(add(headStart, 96))
}
function abi_decode_tuple_t_array$_t_uint16_$dyn_memory_ptrt_array$_t_string_memory_ptr_$dyn_memory_ptrt_uint16t_address(headStart, dataEnd) -> value0, value1, value2, value3
{
if slt(sub(dataEnd, headStart), 128) { revert(value2, value2) }
let offset := calldataload(headStart)
let _1 := 0xffffffffffffffff
if gt(offset, _1) { revert(value2, value2) }
let _2 := add(headStart, offset)
if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(value2, value2) }
let length := calldataload(_2)
let dst := allocateMemory(array_allocation_size_t_array$_t_address_$dyn_memory_ptr(length))
let dst_1 := dst
mstore(dst, length)
let _3 := 0x20
dst := add(dst, _3)
let src := add(_2, _3)
if gt(add(add(_2, mul(length, _3)), _3), dataEnd) { revert(value2, value2) }
let i := value2
for { } lt(i, length) { i := add(i, 1) }
{
let value := calldataload(src)
validator_revert_t_uint16(value)
mstore(dst, value)
dst := add(dst, _3)
src := add(src, _3)
}
value0 := dst_1
let offset_1 := calldataload(add(headStart, _3))
if gt(offset_1, _1) { revert(value2, value2) }
value1 := abi_decode_t_array$_t_string_memory_ptr_$dyn_memory_ptr(add(headStart, offset_1), dataEnd)
value2 := abi_decode_t_uint16(add(headStart, 64))
value3 := abi_decode_t_address(add(headStart, 96))
}
function abi_decode_tuple_t_array$_t_uint256_$30_memory_ptrt_array$_t_string_memory_ptr_$dyn_memory_ptrt_uint16t_address(headStart, dataEnd) -> value0, value1, value2, value3
{
if slt(sub(dataEnd, headStart), 1056) { revert(value2, value2) }
if iszero(slt(add(headStart, 0x1f), dataEnd)) { revert(value2, value2) }
let _1 := 960
let dst := allocateMemory(_1)
let dst_1 := dst
let src := headStart
let _2 := add(headStart, _1)
if gt(_2, dataEnd) { revert(value2, value2) }
let i := value2
for { } lt(i, 0x1e) { i := add(i, 1) }
{
mstore(dst, calldataload(src))
let _3 := 0x20
dst := add(dst, _3)
src := add(src, _3)
}
value0 := dst_1
let offset := calldataload(_2)
if gt(offset, 0xffffffffffffffff) { revert(value2, value2) }
value1 := abi_decode_t_array$_t_string_memory_ptr_$dyn_memory_ptr(add(headStart, offset), dataEnd)
value2 := abi_decode_t_uint16(add(headStart, 992))
value3 := abi_decode_t_address(add(headStart, 1024))
}
function abi_decode_tuple_t_array$_t_uint256_$31_memory_ptrt_array$_t_string_memory_ptr_$20_memory_ptrt_contract$_C_$164t_address(headStart, dataEnd) -> value0, value1, value2, value3
{
if slt(sub(dataEnd, headStart), 1088) { revert(value2, value2) }
let _1 := 0x1f
if iszero(slt(add(headStart, _1), dataEnd)) { revert(value2, value2) }
let _2 := 992
let dst := allocateMemory(_2)
let dst_1 := dst
let src := headStart
let _3 := add(headStart, _2)
if gt(_3, dataEnd) { revert(value2, value2) }
let i := value2
for { } lt(i, _1) { i := add(i, 1) }
{
mstore(dst, calldataload(src))
let _4 := 0x20
dst := add(dst, _4)
src := add(src, _4)
}
value0 := dst_1
let offset := calldataload(_3)
if gt(offset, 0xffffffffffffffff) { revert(value2, value2) }
value1 := abi_decode_t_array$_t_string_memory_ptr_$20_memory_ptr(add(headStart, offset), dataEnd)
value2 := abi_decode_t_address(add(headStart, 1024))
value3 := abi_decode_t_address(add(headStart, 1056))
}
function abi_decode_tuple_t_array$_t_uint256_$32_memory_ptrt_array$_t_string_memory_ptr_$dyn_memory_ptrt_uint32t_address(headStart, dataEnd) -> value0, value1, value2, value3
{
if slt(sub(dataEnd, headStart), 1120) { revert(value2, value2) }
if iszero(slt(add(headStart, 0x1f), dataEnd)) { revert(value2, value2) }
let _1 := 1024
let dst := allocateMemory(_1)
let dst_1 := dst
let src := headStart
let _2 := add(headStart, _1)
if gt(_2, dataEnd) { revert(value2, value2) }
let i := value2
for { } true { i := add(i, 1) }
{
let _3 := 0x20
if iszero(lt(i, _3)) { break }
mstore(dst, calldataload(src))
dst := add(dst, _3)
src := add(src, _3)
}
value0 := dst_1
let offset := calldataload(_2)
if gt(offset, 0xffffffffffffffff) { revert(value2, value2) }
value1 := abi_decode_t_array$_t_string_memory_ptr_$dyn_memory_ptr(add(headStart, offset), dataEnd)
value2 := abi_decode_t_uint32(add(headStart, 1056))
value3 := abi_decode_t_address(add(headStart, 1088))
}
function abi_decode_tuple_t_array$_t_uint256_$dyn_memory_ptrt_array$_t_string_memory_ptr_$dyn_memory_ptrt_uint16t_address(headStart, dataEnd) -> value0, value1, value2, value3
{
if slt(sub(dataEnd, headStart), 128) { revert(value2, value2) }
let offset := calldataload(headStart)
let _1 := 0xffffffffffffffff
if gt(offset, _1) { revert(value2, value2) }
let _2 := add(headStart, offset)
if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(value2, value2) }
let length := calldataload(_2)
let dst := allocateMemory(array_allocation_size_t_array$_t_address_$dyn_memory_ptr(length))
let dst_1 := dst
mstore(dst, length)
let _3 := 0x20
dst := add(dst, _3)
let src := add(_2, _3)
if gt(add(add(_2, mul(length, _3)), _3), dataEnd) { revert(value2, value2) }
let i := value2
for { } lt(i, length) { i := add(i, 1) }
{
mstore(dst, calldataload(src))
dst := add(dst, _3)
src := add(src, _3)
}
value0 := dst_1
let offset_1 := calldataload(add(headStart, _3))
if gt(offset_1, _1) { revert(value2, value2) }
value1 := abi_decode_t_array$_t_string_memory_ptr_$dyn_memory_ptr(add(headStart, offset_1), dataEnd)
value2 := abi_decode_t_uint16(add(headStart, 64))
value3 := abi_decode_t_address(add(headStart, 96))
}
function abi_decode_tuple_t_array$_t_uint32_$dyn_memory_ptrt_array$_t_string_memory_ptr_$12_memory_ptrt_array$_t_array$_t_bytes_memory_ptr_$2_memory_ptr_$dyn_memory_ptrt_address(headStart, dataEnd) -> value0, value1, value2, value3
{
if slt(sub(dataEnd, headStart), 128) { revert(value2, value2) }
let offset := calldataload(headStart)
let _1 := 0xffffffffffffffff
if gt(offset, _1) { revert(value2, value2) }
let _2 := add(headStart, offset)
if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(value2, value2) }
let length := calldataload(_2)
let dst := allocateMemory(array_allocation_size_t_array$_t_address_$dyn_memory_ptr(length))
let dst_1 := dst
mstore(dst, length)
let _3 := 0x20
dst := add(dst, _3)
let src := add(_2, _3)
if gt(add(add(_2, mul(length, _3)), _3), dataEnd) { revert(value2, value2) }
let i := value2
for { } lt(i, length) { i := add(i, 1) }
{
let value := calldataload(src)
validator_revert_t_uint32(value)
mstore(dst, value)
dst := add(dst, _3)
src := add(src, _3)
}
value0 := dst_1
let offset_1 := calldataload(add(headStart, _3))
if gt(offset_1, _1) { revert(value2, value2) }
value1 := abi_decode_t_array$_t_string_memory_ptr_$12_memory_ptr(add(headStart, offset_1), dataEnd)
let offset_2 := calldataload(add(headStart, 64))
if gt(offset_2, _1) { revert(value2, value2) }
value2 := abi_decode_t_array$_t_array$_t_bytes_memory_ptr_$2_memory_ptr_$dyn_memory_ptr(add(headStart, offset_2), dataEnd)
value3 := abi_decode_t_address(add(headStart, 96))
}
function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0
{
if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }
value0 := calldataload(headStart)
}
function abi_encode_t_array$_t_uint16_$dyn_memory_ptr_to_t_array$_t_uint16_$dyn_memory_ptr_fromStack(value, pos) -> end
{
let length := mload(value)
mstore(pos, length)
let _1 := 0x20
pos := add(pos, _1)
let srcPtr := add(value, _1)
let i := end
for { } lt(i, length) { i := add(i, 1) }
{
mstore(pos, and(mload(srcPtr), 0xffff))
pos := add(pos, _1)
srcPtr := add(srcPtr, _1)
}
end := pos
}
function abi_encode_tuple_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__to_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__fromStack(headStart, value0, value1) -> tail
{
let tail_1 := add(headStart, 64)
mstore(headStart, 64)
let pos := tail_1
let length := mload(value0)
mstore(tail_1, length)
pos := add(headStart, 96)
let _1 := 0x20
let tail_2 := add(add(headStart, mul(length, _1)), 96)
let srcPtr := add(value0, _1)
let i := tail
for { } lt(i, length) { i := add(i, 1) }
{
mstore(pos, add(sub(tail_2, headStart), not(95)))
let _2 := mload(srcPtr)
let length_1 := mload(_2)
mstore(tail_2, length_1)
copy_memory_to_memory(add(_2, _1), add(tail_2, _1), length_1)
tail_2 := add(add(tail_2, and(add(length_1, 31), not(31))), _1)
srcPtr := add(srcPtr, _1)
pos := add(pos, _1)
}
mstore(add(headStart, _1), sub(tail_2, headStart))
tail := abi_encode_t_array$_t_uint16_$dyn_memory_ptr_to_t_array$_t_uint16_$dyn_memory_ptr_fromStack(value1, tail_2)
}
function abi_encode_tuple_t_array$_t_uint16_$200_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__to_t_array$_t_uint16_$200_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__fromStack(headStart, value0, value1) -> tail
{
let _1 := 6432
let pos := headStart
pos := headStart
let srcPtr := value0
let i := tail
for { } lt(i, 0xc8) { i := add(i, 1) }
{
mstore(pos, and(mload(srcPtr), 0xffff))
let _2 := 0x20
pos := add(pos, _2)
srcPtr := add(srcPtr, _2)
}
mstore(add(headStart, 6400), _1)
tail := abi_encode_t_array$_t_uint16_$dyn_memory_ptr_to_t_array$_t_uint16_$dyn_memory_ptr_fromStack(value1, add(headStart, _1))
}
function abi_encode_tuple_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__to_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__fromStack(headStart, value0, value1) -> tail
{
let tail_1 := add(headStart, 64)
mstore(headStart, 64)
let pos := tail_1
let length := mload(value0)
mstore(tail_1, length)
pos := add(headStart, 96)
let _1 := 0x20
let srcPtr := add(value0, _1)
let i := tail
for { } lt(i, length) { i := add(i, 1) }
{
mstore(pos, mload(srcPtr))
pos := add(pos, _1)
srcPtr := add(srcPtr, _1)
}
mstore(add(headStart, _1), sub(pos, headStart))
tail := abi_encode_t_array$_t_uint16_$dyn_memory_ptr_to_t_array$_t_uint16_$dyn_memory_ptr_fromStack(value1, pos)
}
function abi_encode_tuple_t_uint256__to_t_uint256__fromStack(headStart, value0) -> tail
{
tail := add(headStart, 32)
mstore(headStart, value0)
}
function allocateMemory(size) -> memPtr
{
memPtr := mload(64)
let newFreePtr := add(memPtr, size)
if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { revert(0, 0) }
mstore(64, newFreePtr)
}
function array_allocation_size_t_array$_t_address_$dyn_memory_ptr(length) -> size
{
if gt(length, 0xffffffffffffffff) { revert(size, size) }
size := add(mul(length, 0x20), 0x20)
}
function array_allocation_size_t_array$_t_bytes_memory_ptr_$2_memory_ptr(length) -> size
{
if gt(length, 0xffffffffffffffff) { revert(size, size) }
size := mul(length, 0x20)
}
function copy_memory_to_memory(src, dst, length)
{
let i := 0
for { } lt(i, length) { i := add(i, 32) }
{
mstore(add(dst, i), mload(add(src, i)))
}
if gt(i, length) { mstore(add(dst, length), 0) }
}
function fun_f6_120() -> vloc__114_mpos, vloc__117_mpos
{
let _1 := 6400
let memPtr := allocateMemory(_1)
calldatacopy(memPtr, calldatasize(), _1)
vloc__114_mpos := memPtr
vloc__117_mpos := 96
}
function getter_fun_b_6(key) -> ret
{
if iszero(lt(key, sload(1))) { invalid() }
mstore(ret, 1)
ret := shr(mul(ret, 8), sload(add(keccak256(ret, 0x20), key)))
}
function validator_revert_t_address(value)
{
if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }
}
function validator_revert_t_uint16(value)
{
if iszero(eq(value, and(value, 0xffff))) { revert(0, 0) }
}
function validator_revert_t_uint32(value)
{
if iszero(eq(value, and(value, 0xffffffff))) { revert(0, 0) }
}
}
}
}
diff -u /tmp/nonoptim.yul /tmp/optim.yul
--- /tmp/nonoptim.yul 2020-09-08 16:10:18.851273044 +0200
+++ /tmp/optim.yul 2020-09-08 16:08:44.523691869 +0200
@@ -35,39 +35,44 @@
case 0x19da7652 {
if callvalue() { revert(_2, _2) }
let param, param_1, param_2, param_3 := abi_decode_tuple_t_array$_t_uint256_$30_memory_ptrt_array$_t_string_memory_ptr_$dyn_memory_ptrt_uint16t_address(_1, calldatasize())
- let vloc__114_mpos, vloc__117_mpos := fun_f6_120()
+ let ret, ret_1 := fun_f6_120_997_4733_7005(param, param_1, param_2, param_3)
let memPos_1 := allocateMemory(_2)
- return(memPos_1, sub(abi_encode_tuple_t_array$_t_uint16_$200_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__to_t_array$_t_uint16_$200_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__fromStack(memPos_1, vloc__114_mpos, vloc__117_mpos), memPos_1))
+ return(memPos_1, sub(abi_encode_tuple_t_array$_t_uint16_$200_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__to_t_array$_t_uint16_$200_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__fromStack(memPos_1, ret, ret_1), memPos_1))
}
case 0x3a69a8c8 {
if callvalue() { revert(_2, _2) }
let param_4, param_5, param_6, param_7 := abi_decode_tuple_t_array$_t_uint16_$dyn_memory_ptrt_array$_t_string_memory_ptr_$dyn_memory_ptrt_uint16t_address(_1, calldatasize())
+ let ret_2, ret_3 := fun_f2_34_996_4732_7004(param_4, param_5, param_6, param_7)
let memPos_2 := allocateMemory(_2)
- return(memPos_2, sub(abi_encode_tuple_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__to_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__fromStack(memPos_2, 96, 96), memPos_2))
+ return(memPos_2, sub(abi_encode_tuple_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__to_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__fromStack(memPos_2, ret_2, ret_3), memPos_2))
}
case 0x40b9ccd0 {
if callvalue() { revert(_2, _2) }
let param_8, param_9, param_10, param_11 := abi_decode_tuple_t_array$_t_uint32_$dyn_memory_ptrt_array$_t_string_memory_ptr_$12_memory_ptrt_array$_t_array$_t_bytes_memory_ptr_$2_memory_ptr_$dyn_memory_ptrt_address(_1, calldatasize())
+ let ret_4, ret_5 := fun_f2_34_996_4732_7004(param_8, param_9, param_10, param_11)
let memPos_3 := allocateMemory(_2)
- return(memPos_3, sub(abi_encode_tuple_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__to_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__fromStack(memPos_3, 96, 96), memPos_3))
+ return(memPos_3, sub(abi_encode_tuple_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__to_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__fromStack(memPos_3, ret_4, ret_5), memPos_3))
}
case 0x66941981 {
if callvalue() { revert(_2, _2) }
let param_12, param_13, param_14, param_15 := abi_decode_tuple_t_array$_t_address_$dyn_memory_ptrt_array$_t_string_memory_ptr_$dyn_memory_ptrt_bytes_memory_ptrt_address(_1, calldatasize())
+ let ret_6, ret_7 := fun_f2_34_996_4732_7004(param_12, param_13, param_14, param_15)
let memPos_4 := allocateMemory(_2)
- return(memPos_4, sub(abi_encode_tuple_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__to_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__fromStack(memPos_4, 96, 96), memPos_4))
+ return(memPos_4, sub(abi_encode_tuple_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__to_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__fromStack(memPos_4, ret_6, ret_7), memPos_4))
}
case 0x8f448bde {
if callvalue() { revert(_2, _2) }
let param_16, param_17, param_18, param_19 := abi_decode_tuple_t_array$_t_uint256_$31_memory_ptrt_array$_t_string_memory_ptr_$20_memory_ptrt_contract$_C_$164t_address(_1, calldatasize())
+ let ret_8, ret_9 := fun_f7_142_998_4734_7006(param_16, param_17, param_18, param_19)
let memPos_5 := allocateMemory(_2)
- return(memPos_5, sub(abi_encode_tuple_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__to_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__fromStack(memPos_5, 96, 96), memPos_5))
+ return(memPos_5, sub(abi_encode_tuple_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__to_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__fromStack(memPos_5, ret_8, ret_9), memPos_5))
}
case 0x931538b4 {
if callvalue() { revert(_2, _2) }
let param_20, param_21, param_22, param_23 := abi_decode_tuple_t_array$_t_uint256_$dyn_memory_ptrt_array$_t_string_memory_ptr_$dyn_memory_ptrt_uint16t_address(_1, calldatasize())
+ let ret_10, ret_11 := fun_f2_34_996_4732_7004(param_20, param_21, param_22, param_23)
let memPos_6 := allocateMemory(_2)
- return(memPos_6, sub(abi_encode_tuple_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__to_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__fromStack(memPos_6, 96, 96), memPos_6))
+ return(memPos_6, sub(abi_encode_tuple_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__to_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__fromStack(memPos_6, ret_10, ret_11), memPos_6))
}
case 0x9adbf691 {
if callvalue() { revert(_2, _2) }
@@ -78,14 +83,15 @@
case 0xc94cc147 {
if callvalue() { revert(_2, _2) }
let param_24, param_25, param_26, param_27 := abi_decode_tuple_t_array$_t_uint256_$32_memory_ptrt_array$_t_string_memory_ptr_$dyn_memory_ptrt_uint32t_address(_1, calldatasize())
+ let ret_12, ret_13 := fun_f2_34_996_4732_7004(param_24, param_25, param_26, param_27)
let memPos_8 := allocateMemory(_2)
- return(memPos_8, sub(abi_encode_tuple_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__to_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__fromStack(memPos_8, 96, 96), memPos_8))
+ return(memPos_8, sub(abi_encode_tuple_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__to_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__fromStack(memPos_8, ret_12, ret_13), memPos_8))
}
case 0xcd580ff3 {
if callvalue() { revert(_2, _2) }
- let ret := getter_fun_b_6(abi_decode_tuple_t_uint256(_1, calldatasize()))
+ let ret_14 := getter_fun_b_6(abi_decode_tuple_t_uint256(_1, calldatasize()))
let memPos_9 := allocateMemory(_2)
- return(memPos_9, sub(abi_encode_tuple_t_uint256__to_t_uint256__fromStack(memPos_9, ret), memPos_9))
+ return(memPos_9, sub(abi_encode_tuple_t_uint256__to_t_uint256__fromStack(memPos_9, ret_14), memPos_9))
}
}
revert(0, 0)
@@ -110,12 +116,11 @@
{
let _2 := add(offset, calldataload(src))
if iszero(slt(add(_2, 63), end)) { revert(0, 0) }
- let _3 := 0x02
- let dst_1 := allocateMemory(array_allocation_size_t_array$_t_bytes_memory_ptr_$2_memory_ptr(_3))
+ let dst_1 := allocateMemory(64)
let dst_2 := dst_1
let src_1 := add(_2, _1)
let i_1 := 0
- for { } lt(i_1, _3) { i_1 := add(i_1, 1) }
+ for { } lt(i_1, 0x02) { i_1 := add(i_1, 1) }
{
mstore(dst_1, abi_decode_t_bytes_memory_ptr(add(add(_2, calldataload(src_1)), _1), end))
dst_1 := add(dst_1, _1)
@@ -252,9 +257,7 @@
let i := value2
for { } lt(i, length) { i := add(i, 1) }
{
- let value := calldataload(src)
- validator_revert_t_uint16(value)
- mstore(dst, value)
+ mstore(dst, abi_decode_t_uint16(src))
dst := add(dst, _3)
src := add(src, _3)
}
@@ -391,9 +394,7 @@
let i := value2
for { } lt(i, length) { i := add(i, 1) }
{
- let value := calldataload(src)
- validator_revert_t_uint32(value)
- mstore(dst, value)
+ mstore(dst, abi_decode_t_uint32(src))
dst := add(dst, _3)
src := add(src, _3)
}
@@ -445,7 +446,15 @@
let _2 := mload(srcPtr)
let length_1 := mload(_2)
mstore(tail_2, length_1)
- copy_memory_to_memory(add(_2, _1), add(tail_2, _1), length_1)
+ let i_1 := tail
+ for { } lt(i_1, length_1) { i_1 := add(i_1, _1) }
+ {
+ mstore(add(add(tail_2, i_1), _1), mload(add(add(_2, i_1), _1)))
+ }
+ if gt(i_1, length_1)
+ {
+ mstore(add(add(tail_2, length_1), _1), tail)
+ }
tail_2 := add(add(tail_2, and(add(length_1, 31), not(31))), _1)
srcPtr := add(srcPtr, _1)
pos := add(pos, _1)
@@ -507,21 +516,12 @@
if gt(length, 0xffffffffffffffff) { revert(size, size) }
size := add(mul(length, 0x20), 0x20)
}
- function array_allocation_size_t_array$_t_bytes_memory_ptr_$2_memory_ptr(length) -> size
- {
- if gt(length, 0xffffffffffffffff) { revert(size, size) }
- size := mul(length, 0x20)
- }
- function copy_memory_to_memory(src, dst, length)
+ function fun_f2_34_996_4732_7004(vloc__17_mpos, vloc__20_mpos, vloc, vloc_1) -> vloc__28_mpos, vloc__31_mpos
{
- let i := 0
- for { } lt(i, length) { i := add(i, 32) }
- {
- mstore(add(dst, i), mload(add(src, i)))
- }
- if gt(i, length) { mstore(add(dst, length), 0) }
+ vloc__28_mpos := 96
+ vloc__31_mpos := vloc__28_mpos
}
- function fun_f6_120() -> vloc__114_mpos, vloc__117_mpos
+ function fun_f6_120_997_4733_7005(vloc__102_mpos, vloc__105_mpos, vloc, vloc_1) -> vloc__114_mpos, vloc__117_mpos
{
let _1 := 6400
let memPtr := allocateMemory(_1)
@@ -529,6 +529,11 @@
vloc__114_mpos := memPtr
vloc__117_mpos := 96
}
+ function fun_f7_142_998_4734_7006(vloc__124_mpos, vloc__128_mpos, vloc__130_address, vloc) -> vloc__136_mpos, vloc__139_mpos
+ {
+ vloc__136_mpos := 96
+ vloc__139_mpos := vloc__136_mpos
+ }
function getter_fun_b_6(key) -> ret
{
if iszero(lt(key, sload(1))) { invalid() }
@@ -539,14 +544,6 @@
{
if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }
}
- function validator_revert_t_uint16(value)
- {
- if iszero(eq(value, and(value, 0xffff))) { revert(0, 0) }
- }
- function validator_revert_t_uint32(value)
- {
- if iszero(eq(value, and(value, 0xffffffff))) { revert(0, 0) }
- }
}
}
}
Diff finished. Tue Sep 8 16:10:42 2020
Optimized IR:
/*******************************************************
,* WARNING *
,* Solidity to Yul compilation is still EXPERIMENTAL *
,* It can result in LOSS OF FUNDS or worse *
,* !USE AT YOUR OWN RISK! *
,*******************************************************/
object "C_164" {
code {
{
mstore(64, 128)
if callvalue() { revert(0, 0) }
let _1 := datasize("C_164_deployed")
codecopy(0, dataoffset("C_164_deployed"), _1)
return(0, _1)
}
}
object "C_164_deployed" {
code {
{
mstore(64, 128)
let _1 := 4
if iszero(lt(calldatasize(), _1))
{
let _2 := 0
switch shr(224, calldataload(_2))
case 0x0dbe671f {
if callvalue() { revert(_2, _2) }
abi_decode_tuple_(_1, calldatasize())
let _3 := sload(_2)
let memPos := allocateMemory(_2)
return(memPos, sub(abi_encode_tuple_t_uint256__to_t_uint256__fromStack(memPos, _3), memPos))
}
case 0x19da7652 {
if callvalue() { revert(_2, _2) }
let param, param_1, param_2, param_3 := abi_decode_tuple_t_array$_t_uint256_$30_memory_ptrt_array$_t_string_memory_ptr_$dyn_memory_ptrt_uint16t_address(_1, calldatasize())
let ret, ret_1 := fun_f6_120_997_4733_7005(param, param_1, param_2, param_3)
let memPos_1 := allocateMemory(_2)
return(memPos_1, sub(abi_encode_tuple_t_array$_t_uint16_$200_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__to_t_array$_t_uint16_$200_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__fromStack(memPos_1, ret, ret_1), memPos_1))
}
case 0x3a69a8c8 {
if callvalue() { revert(_2, _2) }
let param_4, param_5, param_6, param_7 := abi_decode_tuple_t_array$_t_uint16_$dyn_memory_ptrt_array$_t_string_memory_ptr_$dyn_memory_ptrt_uint16t_address(_1, calldatasize())
let ret_2, ret_3 := fun_f2_34_996_4732_7004(param_4, param_5, param_6, param_7)
let memPos_2 := allocateMemory(_2)
return(memPos_2, sub(abi_encode_tuple_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__to_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__fromStack(memPos_2, ret_2, ret_3), memPos_2))
}
case 0x40b9ccd0 {
if callvalue() { revert(_2, _2) }
let param_8, param_9, param_10, param_11 := abi_decode_tuple_t_array$_t_uint32_$dyn_memory_ptrt_array$_t_string_memory_ptr_$12_memory_ptrt_array$_t_array$_t_bytes_memory_ptr_$2_memory_ptr_$dyn_memory_ptrt_address(_1, calldatasize())
let ret_4, ret_5 := fun_f2_34_996_4732_7004(param_8, param_9, param_10, param_11)
let memPos_3 := allocateMemory(_2)
return(memPos_3, sub(abi_encode_tuple_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__to_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__fromStack(memPos_3, ret_4, ret_5), memPos_3))
}
case 0x66941981 {
if callvalue() { revert(_2, _2) }
let param_12, param_13, param_14, param_15 := abi_decode_tuple_t_array$_t_address_$dyn_memory_ptrt_array$_t_string_memory_ptr_$dyn_memory_ptrt_bytes_memory_ptrt_address(_1, calldatasize())
let ret_6, ret_7 := fun_f2_34_996_4732_7004(param_12, param_13, param_14, param_15)
let memPos_4 := allocateMemory(_2)
return(memPos_4, sub(abi_encode_tuple_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__to_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__fromStack(memPos_4, ret_6, ret_7), memPos_4))
}
case 0x8f448bde {
if callvalue() { revert(_2, _2) }
let param_16, param_17, param_18, param_19 := abi_decode_tuple_t_array$_t_uint256_$31_memory_ptrt_array$_t_string_memory_ptr_$20_memory_ptrt_contract$_C_$164t_address(_1, calldatasize())
let ret_8, ret_9 := fun_f7_142_998_4734_7006(param_16, param_17, param_18, param_19)
let memPos_5 := allocateMemory(_2)
return(memPos_5, sub(abi_encode_tuple_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__to_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__fromStack(memPos_5, ret_8, ret_9), memPos_5))
}
case 0x931538b4 {
if callvalue() { revert(_2, _2) }
let param_20, param_21, param_22, param_23 := abi_decode_tuple_t_array$_t_uint256_$dyn_memory_ptrt_array$_t_string_memory_ptr_$dyn_memory_ptrt_uint16t_address(_1, calldatasize())
let ret_10, ret_11 := fun_f2_34_996_4732_7004(param_20, param_21, param_22, param_23)
let memPos_6 := allocateMemory(_2)
return(memPos_6, sub(abi_encode_tuple_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__to_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__fromStack(memPos_6, ret_10, ret_11), memPos_6))
}
case 0x9adbf691 {
if callvalue() { revert(_2, _2) }
pop(abi_decode_tuple_t_uint256(_1, calldatasize()))
let memPos_7 := allocateMemory(_2)
return(memPos_7, sub(abi_encode_tuple_t_uint256__to_t_uint256__fromStack(memPos_7, _2), memPos_7))
}
case 0xc94cc147 {
if callvalue() { revert(_2, _2) }
let param_24, param_25, param_26, param_27 := abi_decode_tuple_t_array$_t_uint256_$32_memory_ptrt_array$_t_string_memory_ptr_$dyn_memory_ptrt_uint32t_address(_1, calldatasize())
let ret_12, ret_13 := fun_f2_34_996_4732_7004(param_24, param_25, param_26, param_27)
let memPos_8 := allocateMemory(_2)
return(memPos_8, sub(abi_encode_tuple_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__to_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__fromStack(memPos_8, ret_12, ret_13), memPos_8))
}
case 0xcd580ff3 {
if callvalue() { revert(_2, _2) }
let ret_14 := getter_fun_b_6(abi_decode_tuple_t_uint256(_1, calldatasize()))
let memPos_9 := allocateMemory(_2)
return(memPos_9, sub(abi_encode_tuple_t_uint256__to_t_uint256__fromStack(memPos_9, ret_14), memPos_9))
}
}
revert(0, 0)
}
function abi_decode_t_address(offset) -> value
{
value := calldataload(offset)
validator_revert_t_address(value)
}
function abi_decode_t_array$_t_array$_t_bytes_memory_ptr_$2_memory_ptr_$dyn_memory_ptr(offset, end) -> array
{
if iszero(slt(add(offset, 0x1f), end)) { revert(array, array) }
let length := calldataload(offset)
array := allocateMemory(array_allocation_size_t_array$_t_address_$dyn_memory_ptr(length))
let dst := array
mstore(array, length)
let _1 := 0x20
dst := add(array, _1)
let src := add(offset, _1)
let i := 0
for { } lt(i, length) { i := add(i, 1) }
{
let _2 := add(offset, calldataload(src))
if iszero(slt(add(_2, 63), end)) { revert(0, 0) }
let dst_1 := allocateMemory(64)
let dst_2 := dst_1
let src_1 := add(_2, _1)
let i_1 := 0
for { } lt(i_1, 0x02) { i_1 := add(i_1, 1) }
{
mstore(dst_1, abi_decode_t_bytes_memory_ptr(add(add(_2, calldataload(src_1)), _1), end))
dst_1 := add(dst_1, _1)
src_1 := add(src_1, _1)
}
mstore(dst, dst_2)
dst := add(dst, _1)
src := add(src, _1)
}
}
function abi_decode_t_array$_t_string_memory_ptr_$12_memory_ptr(offset, end) -> array
{
if iszero(slt(add(offset, 0x1f), end)) { revert(array, array) }
array := allocateMemory(384)
let dst := array
let src := offset
let i := 0
for { } lt(i, 0x0c) { i := add(i, 1) }
{
mstore(dst, abi_decode_t_bytes_memory_ptr(add(offset, calldataload(src)), end))
let _1 := 0x20
dst := add(dst, _1)
src := add(src, _1)
}
}
function abi_decode_t_array$_t_string_memory_ptr_$20_memory_ptr(offset, end) -> array
{
if iszero(slt(add(offset, 0x1f), end)) { revert(array, array) }
array := allocateMemory(640)
let dst := array
let src := offset
let i := 0
for { } lt(i, 0x14) { i := add(i, 1) }
{
mstore(dst, abi_decode_t_bytes_memory_ptr(add(offset, calldataload(src)), end))
let _1 := 0x20
dst := add(dst, _1)
src := add(src, _1)
}
}
function abi_decode_t_array$_t_string_memory_ptr_$dyn_memory_ptr(offset, end) -> array
{
if iszero(slt(add(offset, 0x1f), end)) { revert(array, array) }
let length := calldataload(offset)
array := allocateMemory(array_allocation_size_t_array$_t_address_$dyn_memory_ptr(length))
let dst := array
mstore(array, length)
let _1 := 0x20
dst := add(array, _1)
let src := add(offset, _1)
let i := 0
for { } lt(i, length) { i := add(i, 1) }
{
mstore(dst, abi_decode_t_bytes_memory_ptr(add(add(offset, calldataload(src)), _1), end))
dst := add(dst, _1)
src := add(src, _1)
}
}
function abi_decode_t_bytes_memory_ptr(offset, end) -> array
{
if iszero(slt(add(offset, 0x1f), end)) { revert(array, array) }
let length := calldataload(offset)
if gt(length, 0xffffffffffffffff) { revert(array, array) }
array := allocateMemory(add(and(add(length, 0x1f), not(31)), 0x20))
mstore(array, length)
if gt(add(add(offset, length), 0x20), end) { revert(0, 0) }
calldatacopy(add(array, 0x20), add(offset, 0x20), length)
mstore(add(add(array, length), 0x20), 0)
}
function abi_decode_t_uint16(offset) -> value
{
value := calldataload(offset)
if iszero(eq(value, and(value, 0xffff))) { revert(0, 0) }
}
function abi_decode_t_uint32(offset) -> value
{
value := calldataload(offset)
if iszero(eq(value, and(value, 0xffffffff))) { revert(0, 0) }
}
function abi_decode_tuple_(headStart, dataEnd)
{
if slt(sub(dataEnd, headStart), 0) { revert(0, 0) }
}
function abi_decode_tuple_t_array$_t_address_$dyn_memory_ptrt_array$_t_string_memory_ptr_$dyn_memory_ptrt_bytes_memory_ptrt_address(headStart, dataEnd) -> value0, value1, value2, value3
{
if slt(sub(dataEnd, headStart), 128) { revert(value0, value0) }
let offset := calldataload(headStart)
let _1 := 0xffffffffffffffff
if gt(offset, _1) { revert(value0, value0) }
let _2 := add(headStart, offset)
if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(value0, value0) }
let length := calldataload(_2)
let dst := allocateMemory(array_allocation_size_t_array$_t_address_$dyn_memory_ptr(length))
let dst_1 := dst
mstore(dst, length)
let _3 := 0x20
dst := add(dst, _3)
let src := add(_2, _3)
if gt(add(add(_2, mul(length, _3)), _3), dataEnd) { revert(value0, value0) }
let i := value0
for { } lt(i, length) { i := add(i, 1) }
{
let value := calldataload(src)
validator_revert_t_address(value)
mstore(dst, value)
dst := add(dst, _3)
src := add(src, _3)
}
value0 := dst_1
let offset_1 := calldataload(add(headStart, _3))
if gt(offset_1, _1) { revert(value1, value1) }
value1 := abi_decode_t_array$_t_string_memory_ptr_$dyn_memory_ptr(add(headStart, offset_1), dataEnd)
let offset_2 := calldataload(add(headStart, 64))
if gt(offset_2, _1) { revert(value2, value2) }
value2 := abi_decode_t_bytes_memory_ptr(add(headStart, offset_2), dataEnd)
value3 := abi_decode_t_address(add(headStart, 96))
}
function abi_decode_tuple_t_array$_t_uint16_$dyn_memory_ptrt_array$_t_string_memory_ptr_$dyn_memory_ptrt_uint16t_address(headStart, dataEnd) -> value0, value1, value2, value3
{
if slt(sub(dataEnd, headStart), 128) { revert(value2, value2) }
let offset := calldataload(headStart)
let _1 := 0xffffffffffffffff
if gt(offset, _1) { revert(value2, value2) }
let _2 := add(headStart, offset)
if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(value2, value2) }
let length := calldataload(_2)
let dst := allocateMemory(array_allocation_size_t_array$_t_address_$dyn_memory_ptr(length))
let dst_1 := dst
mstore(dst, length)
let _3 := 0x20
dst := add(dst, _3)
let src := add(_2, _3)
if gt(add(add(_2, mul(length, _3)), _3), dataEnd) { revert(value2, value2) }
let i := value2
for { } lt(i, length) { i := add(i, 1) }
{
mstore(dst, abi_decode_t_uint16(src))
dst := add(dst, _3)
src := add(src, _3)
}
value0 := dst_1
let offset_1 := calldataload(add(headStart, _3))
if gt(offset_1, _1) { revert(value2, value2) }
value1 := abi_decode_t_array$_t_string_memory_ptr_$dyn_memory_ptr(add(headStart, offset_1), dataEnd)
value2 := abi_decode_t_uint16(add(headStart, 64))
value3 := abi_decode_t_address(add(headStart, 96))
}
function abi_decode_tuple_t_array$_t_uint256_$30_memory_ptrt_array$_t_string_memory_ptr_$dyn_memory_ptrt_uint16t_address(headStart, dataEnd) -> value0, value1, value2, value3
{
if slt(sub(dataEnd, headStart), 1056) { revert(value2, value2) }
if iszero(slt(add(headStart, 0x1f), dataEnd)) { revert(value2, value2) }
let _1 := 960
let dst := allocateMemory(_1)
let dst_1 := dst
let src := headStart
let _2 := add(headStart, _1)
if gt(_2, dataEnd) { revert(value2, value2) }
let i := value2
for { } lt(i, 0x1e) { i := add(i, 1) }
{
mstore(dst, calldataload(src))
let _3 := 0x20
dst := add(dst, _3)
src := add(src, _3)
}
value0 := dst_1
let offset := calldataload(_2)
if gt(offset, 0xffffffffffffffff) { revert(value2, value2) }
value1 := abi_decode_t_array$_t_string_memory_ptr_$dyn_memory_ptr(add(headStart, offset), dataEnd)
value2 := abi_decode_t_uint16(add(headStart, 992))
value3 := abi_decode_t_address(add(headStart, 1024))
}
function abi_decode_tuple_t_array$_t_uint256_$31_memory_ptrt_array$_t_string_memory_ptr_$20_memory_ptrt_contract$_C_$164t_address(headStart, dataEnd) -> value0, value1, value2, value3
{
if slt(sub(dataEnd, headStart), 1088) { revert(value2, value2) }
let _1 := 0x1f
if iszero(slt(add(headStart, _1), dataEnd)) { revert(value2, value2) }
let _2 := 992
let dst := allocateMemory(_2)
let dst_1 := dst
let src := headStart
let _3 := add(headStart, _2)
if gt(_3, dataEnd) { revert(value2, value2) }
let i := value2
for { } lt(i, _1) { i := add(i, 1) }
{
mstore(dst, calldataload(src))
let _4 := 0x20
dst := add(dst, _4)
src := add(src, _4)
}
value0 := dst_1
let offset := calldataload(_3)
if gt(offset, 0xffffffffffffffff) { revert(value2, value2) }
value1 := abi_decode_t_array$_t_string_memory_ptr_$20_memory_ptr(add(headStart, offset), dataEnd)
value2 := abi_decode_t_address(add(headStart, 1024))
value3 := abi_decode_t_address(add(headStart, 1056))
}
function abi_decode_tuple_t_array$_t_uint256_$32_memory_ptrt_array$_t_string_memory_ptr_$dyn_memory_ptrt_uint32t_address(headStart, dataEnd) -> value0, value1, value2, value3
{
if slt(sub(dataEnd, headStart), 1120) { revert(value2, value2) }
if iszero(slt(add(headStart, 0x1f), dataEnd)) { revert(value2, value2) }
let _1 := 1024
let dst := allocateMemory(_1)
let dst_1 := dst
let src := headStart
let _2 := add(headStart, _1)
if gt(_2, dataEnd) { revert(value2, value2) }
let i := value2
for { } true { i := add(i, 1) }
{
let _3 := 0x20
if iszero(lt(i, _3)) { break }
mstore(dst, calldataload(src))
dst := add(dst, _3)
src := add(src, _3)
}
value0 := dst_1
let offset := calldataload(_2)
if gt(offset, 0xffffffffffffffff) { revert(value2, value2) }
value1 := abi_decode_t_array$_t_string_memory_ptr_$dyn_memory_ptr(add(headStart, offset), dataEnd)
value2 := abi_decode_t_uint32(add(headStart, 1056))
value3 := abi_decode_t_address(add(headStart, 1088))
}
function abi_decode_tuple_t_array$_t_uint256_$dyn_memory_ptrt_array$_t_string_memory_ptr_$dyn_memory_ptrt_uint16t_address(headStart, dataEnd) -> value0, value1, value2, value3
{
if slt(sub(dataEnd, headStart), 128) { revert(value2, value2) }
let offset := calldataload(headStart)
let _1 := 0xffffffffffffffff
if gt(offset, _1) { revert(value2, value2) }
let _2 := add(headStart, offset)
if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(value2, value2) }
let length := calldataload(_2)
let dst := allocateMemory(array_allocation_size_t_array$_t_address_$dyn_memory_ptr(length))
let dst_1 := dst
mstore(dst, length)
let _3 := 0x20
dst := add(dst, _3)
let src := add(_2, _3)
if gt(add(add(_2, mul(length, _3)), _3), dataEnd) { revert(value2, value2) }
let i := value2
for { } lt(i, length) { i := add(i, 1) }
{
mstore(dst, calldataload(src))
dst := add(dst, _3)
src := add(src, _3)
}
value0 := dst_1
let offset_1 := calldataload(add(headStart, _3))
if gt(offset_1, _1) { revert(value2, value2) }
value1 := abi_decode_t_array$_t_string_memory_ptr_$dyn_memory_ptr(add(headStart, offset_1), dataEnd)
value2 := abi_decode_t_uint16(add(headStart, 64))
value3 := abi_decode_t_address(add(headStart, 96))
}
function abi_decode_tuple_t_array$_t_uint32_$dyn_memory_ptrt_array$_t_string_memory_ptr_$12_memory_ptrt_array$_t_array$_t_bytes_memory_ptr_$2_memory_ptr_$dyn_memory_ptrt_address(headStart, dataEnd) -> value0, value1, value2, value3
{
if slt(sub(dataEnd, headStart), 128) { revert(value2, value2) }
let offset := calldataload(headStart)
let _1 := 0xffffffffffffffff
if gt(offset, _1) { revert(value2, value2) }
let _2 := add(headStart, offset)
if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(value2, value2) }
let length := calldataload(_2)
let dst := allocateMemory(array_allocation_size_t_array$_t_address_$dyn_memory_ptr(length))
let dst_1 := dst
mstore(dst, length)
let _3 := 0x20
dst := add(dst, _3)
let src := add(_2, _3)
if gt(add(add(_2, mul(length, _3)), _3), dataEnd) { revert(value2, value2) }
let i := value2
for { } lt(i, length) { i := add(i, 1) }
{
mstore(dst, abi_decode_t_uint32(src))
dst := add(dst, _3)
src := add(src, _3)
}
value0 := dst_1
let offset_1 := calldataload(add(headStart, _3))
if gt(offset_1, _1) { revert(value2, value2) }
value1 := abi_decode_t_array$_t_string_memory_ptr_$12_memory_ptr(add(headStart, offset_1), dataEnd)
let offset_2 := calldataload(add(headStart, 64))
if gt(offset_2, _1) { revert(value2, value2) }
value2 := abi_decode_t_array$_t_array$_t_bytes_memory_ptr_$2_memory_ptr_$dyn_memory_ptr(add(headStart, offset_2), dataEnd)
value3 := abi_decode_t_address(add(headStart, 96))
}
function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0
{
if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }
value0 := calldataload(headStart)
}
function abi_encode_t_array$_t_uint16_$dyn_memory_ptr_to_t_array$_t_uint16_$dyn_memory_ptr_fromStack(value, pos) -> end
{
let length := mload(value)
mstore(pos, length)
let _1 := 0x20
pos := add(pos, _1)
let srcPtr := add(value, _1)
let i := end
for { } lt(i, length) { i := add(i, 1) }
{
mstore(pos, and(mload(srcPtr), 0xffff))
pos := add(pos, _1)
srcPtr := add(srcPtr, _1)
}
end := pos
}
function abi_encode_tuple_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__to_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__fromStack(headStart, value0, value1) -> tail
{
let tail_1 := add(headStart, 64)
mstore(headStart, 64)
let pos := tail_1
let length := mload(value0)
mstore(tail_1, length)
pos := add(headStart, 96)
let _1 := 0x20
let tail_2 := add(add(headStart, mul(length, _1)), 96)
let srcPtr := add(value0, _1)
let i := tail
for { } lt(i, length) { i := add(i, 1) }
{
mstore(pos, add(sub(tail_2, headStart), not(95)))
let _2 := mload(srcPtr)
let length_1 := mload(_2)
mstore(tail_2, length_1)
let i_1 := tail
for { } lt(i_1, length_1) { i_1 := add(i_1, _1) }
{
mstore(add(add(tail_2, i_1), _1), mload(add(add(_2, i_1), _1)))
}
if gt(i_1, length_1)
{
mstore(add(add(tail_2, length_1), _1), tail)
}
tail_2 := add(add(tail_2, and(add(length_1, 31), not(31))), _1)
srcPtr := add(srcPtr, _1)
pos := add(pos, _1)
}
mstore(add(headStart, _1), sub(tail_2, headStart))
tail := abi_encode_t_array$_t_uint16_$dyn_memory_ptr_to_t_array$_t_uint16_$dyn_memory_ptr_fromStack(value1, tail_2)
}
function abi_encode_tuple_t_array$_t_uint16_$200_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__to_t_array$_t_uint16_$200_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__fromStack(headStart, value0, value1) -> tail
{
let _1 := 6432
let pos := headStart
pos := headStart
let srcPtr := value0
let i := tail
for { } lt(i, 0xc8) { i := add(i, 1) }
{
mstore(pos, and(mload(srcPtr), 0xffff))
let _2 := 0x20
pos := add(pos, _2)
srcPtr := add(srcPtr, _2)
}
mstore(add(headStart, 6400), _1)
tail := abi_encode_t_array$_t_uint16_$dyn_memory_ptr_to_t_array$_t_uint16_$dyn_memory_ptr_fromStack(value1, add(headStart, _1))
}
function abi_encode_tuple_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__to_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint16_$dyn_memory_ptr__fromStack(headStart, value0, value1) -> tail
{
let tail_1 := add(headStart, 64)
mstore(headStart, 64)
let pos := tail_1
let length := mload(value0)
mstore(tail_1, length)
pos := add(headStart, 96)
let _1 := 0x20
let srcPtr := add(value0, _1)
let i := tail
for { } lt(i, length) { i := add(i, 1) }
{
mstore(pos, mload(srcPtr))
pos := add(pos, _1)
srcPtr := add(srcPtr, _1)
}
mstore(add(headStart, _1), sub(pos, headStart))
tail := abi_encode_t_array$_t_uint16_$dyn_memory_ptr_to_t_array$_t_uint16_$dyn_memory_ptr_fromStack(value1, pos)
}
function abi_encode_tuple_t_uint256__to_t_uint256__fromStack(headStart, value0) -> tail
{
tail := add(headStart, 32)
mstore(headStart, value0)
}
function allocateMemory(size) -> memPtr
{
memPtr := mload(64)
let newFreePtr := add(memPtr, size)
if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { revert(0, 0) }
mstore(64, newFreePtr)
}
function array_allocation_size_t_array$_t_address_$dyn_memory_ptr(length) -> size
{
if gt(length, 0xffffffffffffffff) { revert(size, size) }
size := add(mul(length, 0x20), 0x20)
}
function fun_f2_34_996_4732_7004(vloc__17_mpos, vloc__20_mpos, vloc, vloc_1) -> vloc__28_mpos, vloc__31_mpos
{
vloc__28_mpos := 96
vloc__31_mpos := vloc__28_mpos
}
function fun_f6_120_997_4733_7005(vloc__102_mpos, vloc__105_mpos, vloc, vloc_1) -> vloc__114_mpos, vloc__117_mpos
{
let _1 := 6400
let memPtr := allocateMemory(_1)
calldatacopy(memPtr, calldatasize(), _1)
vloc__114_mpos := memPtr
vloc__117_mpos := 96
}
function fun_f7_142_998_4734_7006(vloc__124_mpos, vloc__128_mpos, vloc__130_address, vloc) -> vloc__136_mpos, vloc__139_mpos
{
vloc__136_mpos := 96
vloc__139_mpos := vloc__136_mpos
}
function getter_fun_b_6(key) -> ret
{
if iszero(lt(key, sload(1))) { invalid() }
mstore(ret, 1)
ret := shr(mul(ret, 8), sload(add(keccak256(ret, 0x20), key)))
}
function validator_revert_t_address(value)
{
if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment