• Kirill Smelkov's avatar
    test/*: Add py3 + pickle protocol=3 ZODB kind to test matrix · 479c353d
    Kirill Smelkov authored
    Adjust conftest.py and gen_testdata to generate test data files from
    under ZODB/py3 . Adjust testutil to be able to open such databases from
    under py2. As seen in the appendix the most difference in generated data
    is that *UNICODE opcodes are used instead of *STRING. Adjust test_dump
    to normalize UNICODE and further BYTES so that zdump.zpickledis.ok
    golden files are handled ok under both py2 and py3.
    
    Appendix.
    
        (zdev+py39.env) kirr@deca:~/src/wendelin/z/zodbtools/zodbtools/test/testdata/1_!zext$ xdiff py2_pickle3/zdump.zpickledis.ok py3_pickle3/zdump.zpickledis.ok
        diff --git a/py2_pickle3/zdump.zpickledis.ok b/py3_pickle3/zdump.zpickledis.ok
        index cd9d7f5..b44cbc8 100644
        --- a/py2_pickle3/zdump.zpickledis.ok
        +++ b/py3_pickle3/zdump.zpickledis.ok
        @@ -2,16 +2,16 @@ txn 0285cbac70a3d733 "p"
         user "user0.12"
         description "step 0.12"
         extension ""
        -obj 0000000000000001 34 sha1:fc9e49cca756681a9f36c915c6b7b8ad79f17cbc
        +obj 0000000000000001 37 sha1:fb5c1963fc8207cbf2e9959ebb9a29eec5f56ae1
               0: \x80 PROTO      3
               2: c    GLOBAL     '__main__ Object'
        -     19: q    BINPUT     1
        +     19: q    BINPUT     0
              21: .    STOP
           highest protocol among opcodes = 2
              22: \x80 PROTO      3
        -     24: U    SHORT_BINSTRING 'f0.12'
        -     31: q    BINPUT     2
        -     33: .    STOP
        +     24: X    BINUNICODE 'f0.12'
        +     34: q    BINPUT     1
        +     36: .    STOP
           highest protocol among opcodes = 2
    
        @@ -19,16 +19,16 @@ txn 0285cbac7eb85219 "p"
         user "user0.15"
         description "step 0.15"
         extension ""
        -obj 0000000000000006 34 sha1:76a94af22a81cd970845aeb3536f428a96afcfc7
        +obj 0000000000000006 37 sha1:4baeb60acd0e085453e46bbeea395bf028652f28
               0: \x80 PROTO      3
               2: c    GLOBAL     '__main__ Object'
        -     19: q    BINPUT     1
        +     19: q    BINPUT     0
              21: .    STOP
           highest protocol among opcodes = 2
              22: \x80 PROTO      3
        -     24: U    SHORT_BINSTRING 'e0.15'
        -     31: q    BINPUT     2
        -     33: .    STOP
        +     24: X    BINUNICODE 'e0.15'
        +     34: q    BINPUT     1
        +     36: .    STOP
           highest protocol among opcodes = 2
    
        @@ -36,16 +36,16 @@ txn 0285cbac917e4b4c "p"
         user "user0.19"
         description "step 0.19"
         extension ""
        -obj 0000000000000005 34 sha1:4bd994052ba9a6b1f328c252d8766f13c53ae209
        +obj 0000000000000005 37 sha1:de7296cc2cea8492226a55e9b4f42daa4070f5af
               0: \x80 PROTO      3
               2: c    GLOBAL     '__main__ Object'
        -     19: q    BINPUT     1
        +     19: q    BINPUT     0
              21: .    STOP
           highest protocol among opcodes = 2
              22: \x80 PROTO      3
        -     24: U    SHORT_BINSTRING 'a0.19'
        -     31: q    BINPUT     2
        -     33: .    STOP
        +     24: X    BINUNICODE 'a0.19'
        +     34: q    BINPUT     1
        +     36: .    STOP
           highest protocol among opcodes = 2
    
        @@ -53,16 +53,16 @@ txn 0285cbac9ae147e6 "p"
         user "user0.21"
         description "step 0.21"
         extension ""
        -obj 0000000000000002 34 sha1:633b0e1e89447d452468367784717fb48b0b83b1
        +obj 0000000000000002 37 sha1:d9bd775ab8808616fc61abddd57f505c2e53e00e
               0: \x80 PROTO      3
               2: c    GLOBAL     '__main__ Object'
        -     19: q    BINPUT     1
        +     19: q    BINPUT     0
              21: .    STOP
           highest protocol among opcodes = 2
              22: \x80 PROTO      3
        -     24: U    SHORT_BINSTRING 'd0.21'
        -     31: q    BINPUT     2
        -     33: .    STOP
        +     24: X    BINUNICODE 'd0.21'
        +     34: q    BINPUT     1
        +     36: .    STOP
           highest protocol among opcodes = 2
    
        @@ -70,16 +70,16 @@ txn 0285cbacada74119 "p"
         user "root0.0\nYour\nMagesty "
         description "undo 0.0\nmore detailed description\n\nzzz ..."
         extension ""
        -obj 0000000000000007 34 sha1:b4bf7b467c62a1b51099ba1cc5b5aecd444d598d
        +obj 0000000000000007 37 sha1:2e9378511903201204cb5f08a4d6c52033a05545
               0: \x80 PROTO      3
               2: c    GLOBAL     '__main__ Object'
        -     19: q    BINPUT     1
        +     19: q    BINPUT     0
              21: .    STOP
           highest protocol among opcodes = 2
              22: \x80 PROTO      3
        -     24: U    SHORT_BINSTRING 'c0.22'
        -     31: q    BINPUT     2
        -     33: .    STOP
        +     24: X    BINUNICODE 'c0.22'
        +     34: q    BINPUT     1
        +     36: .    STOP
           highest protocol among opcodes = 2
    
        @@ -87,16 +87,16 @@ txn 0285cbacb258bf66 "p"
         user "root0.1\nYour\nMagesty "
         description "undo 0.1\nmore detailed description\n\nzzz ...\t"
         extension ""
        -obj 0000000000000003 34 sha1:3e5f02a2aa5f0ea3747a6c0ffeec090654091583
        +obj 0000000000000003 37 sha1:c83a8f07d208ea001abe540845e4ce75a7a32aee
               0: \x80 PROTO      3
               2: c    GLOBAL     '__main__ Object'
        -     19: q    BINPUT     1
        +     19: q    BINPUT     0
              21: .    STOP
           highest protocol among opcodes = 2
              22: \x80 PROTO      3
        -     24: U    SHORT_BINSTRING 'g0.11'
        -     31: q    BINPUT     2
        -     33: .    STOP
        +     24: X    BINUNICODE 'g0.11'
        +     34: q    BINPUT     1
        +     36: .    STOP
           highest protocol among opcodes = 2
    
        @@ -104,71 +104,92 @@ txn 0285cbacbbbbbc00 "p"
         user ""
         description "predelete 4"
         extension ""
        -obj 0000000000000000 199 sha1:d9c10b69422e9a8279e2f738d9c270b88ee49861
        +obj 0000000000000000 265 sha1:63708dd8f80d0b1f30f35f220f3d2207cb44e034
               0: \x80 PROTO      3
               2: c    GLOBAL     'persistent.mapping PersistentMapping'
        -     40: q    BINPUT     1
        +     40: q    BINPUT     0
              42: .    STOP
           highest protocol among opcodes = 2
              43: \x80 PROTO      3
              45: }    EMPTY_DICT
        -     46: q    BINPUT     2
        -     48: U    SHORT_BINSTRING 'data'
        -     54: q    BINPUT     3
        -     56: }    EMPTY_DICT
        -     57: q    BINPUT     4
        -     59: (    MARK
        -     60: U        SHORT_BINSTRING 'a'
        -     63: C        SHORT_BINBYTES '\x00\x00\x00\x00\x00\x00\x00\x05'
        -     73: c        GLOBAL     '__main__ Object'
        -     90: q        BINPUT     5
        -     92: \x86     TUPLE2
        -     93: Q        BINPERSID
        -     94: U        SHORT_BINSTRING 'c'
        -     97: C        SHORT_BINBYTES '\x00\x00\x00\x00\x00\x00\x00\x07'
        -    107: h        BINGET     5
        -    109: \x86     TUPLE2
        -    110: Q        BINPERSID
        -    111: U        SHORT_BINSTRING 'b'
        -    114: C        SHORT_BINBYTES '\x00\x00\x00\x00\x00\x00\x00\x08'
        -    124: h        BINGET     5
        -    126: \x86     TUPLE2
        -    127: Q        BINPERSID
        -    128: U        SHORT_BINSTRING 'e'
        -    131: C        SHORT_BINBYTES '\x00\x00\x00\x00\x00\x00\x00\x06'
        -    141: h        BINGET     5
        -    143: \x86     TUPLE2
        -    144: Q        BINPERSID
        -    145: U        SHORT_BINSTRING 'd'
        -    148: C        SHORT_BINBYTES '\x00\x00\x00\x00\x00\x00\x00\x02'
        -    158: h        BINGET     5
        -    160: \x86     TUPLE2
        -    161: Q        BINPERSID
        -    162: U        SHORT_BINSTRING 'g'
        -    165: C        SHORT_BINBYTES '\x00\x00\x00\x00\x00\x00\x00\x03'
        -    175: h        BINGET     5
        -    177: \x86     TUPLE2
        -    178: Q        BINPERSID
        -    179: U        SHORT_BINSTRING 'f'
        -    182: C        SHORT_BINBYTES '\x00\x00\x00\x00\x00\x00\x00\x01'
        -    192: h        BINGET     5
        -    194: \x86     TUPLE2
        -    195: Q        BINPERSID
        -    196: u        SETITEMS   (MARK at 59)
        -    197: s    SETITEM
        -    198: .    STOP
        +     46: q    BINPUT     1
        +     48: X    BINUNICODE 'data'
        +     57: q    BINPUT     2
        +     59: }    EMPTY_DICT
        +     60: q    BINPUT     3
        +     62: (    MARK
        +     63: X        BINUNICODE 'f'
        +     69: q        BINPUT     4
        +     71: C        SHORT_BINBYTES b'\x00\x00\x00\x00\x00\x00\x00\x01'
        +     81: q        BINPUT     5
        +     83: c        GLOBAL     '__main__ Object'
        +    100: q        BINPUT     6
        +    102: \x86     TUPLE2
        +    103: q        BINPUT     7
        +    105: Q        BINPERSID
        +    106: X        BINUNICODE 'd'
        +    112: q        BINPUT     8
        +    114: C        SHORT_BINBYTES b'\x00\x00\x00\x00\x00\x00\x00\x02'
        +    124: q        BINPUT     9
        +    126: h        BINGET     6
        +    128: \x86     TUPLE2
        +    129: q        BINPUT     10
        +    131: Q        BINPERSID
        +    132: X        BINUNICODE 'g'
        +    138: q        BINPUT     11
        +    140: C        SHORT_BINBYTES b'\x00\x00\x00\x00\x00\x00\x00\x03'
        +    150: q        BINPUT     12
        +    152: h        BINGET     6
        +    154: \x86     TUPLE2
        +    155: q        BINPUT     13
        +    157: Q        BINPERSID
        +    158: X        BINUNICODE 'b'
        +    164: q        BINPUT     14
        +    166: C        SHORT_BINBYTES b'\x00\x00\x00\x00\x00\x00\x00\x08'
        +    176: q        BINPUT     15
        +    178: h        BINGET     6
        +    180: \x86     TUPLE2
        +    181: q        BINPUT     16
        +    183: Q        BINPERSID
        +    184: X        BINUNICODE 'a'
        +    190: q        BINPUT     17
        +    192: C        SHORT_BINBYTES b'\x00\x00\x00\x00\x00\x00\x00\x05'
        +    202: q        BINPUT     18
        +    204: h        BINGET     6
        +    206: \x86     TUPLE2
        +    207: q        BINPUT     19
        +    209: Q        BINPERSID
        +    210: X        BINUNICODE 'e'
        +    216: q        BINPUT     20
        +    218: C        SHORT_BINBYTES b'\x00\x00\x00\x00\x00\x00\x00\x06'
        +    228: q        BINPUT     21
        +    230: h        BINGET     6
        +    232: \x86     TUPLE2
        +    233: q        BINPUT     22
        +    235: Q        BINPERSID
        +    236: X        BINUNICODE 'c'
        +    242: q        BINPUT     23
        +    244: C        SHORT_BINBYTES b'\x00\x00\x00\x00\x00\x00\x00\x07'
        +    254: q        BINPUT     24
        +    256: h        BINGET     6
        +    258: \x86     TUPLE2
        +    259: q        BINPUT     25
        +    261: Q        BINPERSID
        +    262: u        SETITEMS   (MARK at 62)
        +    263: s    SETITEM
        +    264: .    STOP
           highest protocol among opcodes = 3
    
        -obj 0000000000000008 32 sha1:dfe254b2f091cf0c9bc835713d53012d44e7e7ca
        +obj 0000000000000008 35 sha1:70dc33558d26431f1d6dbd576cf4b677032c97fd
               0: \x80 PROTO      3
               2: c    GLOBAL     '__main__ Object'
        -     19: q    BINPUT     1
        +     19: q    BINPUT     0
              21: .    STOP
           highest protocol among opcodes = 2
              22: \x80 PROTO      3
        -     24: U    SHORT_BINSTRING 'b0*'
        -     29: q    BINPUT     2
        -     31: .    STOP
        +     24: X    BINUNICODE 'b0*'
        +     32: q    BINPUT     1
        +     34: .    STOP
           highest protocol among opcodes = 2
    
        @@ -176,16 +197,16 @@ txn 0285cbad02222280 " "
         user "user1.0"
         description "step 1.0"
         extension ""
        -obj 0000000000000006 33 sha1:8f86d80dab366ac9780cdf9fd11aa622364397db
        +obj 0000000000000006 36 sha1:fc39de2e2d959f996fc80c1f8fa58fd8584e9bd6
               0: \x80 PROTO      3
               2: c    GLOBAL     '__main__ Object'
        -     19: q    BINPUT     1
        +     19: q    BINPUT     0
              21: .    STOP
           highest protocol among opcodes = 2
              22: \x80 PROTO      3
        -     24: U    SHORT_BINSTRING 'e1.0'
        -     30: q    BINPUT     2
        -     32: .    STOP
        +     24: X    BINUNICODE 'e1.0'
        +     33: q    BINPUT     1
        +     35: .    STOP
           highest protocol among opcodes = 2
    
        @@ -193,16 +214,16 @@ txn 0285cbad06d3a0cc " "
         user "user1.1"
         description "step 1.1"
         extension ""
        -obj 0000000000000008 33 sha1:3a63a76c25b677ada2cc1281f0fcbca823c2fde8
        +obj 0000000000000008 36 sha1:48ceba60e193e905cb25a4e452bacbfba1e6f54a
               0: \x80 PROTO      3
               2: c    GLOBAL     '__main__ Object'
        -     19: q    BINPUT     1
        +     19: q    BINPUT     0
              21: .    STOP
           highest protocol among opcodes = 2
              22: \x80 PROTO      3
        -     24: U    SHORT_BINSTRING 'b1.1'
        -     30: q    BINPUT     2
        -     32: .    STOP
        +     24: X    BINUNICODE 'b1.1'
        +     33: q    BINPUT     1
        +     35: .    STOP
           highest protocol among opcodes = 2
    
        @@ -210,16 +231,16 @@ txn 0285cbad0b851f19 " "
         user "user1.2"
         description "step 1.2"
         extension ""
        -obj 0000000000000003 33 sha1:c13b686e24c0b49869156feaafa5299a0be0db54
        +obj 0000000000000003 36 sha1:5484c69f420ce2bc74798fa0af92cad1fff46ac5
               0: \x80 PROTO      3
               2: c    GLOBAL     '__main__ Object'
        -     19: q    BINPUT     1
        +     19: q    BINPUT     0
              21: .    STOP
           highest protocol among opcodes = 2
              22: \x80 PROTO      3
        -     24: U    SHORT_BINSTRING 'g1.2'
        -     30: q    BINPUT     2
        -     32: .    STOP
        +     24: X    BINUNICODE 'g1.2'
        +     33: q    BINPUT     1
        +     35: .    STOP
           highest protocol among opcodes = 2
    
        @@ -227,16 +248,16 @@ txn 0285cbad10369d66 " "
         user "user1.3"
         description "step 1.3"
         extension ""
        -obj 0000000000000003 33 sha1:edbfe9c47fdfd3eeb89578d2b975196b72e04a47
        +obj 0000000000000003 36 sha1:c58b6020a7991c2b763ad922d1a9ae93f341883b
               0: \x80 PROTO      3
               2: c    GLOBAL     '__main__ Object'
        -     19: q    BINPUT     1
        +     19: q    BINPUT     0
              21: .    STOP
           highest protocol among opcodes = 2
              22: \x80 PROTO      3
        -     24: U    SHORT_BINSTRING 'g1.3'
        -     30: q    BINPUT     2
        -     32: .    STOP
        +     24: X    BINUNICODE 'g1.3'
        +     33: q    BINPUT     1
        +     35: .    STOP
           highest protocol among opcodes = 2
    
        @@ -244,16 +265,16 @@ txn 0285cbad14e81bb3 " "
         user "user1.4"
         description "step 1.4"
         extension ""
        -obj 0000000000000007 33 sha1:0ce3b56cc68602d8fcf9633527fc02d68d3c7963
        +obj 0000000000000007 36 sha1:a074839c67efb6d96e1d4400691bdb58e0b3ca43
               0: \x80 PROTO      3
               2: c    GLOBAL     '__main__ Object'
        -     19: q    BINPUT     1
        +     19: q    BINPUT     0
              21: .    STOP
           highest protocol among opcodes = 2
              22: \x80 PROTO      3
        -     24: U    SHORT_BINSTRING 'c1.4'
        -     30: q    BINPUT     2
        -     32: .    STOP
        +     24: X    BINUNICODE 'c1.4'
        +     33: q    BINPUT     1
        +     35: .    STOP
           highest protocol among opcodes = 2
    
        @@ -261,16 +282,16 @@ txn 0285cbad19999a00 " "
         user "user1.5"
         description "step 1.5"
         extension ""
        -obj 0000000000000001 33 sha1:9bb04c55d1990c274fcc9f6d71701456c999154d
        +obj 0000000000000001 36 sha1:6718431686e2413a926aa146c76ef3007de9d39b
               0: \x80 PROTO      3
               2: c    GLOBAL     '__main__ Object'
        -     19: q    BINPUT     1
        +     19: q    BINPUT     0
              21: .    STOP
           highest protocol among opcodes = 2
              22: \x80 PROTO      3
        -     24: U    SHORT_BINSTRING 'f1.5'
        -     30: q    BINPUT     2
        -     32: .    STOP
        +     24: X    BINUNICODE 'f1.5'
        +     33: q    BINPUT     1
        +     35: .    STOP
           highest protocol among opcodes = 2
    
        @@ -278,16 +299,16 @@ txn 0285cbad1e4b184c " "
         user "user1.6"
         description "step 1.6"
         extension ""
        -obj 0000000000000002 33 sha1:3856df32ef7c512e9fd2599772e431ce3a18b5f5
        +obj 0000000000000002 36 sha1:9cb878d16cc4c0968eb9942b45d7c7f84b2054ef
               0: \x80 PROTO      3
               2: c    GLOBAL     '__main__ Object'
        -     19: q    BINPUT     1
        +     19: q    BINPUT     0
              21: .    STOP
           highest protocol among opcodes = 2
              22: \x80 PROTO      3
        -     24: U    SHORT_BINSTRING 'd1.6'
        -     30: q    BINPUT     2
        -     32: .    STOP
        +     24: X    BINUNICODE 'd1.6'
        +     33: q    BINPUT     1
        +     35: .    STOP
           highest protocol among opcodes = 2
    
        @@ -295,16 +316,16 @@ txn 0285cbad22fc9699 " "
         user "user1.7"
         description "step 1.7"
         extension ""
        -obj 0000000000000007 33 sha1:3d9da3b8f59a10f15e7c6796023153089d58d969
        +obj 0000000000000007 36 sha1:bc53969fc907268a68ab4e9c601e114157a6b7ed
               0: \x80 PROTO      3
               2: c    GLOBAL     '__main__ Object'
        -     19: q    BINPUT     1
        +     19: q    BINPUT     0
              21: .    STOP
           highest protocol among opcodes = 2
              22: \x80 PROTO      3
        -     24: U    SHORT_BINSTRING 'c1.7'
        -     30: q    BINPUT     2
        -     32: .    STOP
        +     24: X    BINUNICODE 'c1.7'
        +     33: q    BINPUT     1
        +     35: .    STOP
           highest protocol among opcodes = 2
    
        @@ -312,16 +333,16 @@ txn 0285cbad27ae14e6 " "
         user "user1.8"
         description "step 1.8"
         extension ""
        -obj 0000000000000007 33 sha1:42c7e6fe473e6d99867b134c44c2d97813629b29
        +obj 0000000000000007 36 sha1:bb7b95b7f8cfcb61b5a19f646a9f54b05d445823
               0: \x80 PROTO      3
               2: c    GLOBAL     '__main__ Object'
        -     19: q    BINPUT     1
        +     19: q    BINPUT     0
              21: .    STOP
           highest protocol among opcodes = 2
              22: \x80 PROTO      3
        -     24: U    SHORT_BINSTRING 'c1.8'
        -     30: q    BINPUT     2
        -     32: .    STOP
        +     24: X    BINUNICODE 'c1.8'
        +     33: q    BINPUT     1
        +     35: .    STOP
           highest protocol among opcodes = 2
    
        @@ -329,16 +350,16 @@ txn 0285cbad2c5f9333 " "
         user "user1.9"
         description "step 1.9"
         extension ""
        -obj 0000000000000006 33 sha1:88921e4828cbbf11dc61ca6fbaf6595a88fe5076
        +obj 0000000000000006 36 sha1:e592ee7c81df854144e95f6a770786865a0d58d5
               0: \x80 PROTO      3
               2: c    GLOBAL     '__main__ Object'
        -     19: q    BINPUT     1
        +     19: q    BINPUT     0
              21: .    STOP
           highest protocol among opcodes = 2
              22: \x80 PROTO      3
        -     24: U    SHORT_BINSTRING 'e1.9'
        -     30: q    BINPUT     2
        -     32: .    STOP
        +     24: X    BINUNICODE 'e1.9'
        +     33: q    BINPUT     1
        +     35: .    STOP
           highest protocol among opcodes = 2
    
        @@ -346,16 +367,16 @@ txn 0285cbad31111180 " "
         user "user1.10"
         description "step 1.10"
         extension ""
        -obj 0000000000000005 34 sha1:70fe501d55fc4052b73f5e3473262a48555f375f
        +obj 0000000000000005 37 sha1:b2976e8cc01b2c9914b396cd6d3fdb49b0488856
               0: \x80 PROTO      3
               2: c    GLOBAL     '__main__ Object'
        -     19: q    BINPUT     1
        +     19: q    BINPUT     0
              21: .    STOP
           highest protocol among opcodes = 2
              22: \x80 PROTO      3
        -     24: U    SHORT_BINSTRING 'a1.10'
        -     31: q    BINPUT     2
        -     33: .    STOP
        +     24: X    BINUNICODE 'a1.10'
        +     34: q    BINPUT     1
        +     36: .    STOP
           highest protocol among opcodes = 2
    
        @@ -363,16 +384,16 @@ txn 0285cbad35c28fcc " "
         user "user1.11"
         description "step 1.11"
         extension ""
        -obj 0000000000000007 34 sha1:f1550b205f2cec40b8716673663fb6e446568772
        +obj 0000000000000007 37 sha1:6e4a4cf52bb36edaa083b1da4b59f3597ad6ea02
               0: \x80 PROTO      3
               2: c    GLOBAL     '__main__ Object'
        -     19: q    BINPUT     1
        +     19: q    BINPUT     0
              21: .    STOP
           highest protocol among opcodes = 2
              22: \x80 PROTO      3
        -     24: U    SHORT_BINSTRING 'c1.11'
        -     31: q    BINPUT     2
        -     33: .    STOP
        +     24: X    BINUNICODE 'c1.11'
        +     34: q    BINPUT     1
        +     36: .    STOP
           highest protocol among opcodes = 2
    
        @@ -380,16 +401,16 @@ txn 0285cbad3a740e19 " "
         user "user1.12"
         description "step 1.12"
         extension ""
        -obj 0000000000000006 34 sha1:e4587785ac67a316d288d89a2ecf5f7548804416
        +obj 0000000000000006 37 sha1:fad24b6d7758e671a255810ead8994459e9b0417
               0: \x80 PROTO      3
               2: c    GLOBAL     '__main__ Object'
        -     19: q    BINPUT     1
        +     19: q    BINPUT     0
              21: .    STOP
           highest protocol among opcodes = 2
              22: \x80 PROTO      3
        -     24: U    SHORT_BINSTRING 'e1.12'
        -     31: q    BINPUT     2
        -     33: .    STOP
        +     24: X    BINUNICODE 'e1.12'
        +     34: q    BINPUT     1
        +     36: .    STOP
           highest protocol among opcodes = 2
    
        @@ -397,16 +418,16 @@ txn 0285cbad3f258c66 " "
         user "user1.13"
         description "step 1.13"
         extension ""
        -obj 0000000000000003 34 sha1:c40d417ad5140d3c0a76b8119e1bc3f77924851f
        +obj 0000000000000003 37 sha1:be8b8aacb1e6b6e4661a96fe6f741ddc653acc41
               0: \x80 PROTO      3
               2: c    GLOBAL     '__main__ Object'
        -     19: q    BINPUT     1
        +     19: q    BINPUT     0
              21: .    STOP
           highest protocol among opcodes = 2
              22: \x80 PROTO      3
        -     24: U    SHORT_BINSTRING 'g1.13'
        -     31: q    BINPUT     2
        -     33: .    STOP
        +     24: X    BINUNICODE 'g1.13'
        +     34: q    BINPUT     1
        +     36: .    STOP
           highest protocol among opcodes = 2
    
        @@ -414,16 +435,16 @@ txn 0285cbad43d70ab3 " "
         user "user1.14"
         description "step 1.14"
         extension ""
        -obj 0000000000000003 34 sha1:141ee9a480f2e04c1c2b9fab6cab263010ab32cd
        +obj 0000000000000003 37 sha1:c65e91e03c291d0082a6ea58c9082e29b9f28c55
               0: \x80 PROTO      3
               2: c    GLOBAL     '__main__ Object'
        -     19: q    BINPUT     1
        +     19: q    BINPUT     0
              21: .    STOP
           highest protocol among opcodes = 2
              22: \x80 PROTO      3
        -     24: U    SHORT_BINSTRING 'g1.14'
        -     31: q    BINPUT     2
        -     33: .    STOP
        +     24: X    BINUNICODE 'g1.14'
        +     34: q    BINPUT     1
        +     36: .    STOP
           highest protocol among opcodes = 2
    
        @@ -431,16 +452,16 @@ txn 0285cbad48888900 " "
         user "user1.15"
         description "step 1.15"
         extension ""
        -obj 0000000000000002 34 sha1:ffd9e2447b4d6230d8e4c6584967ebd45bdb69cd
        +obj 0000000000000002 37 sha1:8b850edece74832eb6ff1e4be78b05f52ef5609c
               0: \x80 PROTO      3
               2: c    GLOBAL     '__main__ Object'
        -     19: q    BINPUT     1
        +     19: q    BINPUT     0
              21: .    STOP
           highest protocol among opcodes = 2
              22: \x80 PROTO      3
        -     24: U    SHORT_BINSTRING 'd1.15'
        -     31: q    BINPUT     2
        -     33: .    STOP
        +     24: X    BINUNICODE 'd1.15'
        +     34: q    BINPUT     1
        +     36: .    STOP
           highest protocol among opcodes = 2
    
        @@ -448,16 +469,16 @@ txn 0285cbad4d3a074c " "
         user "user1.16"
         description "step 1.16"
         extension ""
        -obj 0000000000000003 34 sha1:e320d84b1e6f9b5507665684c57938c97fb8707a
        +obj 0000000000000003 37 sha1:9480ee152fd13794009dd03d188cf82ec9fb4819
               0: \x80 PROTO      3
               2: c    GLOBAL     '__main__ Object'
        -     19: q    BINPUT     1
        +     19: q    BINPUT     0
              21: .    STOP
           highest protocol among opcodes = 2
              22: \x80 PROTO      3
        -     24: U    SHORT_BINSTRING 'g1.16'
        -     31: q    BINPUT     2
        -     33: .    STOP
        +     24: X    BINUNICODE 'g1.16'
        +     34: q    BINPUT     1
        +     36: .    STOP
           highest protocol among opcodes = 2
    
        @@ -465,16 +486,16 @@ txn 0285cbad51eb8599 " "
         user "user1.17"
         description "step 1.17"
         extension ""
        -obj 0000000000000001 34 sha1:a64a2fa4d8de13124ad15958bb44e93bb50be691
        +obj 0000000000000001 37 sha1:ee2d6c62270d71f460cfbe50c25c4558f2e4db96
               0: \x80 PROTO      3
               2: c    GLOBAL     '__main__ Object'
        -     19: q    BINPUT     1
        +     19: q    BINPUT     0
              21: .    STOP
           highest protocol among opcodes = 2
              22: \x80 PROTO      3
        -     24: U    SHORT_BINSTRING 'f1.17'
        -     31: q    BINPUT     2
        -     33: .    STOP
        +     24: X    BINUNICODE 'f1.17'
        +     34: q    BINPUT     1
        +     36: .    STOP
           highest protocol among opcodes = 2
    
        @@ -482,16 +503,16 @@ txn 0285cbad569d03e6 " "
         user "user1.18"
         description "step 1.18"
         extension ""
        -obj 0000000000000005 34 sha1:1a13c223b1e3c4336157bd9ea48bcebbf2bfeb83
        +obj 0000000000000005 37 sha1:aabc707728e1624e47e00b44c0536837c138f6e9
               0: \x80 PROTO      3
               2: c    GLOBAL     '__main__ Object'
        -     19: q    BINPUT     1
        +     19: q    BINPUT     0
              21: .    STOP
           highest protocol among opcodes = 2
              22: \x80 PROTO      3
        -     24: U    SHORT_BINSTRING 'a1.18'
        -     31: q    BINPUT     2
        -     33: .    STOP
        +     24: X    BINUNICODE 'a1.18'
        +     34: q    BINPUT     1
        +     36: .    STOP
           highest protocol among opcodes = 2
    
        @@ -499,16 +520,16 @@ txn 0285cbad5b4e8233 " "
         user "user1.19"
         description "step 1.19"
         extension ""
        -obj 0000000000000003 34 sha1:a0b9f323870e42230530e88c3d0df4d0ff53d169
        +obj 0000000000000003 37 sha1:ea6e91b0041c018c8c77ebe55596fb44593396a5
               0: \x80 PROTO      3
               2: c    GLOBAL     '__main__ Object'
        -     19: q    BINPUT     1
        +     19: q    BINPUT     0
              21: .    STOP
           highest protocol among opcodes = 2
              22: \x80 PROTO      3
        -     24: U    SHORT_BINSTRING 'g1.19'
        -     31: q    BINPUT     2
        -     33: .    STOP
        +     24: X    BINUNICODE 'g1.19'
        +     34: q    BINPUT     1
        +     36: .    STOP
           highest protocol among opcodes = 2
    
        @@ -516,16 +537,16 @@ txn 0285cbad60000080 " "
         user "user1.20"
         description "step 1.20"
         extension ""
        -obj 0000000000000003 34 sha1:9d877b2756905d307e10300aa81428ea05c630d2
        +obj 0000000000000003 37 sha1:2edb6e67e9c1d0c0dd7c4bf008c81ebcf16fe0b7
               0: \x80 PROTO      3
               2: c    GLOBAL     '__main__ Object'
        -     19: q    BINPUT     1
        +     19: q    BINPUT     0
              21: .    STOP
           highest protocol among opcodes = 2
              22: \x80 PROTO      3
        -     24: U    SHORT_BINSTRING 'g1.20'
        -     31: q    BINPUT     2
        -     33: .    STOP
        +     24: X    BINUNICODE 'g1.20'
        +     34: q    BINPUT     1
        +     36: .    STOP
           highest protocol among opcodes = 2
    
        @@ -533,16 +554,16 @@ txn 0285cbad64b17ecc " "
         user "user1.21"
         description "step 1.21"
         extension ""
        -obj 0000000000000006 34 sha1:4087f3ba62712e5c29b0d861d65bcc9904f0828e
        +obj 0000000000000006 37 sha1:39f276b08f1dbe1c10d8d78fbbb2b56a8adf47bc
               0: \x80 PROTO      3
               2: c    GLOBAL     '__main__ Object'
        -     19: q    BINPUT     1
        +     19: q    BINPUT     0
              21: .    STOP
           highest protocol among opcodes = 2
              22: \x80 PROTO      3
        -     24: U    SHORT_BINSTRING 'e1.21'
        -     31: q    BINPUT     2
        -     33: .    STOP
        +     24: X    BINUNICODE 'e1.21'
        +     34: q    BINPUT     1
        +     36: .    STOP
           highest protocol among opcodes = 2
    
        @@ -550,16 +571,16 @@ txn 0285cbad6962fd19 " "
         user "user1.22"
         description "step 1.22"
         extension ""
        -obj 0000000000000005 34 sha1:7f234b2ebf6c51bbc2acf55bc481b8ca0912b088
        +obj 0000000000000005 37 sha1:da8d342e0f80ea707724e47afc06640ab2d5a91b
               0: \x80 PROTO      3
               2: c    GLOBAL     '__main__ Object'
        -     19: q    BINPUT     1
        +     19: q    BINPUT     0
              21: .    STOP
           highest protocol among opcodes = 2
              22: \x80 PROTO      3
        -     24: U    SHORT_BINSTRING 'a1.22'
        -     31: q    BINPUT     2
        -     33: .    STOP
        +     24: X    BINUNICODE 'a1.22'
        +     34: q    BINPUT     1
        +     36: .    STOP
           highest protocol among opcodes = 2
    
        @@ -567,16 +588,16 @@ txn 0285cbad6e147b66 " "
         user "user1.23"
         description "step 1.23"
         extension ""
        -obj 0000000000000005 34 sha1:b54c8d6f9415eef59c5e4598d4ea459c7def7ae5
        +obj 0000000000000005 37 sha1:97ab286d00da92b84ccf43ead31cd607bf847e6d
               0: \x80 PROTO      3
               2: c    GLOBAL     '__main__ Object'
        -     19: q    BINPUT     1
        +     19: q    BINPUT     0
              21: .    STOP
           highest protocol among opcodes = 2
              22: \x80 PROTO      3
        -     24: U    SHORT_BINSTRING 'a1.23'
        -     31: q    BINPUT     2
        -     33: .    STOP
        +     24: X    BINUNICODE 'a1.23'
        +     34: q    BINPUT     1
        +     36: .    STOP
           highest protocol among opcodes = 2
    
        @@ -584,16 +605,16 @@ txn 0285cbad72c5f9b3 " "
         user "user1.24"
         description "step 1.24"
         extension ""
        -obj 0000000000000001 34 sha1:fc513f6a915be326a3d1212b12b389f284a329b2
        +obj 0000000000000001 37 sha1:fdb7cbf61232f415712183ed09075677d401141f
               0: \x80 PROTO      3
               2: c    GLOBAL     '__main__ Object'
        -     19: q    BINPUT     1
        +     19: q    BINPUT     0
              21: .    STOP
           highest protocol among opcodes = 2
              22: \x80 PROTO      3
        -     24: U    SHORT_BINSTRING 'f1.24'
        -     31: q    BINPUT     2
        -     33: .    STOP
        +     24: X    BINUNICODE 'f1.24'
        +     34: q    BINPUT     1
        +     36: .    STOP
           highest protocol among opcodes = 2
    
        @@ -613,18 +634,20 @@ txn 0285cbad80da7499 " "
         user "user"
         description "cyclic reference"
         extension ""
        -obj 0000000000000006 39 sha1:baf12eac4d077427f66ff902f64d44a2a141bfd6
        +obj 0000000000000006 43 sha1:983e0d4ef28b594823f7279d8c08d998930d1ff8
               0: \x80 PROTO      3
               2: c    GLOBAL     '__main__ Object'
        -     19: q    BINPUT     1
        +     19: q    BINPUT     0
              21: .    STOP
           highest protocol among opcodes = 2
              22: \x80 PROTO      3
        -     24: C    SHORT_BINBYTES '\x00\x00\x00\x00\x00\x00\x00\x06'
        -     34: h    BINGET     1
        -     36: \x86 TUPLE2
        -     37: Q    BINPERSID
        -     38: .    STOP
        +     24: C    SHORT_BINBYTES b'\x00\x00\x00\x00\x00\x00\x00\x06'
        +     34: q    BINPUT     1
        +     36: h    BINGET     0
        +     38: \x86 TUPLE2
        +     39: q    BINPUT     2
        +     41: Q    BINPERSID
        +     42: .    STOP
           highest protocol among opcodes = 3
    
        @@ -632,71 +655,92 @@ txn 0285cbad858bf2e6 " "
         user ""
         description "predelete 6"
         extension ""
        -obj 0000000000000000 199 sha1:eaa0f1b643468f33c6b87a875d67eb3b349be5dd
        +obj 0000000000000000 265 sha1:78b3f0aaef3a8674a55a61e9693b4b0443316bc9
               0: \x80 PROTO      3
               2: c    GLOBAL     'persistent.mapping PersistentMapping'
        -     40: q    BINPUT     1
        +     40: q    BINPUT     0
              42: .    STOP
           highest protocol among opcodes = 2
              43: \x80 PROTO      3
              45: }    EMPTY_DICT
        -     46: q    BINPUT     2
        -     48: U    SHORT_BINSTRING 'data'
        -     54: q    BINPUT     3
        -     56: }    EMPTY_DICT
        -     57: q    BINPUT     4
        -     59: (    MARK
        -     60: U        SHORT_BINSTRING 'a'
        -     63: C        SHORT_BINBYTES '\x00\x00\x00\x00\x00\x00\x00\x05'
        -     73: c        GLOBAL     '__main__ Object'
        -     90: q        BINPUT     5
        -     92: \x86     TUPLE2
        -     93: Q        BINPERSID
        -     94: U        SHORT_BINSTRING 'c'
        -     97: C        SHORT_BINBYTES '\x00\x00\x00\x00\x00\x00\x00\x07'
        -    107: h        BINGET     5
        -    109: \x86     TUPLE2
        -    110: Q        BINPERSID
        -    111: U        SHORT_BINSTRING 'b'
        -    114: C        SHORT_BINBYTES '\x00\x00\x00\x00\x00\x00\x00\x08'
        -    124: h        BINGET     5
        -    126: \x86     TUPLE2
        -    127: Q        BINPERSID
        -    128: U        SHORT_BINSTRING 'e'
        -    131: C        SHORT_BINBYTES '\x00\x00\x00\x00\x00\x00\x00\t'
        -    141: h        BINGET     5
        -    143: \x86     TUPLE2
        -    144: Q        BINPERSID
        -    145: U        SHORT_BINSTRING 'd'
        -    148: C        SHORT_BINBYTES '\x00\x00\x00\x00\x00\x00\x00\x02'
        -    158: h        BINGET     5
        -    160: \x86     TUPLE2
        -    161: Q        BINPERSID
        -    162: U        SHORT_BINSTRING 'g'
        -    165: C        SHORT_BINBYTES '\x00\x00\x00\x00\x00\x00\x00\x03'
        -    175: h        BINGET     5
        -    177: \x86     TUPLE2
        -    178: Q        BINPERSID
        -    179: U        SHORT_BINSTRING 'f'
        -    182: C        SHORT_BINBYTES '\x00\x00\x00\x00\x00\x00\x00\x01'
        -    192: h        BINGET     5
        -    194: \x86     TUPLE2
        -    195: Q        BINPERSID
        -    196: u        SETITEMS   (MARK at 59)
        -    197: s    SETITEM
        -    198: .    STOP
        +     46: q    BINPUT     1
        +     48: X    BINUNICODE 'data'
        +     57: q    BINPUT     2
        +     59: }    EMPTY_DICT
        +     60: q    BINPUT     3
        +     62: (    MARK
        +     63: X        BINUNICODE 'f'
        +     69: q        BINPUT     4
        +     71: C        SHORT_BINBYTES b'\x00\x00\x00\x00\x00\x00\x00\x01'
        +     81: q        BINPUT     5
        +     83: c        GLOBAL     '__main__ Object'
        +    100: q        BINPUT     6
        +    102: \x86     TUPLE2
        +    103: q        BINPUT     7
        +    105: Q        BINPERSID
        +    106: X        BINUNICODE 'd'
        +    112: q        BINPUT     8
        +    114: C        SHORT_BINBYTES b'\x00\x00\x00\x00\x00\x00\x00\x02'
        +    124: q        BINPUT     9
        +    126: h        BINGET     6
        +    128: \x86     TUPLE2
        +    129: q        BINPUT     10
        +    131: Q        BINPERSID
        +    132: X        BINUNICODE 'g'
        +    138: q        BINPUT     11
        +    140: C        SHORT_BINBYTES b'\x00\x00\x00\x00\x00\x00\x00\x03'
        +    150: q        BINPUT     12
        +    152: h        BINGET     6
        +    154: \x86     TUPLE2
        +    155: q        BINPUT     13
        +    157: Q        BINPERSID
        +    158: X        BINUNICODE 'b'
        +    164: q        BINPUT     14
        +    166: C        SHORT_BINBYTES b'\x00\x00\x00\x00\x00\x00\x00\x08'
        +    176: q        BINPUT     15
        +    178: h        BINGET     6
        +    180: \x86     TUPLE2
        +    181: q        BINPUT     16
        +    183: Q        BINPERSID
        +    184: X        BINUNICODE 'a'
        +    190: q        BINPUT     17
        +    192: C        SHORT_BINBYTES b'\x00\x00\x00\x00\x00\x00\x00\x05'
        +    202: q        BINPUT     18
        +    204: h        BINGET     6
        +    206: \x86     TUPLE2
        +    207: q        BINPUT     19
        +    209: Q        BINPERSID
        +    210: X        BINUNICODE 'e'
        +    216: q        BINPUT     20
        +    218: C        SHORT_BINBYTES b'\x00\x00\x00\x00\x00\x00\x00\t'
        +    228: q        BINPUT     21
        +    230: h        BINGET     6
        +    232: \x86     TUPLE2
        +    233: q        BINPUT     22
        +    235: Q        BINPERSID
        +    236: X        BINUNICODE 'c'
        +    242: q        BINPUT     23
        +    244: C        SHORT_BINBYTES b'\x00\x00\x00\x00\x00\x00\x00\x07'
        +    254: q        BINPUT     24
        +    256: h        BINGET     6
        +    258: \x86     TUPLE2
        +    259: q        BINPUT     25
        +    261: Q        BINPERSID
        +    262: u        SETITEMS   (MARK at 62)
        +    263: s    SETITEM
        +    264: .    STOP
           highest protocol among opcodes = 3
    
        -obj 0000000000000009 32 sha1:c10d44876cbf78e49f7cc633d985206f51ecc278
        +obj 0000000000000009 35 sha1:4b20bfd26d2807d81c4c52b56034203b96babe5d
               0: \x80 PROTO      3
               2: c    GLOBAL     '__main__ Object'
        -     19: q    BINPUT     1
        +     19: q    BINPUT     0
              21: .    STOP
           highest protocol among opcodes = 2
              22: \x80 PROTO      3
        -     24: U    SHORT_BINSTRING 'e1*'
        -     29: q    BINPUT     2
        -     31: .    STOP
        +     24: X    BINUNICODE 'e1*'
        +     32: q    BINPUT     1
        +     34: .    STOP
           highest protocol among opcodes = 2
    
        @@ -710,16 +754,16 @@ txn 0285cbadc740db19 " "
         user "user2.0"
         description "step 2.0"
         extension ""
        -obj 0000000000000001 33 sha1:118c46c51bb0f08ce76d8f4f3b5d923b81abdd46
        +obj 0000000000000001 36 sha1:4698f11fc85b9eadd355d8114ed6f55b71377024
               0: \x80 PROTO      3
               2: c    GLOBAL     '__main__ Object'
        -     19: q    BINPUT     1
        +     19: q    BINPUT     0
              21: .    STOP
           highest protocol among opcodes = 2
              22: \x80 PROTO      3
        -     24: U    SHORT_BINSTRING 'f2.0'
        -     30: q    BINPUT     2
        -     32: .    STOP
        +     24: X    BINUNICODE 'f2.0'
        +     33: q    BINPUT     1
        +     35: .    STOP
           highest protocol among opcodes = 2
    
        @@ -727,16 +771,16 @@ txn 0285cbadcbf25966 " "
         user "user2.1"
         description "step 2.1"
         extension ""
        -obj 0000000000000002 33 sha1:89ff5e4440585130863b518c044d35e0154daecc
        +obj 0000000000000002 36 sha1:e2f891ce328ae3ae117d22649af0da7cd0b1946d
               0: \x80 PROTO      3
               2: c    GLOBAL     '__main__ Object'
        -     19: q    BINPUT     1
        +     19: q    BINPUT     0
              21: .    STOP
           highest protocol among opcodes = 2
              22: \x80 PROTO      3
        -     24: U    SHORT_BINSTRING 'd2.1'
        -     30: q    BINPUT     2
        -     32: .    STOP
        +     24: X    BINUNICODE 'd2.1'
        +     33: q    BINPUT     1
        +     35: .    STOP
           highest protocol among opcodes = 2
    
        @@ -744,16 +788,16 @@ txn 0285cbadd0a3d7b3 " "
         user "user2.2"
         description "step 2.2"
         extension ""
        -obj 0000000000000003 33 sha1:e0470e3dee47625819f9bfe8085c1bce2a7a4a42
        +obj 0000000000000003 36 sha1:d1df41d00d4a274b872cc3a461c0e817a56891e8
               0: \x80 PROTO      3
               2: c    GLOBAL     '__main__ Object'
        -     19: q    BINPUT     1
        +     19: q    BINPUT     0
              21: .    STOP
           highest protocol among opcodes = 2
              22: \x80 PROTO      3
        -     24: U    SHORT_BINSTRING 'g2.2'
        -     30: q    BINPUT     2
        -     32: .    STOP
        +     24: X    BINUNICODE 'g2.2'
        +     33: q    BINPUT     1
        +     35: .    STOP
           highest protocol among opcodes = 2
    
        @@ -761,16 +805,16 @@ txn 0285cbadd5555600 " "
         user "user2.3"
         description "step 2.3"
         extension ""
        -obj 0000000000000003 33 sha1:b1a3740b05c6cae5f6c851b715c76dd7348228a9
        +obj 0000000000000003 36 sha1:94f3e65e39ff51d57f15d484211b9b14cc764dc9
               0: \x80 PROTO      3
               2: c    GLOBAL     '__main__ Object'
        -     19: q    BINPUT     1
        +     19: q    BINPUT     0
              21: .    STOP
           highest protocol among opcodes = 2
              22: \x80 PROTO      3
        -     24: U    SHORT_BINSTRING 'g2.3'
        -     30: q    BINPUT     2
        -     32: .    STOP
        +     24: X    BINUNICODE 'g2.3'
        +     33: q    BINPUT     1
        +     35: .    STOP
           highest protocol among opcodes = 2
    
        @@ -778,16 +822,16 @@ txn 0285cbadda06d44c " "
         user "user2.4"
         description "step 2.4"
         extension ""
        -obj 0000000000000009 33 sha1:d0368e87213747ab68d8e4f7a87ff1ea959ea579
        +obj 0000000000000009 36 sha1:ee33bb85a5d8eedd010f1353a12710f19164e039
               0: \x80 PROTO      3
               2: c    GLOBAL     '__main__ Object'
        -     19: q    BINPUT     1
        +     19: q    BINPUT     0
              21: .    STOP
           highest protocol among opcodes = 2
              22: \x80 PROTO      3
        -     24: U    SHORT_BINSTRING 'e2.4'
        -     30: q    BINPUT     2
        -     32: .    STOP
        +     24: X    BINUNICODE 'e2.4'
        +     33: q    BINPUT     1
        +     35: .    STOP
           highest protocol among opcodes = 2
    
        @@ -795,16 +839,16 @@ txn 0285cbaddeb85299 " "
         user "user2.5"
         description "step 2.5"
         extension ""
        -obj 0000000000000005 33 sha1:e5af7f0b8e157926739f657e729594908d188a3d
        +obj 0000000000000005 36 sha1:c772534529d247cfc1b9fdf5a6af0e6d209718f5
               0: \x80 PROTO      3
               2: c    GLOBAL     '__main__ Object'
        -     19: q    BINPUT     1
        +     19: q    BINPUT     0
              21: .    STOP
           highest protocol among opcodes = 2
              22: \x80 PROTO      3
        -     24: U    SHORT_BINSTRING 'a2.5'
        -     30: q    BINPUT     2
        -     32: .    STOP
        +     24: X    BINUNICODE 'a2.5'
        +     33: q    BINPUT     1
        +     35: .    STOP
           highest protocol among opcodes = 2
    
        @@ -812,16 +856,16 @@ txn 0285cbade369d0e6 " "
         user "user2.6"
         description "step 2.6"
         extension ""
        -obj 0000000000000008 33 sha1:dc70c3b1413c79d75bcfdcc50c3e803273f857ef
        +obj 0000000000000008 36 sha1:100e5baf3b5cf7276d7657e7ebe515e4444be00a
               0: \x80 PROTO      3
               2: c    GLOBAL     '__main__ Object'
        -     19: q    BINPUT     1
        +     19: q    BINPUT     0
              21: .    STOP
           highest protocol among opcodes = 2
              22: \x80 PROTO      3
        -     24: U    SHORT_BINSTRING 'b2.6'
        -     30: q    BINPUT     2
        -     32: .    STOP
        +     24: X    BINUNICODE 'b2.6'
        +     33: q    BINPUT     1
        +     35: .    STOP
           highest protocol among opcodes = 2
    
        @@ -829,16 +873,16 @@ txn 0285cbade81b4f33 " "
         user "user2.7"
         description "step 2.7"
         extension ""
        -obj 0000000000000003 33 sha1:35892bc2c71edb022b029aa1e4bf8201ccab4b0c
        +obj 0000000000000003 36 sha1:6982830f7f9ec7f5c71c2926dffc85003463365f
               0: \x80 PROTO      3
               2: c    GLOBAL     '__main__ Object'
        -     19: q    BINPUT     1
        +     19: q    BINPUT     0
              21: .    STOP
           highest protocol among opcodes = 2
              22: \x80 PROTO      3
        -     24: U    SHORT_BINSTRING 'g2.7'
        -     30: q    BINPUT     2
        -     32: .    STOP
        +     24: X    BINUNICODE 'g2.7'
        +     33: q    BINPUT     1
        +     35: .    STOP
           highest protocol among opcodes = 2
    
        @@ -846,16 +890,16 @@ txn 0285cbadeccccd80 " "
         user "user2.8"
         description "step 2.8"
         extension ""
        -obj 0000000000000002 33 sha1:b2da174266d0f0e0b58c214e6d79851f4a18b554
        +obj 0000000000000002 36 sha1:679994a2775668088af510d185f118a6de678e9b
               0: \x80 PROTO      3
               2: c    GLOBAL     '__main__ Object'
        -     19: q    BINPUT     1
        +     19: q    BINPUT     0
              21: .    STOP
           highest protocol among opcodes = 2
              22: \x80 PROTO      3
        -     24: U    SHORT_BINSTRING 'd2.8'
        -     30: q    BINPUT     2
        -     32: .    STOP
        +     24: X    BINUNICODE 'd2.8'
        +     33: q    BINPUT     1
        +     35: .    STOP
           highest protocol among opcodes = 2
    
        @@ -863,16 +907,16 @@ txn 0285cbadf17e4bcc " "
         user "user2.9"
         description "step 2.9"
         extension ""
        -obj 0000000000000009 33 sha1:92cf61eb5855d3b25fecbe7a458f1b21946f5ba3
        +obj 0000000000000009 36 sha1:7926589c9adf282a8de6ec2d2da7aeeb054db0e8
               0: \x80 PROTO      3
               2: c    GLOBAL     '__main__ Object'
        -     19: q    BINPUT     1
        +     19: q    BINPUT     0
              21: .    STOP
           highest protocol among opcodes = 2
              22: \x80 PROTO      3
        -     24: U    SHORT_BINSTRING 'e2.9'
        -     30: q    BINPUT     2
        -     32: .    STOP
        +     24: X    BINUNICODE 'e2.9'
        +     33: q    BINPUT     1
        +     35: .    STOP
           highest protocol among opcodes = 2
    
        @@ -880,16 +924,16 @@ txn 0285cbadf62fca19 " "
         user "user2.10"
         description "step 2.10"
         extension ""
        -obj 0000000000000007 34 sha1:f737655162c594cf8296b38f7c435a5e8e06d6d7
        +obj 0000000000000007 37 sha1:230ddb4fcd957487b06a9a6690d0085a5f4e447f
               0: \x80 PROTO      3
               2: c    GLOBAL     '__main__ Object'
        -     19: q    BINPUT     1
        +     19: q    BINPUT     0
              21: .    STOP
           highest protocol among opcodes = 2
              22: \x80 PROTO      3
        -     24: U    SHORT_BINSTRING 'c2.10'
        -     31: q    BINPUT     2
        -     33: .    STOP
        +     24: X    BINUNICODE 'c2.10'
        +     34: q    BINPUT     1
        +     36: .    STOP
           highest protocol among opcodes = 2
    
        @@ -897,16 +941,16 @@ txn 0285cbadfae14866 " "
         user "user2.11"
         description "step 2.11"
         extension ""
        -obj 0000000000000002 34 sha1:032d8305ea9de2ec785fc77c1743a37bb64553cd
        +obj 0000000000000002 37 sha1:c85a70f3ee80af026ffd7392402efd62e8dbd807
               0: \x80 PROTO      3
               2: c    GLOBAL     '__main__ Object'
        -     19: q    BINPUT     1
        +     19: q    BINPUT     0
              21: .    STOP
           highest protocol among opcodes = 2
              22: \x80 PROTO      3
        -     24: U    SHORT_BINSTRING 'd2.11'
        -     31: q    BINPUT     2
        -     33: .    STOP
        +     24: X    BINUNICODE 'd2.11'
        +     34: q    BINPUT     1
        +     36: .    STOP
           highest protocol among opcodes = 2
    
        @@ -914,16 +958,16 @@ txn 0285cbadff92c6b3 " "
         user "user2.12"
         description "step 2.12"
         extension ""
        -obj 0000000000000003 34 sha1:975fd7ef6350b6543495a800852969f1d7833c83
        +obj 0000000000000003 37 sha1:f447a42edf90ac9ef506f55e3f2af240f52d84d7
               0: \x80 PROTO      3
               2: c    GLOBAL     '__main__ Object'
        -     19: q    BINPUT     1
        +     19: q    BINPUT     0
              21: .    STOP
           highest protocol among opcodes = 2
              22: \x80 PROTO      3
        -     24: U    SHORT_BINSTRING 'g2.12'
        -     31: q    BINPUT     2
        -     33: .    STOP
        +     24: X    BINUNICODE 'g2.12'
        +     34: q    BINPUT     1
        +     36: .    STOP
           highest protocol among opcodes = 2
    
        @@ -931,16 +975,16 @@ txn 0285cbae04444500 " "
         user "user2.13"
         description "step 2.13"
         extension ""
        -obj 0000000000000002 34 sha1:d09e49d753b8183ba5e0fa042a239f103d54c873
        +obj 0000000000000002 37 sha1:92783aa30a97637bfa75bb74ee4188163e6599bb
               0: \x80 PROTO      3
               2: c    GLOBAL     '__main__ Object'
        -     19: q    BINPUT     1
        +     19: q    BINPUT     0
              21: .    STOP
           highest protocol among opcodes = 2
              22: \x80 PROTO      3
        -     24: U    SHORT_BINSTRING 'd2.13'
        -     31: q    BINPUT     2
        -     33: .    STOP
        +     24: X    BINUNICODE 'd2.13'
        +     34: q    BINPUT     1
        +     36: .    STOP
           highest protocol among opcodes = 2
    
        @@ -948,16 +992,16 @@ txn 0285cbae08f5c34c " "
         user "user2.14"
         description "step 2.14"
         extension ""
        -obj 0000000000000007 34 sha1:109581582c53bf400e56780c331410e5195d19e0
        +obj 0000000000000007 37 sha1:26e44812ce9f495bdc79426a987f86514576702b
               0: \x80 PROTO      3
               2: c    GLOBAL     '__main__ Object'
        -     19: q    BINPUT     1
        +     19: q    BINPUT     0
              21: .    STOP
           highest protocol among opcodes = 2
              22: \x80 PROTO      3
        -     24: U    SHORT_BINSTRING 'c2.14'
        -     31: q    BINPUT     2
        -     33: .    STOP
        +     24: X    BINUNICODE 'c2.14'
        +     34: q    BINPUT     1
        +     36: .    STOP
           highest protocol among opcodes = 2
    
        @@ -965,16 +1009,16 @@ txn 0285cbae0da74199 " "
         user "user2.15"
         description "step 2.15"
         extension ""
        -obj 0000000000000009 34 sha1:e67485cd99587ee9e98158db69ed668fb233093d
        +obj 0000000000000009 37 sha1:5036c79c841dfde65e56cf5ff9d5765ab025a8e8
               0: \x80 PROTO      3
               2: c    GLOBAL     '__main__ Object'
        -     19: q    BINPUT     1
        +     19: q    BINPUT     0
              21: .    STOP
           highest protocol among opcodes = 2
              22: \x80 PROTO      3
        -     24: U    SHORT_BINSTRING 'e2.15'
        -     31: q    BINPUT     2
        -     33: .    STOP
        +     24: X    BINUNICODE 'e2.15'
        +     34: q    BINPUT     1
        +     36: .    STOP
           highest protocol among opcodes = 2
    
        @@ -982,16 +1026,16 @@ txn 0285cbae1258bfe6 " "
         user "user2.16"
         description "step 2.16"
         extension ""
        -obj 0000000000000001 34 sha1:b9f373fb2097836edf1c9ffbf0ca55d1d2b2168f
        +obj 0000000000000001 37 sha1:a89f350d69c3f1ef8d7f2893d25ddbca59c72c1d
               0: \x80 PROTO      3
               2: c    GLOBAL     '__main__ Object'
        -     19: q    BINPUT     1
        +     19: q    BINPUT     0
              21: .    STOP
           highest protocol among opcodes = 2
              22: \x80 PROTO      3
        -     24: U    SHORT_BINSTRING 'f2.16'
        -     31: q    BINPUT     2
        -     33: .    STOP
        +     24: X    BINUNICODE 'f2.16'
        +     34: q    BINPUT     1
        +     36: .    STOP
           highest protocol among opcodes = 2
    
        @@ -999,16 +1043,16 @@ txn 0285cbae170a3e33 " "
         user "user2.17"
         description "step 2.17"
         extension ""
        -obj 0000000000000008 34 sha1:698e7a066839a9436339747fe7a85f475095af67
        +obj 0000000000000008 37 sha1:a442c267648c2cdcc7bd94e9343ae3c40bfd4aa1
               0: \x80 PROTO      3
               2: c    GLOBAL     '__main__ Object'
        -     19: q    BINPUT     1
        +     19: q    BINPUT     0
              21: .    STOP
           highest protocol among opcodes = 2
              22: \x80 PROTO      3
        -     24: U    SHORT_BINSTRING 'b2.17'
        -     31: q    BINPUT     2
        -     33: .    STOP
        +     24: X    BINUNICODE 'b2.17'
        +     34: q    BINPUT     1
        +     36: .    STOP
           highest protocol among opcodes = 2
    
        @@ -1016,16 +1060,16 @@ txn 0285cbae1bbbbc80 " "
         user "user2.18"
         description "step 2.18"
         extension ""
        -obj 0000000000000002 34 sha1:0d2f350bbfeb38c85466b05b336f9414b9e91f77
        +obj 0000000000000002 37 sha1:4751d47156d33d3029b1ac072978a0cd036d8407
               0: \x80 PROTO      3
               2: c    GLOBAL     '__main__ Object'
        -     19: q    BINPUT     1
        +     19: q    BINPUT     0
              21: .    STOP
           highest protocol among opcodes = 2
              22: \x80 PROTO      3
        -     24: U    SHORT_BINSTRING 'd2.18'
        -     31: q    BINPUT     2
        -     33: .    STOP
        +     24: X    BINUNICODE 'd2.18'
        +     34: q    BINPUT     1
        +     36: .    STOP
           highest protocol among opcodes = 2
    
        @@ -1033,16 +1077,16 @@ txn 0285cbae206d3acc " "
         user "user2.19"
         description "step 2.19"
         extension ""
        -obj 0000000000000009 34 sha1:471ca065c05720073421a0aeab549cb1e58cf99f
        +obj 0000000000000009 37 sha1:2c45fb767784e729381e26b159809465de6cc4a1
               0: \x80 PROTO      3
               2: c    GLOBAL     '__main__ Object'
        -     19: q    BINPUT     1
        +     19: q    BINPUT     0
              21: .    STOP
           highest protocol among opcodes = 2
              22: \x80 PROTO      3
        -     24: U    SHORT_BINSTRING 'e2.19'
        -     31: q    BINPUT     2
        -     33: .    STOP
        +     24: X    BINUNICODE 'e2.19'
        +     34: q    BINPUT     1
        +     36: .    STOP
           highest protocol among opcodes = 2
    
        @@ -1050,16 +1094,16 @@ txn 0285cbae251eb919 " "
         user "user2.20"
         description "step 2.20"
         extension ""
        -obj 0000000000000008 34 sha1:3b543565ce78028b7118f322a8d1faf2439d70e4
        +obj 0000000000000008 37 sha1:805076196578ebe4b4d399791a0841210348b7dd
               0: \x80 PROTO      3
               2: c    GLOBAL     '__main__ Object'
        -     19: q    BINPUT     1
        +     19: q    BINPUT     0
              21: .    STOP
           highest protocol among opcodes = 2
              22: \x80 PROTO      3
        -     24: U    SHORT_BINSTRING 'b2.20'
        -     31: q    BINPUT     2
        -     33: .    STOP
        +     24: X    BINUNICODE 'b2.20'
        +     34: q    BINPUT     1
        +     36: .    STOP
           highest protocol among opcodes = 2
    
        @@ -1067,16 +1111,16 @@ txn 0285cbae29d03766 " "
         user "user2.21"
         description "step 2.21"
         extension ""
        -obj 0000000000000009 34 sha1:79714405c7319c5800c2fe5f192a8a1e8a33d873
        +obj 0000000000000009 37 sha1:67fe19d4814705a72c5213d7b9827d60211f955e
               0: \x80 PROTO      3
               2: c    GLOBAL     '__main__ Object'
        -     19: q    BINPUT     1
        +     19: q    BINPUT     0
              21: .    STOP
           highest protocol among opcodes = 2
              22: \x80 PROTO      3
        -     24: U    SHORT_BINSTRING 'e2.21'
        -     31: q    BINPUT     2
        -     33: .    STOP
        +     24: X    BINUNICODE 'e2.21'
        +     34: q    BINPUT     1
        +     36: .    STOP
           highest protocol among opcodes = 2
    
        @@ -1084,16 +1128,16 @@ txn 0285cbae2e81b5b3 " "
         user "user2.22"
         description "step 2.22"
         extension ""
        -obj 0000000000000009 34 sha1:fb3f01b3470c5dcf9b4ce613bdd3821f2b9a3576
        +obj 0000000000000009 37 sha1:1467daccd50741b009135ca01fa4b1d5603cf52b
               0: \x80 PROTO      3
               2: c    GLOBAL     '__main__ Object'
        -     19: q    BINPUT     1
        +     19: q    BINPUT     0
              21: .    STOP
           highest protocol among opcodes = 2
              22: \x80 PROTO      3
        -     24: U    SHORT_BINSTRING 'e2.22'
        -     31: q    BINPUT     2
        -     33: .    STOP
        +     24: X    BINUNICODE 'e2.22'
        +     34: q    BINPUT     1
        +     36: .    STOP
           highest protocol among opcodes = 2
    
        @@ -1101,16 +1145,16 @@ txn 0285cbae33333400 " "
         user "user2.23"
         description "step 2.23"
         extension ""
        -obj 0000000000000002 34 sha1:2a646981c19fe36d62d89df7e1fd344eb648f9b8
        +obj 0000000000000002 37 sha1:414bbf42bc2c71670db19a00326a66ae81c95934
               0: \x80 PROTO      3
               2: c    GLOBAL     '__main__ Object'
        -     19: q    BINPUT     1
        +     19: q    BINPUT     0
              21: .    STOP
           highest protocol among opcodes = 2
              22: \x80 PROTO      3
        -     24: U    SHORT_BINSTRING 'd2.23'
        -     31: q    BINPUT     2
        -     33: .    STOP
        +     24: X    BINUNICODE 'd2.23'
        +     34: q    BINPUT     1
        +     36: .    STOP
           highest protocol among opcodes = 2
    
        @@ -1118,16 +1162,16 @@ txn 0285cbae37e4b24c " "
         user "user2.24"
         description "step 2.24"
         extension ""
        -obj 0000000000000009 34 sha1:8b769601aed2ebd9f3cc8fe1e63b2cd8975f9f2d
        +obj 0000000000000009 37 sha1:5bebc2493258962bc7b04ac95adf0753a48717c6
               0: \x80 PROTO      3
               2: c    GLOBAL     '__main__ Object'
        -     19: q    BINPUT     1
        +     19: q    BINPUT     0
              21: .    STOP
           highest protocol among opcodes = 2
              22: \x80 PROTO      3
        -     24: U    SHORT_BINSTRING 'e2.24'
        -     31: q    BINPUT     2
        -     33: .    STOP
        +     24: X    BINUNICODE 'e2.24'
        +     34: q    BINPUT     1
        +     36: .    STOP
           highest protocol among opcodes = 2
    
        @@ -1147,18 +1191,20 @@ txn 0285cbae45f92d33 " "
         user "user"
         description "cyclic reference"
         extension ""
        -obj 0000000000000002 39 sha1:f44b22761c7e1df86ed61823eb1404e463378a32
        +obj 0000000000000002 43 sha1:5dbee843010481bc9decea7a3fdc788af687a861
               0: \x80 PROTO      3
               2: c    GLOBAL     '__main__ Object'
        -     19: q    BINPUT     1
        +     19: q    BINPUT     0
              21: .    STOP
           highest protocol among opcodes = 2
              22: \x80 PROTO      3
        -     24: C    SHORT_BINBYTES '\x00\x00\x00\x00\x00\x00\x00\x02'
        -     34: h    BINGET     1
        -     36: \x86 TUPLE2
        -     37: Q    BINPERSID
        -     38: .    STOP
        +     24: C    SHORT_BINBYTES b'\x00\x00\x00\x00\x00\x00\x00\x02'
        +     34: q    BINPUT     1
        +     36: h    BINGET     0
        +     38: \x86 TUPLE2
        +     39: q    BINPUT     2
        +     41: Q    BINPERSID
        +     42: .    STOP
           highest protocol among opcodes = 3
    
        @@ -1166,71 +1212,92 @@ txn 0285cbae4aaaab80 " "
         user ""
         description "predelete 2"
         extension ""
        -obj 0000000000000000 199 sha1:a51d894c29856c2e8b8194e714cd84a0a23d03b8
        +obj 0000000000000000 265 sha1:7e206c9b8e345ec231a691fa8e5570059f715c42
               0: \x80 PROTO      3
               2: c    GLOBAL     'persistent.mapping PersistentMapping'
        -     40: q    BINPUT     1
        +     40: q    BINPUT     0
              42: .    STOP
           highest protocol among opcodes = 2
              43: \x80 PROTO      3
              45: }    EMPTY_DICT
        -     46: q    BINPUT     2
        -     48: U    SHORT_BINSTRING 'data'
        -     54: q    BINPUT     3
        -     56: }    EMPTY_DICT
        -     57: q    BINPUT     4
        -     59: (    MARK
        -     60: U        SHORT_BINSTRING 'a'
        -     63: C        SHORT_BINBYTES '\x00\x00\x00\x00\x00\x00\x00\x05'
        -     73: c        GLOBAL     '__main__ Object'
        -     90: q        BINPUT     5
        -     92: \x86     TUPLE2
        -     93: Q        BINPERSID
        -     94: U        SHORT_BINSTRING 'c'
        -     97: C        SHORT_BINBYTES '\x00\x00\x00\x00\x00\x00\x00\x07'
        -    107: h        BINGET     5
        -    109: \x86     TUPLE2
        -    110: Q        BINPERSID
        -    111: U        SHORT_BINSTRING 'b'
        -    114: C        SHORT_BINBYTES '\x00\x00\x00\x00\x00\x00\x00\x08'
        -    124: h        BINGET     5
        -    126: \x86     TUPLE2
        -    127: Q        BINPERSID
        -    128: U        SHORT_BINSTRING 'e'
        -    131: C        SHORT_BINBYTES '\x00\x00\x00\x00\x00\x00\x00\t'
        -    141: h        BINGET     5
        -    143: \x86     TUPLE2
        -    144: Q        BINPERSID
        -    145: U        SHORT_BINSTRING 'd'
        -    148: C        SHORT_BINBYTES '\x00\x00\x00\x00\x00\x00\x00\n'
        -    158: h        BINGET     5
        -    160: \x86     TUPLE2
        -    161: Q        BINPERSID
        -    162: U        SHORT_BINSTRING 'g'
        -    165: C        SHORT_BINBYTES '\x00\x00\x00\x00\x00\x00\x00\x03'
        -    175: h        BINGET     5
        -    177: \x86     TUPLE2
        -    178: Q        BINPERSID
        -    179: U        SHORT_BINSTRING 'f'
        -    182: C        SHORT_BINBYTES '\x00\x00\x00\x00\x00\x00\x00\x01'
        -    192: h        BINGET     5
        -    194: \x86     TUPLE2
        -    195: Q        BINPERSID
        -    196: u        SETITEMS   (MARK at 59)
        -    197: s    SETITEM
        -    198: .    STOP
        +     46: q    BINPUT     1
        +     48: X    BINUNICODE 'data'
        +     57: q    BINPUT     2
        +     59: }    EMPTY_DICT
        +     60: q    BINPUT     3
        +     62: (    MARK
        +     63: X        BINUNICODE 'f'
        +     69: q        BINPUT     4
        +     71: C        SHORT_BINBYTES b'\x00\x00\x00\x00\x00\x00\x00\x01'
        +     81: q        BINPUT     5
        +     83: c        GLOBAL     '__main__ Object'
        +    100: q        BINPUT     6
        +    102: \x86     TUPLE2
        +    103: q        BINPUT     7
        +    105: Q        BINPERSID
        +    106: X        BINUNICODE 'd'
        +    112: q        BINPUT     8
        +    114: C        SHORT_BINBYTES b'\x00\x00\x00\x00\x00\x00\x00\n'
        +    124: q        BINPUT     9
        +    126: h        BINGET     6
        +    128: \x86     TUPLE2
        +    129: q        BINPUT     10
        +    131: Q        BINPERSID
        +    132: X        BINUNICODE 'g'
        +    138: q        BINPUT     11
        +    140: C        SHORT_BINBYTES b'\x00\x00\x00\x00\x00\x00\x00\x03'
        +    150: q        BINPUT     12
        +    152: h        BINGET     6
        +    154: \x86     TUPLE2
        +    155: q        BINPUT     13
        +    157: Q        BINPERSID
        +    158: X        BINUNICODE 'b'
        +    164: q        BINPUT     14
        +    166: C        SHORT_BINBYTES b'\x00\x00\x00\x00\x00\x00\x00\x08'
        +    176: q        BINPUT     15
        +    178: h        BINGET     6
        +    180: \x86     TUPLE2
        +    181: q        BINPUT     16
        +    183: Q        BINPERSID
        +    184: X        BINUNICODE 'a'
        +    190: q        BINPUT     17
        +    192: C        SHORT_BINBYTES b'\x00\x00\x00\x00\x00\x00\x00\x05'
        +    202: q        BINPUT     18
        +    204: h        BINGET     6
        +    206: \x86     TUPLE2
        +    207: q        BINPUT     19
        +    209: Q        BINPERSID
        +    210: X        BINUNICODE 'e'
        +    216: q        BINPUT     20
        +    218: C        SHORT_BINBYTES b'\x00\x00\x00\x00\x00\x00\x00\t'
        +    228: q        BINPUT     21
        +    230: h        BINGET     6
        +    232: \x86     TUPLE2
        +    233: q        BINPUT     22
        +    235: Q        BINPERSID
        +    236: X        BINUNICODE 'c'
        +    242: q        BINPUT     23
        +    244: C        SHORT_BINBYTES b'\x00\x00\x00\x00\x00\x00\x00\x07'
        +    254: q        BINPUT     24
        +    256: h        BINGET     6
        +    258: \x86     TUPLE2
        +    259: q        BINPUT     25
        +    261: Q        BINPERSID
        +    262: u        SETITEMS   (MARK at 62)
        +    263: s    SETITEM
        +    264: .    STOP
           highest protocol among opcodes = 3
    
        -obj 000000000000000a 32 sha1:25364c8085cd5e554eb4756133186e5cf386032b
        +obj 000000000000000a 35 sha1:3c9779a0408ed164eca3ade755529246f25fe76c
               0: \x80 PROTO      3
               2: c    GLOBAL     '__main__ Object'
        -     19: q    BINPUT     1
        +     19: q    BINPUT     0
              21: .    STOP
           highest protocol among opcodes = 2
              22: \x80 PROTO      3
        -     24: U    SHORT_BINSTRING 'd2*'
        -     29: q    BINPUT     2
        -     31: .    STOP
        +     24: X    BINUNICODE 'd2*'
        +     32: q    BINPUT     1
        +     34: .    STOP
           highest protocol among opcodes = 2
    479c353d