{
    let _1 := 0
    let value := calldataload(4)
    if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(_1, _1) }
    let length := extcodesize(value)
    let _2 := 0xffffffffffffffff
    if gt(length, _2) { revert(0, 0) }
    let _3 := not(31)
    let memPtr := mload(64)
    let newFreePtr := add(memPtr, and(add(and(add(length, 31), _3), 63), _3))
    if or(gt(newFreePtr, _2), lt(newFreePtr, memPtr)) { revert(0, 0) }
    mstore(64, newFreePtr)
    mstore(memPtr, length)

    // We aim to optimize this out.
    extcodecopy(value, add(memPtr, 32), _1, length)
    sstore(_1, mload(memPtr))
}
// ====
// EVMVersion: >byzantium
// ----
// step: fullSuite
//
// {
//     {
//         let value := calldataload(4)
//         if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }
//         let length := extcodesize(value)
//         let _1 := 0xffffffffffffffff
//         if gt(length, _1) { revert(0, 0) }
//         let memPtr := mload(64)
//         let _2 := not(31)
//         let newFreePtr := add(memPtr, and(add(and(add(length, 31), _2), 63), _2))
//         if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { revert(0, 0) }
//         mstore(64, newFreePtr)
//         mstore(memPtr, length)
//         extcodecopy(value, add(memPtr, 32), 0, length)
//         sstore(0, mload(memPtr))
//     }
// }
