------- Copy 17 bytes from BUFFER to TARGET before: buffer = |0123456789abcdefXXXXX| before: target = |---------------------| after: buffer = |0123456789abcdefXXXXX| after: target = |0123456789abcdefX----| ------- Destructive overlap #1 before: |012345678901234567890| after: |000000000000000000890| ------- Destructive overlap #2 before: target = |---------------------| after: target = |-xxx-----------------| ------- Destructive overlap #3 (max length) ------- Non-destructive overlap buf[0:4] = buf[10:14] before: buf = |0123456789abcde| after: buf = |abcde56789abcde| ------- Move inverse 17 bytes from BUFFER to TARGET before: target = |-xxx-----------------| after: target = |Xfedcba9876543210----|