// Hand-optimized TASM baseline: os.neptune.locks.multisig
//
// 2-of-3 multisig: divine 3 key hashes + bitmask + 2 secrets.

// verify_key: [secret expected_hash] -> []
os_neptune_locks_multisig__verify_key:
    swap 1
    push 0
    push 0
    push 0
    push 0
    push 0
    push 0
    push 0
    push 0
    push 0
    hash
    pop 4
    eq
    assert
    return

os_neptune_locks_multisig__main:
    // Divine 3 key hashes
    divine 5
    divine 5
    divine 5
    // Extract first field of each
    swap 14
    pop 4
    swap 9
    pop 4
    swap 4
    pop 4
    // Stack: k0 k1 k2
    // Divine bitmask
    divine 1
    // Dispatch on mask value
    dup 0
    push 3
    eq
    skiz
    call __mask3
    dup 0
    push 5
    eq
    skiz
    call __mask5
    dup 0
    push 6
    eq
    skiz
    call __mask6
    pop 1
    pop 1
    pop 1
    pop 1
    // Read kernel hash
    read_io 5
    pop 5
    return

__mask3:
    // keys 0+1
    pop 1
    divine 1
    swap 3
    call os_neptune_locks_multisig__verify_key
    divine 1
    swap 2
    call os_neptune_locks_multisig__verify_key
    return

__mask5:
    // keys 0+2
    pop 1
    divine 1
    swap 3
    call os_neptune_locks_multisig__verify_key
    divine 1
    swap 1
    call os_neptune_locks_multisig__verify_key
    pop 1
    return

__mask6:
    // keys 1+2
    pop 1
    swap 2
    pop 1
    divine 1
    swap 2
    call os_neptune_locks_multisig__verify_key
    divine 1
    swap 1
    call os_neptune_locks_multisig__verify_key
    return

Neighbours