]> git.ipfire.org Git - thirdparty/LuaJIT.git/commitdiff
Implement yield from C hooks.
authorMike Pall <mike>
Wed, 30 Dec 2009 01:37:57 +0000 (02:37 +0100)
committerMike Pall <mike>
Wed, 30 Dec 2009 01:37:57 +0000 (02:37 +0100)
Get number of multiple results from C frame.
Add lj_cont_hook: restores multres and dispatch to static ins.
Can use fastcall for lj_dispatch_ins() now.

doc/changes.html
src/buildvm_x86.dasc
src/buildvm_x86.h
src/lj_api.c
src/lj_dispatch.c
src/lj_dispatch.h
src/lj_err.c
src/lj_frame.h
src/lj_vm.h

index d9a3aaddb31d5f3395aa956daababcb6615e2f1e..b15639a916cb95a163b79aa49e23a5786476bfa1 100644 (file)
@@ -55,6 +55,7 @@ to see whether newer versions are available.
 <div class="major" style="background: #d0d0d0;">
 <h2 id="snap">Development Snapshot</h2>
 <ul>
+<li>Implement yield from C hooks.</li>
 <li>Add abstract C call handling to IR.</li>
 <li>Improve KNUM fuse vs. load heuristics.</li>
 <li>Drive the GC forward on string allocations in the parser.</li>
index 5ff76a551fa41b004dfe72b5794cde7147179bf4..952fc9d669f978197645e67a868e42a2569d81c2 100644 (file)
@@ -618,13 +618,11 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse)
   |->vm_unwind_c:                      // Unwind C stack, return from vm_pcall.
   |  // (void *cframe, int errcode)
   |.if X64
-  |  and CARG1, CFRAME_RAWMASK
   |  mov eax, CARG2d                   // Error return status for vm_pcall.
   |  mov rsp, CARG1
   |.else
   |  mov ecx, [esp+4]
   |  mov eax, [esp+8]                  // Error return status for vm_pcall.
-  |  and ecx, CFRAME_RAWMASK
   |  mov esp, ecx
   |.endif
   |  mov L:RB, SAVE_L
@@ -2618,24 +2616,15 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse)
   |  test RDL, LUA_MASKLINE
   |  jz >5
   |1:
-  |.if X64
-  |  mov L:RB, SAVE_L
-  |  mov L:RB->base, BASE              // Caveat: CARG2d/CARG3d may be BASE.
-  |  mov CARG3d, NRESULTS              // Dynamic top for *M instructions.
-  |  mov CARG2d, PC
-  |  mov CARG1d, L:RB
-  |.else
   |  mov L:RB, SAVE_L
-  |  mov RD, NRESULTS                  // Dynamic top for *M instructions.
-  |  mov ARG3, RD
   |  mov L:RB->base, BASE
-  |  mov ARG2, PC
-  |  mov ARG1, L:RB
-  |.endif
+  |  mov FCARG2, PC                    // Caveat: FCARG2 == BASE
+  |  mov FCARG1, L:RB
   |  // SAVE_PC must hold the _previous_ PC. The callee updates it with PC.
-  |  call extern lj_dispatch_ins  // (lua_State *L, BCIns *pc, int nres)
-  |4:
+  |  call extern lj_dispatch_ins@8     // (lua_State *L, BCIns *pc)
+  |3:
   |  mov BASE, L:RB->base
+  |4:
   |  movzx RA, PC_RA
   |5:
   |  movzx OP, PC_OP
@@ -2646,6 +2635,12 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse)
   |  jmp aword [DISPATCH+OP*4+GG_DISP_STATIC*4]        // Re-dispatch to static ins.
   |.endif
   |
+  |->cont_hook:                                // Continue from hook yield.
+  |  add PC, 4
+  |  mov RA, [RB-24]
+  |  mov NRESULTS, RA                  // Restore NRESULTS for *M ins.
+  |  jmp <4
+  |
   |->vm_hotloop:                       // Hot loop counter underflow.
 #if LJ_HASJIT
   |.if X64
@@ -2658,7 +2653,7 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse)
   |  mov [DISPATCH+DISPATCH_J(L)], L:RB
   |  mov SAVE_PC, PC
   |  call extern lj_trace_hot@8                // (jit_State *J, const BCIns *pc)
-  |  jmp <4
+  |  jmp <3
   |.endif
 #endif
   |
index c7eb42e3818a8d1d61838798ea5d87b14259e812..0affad6ab793aa1d7f3131763e0aff7e32cd9db5 100644 (file)
@@ -12,7 +12,7 @@
 #define DASM_SECTION_CODE_OP   0
 #define DASM_SECTION_CODE_SUB  1
 #define DASM_MAXSECTION                2
-static const unsigned char build_actionlist[15184] = {
+static const unsigned char build_actionlist[15191] = {
   254,1,248,10,137,202,139,173,233,137,114,252,252,15,182,141,233,139,181,233,
   139,189,233,139,108,36,48,141,12,202,141,68,194,252,252,59,141,233,15,135,
   244,11,248,9,189,237,248,1,137,40,137,104,8,131,192,16,57,200,15,130,244,
@@ -40,393 +40,393 @@ static const unsigned char build_actionlist[15184] = {
   15,135,244,254,199,66,252,252,237,131,194,8,131,192,1,252,233,244,4,248,7,
   133,201,15,132,244,5,41,193,141,20,202,252,233,244,5,248,8,137,149,233,255,
   137,68,36,20,137,202,137,252,233,232,251,1,0,139,149,233,252,233,244,3,248,
-  23,139,76,36,4,139,68,36,8,129,225,239,137,204,139,108,36,48,139,173,233,
-  199,133,233,237,252,233,244,22,248,24,139,76,36,4,129,225,239,137,204,139,
-  108,36,48,185,252,248,252,255,252,255,252,255,184,237,139,149,233,139,157,
-  233,129,195,239,139,114,252,252,199,66,252,252,237,199,131,233,237,252,233,
-  244,16,248,20,255,252,247,198,237,15,132,244,25,131,230,252,248,41,252,242,
-  141,76,49,252,248,139,114,252,252,199,68,10,4,237,252,233,244,16,248,15,186,
-  237,252,233,244,247,248,13,131,232,8,137,202,137,252,249,139,181,233,139,
-  108,36,48,248,11,131,232,4,41,209,193,252,233,3,131,198,4,137,149,233,137,
-  133,233,137,116,36,24,137,202,248,1,137,252,233,232,251,1,0,139,141,233,139,
-  133,233,139,105,252,248,139,113,252,252,41,200,193,232,3,131,192,1,252,255,
-  165,233,248,26,255,85,87,86,83,131,252,236,28,139,108,36,48,139,76,36,52,
-  190,237,49,192,141,188,253,36,233,139,157,233,129,195,239,137,189,233,137,
-  68,36,24,137,68,36,52,56,133,233,15,132,244,249,199,131,233,237,136,133,233,
-  139,149,233,139,133,233,41,200,193,232,3,131,192,1,41,209,139,114,252,252,
-  137,68,36,20,252,247,198,237,15,132,244,17,252,233,244,18,248,27,85,87,86,
-  83,131,252,236,28,190,237,255,252,233,244,247,248,28,85,87,86,83,131,252,
-  236,28,190,237,248,1,139,108,36,48,139,76,36,52,248,2,139,189,233,137,124,
-  36,52,137,108,36,24,137,165,233,139,157,233,129,195,239,248,3,199,131,233,
-  237,139,149,233,1,206,41,214,139,133,233,41,200,193,232,3,131,192,1,139,105,
-  252,248,129,121,253,252,252,239,15,133,244,29,252,255,165,233,248,30,255,
-  85,87,86,83,131,252,236,28,139,108,36,48,139,68,36,56,139,76,36,52,139,84,
-  36,60,137,108,36,24,139,189,233,43,189,233,199,68,36,60,0,0,0,0,137,124,36,
-  56,137,68,36,8,137,76,36,4,137,44,36,139,189,233,137,124,36,52,137,165,233,
-  252,255,210,133,192,15,132,244,21,137,193,190,237,252,233,244,2,248,25,1,
-  209,131,230,252,248,137,213,41,252,242,199,68,193,252,252,237,137,200,139,
-  117,252,244,139,77,252,240,139,122,252,248,139,191,233,139,191,233,252,255,
-  225,248,31,15,182,78,252,255,131,252,237,16,141,12,202,41,252,233,15,132,
-  244,32,252,247,217,193,252,233,3,137,76,36,8,139,72,4,139,0,137,77,4,137,
-  69,0,137,108,36,4,252,233,244,33,248,34,137,68,36,16,199,68,36,20,237,255,
-  141,68,36,16,128,126,252,252,235,15,133,244,247,141,139,233,137,41,199,65,
-  4,237,137,205,252,233,244,248,248,35,15,182,70,252,254,255,252,242,15,42,
-  192,252,242,15,17,68,36,16,255,137,68,36,12,219,68,36,12,221,92,36,16,255,
-  141,68,36,16,252,233,244,247,248,36,15,182,70,252,254,141,4,194,248,1,15,
-  182,110,252,255,141,44,252,234,248,2,137,108,36,4,139,108,36,48,137,68,36,
-  8,137,44,36,137,149,233,137,116,36,24,232,251,1,1,139,149,233,133,192,15,
-  132,244,249,248,32,15,182,78,252,253,139,104,4,139,0,137,108,202,4,137,4,
-  202,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,248,3,
-  139,141,233,137,113,252,244,141,177,233,41,214,139,105,252,248,184,3,0,0,
-  0,252,255,165,233,248,37,137,68,36,16,199,68,36,20,237,141,68,36,16,128,126,
-  252,252,235,15,133,244,247,141,139,233,255,137,41,199,65,4,237,137,205,252,
-  233,244,248,248,38,15,182,70,252,254,255,141,68,36,16,252,233,244,247,248,
-  39,15,182,70,252,254,141,4,194,248,1,15,182,110,252,255,141,44,252,234,248,
-  2,137,108,36,4,139,108,36,48,137,68,36,8,137,44,36,137,149,233,137,116,36,
-  24,232,251,1,2,139,149,233,133,192,15,132,244,249,15,182,78,252,253,139,108,
-  202,4,139,12,202,137,104,4,137,8,248,40,139,6,15,182,204,15,182,232,131,198,
-  4,193,232,16,252,255,36,171,248,3,139,141,233,137,113,252,244,15,182,70,252,
-  253,139,108,194,4,139,4,194,137,105,20,137,65,16,141,177,233,41,214,139,105,
-  252,248,184,4,0,0,0,252,255,165,233,248,41,15,182,110,252,252,141,4,194,141,
-  12,202,137,108,36,12,139,108,36,48,137,68,36,8,137,76,36,4,137,44,36,137,
-  149,233,137,116,36,24,232,251,1,3,248,3,139,149,233,131,252,248,1,15,135,
-  244,42,248,4,255,141,118,4,15,130,244,252,248,5,15,183,70,252,254,141,180,
-  253,134,233,248,6,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,
-  36,171,248,43,131,198,4,129,120,253,4,239,15,130,244,5,252,233,244,6,248,
-  44,129,120,253,4,239,252,233,244,4,248,45,131,252,238,4,137,108,36,12,139,
+  23,139,76,36,4,139,68,36,8,137,204,139,108,36,48,139,173,233,199,133,233,
+  237,252,233,244,22,248,24,139,76,36,4,129,225,239,137,204,139,108,36,48,185,
+  252,248,252,255,252,255,252,255,184,237,139,149,233,139,157,233,129,195,239,
+  139,114,252,252,199,66,252,252,237,199,131,233,237,252,233,244,16,248,20,
+  255,252,247,198,237,15,132,244,25,131,230,252,248,41,252,242,141,76,49,252,
+  248,139,114,252,252,199,68,10,4,237,252,233,244,16,248,15,186,237,252,233,
+  244,247,248,13,131,232,8,137,202,137,252,249,139,181,233,139,108,36,48,248,
+  11,131,232,4,41,209,193,252,233,3,131,198,4,137,149,233,137,133,233,137,116,
+  36,24,137,202,248,1,137,252,233,232,251,1,0,139,141,233,139,133,233,139,105,
+  252,248,139,113,252,252,41,200,193,232,3,131,192,1,252,255,165,233,248,26,
+  255,85,87,86,83,131,252,236,28,139,108,36,48,139,76,36,52,190,237,49,192,
+  141,188,253,36,233,139,157,233,129,195,239,137,189,233,137,68,36,24,137,68,
+  36,52,56,133,233,15,132,244,249,199,131,233,237,136,133,233,139,149,233,139,
+  133,233,41,200,193,232,3,131,192,1,41,209,139,114,252,252,137,68,36,20,252,
+  247,198,237,15,132,244,17,252,233,244,18,248,27,85,87,86,83,131,252,236,28,
+  190,237,255,252,233,244,247,248,28,85,87,86,83,131,252,236,28,190,237,248,
+  1,139,108,36,48,139,76,36,52,248,2,139,189,233,137,124,36,52,137,108,36,24,
+  137,165,233,139,157,233,129,195,239,248,3,199,131,233,237,139,149,233,1,206,
+  41,214,139,133,233,41,200,193,232,3,131,192,1,139,105,252,248,129,121,253,
+  252,252,239,15,133,244,29,252,255,165,233,248,30,255,85,87,86,83,131,252,
+  236,28,139,108,36,48,139,68,36,56,139,76,36,52,139,84,36,60,137,108,36,24,
+  139,189,233,43,189,233,199,68,36,60,0,0,0,0,137,124,36,56,137,68,36,8,137,
+  76,36,4,137,44,36,139,189,233,137,124,36,52,137,165,233,252,255,210,133,192,
+  15,132,244,21,137,193,190,237,252,233,244,2,248,25,1,209,131,230,252,248,
+  137,213,41,252,242,199,68,193,252,252,237,137,200,139,117,252,244,139,77,
+  252,240,139,122,252,248,139,191,233,139,191,233,252,255,225,248,31,15,182,
+  78,252,255,131,252,237,16,141,12,202,41,252,233,15,132,244,32,252,247,217,
+  193,252,233,3,137,76,36,8,139,72,4,139,0,137,77,4,137,69,0,137,108,36,4,252,
+  233,244,33,248,34,137,68,36,16,199,68,36,20,237,255,141,68,36,16,128,126,
+  252,252,235,15,133,244,247,141,139,233,137,41,199,65,4,237,137,205,252,233,
+  244,248,248,35,15,182,70,252,254,255,252,242,15,42,192,252,242,15,17,68,36,
+  16,255,137,68,36,12,219,68,36,12,221,92,36,16,255,141,68,36,16,252,233,244,
+  247,248,36,15,182,70,252,254,141,4,194,248,1,15,182,110,252,255,141,44,252,
+  234,248,2,137,108,36,4,139,108,36,48,137,68,36,8,137,44,36,137,149,233,137,
+  116,36,24,232,251,1,1,139,149,233,133,192,15,132,244,249,248,32,15,182,78,
+  252,253,139,104,4,139,0,137,108,202,4,137,4,202,139,6,15,182,204,15,182,232,
+  131,198,4,193,232,16,252,255,36,171,248,3,139,141,233,137,113,252,244,141,
+  177,233,41,214,139,105,252,248,184,3,0,0,0,252,255,165,233,248,37,137,68,
+  36,16,199,68,36,20,237,141,68,36,16,128,126,252,252,235,15,133,244,247,141,
+  139,233,255,137,41,199,65,4,237,137,205,252,233,244,248,248,38,15,182,70,
+  252,254,255,141,68,36,16,252,233,244,247,248,39,15,182,70,252,254,141,4,194,
+  248,1,15,182,110,252,255,141,44,252,234,248,2,137,108,36,4,139,108,36,48,
+  137,68,36,8,137,44,36,137,149,233,137,116,36,24,232,251,1,2,139,149,233,133,
+  192,15,132,244,249,15,182,78,252,253,139,108,202,4,139,12,202,137,104,4,137,
+  8,248,40,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,
+  248,3,139,141,233,137,113,252,244,15,182,70,252,253,139,108,194,4,139,4,194,
+  137,105,20,137,65,16,141,177,233,41,214,139,105,252,248,184,4,0,0,0,252,255,
+  165,233,248,41,15,182,110,252,252,141,4,194,141,12,202,137,108,36,12,139,
   108,36,48,137,68,36,8,137,76,36,4,137,44,36,137,149,233,137,116,36,24,232,
-  251,1,4,252,233,244,3,248,46,255,141,4,199,252,233,244,247,248,47,141,4,199,
-  141,44,252,234,149,252,233,244,248,248,48,141,4,194,137,197,252,233,244,248,
-  248,49,141,4,194,248,1,141,44,252,234,248,2,141,12,202,137,108,36,8,139,108,
-  36,48,137,68,36,12,15,182,70,252,252,137,76,36,4,137,68,36,16,137,44,36,137,
-  149,233,137,116,36,24,232,251,1,5,139,149,233,133,192,15,132,244,40,248,42,
-  137,193,41,208,137,113,252,244,141,176,233,139,105,252,248,184,3,0,0,0,129,
-  121,253,252,252,239,15,133,244,29,255,252,255,165,233,248,50,139,108,36,48,
-  137,149,233,141,20,194,137,252,233,137,116,36,24,232,251,1,6,139,149,233,
-  252,233,244,42,248,29,137,76,36,20,137,68,36,16,131,252,233,8,141,4,193,139,
-  108,36,48,137,76,36,4,137,68,36,8,137,44,36,137,149,233,137,116,36,24,232,
-  251,1,7,139,149,233,139,76,36,20,139,68,36,16,139,105,252,248,131,192,1,57,
-  215,15,132,244,51,252,255,165,233,248,52,139,108,36,48,137,149,233,137,202,
-  137,252,233,137,116,36,24,232,251,1,8,139,149,233,139,70,252,252,15,182,204,
-  15,182,232,193,232,16,252,255,164,253,171,233,248,53,129,252,248,239,15,130,
-  244,54,255,139,105,4,129,252,253,239,15,131,244,54,137,68,36,20,137,105,252,
-  252,139,41,137,105,252,248,131,232,2,15,132,244,248,137,76,36,16,248,1,131,
-  193,8,139,105,4,137,105,252,252,139,41,137,105,252,248,131,232,1,15,133,244,
-  1,139,76,36,16,248,2,139,68,36,20,252,233,244,55,248,56,129,252,248,239,15,
-  130,244,54,139,105,4,184,237,252,247,213,57,232,255,15,71,197,255,15,134,
-  244,247,137,232,248,1,255,139,105,252,248,139,132,253,197,233,199,65,252,
-  252,237,137,65,252,248,252,233,244,57,248,58,129,252,248,239,15,130,244,54,
-  139,105,4,129,252,253,239,15,133,244,252,248,1,139,41,139,173,233,248,2,133,
-  252,237,199,65,252,252,237,15,132,244,57,139,65,252,248,139,131,233,199,65,
-  252,252,237,137,105,252,248,137,76,36,16,139,141,233,255,35,136,233,105,201,
-  239,3,141,233,248,3,129,185,233,239,15,133,244,250,57,129,233,15,132,244,
-  251,248,4,139,137,233,133,201,15,133,244,3,252,233,244,57,248,5,139,105,4,
-  129,252,253,239,15,132,244,57,255,139,1,139,76,36,16,137,105,252,252,137,
-  65,252,248,252,233,244,57,248,6,129,252,253,239,15,132,244,1,129,252,253,
-  239,15,135,244,253,189,237,248,7,252,247,213,139,172,253,171,233,252,233,
-  244,2,248,59,129,252,248,239,15,130,244,54,129,121,253,4,239,15,133,244,54,
-  255,139,41,131,189,233,0,15,133,244,54,129,121,253,12,239,15,133,244,54,139,
-  65,8,137,133,233,199,65,252,252,237,137,105,252,248,252,246,133,233,235,15,
-  132,244,247,128,165,233,235,139,131,233,137,171,233,137,133,233,248,1,252,
-  233,244,57,248,60,255,129,252,248,239,15,130,244,54,129,121,253,4,239,15,
-  133,244,54,139,1,139,108,36,48,137,68,36,4,137,44,36,137,205,137,84,36,16,
-  131,193,8,137,76,36,8,232,251,1,9,137,252,233,139,84,36,16,139,40,139,64,
-  4,137,105,252,248,137,65,252,252,252,233,244,57,248,61,129,252,248,239,15,
-  133,244,54,129,121,253,4,239,15,135,244,54,255,252,242,15,16,1,252,233,244,
-  62,255,221,1,252,233,244,63,255,248,64,129,252,248,239,15,130,244,54,129,
-  121,253,4,239,15,133,244,249,139,1,248,2,199,65,252,252,237,137,65,252,248,
-  252,233,244,57,248,3,129,121,253,4,239,15,135,244,54,131,187,233,0,15,133,
-  244,54,139,171,233,59,171,233,255,15,130,244,247,232,244,65,248,1,139,108,
-  36,48,137,141,233,137,113,252,252,137,116,36,24,137,84,36,16,137,202,137,
-  252,233,232,251,1,10,139,141,233,139,84,36,16,252,233,244,2,248,66,129,252,
-  248,239,15,130,244,54,15,132,244,248,248,1,129,121,253,4,239,15,133,244,54,
-  139,41,137,108,36,4,139,108,36,48,137,44,36,137,141,233,255,137,113,252,252,
-  137,84,36,16,131,193,8,137,76,36,8,137,116,36,24,232,251,1,11,139,141,233,
-  139,84,36,16,133,192,15,132,244,249,139,105,8,139,65,12,137,105,252,248,137,
-  65,252,252,139,105,16,139,65,20,137,41,137,65,4,248,67,184,237,252,233,244,
-  68,248,2,199,65,12,237,252,233,244,1,248,3,199,65,252,252,237,252,233,244,
-  57,248,69,129,252,248,239,15,130,244,54,129,121,253,4,239,255,15,133,244,
-  54,139,133,233,199,65,252,252,237,137,65,252,248,199,65,12,237,184,237,252,
-  233,244,68,248,70,129,252,248,239,15,130,244,54,129,121,253,4,239,15,133,
-  244,54,129,121,253,12,239,15,135,244,54,255,252,242,15,16,65,8,189,0,0,252,
-  240,63,102,15,110,205,102,15,112,201,81,252,242,15,88,193,252,242,15,45,192,
-  252,242,15,17,65,252,248,255,221,65,8,217,232,222,193,219,20,36,221,89,252,
-  248,139,4,36,255,139,41,59,133,233,15,131,244,248,193,224,3,3,133,233,248,
-  1,129,120,253,4,239,15,132,244,71,139,40,139,64,4,137,41,137,65,4,252,233,
-  244,67,248,2,131,189,233,0,15,132,244,71,137,84,36,16,135,205,137,194,232,
-  251,1,12,137,252,233,139,84,36,16,133,192,15,133,244,1,248,71,184,237,252,
-  233,244,68,248,72,255,129,252,248,239,15,130,244,54,129,121,253,4,239,15,
-  133,244,54,139,133,233,199,65,252,252,237,137,65,252,248,255,15,87,192,252,
-  242,15,17,65,8,255,217,252,238,221,89,8,255,184,237,252,233,244,68,248,73,
-  129,252,248,239,15,130,244,54,137,113,252,252,190,237,137,202,131,193,8,131,
-  232,1,139,105,252,248,248,1,252,246,131,233,235,15,133,244,249,248,2,129,
-  121,253,252,252,239,15,133,244,29,252,255,165,233,248,3,131,198,1,252,233,
-  244,2,248,74,255,129,252,248,239,15,130,244,54,129,121,253,12,239,15,133,
-  244,54,137,113,252,252,139,105,4,137,105,12,199,65,4,237,139,41,139,113,8,
-  137,105,8,137,49,190,237,137,202,129,193,239,131,232,2,252,233,244,1,248,
-  9,139,116,36,24,252,233,244,54,248,75,129,252,248,239,15,130,244,54,139,41,
-  137,113,252,252,137,116,36,24,137,44,36,129,121,253,4,239,15,133,244,9,255,
-  131,189,233,0,15,133,244,9,128,189,233,235,15,135,244,9,139,181,233,137,116,
-  36,4,15,132,244,247,59,181,233,15,132,244,9,248,1,141,116,198,252,240,59,
-  181,233,15,135,244,9,137,181,233,139,108,36,48,137,141,233,131,193,8,137,
-  141,233,255,139,108,36,4,141,76,193,232,41,252,241,57,252,238,15,132,244,
-  249,248,2,139,68,14,4,137,70,252,252,139,4,14,137,70,252,248,131,252,238,
-  8,57,252,238,15,133,244,2,248,3,49,201,137,76,36,12,137,76,36,8,232,244,26,
-  199,131,233,237,139,108,36,48,139,52,36,139,149,233,129,252,248,239,15,135,
-  244,254,248,4,139,142,233,139,190,233,137,142,233,137,252,254,41,206,15,132,
-  244,252,255,141,4,50,193,252,238,3,59,133,233,15,135,244,255,137,213,41,205,
-  248,5,139,1,137,4,41,139,65,4,137,68,41,4,131,193,8,57,252,249,15,133,244,
-  5,248,6,141,70,2,199,66,252,252,237,248,7,139,116,36,24,137,68,36,20,185,
-  252,248,252,255,252,255,252,255,252,247,198,237,15,132,244,17,252,233,244,
-  18,248,8,199,66,252,252,237,139,142,233,131,252,233,8,137,142,233,139,1,137,
-  2,139,65,4,137,66,4,184,237,252,233,244,7,248,9,255,139,12,36,137,185,233,
-  137,252,242,137,252,233,232,251,1,0,139,149,233,252,233,244,4,248,9,139,116,
-  36,24,252,233,244,54,248,76,139,173,233,137,113,252,252,137,116,36,24,137,
-  44,36,131,189,233,0,15,133,244,9,128,189,233,235,15,135,244,9,139,181,233,
-  137,116,36,4,15,132,244,247,59,181,233,255,15,132,244,9,248,1,141,116,198,
-  252,248,59,181,233,15,135,244,9,137,181,233,139,108,36,48,137,141,233,137,
-  141,233,139,108,36,4,141,76,193,252,240,41,252,241,57,252,238,15,132,244,
-  249,248,2,139,68,14,4,137,70,252,252,139,4,14,137,70,252,248,131,252,238,
-  8,57,252,238,15,133,244,2,248,3,49,201,137,76,36,12,137,76,36,8,232,244,26,
-  199,131,233,237,139,108,36,48,139,52,36,139,149,233,255,129,252,248,239,15,
-  135,244,254,248,4,139,142,233,139,190,233,137,142,233,137,252,254,41,206,
-  15,132,244,252,141,4,50,193,252,238,3,59,133,233,15,135,244,255,137,213,41,
-  205,248,5,139,1,137,4,41,139,65,4,137,68,41,4,131,193,8,57,252,249,15,133,
-  244,5,248,6,141,70,1,248,7,139,116,36,24,137,68,36,20,49,201,252,247,198,
-  237,15,132,244,17,255,252,233,244,18,248,8,137,252,242,137,252,233,232,251,
-  1,13,248,9,139,12,36,137,185,233,137,252,242,137,252,233,232,251,1,0,139,
-  149,233,252,233,244,4,248,77,139,108,36,48,137,113,252,252,252,247,133,233,
-  237,15,132,244,54,137,141,233,141,68,193,252,248,137,133,233,49,192,137,133,
-  233,176,235,136,133,233,252,233,244,22,255,248,63,221,89,252,248,252,233,
-  244,57,248,78,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,
-  54,252,242,15,16,1,102,15,252,239,201,102,15,118,201,102,15,115,209,1,15,
-  84,193,248,62,252,242,15,17,65,252,248,255,248,78,129,252,248,239,15,130,
-  244,54,129,121,253,4,239,15,135,244,54,221,1,217,225,248,62,248,63,221,89,
-  252,248,255,248,57,184,237,248,68,137,68,36,20,248,55,252,247,198,237,15,
-  133,244,253,248,5,56,70,252,255,15,135,244,252,139,6,15,182,204,15,182,232,
-  131,198,4,193,232,16,252,255,36,171,248,6,199,68,193,252,244,237,131,192,
-  1,252,233,244,5,248,7,137,202,185,252,248,252,255,252,255,252,255,252,233,
-  244,18,255,248,79,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,
-  244,54,252,242,15,81,1,252,233,244,62,248,80,129,252,248,239,15,130,244,54,
-  129,121,253,4,239,15,135,244,54,252,242,15,16,1,232,244,81,252,233,244,62,
-  248,82,255,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,
-  252,242,15,16,1,232,244,83,252,233,244,62,255,248,79,129,252,248,239,15,130,
-  244,54,129,121,253,4,239,15,135,244,54,221,1,217,252,250,252,233,244,63,248,
-  80,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,221,1,232,
-  244,81,252,233,244,63,248,82,255,129,252,248,239,15,130,244,54,129,121,253,
-  4,239,15,135,244,54,221,1,232,244,83,252,233,244,63,255,248,84,129,252,248,
-  239,15,130,244,54,129,121,253,4,239,15,135,244,54,217,252,237,221,1,217,252,
-  241,252,233,244,63,248,85,129,252,248,239,15,130,244,54,129,121,253,4,239,
-  15,135,244,54,217,252,236,221,1,217,252,241,252,233,244,63,248,86,129,252,
-  248,239,255,15,130,244,54,129,121,253,4,239,15,135,244,54,221,1,232,244,87,
-  252,233,244,63,248,88,129,252,248,239,15,130,244,54,129,121,253,4,239,15,
-  135,244,54,221,1,217,252,254,252,233,244,63,248,89,129,252,248,239,255,15,
-  130,244,54,129,121,253,4,239,15,135,244,54,221,1,217,252,255,252,233,244,
-  63,248,90,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,221,
-  1,217,252,242,221,216,252,233,244,63,248,91,129,252,248,239,15,130,244,54,
-  255,129,121,253,4,239,15,135,244,54,221,1,217,192,216,200,217,232,222,225,
-  217,252,250,217,252,243,252,233,244,63,248,92,129,252,248,239,15,130,244,
-  54,129,121,253,4,239,15,135,244,54,221,1,217,192,216,200,217,232,222,225,
-  217,252,250,217,201,217,252,243,252,233,244,63,248,93,129,252,248,239,15,
-  130,244,54,129,121,253,4,239,15,135,244,54,255,221,1,217,232,217,252,243,
-  252,233,244,63,255,248,94,129,252,248,239,15,130,244,54,129,121,253,4,239,
-  15,135,244,54,252,242,15,16,1,252,242,15,17,4,36,255,248,94,129,252,248,239,
-  15,130,244,54,129,121,253,4,239,15,135,244,54,221,1,221,28,36,255,137,76,
-  36,16,137,213,232,251,1,14,139,76,36,16,137,252,234,252,233,244,63,255,248,
-  95,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,252,242,
-  15,16,1,252,242,15,17,4,36,255,248,95,129,252,248,239,15,130,244,54,129,121,
+  251,1,3,248,3,139,149,233,131,252,248,1,15,135,244,42,248,4,255,141,118,4,
+  15,130,244,252,248,5,15,183,70,252,254,141,180,253,134,233,248,6,139,6,15,
+  182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,248,43,131,198,4,129,
+  120,253,4,239,15,130,244,5,252,233,244,6,248,44,129,120,253,4,239,252,233,
+  244,4,248,45,131,252,238,4,137,108,36,12,139,108,36,48,137,68,36,8,137,76,
+  36,4,137,44,36,137,149,233,137,116,36,24,232,251,1,4,252,233,244,3,248,46,
+  255,141,4,199,252,233,244,247,248,47,141,4,199,141,44,252,234,149,252,233,
+  244,248,248,48,141,4,194,137,197,252,233,244,248,248,49,141,4,194,248,1,141,
+  44,252,234,248,2,141,12,202,137,108,36,8,139,108,36,48,137,68,36,12,15,182,
+  70,252,252,137,76,36,4,137,68,36,16,137,44,36,137,149,233,137,116,36,24,232,
+  251,1,5,139,149,233,133,192,15,132,244,40,248,42,137,193,41,208,137,113,252,
+  244,141,176,233,139,105,252,248,184,3,0,0,0,129,121,253,252,252,239,15,133,
+  244,29,255,252,255,165,233,248,50,139,108,36,48,137,149,233,141,20,194,137,
+  252,233,137,116,36,24,232,251,1,6,139,149,233,252,233,244,42,248,29,137,76,
+  36,20,137,68,36,16,131,252,233,8,141,4,193,139,108,36,48,137,76,36,4,137,
+  68,36,8,137,44,36,137,149,233,137,116,36,24,232,251,1,7,139,149,233,139,76,
+  36,20,139,68,36,16,139,105,252,248,131,192,1,57,215,15,132,244,51,252,255,
+  165,233,248,52,139,108,36,48,137,149,233,137,202,137,252,233,137,116,36,24,
+  232,251,1,8,139,149,233,139,70,252,252,15,182,204,15,182,232,193,232,16,252,
+  255,164,253,171,233,248,53,129,252,248,239,15,130,244,54,255,139,105,4,129,
+  252,253,239,15,131,244,54,137,68,36,20,137,105,252,252,139,41,137,105,252,
+  248,131,232,2,15,132,244,248,137,76,36,16,248,1,131,193,8,139,105,4,137,105,
+  252,252,139,41,137,105,252,248,131,232,1,15,133,244,1,139,76,36,16,248,2,
+  139,68,36,20,252,233,244,55,248,56,129,252,248,239,15,130,244,54,139,105,
+  4,184,237,252,247,213,57,232,255,15,71,197,255,15,134,244,247,137,232,248,
+  1,255,139,105,252,248,139,132,253,197,233,199,65,252,252,237,137,65,252,248,
+  252,233,244,57,248,58,129,252,248,239,15,130,244,54,139,105,4,129,252,253,
+  239,15,133,244,252,248,1,139,41,139,173,233,248,2,133,252,237,199,65,252,
+  252,237,15,132,244,57,139,65,252,248,139,131,233,199,65,252,252,237,137,105,
+  252,248,137,76,36,16,139,141,233,255,35,136,233,105,201,239,3,141,233,248,
+  3,129,185,233,239,15,133,244,250,57,129,233,15,132,244,251,248,4,139,137,
+  233,133,201,15,133,244,3,252,233,244,57,248,5,139,105,4,129,252,253,239,15,
+  132,244,57,255,139,1,139,76,36,16,137,105,252,252,137,65,252,248,252,233,
+  244,57,248,6,129,252,253,239,15,132,244,1,129,252,253,239,15,135,244,253,
+  189,237,248,7,252,247,213,139,172,253,171,233,252,233,244,2,248,59,129,252,
+  248,239,15,130,244,54,129,121,253,4,239,15,133,244,54,255,139,41,131,189,
+  233,0,15,133,244,54,129,121,253,12,239,15,133,244,54,139,65,8,137,133,233,
+  199,65,252,252,237,137,105,252,248,252,246,133,233,235,15,132,244,247,128,
+  165,233,235,139,131,233,137,171,233,137,133,233,248,1,252,233,244,57,248,
+  60,255,129,252,248,239,15,130,244,54,129,121,253,4,239,15,133,244,54,139,
+  1,139,108,36,48,137,68,36,4,137,44,36,137,205,137,84,36,16,131,193,8,137,
+  76,36,8,232,251,1,9,137,252,233,139,84,36,16,139,40,139,64,4,137,105,252,
+  248,137,65,252,252,252,233,244,57,248,61,129,252,248,239,15,133,244,54,129,
+  121,253,4,239,15,135,244,54,255,252,242,15,16,1,252,233,244,62,255,221,1,
+  252,233,244,63,255,248,64,129,252,248,239,15,130,244,54,129,121,253,4,239,
+  15,133,244,249,139,1,248,2,199,65,252,252,237,137,65,252,248,252,233,244,
+  57,248,3,129,121,253,4,239,15,135,244,54,131,187,233,0,15,133,244,54,139,
+  171,233,59,171,233,255,15,130,244,247,232,244,65,248,1,139,108,36,48,137,
+  141,233,137,113,252,252,137,116,36,24,137,84,36,16,137,202,137,252,233,232,
+  251,1,10,139,141,233,139,84,36,16,252,233,244,2,248,66,129,252,248,239,15,
+  130,244,54,15,132,244,248,248,1,129,121,253,4,239,15,133,244,54,139,41,137,
+  108,36,4,139,108,36,48,137,44,36,137,141,233,255,137,113,252,252,137,84,36,
+  16,131,193,8,137,76,36,8,137,116,36,24,232,251,1,11,139,141,233,139,84,36,
+  16,133,192,15,132,244,249,139,105,8,139,65,12,137,105,252,248,137,65,252,
+  252,139,105,16,139,65,20,137,41,137,65,4,248,67,184,237,252,233,244,68,248,
+  2,199,65,12,237,252,233,244,1,248,3,199,65,252,252,237,252,233,244,57,248,
+  69,129,252,248,239,15,130,244,54,129,121,253,4,239,255,15,133,244,54,139,
+  133,233,199,65,252,252,237,137,65,252,248,199,65,12,237,184,237,252,233,244,
+  68,248,70,129,252,248,239,15,130,244,54,129,121,253,4,239,15,133,244,54,129,
+  121,253,12,239,15,135,244,54,255,252,242,15,16,65,8,189,0,0,252,240,63,102,
+  15,110,205,102,15,112,201,81,252,242,15,88,193,252,242,15,45,192,252,242,
+  15,17,65,252,248,255,221,65,8,217,232,222,193,219,20,36,221,89,252,248,139,
+  4,36,255,139,41,59,133,233,15,131,244,248,193,224,3,3,133,233,248,1,129,120,
+  253,4,239,15,132,244,71,139,40,139,64,4,137,41,137,65,4,252,233,244,67,248,
+  2,131,189,233,0,15,132,244,71,137,84,36,16,135,205,137,194,232,251,1,12,137,
+  252,233,139,84,36,16,133,192,15,133,244,1,248,71,184,237,252,233,244,68,248,
+  72,255,129,252,248,239,15,130,244,54,129,121,253,4,239,15,133,244,54,139,
+  133,233,199,65,252,252,237,137,65,252,248,255,15,87,192,252,242,15,17,65,
+  8,255,217,252,238,221,89,8,255,184,237,252,233,244,68,248,73,129,252,248,
+  239,15,130,244,54,137,113,252,252,190,237,137,202,131,193,8,131,232,1,139,
+  105,252,248,248,1,252,246,131,233,235,15,133,244,249,248,2,129,121,253,252,
+  252,239,15,133,244,29,252,255,165,233,248,3,131,198,1,252,233,244,2,248,74,
+  255,129,252,248,239,15,130,244,54,129,121,253,12,239,15,133,244,54,137,113,
+  252,252,139,105,4,137,105,12,199,65,4,237,139,41,139,113,8,137,105,8,137,
+  49,190,237,137,202,129,193,239,131,232,2,252,233,244,1,248,9,139,116,36,24,
+  252,233,244,54,248,75,129,252,248,239,15,130,244,54,139,41,137,113,252,252,
+  137,116,36,24,137,44,36,129,121,253,4,239,15,133,244,9,255,131,189,233,0,
+  15,133,244,9,128,189,233,235,15,135,244,9,139,181,233,137,116,36,4,15,132,
+  244,247,59,181,233,15,132,244,9,248,1,141,116,198,252,240,59,181,233,15,135,
+  244,9,137,181,233,139,108,36,48,137,141,233,131,193,8,137,141,233,255,139,
+  108,36,4,141,76,193,232,41,252,241,57,252,238,15,132,244,249,248,2,139,68,
+  14,4,137,70,252,252,139,4,14,137,70,252,248,131,252,238,8,57,252,238,15,133,
+  244,2,248,3,49,201,137,76,36,12,137,76,36,8,232,244,26,199,131,233,237,139,
+  108,36,48,139,52,36,139,149,233,129,252,248,239,15,135,244,254,248,4,139,
+  142,233,139,190,233,137,142,233,137,252,254,41,206,15,132,244,252,255,141,
+  4,50,193,252,238,3,59,133,233,15,135,244,255,137,213,41,205,248,5,139,1,137,
+  4,41,139,65,4,137,68,41,4,131,193,8,57,252,249,15,133,244,5,248,6,141,70,
+  2,199,66,252,252,237,248,7,139,116,36,24,137,68,36,20,185,252,248,252,255,
+  252,255,252,255,252,247,198,237,15,132,244,17,252,233,244,18,248,8,199,66,
+  252,252,237,139,142,233,131,252,233,8,137,142,233,139,1,137,2,139,65,4,137,
+  66,4,184,237,252,233,244,7,248,9,255,139,12,36,137,185,233,137,252,242,137,
+  252,233,232,251,1,0,139,149,233,252,233,244,4,248,9,139,116,36,24,252,233,
+  244,54,248,76,139,173,233,137,113,252,252,137,116,36,24,137,44,36,131,189,
+  233,0,15,133,244,9,128,189,233,235,15,135,244,9,139,181,233,137,116,36,4,
+  15,132,244,247,59,181,233,255,15,132,244,9,248,1,141,116,198,252,248,59,181,
+  233,15,135,244,9,137,181,233,139,108,36,48,137,141,233,137,141,233,139,108,
+  36,4,141,76,193,252,240,41,252,241,57,252,238,15,132,244,249,248,2,139,68,
+  14,4,137,70,252,252,139,4,14,137,70,252,248,131,252,238,8,57,252,238,15,133,
+  244,2,248,3,49,201,137,76,36,12,137,76,36,8,232,244,26,199,131,233,237,139,
+  108,36,48,139,52,36,139,149,233,255,129,252,248,239,15,135,244,254,248,4,
+  139,142,233,139,190,233,137,142,233,137,252,254,41,206,15,132,244,252,141,
+  4,50,193,252,238,3,59,133,233,15,135,244,255,137,213,41,205,248,5,139,1,137,
+  4,41,139,65,4,137,68,41,4,131,193,8,57,252,249,15,133,244,5,248,6,141,70,
+  1,248,7,139,116,36,24,137,68,36,20,49,201,252,247,198,237,15,132,244,17,255,
+  252,233,244,18,248,8,137,252,242,137,252,233,232,251,1,13,248,9,139,12,36,
+  137,185,233,137,252,242,137,252,233,232,251,1,0,139,149,233,252,233,244,4,
+  248,77,139,108,36,48,137,113,252,252,252,247,133,233,237,15,132,244,54,137,
+  141,233,141,68,193,252,248,137,133,233,49,192,137,133,233,176,235,136,133,
+  233,252,233,244,22,255,248,63,221,89,252,248,252,233,244,57,248,78,129,252,
+  248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,252,242,15,16,1,102,
+  15,252,239,201,102,15,118,201,102,15,115,209,1,15,84,193,248,62,252,242,15,
+  17,65,252,248,255,248,78,129,252,248,239,15,130,244,54,129,121,253,4,239,
+  15,135,244,54,221,1,217,225,248,62,248,63,221,89,252,248,255,248,57,184,237,
+  248,68,137,68,36,20,248,55,252,247,198,237,15,133,244,253,248,5,56,70,252,
+  255,15,135,244,252,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,
+  36,171,248,6,199,68,193,252,244,237,131,192,1,252,233,244,5,248,7,137,202,
+  185,252,248,252,255,252,255,252,255,252,233,244,18,255,248,79,129,252,248,
+  239,15,130,244,54,129,121,253,4,239,15,135,244,54,252,242,15,81,1,252,233,
+  244,62,248,80,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,
+  54,252,242,15,16,1,232,244,81,252,233,244,62,248,82,255,129,252,248,239,15,
+  130,244,54,129,121,253,4,239,15,135,244,54,252,242,15,16,1,232,244,83,252,
+  233,244,62,255,248,79,129,252,248,239,15,130,244,54,129,121,253,4,239,15,
+  135,244,54,221,1,217,252,250,252,233,244,63,248,80,129,252,248,239,15,130,
+  244,54,129,121,253,4,239,15,135,244,54,221,1,232,244,81,252,233,244,63,248,
+  82,255,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,221,
+  1,232,244,83,252,233,244,63,255,248,84,129,252,248,239,15,130,244,54,129,
+  121,253,4,239,15,135,244,54,217,252,237,221,1,217,252,241,252,233,244,63,
+  248,85,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,217,
+  252,236,221,1,217,252,241,252,233,244,63,248,86,129,252,248,239,255,15,130,
+  244,54,129,121,253,4,239,15,135,244,54,221,1,232,244,87,252,233,244,63,248,
+  88,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,221,1,217,
+  252,254,252,233,244,63,248,89,129,252,248,239,255,15,130,244,54,129,121,253,
+  4,239,15,135,244,54,221,1,217,252,255,252,233,244,63,248,90,129,252,248,239,
+  15,130,244,54,129,121,253,4,239,15,135,244,54,221,1,217,252,242,221,216,252,
+  233,244,63,248,91,129,252,248,239,15,130,244,54,255,129,121,253,4,239,15,
+  135,244,54,221,1,217,192,216,200,217,232,222,225,217,252,250,217,252,243,
+  252,233,244,63,248,92,129,252,248,239,15,130,244,54,129,121,253,4,239,15,
+  135,244,54,221,1,217,192,216,200,217,232,222,225,217,252,250,217,201,217,
+  252,243,252,233,244,63,248,93,129,252,248,239,15,130,244,54,129,121,253,4,
+  239,15,135,244,54,255,221,1,217,232,217,252,243,252,233,244,63,255,248,94,
+  129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,252,242,15,
+  16,1,252,242,15,17,4,36,255,248,94,129,252,248,239,15,130,244,54,129,121,
   253,4,239,15,135,244,54,221,1,221,28,36,255,137,76,36,16,137,213,232,251,
-  1,15,139,76,36,16,137,252,234,252,233,244,63,255,248,96,129,252,248,239,15,
+  1,14,139,76,36,16,137,252,234,252,233,244,63,255,248,95,129,252,248,239,15,
   130,244,54,129,121,253,4,239,15,135,244,54,252,242,15,16,1,252,242,15,17,
-  4,36,255,248,96,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,
-  54,221,1,221,28,36,255,137,76,36,16,137,213,232,251,1,16,139,76,36,16,137,
-  252,234,252,233,244,63,248,97,255,248,98,129,252,248,239,15,130,244,54,129,
-  121,253,4,239,15,135,244,54,252,242,15,16,1,252,242,15,89,133,233,252,233,
-  244,62,255,248,98,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,
-  244,54,221,1,220,141,233,252,233,244,63,255,248,99,129,252,248,239,15,130,
+  4,36,255,248,95,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,
+  54,221,1,221,28,36,255,137,76,36,16,137,213,232,251,1,15,139,76,36,16,137,
+  252,234,252,233,244,63,255,248,96,129,252,248,239,15,130,244,54,129,121,253,
+  4,239,15,135,244,54,252,242,15,16,1,252,242,15,17,4,36,255,248,96,129,252,
+  248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,221,1,221,28,36,255,
+  137,76,36,16,137,213,232,251,1,16,139,76,36,16,137,252,234,252,233,244,63,
+  248,97,255,248,98,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,
+  244,54,252,242,15,16,1,252,242,15,89,133,233,252,233,244,62,255,248,98,129,
+  252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,221,1,220,141,233,
+  252,233,244,63,255,248,99,129,252,248,239,15,130,244,54,129,121,253,4,239,
+  15,135,244,54,129,121,253,12,239,15,135,244,54,221,1,221,65,8,217,252,243,
+  252,233,244,63,248,100,129,252,248,239,15,130,244,54,129,121,253,4,239,15,
+  135,244,54,129,121,253,12,239,255,15,135,244,54,221,65,8,221,1,217,252,253,
+  221,217,252,233,244,63,248,101,129,252,248,239,15,130,244,54,139,105,4,129,
+  252,253,239,15,135,244,54,139,1,137,105,252,252,137,65,252,248,209,229,129,
+  252,253,0,0,224,252,255,15,131,244,249,9,232,15,132,244,249,184,252,254,3,
+  0,0,129,252,253,0,0,32,0,15,130,244,250,248,1,193,252,237,21,41,197,255,252,
+  242,15,42,197,255,137,108,36,16,219,68,36,16,255,139,105,252,252,129,229,
+  252,255,252,255,15,128,129,205,0,0,224,63,137,105,252,252,248,2,255,252,242,
+  15,17,1,255,221,25,255,184,237,252,233,244,68,248,3,255,15,87,192,252,233,
+  244,2,255,217,252,238,252,233,244,2,255,252,242,15,16,1,189,0,0,80,67,102,
+  15,110,205,102,15,112,201,81,252,242,15,89,193,252,242,15,17,65,252,248,255,
+  221,1,199,68,36,16,0,0,128,90,216,76,36,16,221,89,252,248,255,139,105,252,
+  252,184,52,4,0,0,209,229,252,233,244,1,255,248,102,129,252,248,239,15,130,
+  244,54,129,121,253,4,239,15,135,244,54,252,242,15,16,1,255,248,102,129,252,
+  248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,221,1,255,139,105,4,
+  209,229,129,252,253,0,0,224,252,255,15,132,244,250,255,15,40,224,232,244,
+  103,252,242,15,92,224,248,1,252,242,15,17,65,252,248,252,242,15,17,33,255,
+  217,192,232,244,103,220,252,233,248,1,221,89,252,248,221,25,255,139,65,252,
+  252,139,105,4,49,232,15,136,244,249,248,2,184,237,252,233,244,68,248,3,129,
+  252,245,0,0,0,128,137,105,4,252,233,244,2,248,4,255,15,87,228,252,233,244,
+  1,255,217,252,238,217,201,252,233,244,1,255,248,104,129,252,248,239,15,130,
   244,54,129,121,253,4,239,15,135,244,54,129,121,253,12,239,15,135,244,54,221,
-  1,221,65,8,217,252,243,252,233,244,63,248,100,129,252,248,239,15,130,244,
-  54,129,121,253,4,239,15,135,244,54,129,121,253,12,239,255,15,135,244,54,221,
-  65,8,221,1,217,252,253,221,217,252,233,244,63,248,101,129,252,248,239,15,
-  130,244,54,139,105,4,129,252,253,239,15,135,244,54,139,1,137,105,252,252,
-  137,65,252,248,209,229,129,252,253,0,0,224,252,255,15,131,244,249,9,232,15,
-  132,244,249,184,252,254,3,0,0,129,252,253,0,0,32,0,15,130,244,250,248,1,193,
-  252,237,21,41,197,255,252,242,15,42,197,255,137,108,36,16,219,68,36,16,255,
-  139,105,252,252,129,229,252,255,252,255,15,128,129,205,0,0,224,63,137,105,
-  252,252,248,2,255,252,242,15,17,1,255,221,25,255,184,237,252,233,244,68,248,
-  3,255,15,87,192,252,233,244,2,255,217,252,238,252,233,244,2,255,252,242,15,
-  16,1,189,0,0,80,67,102,15,110,205,102,15,112,201,81,252,242,15,89,193,252,
-  242,15,17,65,252,248,255,221,1,199,68,36,16,0,0,128,90,216,76,36,16,221,89,
-  252,248,255,139,105,252,252,184,52,4,0,0,209,229,252,233,244,1,255,248,102,
-  129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,252,242,15,
-  16,1,255,248,102,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,
-  54,221,1,255,139,105,4,209,229,129,252,253,0,0,224,252,255,15,132,244,250,
-  255,15,40,224,232,244,103,252,242,15,92,224,248,1,252,242,15,17,65,252,248,
-  252,242,15,17,33,255,217,192,232,244,103,220,252,233,248,1,221,89,252,248,
-  221,25,255,139,65,252,252,139,105,4,49,232,15,136,244,249,248,2,184,237,252,
-  233,244,68,248,3,129,252,245,0,0,0,128,137,105,4,252,233,244,2,248,4,255,
-  15,87,228,252,233,244,1,255,217,252,238,217,201,252,233,244,1,255,248,104,
-  129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,129,121,253,
-  12,239,15,135,244,54,221,65,8,221,1,248,1,217,252,248,223,224,158,15,138,
-  244,1,221,217,252,233,244,63,255,248,105,129,252,248,239,15,130,244,54,129,
-  121,253,4,239,15,135,244,54,129,121,253,12,239,15,135,244,54,252,242,15,16,
-  1,252,242,15,16,73,8,232,244,106,252,233,244,62,255,248,105,129,252,248,239,
-  15,130,244,54,129,121,253,4,239,15,135,244,54,129,121,253,12,239,15,135,244,
-  54,221,1,221,65,8,232,244,106,252,233,244,63,255,248,107,129,252,248,239,
-  15,130,244,54,129,121,253,4,239,15,135,244,54,252,242,15,16,1,189,2,0,0,0,
-  248,1,57,197,15,131,244,62,129,124,253,252,233,252,252,239,15,135,244,54,
-  252,242,15,16,76,252,233,252,248,252,242,15,93,193,131,197,1,252,233,244,
-  1,255,248,107,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,
+  65,8,221,1,248,1,217,252,248,223,224,158,15,138,244,1,221,217,252,233,244,
+  63,255,248,105,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,
+  54,129,121,253,12,239,15,135,244,54,252,242,15,16,1,252,242,15,16,73,8,232,
+  244,106,252,233,244,62,255,248,105,129,252,248,239,15,130,244,54,129,121,
+  253,4,239,15,135,244,54,129,121,253,12,239,15,135,244,54,221,1,221,65,8,232,
+  244,106,252,233,244,63,255,248,107,129,252,248,239,15,130,244,54,129,121,
+  253,4,239,15,135,244,54,252,242,15,16,1,189,2,0,0,0,248,1,57,197,15,131,244,
+  62,129,124,253,252,233,252,252,239,15,135,244,54,252,242,15,16,76,252,233,
+  252,248,252,242,15,93,193,131,197,1,252,233,244,1,255,248,107,129,252,248,
+  239,15,130,244,54,129,121,253,4,239,15,135,244,54,221,1,189,2,0,0,0,248,1,
+  57,197,15,131,244,63,129,124,253,252,233,252,252,239,15,135,244,251,221,68,
+  252,233,252,248,255,219,252,233,219,209,221,217,255,80,221,225,223,224,252,
+  246,196,1,15,132,244,248,217,201,248,2,221,216,88,255,248,108,129,252,248,
+  239,15,130,244,54,129,121,253,4,239,15,135,244,54,252,242,15,16,1,189,2,0,
+  0,0,248,1,57,197,15,131,244,62,129,124,253,252,233,252,252,239,15,135,244,
+  54,252,242,15,16,76,252,233,252,248,252,242,15,95,193,131,197,1,252,233,244,
+  1,255,248,108,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,
   54,221,1,189,2,0,0,0,248,1,57,197,15,131,244,63,129,124,253,252,233,252,252,
-  239,15,135,244,251,221,68,252,233,252,248,255,219,252,233,219,209,221,217,
-  255,80,221,225,223,224,252,246,196,1,15,132,244,248,217,201,248,2,221,216,
-  88,255,248,108,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,
-  54,252,242,15,16,1,189,2,0,0,0,248,1,57,197,15,131,244,62,129,124,253,252,
-  233,252,252,239,15,135,244,54,252,242,15,16,76,252,233,252,248,252,242,15,
-  95,193,131,197,1,252,233,244,1,255,248,108,129,252,248,239,15,130,244,54,
-  129,121,253,4,239,15,135,244,54,221,1,189,2,0,0,0,248,1,57,197,15,131,244,
-  63,129,124,253,252,233,252,252,239,15,135,244,251,221,68,252,233,252,248,
-  255,219,252,233,218,209,221,217,255,80,221,225,223,224,252,246,196,1,15,133,
-  244,248,217,201,248,2,221,216,88,255,248,5,221,216,252,233,244,54,255,248,
-  109,129,252,248,239,15,130,244,54,129,121,253,4,239,15,133,244,54,139,41,
-  255,252,242,15,42,133,233,252,233,244,62,255,219,133,233,252,233,244,63,255,
-  248,110,129,252,248,239,15,133,244,54,129,121,253,4,239,15,133,244,54,139,
-  41,131,189,233,1,15,130,244,71,15,182,173,233,255,252,242,15,42,197,252,233,
-  244,62,255,137,108,36,16,219,68,36,16,252,233,244,63,255,248,111,139,171,
-  233,59,171,233,15,130,244,247,232,244,65,248,1,129,252,248,239,15,133,244,
-  54,129,121,253,4,239,15,135,244,54,255,252,242,15,45,1,61,252,255,0,0,0,15,
-  135,244,54,137,68,36,20,255,221,1,219,92,36,20,129,124,36,20,252,255,0,0,
-  0,15,135,244,54,255,199,68,36,8,1,0,0,0,141,68,36,20,137,76,36,16,248,112,
-  139,108,36,48,137,149,233,137,68,36,4,137,44,36,137,116,36,24,232,251,1,17,
-  139,76,36,16,139,149,233,199,65,252,252,237,137,65,252,248,252,233,244,57,
-  248,113,139,171,233,59,171,233,15,130,244,247,232,244,65,248,1,137,76,36,
-  16,199,68,36,20,252,255,252,255,252,255,252,255,129,252,248,239,15,130,244,
-  54,15,134,244,247,129,121,253,20,239,255,252,242,15,45,105,16,137,108,36,
-  20,255,221,65,16,219,92,36,20,255,248,1,129,121,253,4,239,15,133,244,54,129,
-  121,253,12,239,15,135,244,54,139,41,137,108,36,12,139,173,233,255,252,242,
-  15,45,73,8,255,221,65,8,219,92,36,8,139,76,36,8,255,139,68,36,20,57,197,15,
-  130,244,251,248,2,133,201,15,142,244,253,248,3,139,108,36,12,41,200,15,140,
-  244,114,141,172,253,13,233,131,192,1,248,4,137,68,36,8,137,232,252,233,244,
-  112,248,5,15,140,244,252,141,68,40,1,252,233,244,2,248,6,137,232,252,233,
-  244,2,248,7,255,15,132,244,254,1,252,233,131,193,1,15,143,244,3,248,8,185,
-  1,0,0,0,252,233,244,3,248,114,49,192,252,233,244,4,248,115,129,252,248,239,
-  15,130,244,54,139,171,233,59,171,233,15,130,244,247,232,244,65,248,1,255,
-  137,76,36,16,129,121,253,4,239,15,133,244,54,129,121,253,12,239,15,135,244,
-  54,139,41,255,252,242,15,45,65,8,255,221,65,8,219,92,36,20,139,68,36,20,255,
-  133,192,15,142,244,114,131,189,233,1,15,130,244,114,15,133,244,116,57,131,
-  233,15,130,244,116,15,182,141,233,139,171,233,137,68,36,8,248,1,136,77,0,
-  131,197,1,131,232,1,15,133,244,1,139,131,233,252,233,244,112,248,117,129,
-  252,248,239,255,15,130,244,54,139,171,233,59,171,233,15,130,244,247,232,244,
-  65,248,1,137,76,36,16,129,121,253,4,239,15,133,244,54,139,41,139,133,233,
-  133,192,15,132,244,114,57,131,233,15,130,244,118,129,197,239,137,116,36,20,
-  137,68,36,8,139,179,233,248,1,255,15,182,77,0,131,197,1,131,232,1,136,12,
-  6,15,133,244,1,137,252,240,139,116,36,20,252,233,244,112,248,119,129,252,
-  248,239,15,130,244,54,139,171,233,59,171,233,15,130,244,247,232,244,65,248,
-  1,137,76,36,16,129,121,253,4,239,15,133,244,54,139,41,139,133,233,57,131,
-  233,255,15,130,244,118,129,197,239,137,116,36,20,137,68,36,8,139,179,233,
-  252,233,244,249,248,1,15,182,76,5,0,131,252,249,65,15,130,244,248,131,252,
-  249,90,15,135,244,248,131,252,241,32,248,2,136,12,6,248,3,131,232,1,15,137,
-  244,1,137,252,240,139,116,36,20,252,233,244,112,248,120,129,252,248,239,15,
-  130,244,54,255,139,171,233,59,171,233,15,130,244,247,232,244,65,248,1,137,
-  76,36,16,129,121,253,4,239,15,133,244,54,139,41,139,133,233,57,131,233,15,
-  130,244,118,129,197,239,137,116,36,20,137,68,36,8,139,179,233,252,233,244,
-  249,248,1,15,182,76,5,0,131,252,249,97,15,130,244,248,255,131,252,249,122,
-  15,135,244,248,131,252,241,32,248,2,136,12,6,248,3,131,232,1,15,137,244,1,
-  137,252,240,139,116,36,20,252,233,244,112,248,121,129,252,248,239,15,130,
-  244,54,129,121,253,4,239,15,133,244,54,137,84,36,16,137,205,139,9,232,251,
-  1,18,137,252,233,139,84,36,16,255,252,242,15,42,192,252,233,244,62,255,137,
-  4,36,219,4,36,252,233,244,63,255,248,122,129,252,248,239,15,130,244,54,129,
-  121,253,4,239,15,135,244,54,252,242,15,16,1,189,0,0,56,67,102,15,110,205,
-  102,15,112,201,81,252,242,15,88,193,102,15,126,197,252,242,15,42,197,252,
-  233,244,62,255,248,122,129,252,248,239,15,130,244,54,129,121,253,4,239,15,
-  135,244,54,221,1,199,68,36,16,0,0,192,89,216,68,36,16,221,28,36,219,4,36,
-  252,233,244,63,255,248,123,129,252,248,239,15,130,244,54,129,121,253,4,239,
-  15,135,244,54,252,242,15,16,1,189,0,0,56,67,102,15,110,205,102,15,112,201,
-  81,252,242,15,88,193,102,15,126,197,255,248,123,129,252,248,239,15,130,244,
-  54,129,121,253,4,239,15,135,244,54,221,1,199,68,36,16,0,0,192,89,216,68,36,
-  16,221,28,36,139,44,36,255,137,68,36,20,141,68,193,252,240,255,137,84,36,
-  16,255,248,1,57,200,15,134,244,124,129,120,253,4,239,15,135,244,125,255,252,
-  242,15,16,0,252,242,15,88,193,102,15,126,194,33,213,255,221,0,216,68,36,16,
-  221,28,36,35,44,36,255,131,232,8,252,233,244,1,255,248,126,129,252,248,239,
-  15,130,244,54,129,121,253,4,239,15,135,244,54,252,242,15,16,1,189,0,0,56,
-  67,102,15,110,205,102,15,112,201,81,252,242,15,88,193,102,15,126,197,255,
-  248,126,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,221,
-  1,199,68,36,16,0,0,192,89,216,68,36,16,221,28,36,139,44,36,255,252,242,15,
-  16,0,252,242,15,88,193,102,15,126,194,9,213,255,221,0,216,68,36,16,221,28,
-  36,11,44,36,255,248,127,129,252,248,239,15,130,244,54,129,121,253,4,239,15,
+  239,15,135,244,251,221,68,252,233,252,248,255,219,252,233,218,209,221,217,
+  255,80,221,225,223,224,252,246,196,1,15,133,244,248,217,201,248,2,221,216,
+  88,255,248,5,221,216,252,233,244,54,255,248,109,129,252,248,239,15,130,244,
+  54,129,121,253,4,239,15,133,244,54,139,41,255,252,242,15,42,133,233,252,233,
+  244,62,255,219,133,233,252,233,244,63,255,248,110,129,252,248,239,15,133,
+  244,54,129,121,253,4,239,15,133,244,54,139,41,131,189,233,1,15,130,244,71,
+  15,182,173,233,255,252,242,15,42,197,252,233,244,62,255,137,108,36,16,219,
+  68,36,16,252,233,244,63,255,248,111,139,171,233,59,171,233,15,130,244,247,
+  232,244,65,248,1,129,252,248,239,15,133,244,54,129,121,253,4,239,15,135,244,
+  54,255,252,242,15,45,1,61,252,255,0,0,0,15,135,244,54,137,68,36,20,255,221,
+  1,219,92,36,20,129,124,36,20,252,255,0,0,0,15,135,244,54,255,199,68,36,8,
+  1,0,0,0,141,68,36,20,137,76,36,16,248,112,139,108,36,48,137,149,233,137,68,
+  36,4,137,44,36,137,116,36,24,232,251,1,17,139,76,36,16,139,149,233,199,65,
+  252,252,237,137,65,252,248,252,233,244,57,248,113,139,171,233,59,171,233,
+  15,130,244,247,232,244,65,248,1,137,76,36,16,199,68,36,20,252,255,252,255,
+  252,255,252,255,129,252,248,239,15,130,244,54,15,134,244,247,129,121,253,
+  20,239,255,252,242,15,45,105,16,137,108,36,20,255,221,65,16,219,92,36,20,
+  255,248,1,129,121,253,4,239,15,133,244,54,129,121,253,12,239,15,135,244,54,
+  139,41,137,108,36,12,139,173,233,255,252,242,15,45,73,8,255,221,65,8,219,
+  92,36,8,139,76,36,8,255,139,68,36,20,57,197,15,130,244,251,248,2,133,201,
+  15,142,244,253,248,3,139,108,36,12,41,200,15,140,244,114,141,172,253,13,233,
+  131,192,1,248,4,137,68,36,8,137,232,252,233,244,112,248,5,15,140,244,252,
+  141,68,40,1,252,233,244,2,248,6,137,232,252,233,244,2,248,7,255,15,132,244,
+  254,1,252,233,131,193,1,15,143,244,3,248,8,185,1,0,0,0,252,233,244,3,248,
+  114,49,192,252,233,244,4,248,115,129,252,248,239,15,130,244,54,139,171,233,
+  59,171,233,15,130,244,247,232,244,65,248,1,255,137,76,36,16,129,121,253,4,
+  239,15,133,244,54,129,121,253,12,239,15,135,244,54,139,41,255,252,242,15,
+  45,65,8,255,221,65,8,219,92,36,20,139,68,36,20,255,133,192,15,142,244,114,
+  131,189,233,1,15,130,244,114,15,133,244,116,57,131,233,15,130,244,116,15,
+  182,141,233,139,171,233,137,68,36,8,248,1,136,77,0,131,197,1,131,232,1,15,
+  133,244,1,139,131,233,252,233,244,112,248,117,129,252,248,239,255,15,130,
+  244,54,139,171,233,59,171,233,15,130,244,247,232,244,65,248,1,137,76,36,16,
+  129,121,253,4,239,15,133,244,54,139,41,139,133,233,133,192,15,132,244,114,
+  57,131,233,15,130,244,118,129,197,239,137,116,36,20,137,68,36,8,139,179,233,
+  248,1,255,15,182,77,0,131,197,1,131,232,1,136,12,6,15,133,244,1,137,252,240,
+  139,116,36,20,252,233,244,112,248,119,129,252,248,239,15,130,244,54,139,171,
+  233,59,171,233,15,130,244,247,232,244,65,248,1,137,76,36,16,129,121,253,4,
+  239,15,133,244,54,139,41,139,133,233,57,131,233,255,15,130,244,118,129,197,
+  239,137,116,36,20,137,68,36,8,139,179,233,252,233,244,249,248,1,15,182,76,
+  5,0,131,252,249,65,15,130,244,248,131,252,249,90,15,135,244,248,131,252,241,
+  32,248,2,136,12,6,248,3,131,232,1,15,137,244,1,137,252,240,139,116,36,20,
+  252,233,244,112,248,120,129,252,248,239,15,130,244,54,255,139,171,233,59,
+  171,233,15,130,244,247,232,244,65,248,1,137,76,36,16,129,121,253,4,239,15,
+  133,244,54,139,41,139,133,233,57,131,233,15,130,244,118,129,197,239,137,116,
+  36,20,137,68,36,8,139,179,233,252,233,244,249,248,1,15,182,76,5,0,131,252,
+  249,97,15,130,244,248,255,131,252,249,122,15,135,244,248,131,252,241,32,248,
+  2,136,12,6,248,3,131,232,1,15,137,244,1,137,252,240,139,116,36,20,252,233,
+  244,112,248,121,129,252,248,239,15,130,244,54,129,121,253,4,239,15,133,244,
+  54,137,84,36,16,137,205,139,9,232,251,1,18,137,252,233,139,84,36,16,255,252,
+  242,15,42,192,252,233,244,62,255,137,4,36,219,4,36,252,233,244,63,255,248,
+  122,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,252,242,
+  15,16,1,189,0,0,56,67,102,15,110,205,102,15,112,201,81,252,242,15,88,193,
+  102,15,126,197,252,242,15,42,197,252,233,244,62,255,248,122,129,252,248,239,
+  15,130,244,54,129,121,253,4,239,15,135,244,54,221,1,199,68,36,16,0,0,192,
+  89,216,68,36,16,221,28,36,219,4,36,252,233,244,63,255,248,123,129,252,248,
+  239,15,130,244,54,129,121,253,4,239,15,135,244,54,252,242,15,16,1,189,0,0,
+  56,67,102,15,110,205,102,15,112,201,81,252,242,15,88,193,102,15,126,197,255,
+  248,123,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,221,
+  1,199,68,36,16,0,0,192,89,216,68,36,16,221,28,36,139,44,36,255,137,68,36,
+  20,141,68,193,252,240,255,137,84,36,16,255,248,1,57,200,15,134,244,124,129,
+  120,253,4,239,15,135,244,125,255,252,242,15,16,0,252,242,15,88,193,102,15,
+  126,194,33,213,255,221,0,216,68,36,16,221,28,36,35,44,36,255,131,232,8,252,
+  233,244,1,255,248,126,129,252,248,239,15,130,244,54,129,121,253,4,239,15,
   135,244,54,252,242,15,16,1,189,0,0,56,67,102,15,110,205,102,15,112,201,81,
-  252,242,15,88,193,102,15,126,197,255,248,127,129,252,248,239,15,130,244,54,
+  252,242,15,88,193,102,15,126,197,255,248,126,129,252,248,239,15,130,244,54,
   129,121,253,4,239,15,135,244,54,221,1,199,68,36,16,0,0,192,89,216,68,36,16,
   221,28,36,139,44,36,255,252,242,15,16,0,252,242,15,88,193,102,15,126,194,
-  49,213,255,221,0,216,68,36,16,221,28,36,51,44,36,255,248,128,129,252,248,
-  239,15,130,244,54,129,121,253,4,239,15,135,244,54,252,242,15,16,1,189,0,0,
-  56,67,102,15,110,205,102,15,112,201,81,252,242,15,88,193,102,15,126,197,255,
-  248,128,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,221,
-  1,199,68,36,16,0,0,192,89,216,68,36,16,221,28,36,139,44,36,255,15,205,252,
-  233,244,129,255,248,130,129,252,248,239,15,130,244,54,129,121,253,4,239,15,
+  9,213,255,221,0,216,68,36,16,221,28,36,11,44,36,255,248,127,129,252,248,239,
+  15,130,244,54,129,121,253,4,239,15,135,244,54,252,242,15,16,1,189,0,0,56,
+  67,102,15,110,205,102,15,112,201,81,252,242,15,88,193,102,15,126,197,255,
+  248,127,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,221,
+  1,199,68,36,16,0,0,192,89,216,68,36,16,221,28,36,139,44,36,255,252,242,15,
+  16,0,252,242,15,88,193,102,15,126,194,49,213,255,221,0,216,68,36,16,221,28,
+  36,51,44,36,255,248,128,129,252,248,239,15,130,244,54,129,121,253,4,239,15,
   135,244,54,252,242,15,16,1,189,0,0,56,67,102,15,110,205,102,15,112,201,81,
-  252,242,15,88,193,102,15,126,197,255,248,130,129,252,248,239,15,130,244,54,
+  252,242,15,88,193,102,15,126,197,255,248,128,129,252,248,239,15,130,244,54,
   129,121,253,4,239,15,135,244,54,221,1,199,68,36,16,0,0,192,89,216,68,36,16,
-  221,28,36,139,44,36,255,252,247,213,255,248,129,252,242,15,42,197,252,233,
-  244,62,248,124,252,242,15,42,197,139,84,36,16,252,233,244,62,255,248,129,
-  248,124,137,44,36,219,4,36,252,233,244,63,255,248,125,255,139,68,36,20,252,
-  233,244,54,255,248,131,129,252,248,239,15,130,244,54,129,121,253,4,239,15,
-  135,244,54,129,121,253,12,239,15,135,244,54,252,242,15,16,1,252,242,15,16,
-  73,8,189,0,0,56,67,102,15,110,213,102,15,112,210,81,252,242,15,88,194,252,
-  242,15,88,202,137,200,102,15,126,197,102,15,126,201,255,248,131,129,252,248,
-  239,15,130,244,54,129,121,253,4,239,15,135,244,54,129,121,253,12,239,15,135,
-  244,54,221,1,221,65,8,199,68,36,16,0,0,192,89,216,68,36,16,221,92,36,8,216,
-  68,36,16,221,28,36,137,200,139,76,36,8,139,44,36,255,211,229,137,193,252,
-  233,244,129,255,248,132,129,252,248,239,15,130,244,54,129,121,253,4,239,15,
-  135,244,54,129,121,253,12,239,15,135,244,54,252,242,15,16,1,252,242,15,16,
-  73,8,189,0,0,56,67,102,15,110,213,102,15,112,210,81,252,242,15,88,194,252,
-  242,15,88,202,137,200,102,15,126,197,102,15,126,201,255,248,132,129,252,248,
+  221,28,36,139,44,36,255,15,205,252,233,244,129,255,248,130,129,252,248,239,
+  15,130,244,54,129,121,253,4,239,15,135,244,54,252,242,15,16,1,189,0,0,56,
+  67,102,15,110,205,102,15,112,201,81,252,242,15,88,193,102,15,126,197,255,
+  248,130,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,221,
+  1,199,68,36,16,0,0,192,89,216,68,36,16,221,28,36,139,44,36,255,252,247,213,
+  255,248,129,252,242,15,42,197,252,233,244,62,248,124,252,242,15,42,197,139,
+  84,36,16,252,233,244,62,255,248,129,248,124,137,44,36,219,4,36,252,233,244,
+  63,255,248,125,255,139,68,36,20,252,233,244,54,255,248,131,129,252,248,239,
+  15,130,244,54,129,121,253,4,239,15,135,244,54,129,121,253,12,239,15,135,244,
+  54,252,242,15,16,1,252,242,15,16,73,8,189,0,0,56,67,102,15,110,213,102,15,
+  112,210,81,252,242,15,88,194,252,242,15,88,202,137,200,102,15,126,197,102,
+  15,126,201,255,248,131,129,252,248,239,15,130,244,54,129,121,253,4,239,15,
+  135,244,54,129,121,253,12,239,15,135,244,54,221,1,221,65,8,199,68,36,16,0,
+  0,192,89,216,68,36,16,221,92,36,8,216,68,36,16,221,28,36,137,200,139,76,36,
+  8,139,44,36,255,211,229,137,193,252,233,244,129,255,248,132,129,252,248,239,
+  15,130,244,54,129,121,253,4,239,15,135,244,54,129,121,253,12,239,15,135,244,
+  54,252,242,15,16,1,252,242,15,16,73,8,189,0,0,56,67,102,15,110,213,102,15,
+  112,210,81,252,242,15,88,194,252,242,15,88,202,137,200,102,15,126,197,102,
+  15,126,201,255,248,132,129,252,248,239,15,130,244,54,129,121,253,4,239,15,
+  135,244,54,129,121,253,12,239,15,135,244,54,221,1,221,65,8,199,68,36,16,0,
+  0,192,89,216,68,36,16,221,92,36,8,216,68,36,16,221,28,36,137,200,139,76,36,
+  8,139,44,36,255,211,252,237,137,193,252,233,244,129,255,248,133,129,252,248,
   239,15,130,244,54,129,121,253,4,239,15,135,244,54,129,121,253,12,239,15,135,
-  244,54,221,1,221,65,8,199,68,36,16,0,0,192,89,216,68,36,16,221,92,36,8,216,
-  68,36,16,221,28,36,137,200,139,76,36,8,139,44,36,255,211,252,237,137,193,
-  252,233,244,129,255,248,133,129,252,248,239,15,130,244,54,129,121,253,4,239,
-  15,135,244,54,129,121,253,12,239,15,135,244,54,252,242,15,16,1,252,242,15,
-  16,73,8,189,0,0,56,67,102,15,110,213,102,15,112,210,81,252,242,15,88,194,
-  252,242,15,88,202,137,200,102,15,126,197,102,15,126,201,255,248,133,129,252,
+  244,54,252,242,15,16,1,252,242,15,16,73,8,189,0,0,56,67,102,15,110,213,102,
+  15,112,210,81,252,242,15,88,194,252,242,15,88,202,137,200,102,15,126,197,
+  102,15,126,201,255,248,133,129,252,248,239,15,130,244,54,129,121,253,4,239,
+  15,135,244,54,129,121,253,12,239,15,135,244,54,221,1,221,65,8,199,68,36,16,
+  0,0,192,89,216,68,36,16,221,92,36,8,216,68,36,16,221,28,36,137,200,139,76,
+  36,8,139,44,36,255,211,252,253,137,193,252,233,244,129,255,248,134,129,252,
   248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,129,121,253,12,239,
-  15,135,244,54,221,1,221,65,8,199,68,36,16,0,0,192,89,216,68,36,16,221,92,
-  36,8,216,68,36,16,221,28,36,137,200,139,76,36,8,139,44,36,255,211,252,253,
-  137,193,252,233,244,129,255,248,134,129,252,248,239,15,130,244,54,129,121,
-  253,4,239,15,135,244,54,129,121,253,12,239,15,135,244,54,252,242,15,16,1,
-  252,242,15,16,73,8,189,0,0,56,67,102,15,110,213,102,15,112,210,81,252,242,
-  15,88,194,252,242,15,88,202,137,200,102,15,126,197,102,15,126,201,255,248,
-  134,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,129,121,
-  253,12,239,15,135,244,54,221,1,221,65,8,199,68,36,16,0,0,192,89,216,68,36,
-  16,221,92,36,8,216,68,36,16,221,28,36,137,200,139,76,36,8,139,44,36,255,211,
-  197,137,193,252,233,244,129,255,248,135,129,252,248,239,15,130,244,54,129,
-  121,253,4,239,15,135,244,54,129,121,253,12,239,15,135,244,54,252,242,15,16,
-  1,252,242,15,16,73,8,189,0,0,56,67,102,15,110,213,102,15,112,210,81,252,242,
-  15,88,194,252,242,15,88,202,137,200,102,15,126,197,102,15,126,201,255,248,
-  135,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,129,121,
-  253,12,239,15,135,244,54,221,1,221,65,8,199,68,36,16,0,0,192,89,216,68,36,
-  16,221,92,36,8,216,68,36,16,221,28,36,137,200,139,76,36,8,139,44,36,255,211,
-  205,137,193,252,233,244,129,248,116,184,237,252,233,244,54,248,118,184,237,
-  248,54,139,108,36,48,41,202,137,113,252,252,137,116,36,24,137,84,36,16,137,
-  141,233,141,68,193,252,248,141,144,233,137,133,233,139,65,252,248,59,149,
-  233,15,135,244,251,137,44,36,252,255,144,233,133,192,15,133,244,249,248,1,
-  139,141,233,255,139,133,233,41,200,193,232,3,131,192,1,139,105,252,248,139,
-  84,36,16,1,202,57,113,252,252,15,133,244,248,252,255,165,233,248,2,129,121,
-  253,252,252,239,15,133,244,29,252,255,165,233,248,3,139,141,233,139,84,36,
-  16,1,202,252,233,244,68,248,5,186,237,137,252,233,232,251,1,0,252,233,244,
-  1,248,65,93,137,108,36,16,139,108,36,48,41,202,137,84,36,20,137,113,252,252,
-  137,116,36,24,137,141,233,141,68,193,252,248,137,252,233,137,133,233,255,
-  232,251,1,19,139,141,233,139,133,233,41,200,193,232,3,131,192,1,139,113,252,
-  252,139,84,36,20,1,202,139,108,36,16,85,139,105,252,248,195,248,136,255,15,
-  182,131,233,168,235,15,133,244,251,168,235,15,133,244,247,168,235,15,132,
-  244,247,252,255,139,233,252,233,244,247,255,248,137,15,182,131,233,168,235,
-  15,133,244,251,168,235,15,132,244,251,252,255,139,233,15,132,244,247,168,
-  235,15,132,244,251,248,1,139,108,36,48,139,68,36,20,137,68,36,8,137,149,233,
-  137,116,36,4,137,44,36,232,251,1,20,248,4,139,149,233,15,182,78,252,253,248,
-  5,15,182,110,252,252,15,183,70,252,254,252,255,164,253,171,233,248,138,255,
-  139,108,36,48,137,149,233,137,252,242,141,139,233,137,171,233,137,116,36,
-  24,232,251,1,21,252,233,244,4,255,248,139,255,139,108,36,48,137,149,233,137,
-  252,242,141,139,233,137,171,233,137,116,36,24,232,251,1,21,139,149,233,139,
-  6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,255,248,140,255,
+  15,135,244,54,252,242,15,16,1,252,242,15,16,73,8,189,0,0,56,67,102,15,110,
+  213,102,15,112,210,81,252,242,15,88,194,252,242,15,88,202,137,200,102,15,
+  126,197,102,15,126,201,255,248,134,129,252,248,239,15,130,244,54,129,121,
+  253,4,239,15,135,244,54,129,121,253,12,239,15,135,244,54,221,1,221,65,8,199,
+  68,36,16,0,0,192,89,216,68,36,16,221,92,36,8,216,68,36,16,221,28,36,137,200,
+  139,76,36,8,139,44,36,255,211,197,137,193,252,233,244,129,255,248,135,129,
+  252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,129,121,253,12,
+  239,15,135,244,54,252,242,15,16,1,252,242,15,16,73,8,189,0,0,56,67,102,15,
+  110,213,102,15,112,210,81,252,242,15,88,194,252,242,15,88,202,137,200,102,
+  15,126,197,102,15,126,201,255,248,135,129,252,248,239,15,130,244,54,129,121,
+  253,4,239,15,135,244,54,129,121,253,12,239,15,135,244,54,221,1,221,65,8,199,
+  68,36,16,0,0,192,89,216,68,36,16,221,92,36,8,216,68,36,16,221,28,36,137,200,
+  139,76,36,8,139,44,36,255,211,205,137,193,252,233,244,129,248,116,184,237,
+  252,233,244,54,248,118,184,237,248,54,139,108,36,48,41,202,137,113,252,252,
+  137,116,36,24,137,84,36,16,137,141,233,141,68,193,252,248,141,144,233,137,
+  133,233,139,65,252,248,59,149,233,15,135,244,251,137,44,36,252,255,144,233,
+  133,192,15,133,244,249,248,1,139,141,233,255,139,133,233,41,200,193,232,3,
+  131,192,1,139,105,252,248,139,84,36,16,1,202,57,113,252,252,15,133,244,248,
+  252,255,165,233,248,2,129,121,253,252,252,239,15,133,244,29,252,255,165,233,
+  248,3,139,141,233,139,84,36,16,1,202,252,233,244,68,248,5,186,237,137,252,
+  233,232,251,1,0,252,233,244,1,248,65,93,137,108,36,16,139,108,36,48,41,202,
+  137,84,36,20,137,113,252,252,137,116,36,24,137,141,233,141,68,193,252,248,
+  137,252,233,137,133,233,255,232,251,1,19,139,141,233,139,133,233,41,200,193,
+  232,3,131,192,1,139,113,252,252,139,84,36,20,1,202,139,108,36,16,85,139,105,
+  252,248,195,248,136,255,15,182,131,233,168,235,15,133,244,251,168,235,15,
+  133,244,247,168,235,15,132,244,247,252,255,139,233,252,233,244,247,255,248,
+  137,15,182,131,233,168,235,15,133,244,251,168,235,15,132,244,251,252,255,
+  139,233,15,132,244,247,168,235,15,132,244,251,248,1,139,108,36,48,137,149,
+  233,137,252,242,137,252,233,232,251,1,20,248,3,139,149,233,248,4,15,182,78,
+  252,253,248,5,255,15,182,110,252,252,15,183,70,252,254,252,255,164,253,171,
+  233,248,138,131,198,4,139,77,232,137,76,36,20,252,233,244,4,248,139,255,139,
+  108,36,48,137,149,233,137,252,242,141,139,233,137,171,233,137,116,36,24,232,
+  251,1,21,252,233,244,3,255,248,140,255,139,108,36,48,137,149,233,137,252,
+  242,141,139,233,137,171,233,137,116,36,24,232,251,1,21,139,149,233,139,6,
+  15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,255,248,141,255,
   85,141,108,36,12,85,83,82,81,80,15,182,69,252,252,138,101,252,248,137,125,
   252,252,137,117,252,248,139,93,0,139,139,233,199,131,233,237,137,131,233,
   137,139,233,129,252,236,239,252,247,131,233,237,15,132,244,247,252,242,15,
@@ -434,29 +434,29 @@ static const unsigned char build_actionlist[15184] = {
   192,252,242,15,17,93,184,252,242,15,17,85,176,252,242,15,17,77,168,252,242,
   15,17,69,160,248,1,139,171,233,139,147,233,137,171,233,137,149,233,141,84,
   36,16,141,139,233,232,251,1,22,137,196,139,149,233,139,116,36,24,137,108,
-  36,48,255,248,141,255,139,122,252,248,139,191,233,139,191,233,199,131,233,
+  36,48,255,248,142,255,139,122,252,248,139,191,233,139,191,233,199,131,233,
   0,0,0,0,199,131,233,237,139,6,15,182,204,15,182,232,131,198,4,193,232,16,
   252,255,36,171,255,248,81,255,217,124,36,4,137,68,36,8,102,184,0,4,102,11,
   68,36,4,102,37,252,255,252,247,102,137,68,36,6,217,108,36,6,217,252,252,217,
-  108,36,4,139,68,36,8,195,255,248,142,102,15,252,239,210,102,15,118,210,102,
+  108,36,4,139,68,36,8,195,255,248,143,102,15,252,239,210,102,15,118,210,102,
   15,115,210,1,184,0,0,48,67,102,15,110,216,102,15,112,219,81,15,40,200,102,
   15,84,202,102,15,46,217,15,134,244,247,102,15,85,208,252,242,15,88,203,252,
   242,15,92,203,102,15,86,202,184,0,0,252,240,63,102,15,110,208,102,15,112,
   210,81,252,242,15,194,193,1,102,15,84,194,252,242,15,92,200,15,40,193,248,
   1,195,248,83,255,217,124,36,4,137,68,36,8,102,184,0,8,102,11,68,36,4,102,
   37,252,255,252,251,102,137,68,36,6,217,108,36,6,217,252,252,217,108,36,4,
-  139,68,36,8,195,255,248,143,102,15,252,239,210,102,15,118,210,102,15,115,
+  139,68,36,8,195,255,248,144,102,15,252,239,210,102,15,118,210,102,15,115,
   210,1,184,0,0,48,67,102,15,110,216,102,15,112,219,81,15,40,200,102,15,84,
   202,102,15,46,217,15,134,244,247,102,15,85,208,252,242,15,88,203,252,242,
   15,92,203,102,15,86,202,184,0,0,252,240,191,102,15,110,208,102,15,112,210,
   81,252,242,15,194,193,6,102,15,84,194,252,242,15,92,200,15,40,193,248,1,195,
   248,103,255,217,124,36,4,137,68,36,8,102,184,0,12,102,11,68,36,4,102,137,
-  68,36,6,217,108,36,6,217,252,252,217,108,36,4,139,68,36,8,195,255,248,144,
+  68,36,6,217,108,36,6,217,252,252,217,108,36,4,139,68,36,8,195,255,248,145,
   102,15,252,239,210,102,15,118,210,102,15,115,210,1,184,0,0,48,67,102,15,110,
   216,102,15,112,219,81,15,40,200,102,15,84,202,102,15,46,217,15,134,244,247,
   102,15,85,208,15,40,193,252,242,15,88,203,252,242,15,92,203,184,0,0,252,240,
   63,102,15,110,216,102,15,112,219,81,252,242,15,194,193,1,102,15,84,195,252,
-  242,15,92,200,102,15,86,202,15,40,193,248,1,195,248,145,255,15,40,232,252,
+  242,15,92,200,102,15,86,202,15,40,193,248,1,195,248,146,255,15,40,232,252,
   242,15,94,193,102,15,252,239,210,102,15,118,210,102,15,115,210,1,184,0,0,
   48,67,102,15,110,216,102,15,112,219,81,15,40,224,102,15,84,226,102,15,46,
   220,15,134,244,247,102,15,85,208,252,242,15,88,227,252,242,15,92,227,102,
@@ -465,9 +465,9 @@ static const unsigned char build_actionlist[15184] = {
   242,15,92,193,195,248,1,252,242,15,89,200,15,40,197,252,242,15,92,193,195,
   255,217,193,216,252,241,217,124,36,4,102,184,0,4,102,11,68,36,4,102,37,252,
   255,252,247,102,137,68,36,6,217,108,36,6,217,252,252,217,108,36,4,222,201,
-  222,252,233,195,255,248,87,217,252,234,222,201,248,146,217,84,36,4,129,124,
+  222,252,233,195,255,248,87,217,252,234,222,201,248,147,217,84,36,4,129,124,
   36,4,0,0,128,127,15,132,244,247,129,124,36,4,0,0,128,252,255,15,132,244,248,
-  248,147,217,192,217,252,252,220,252,233,217,201,217,252,240,217,232,222,193,
+  248,148,217,192,217,252,252,220,252,233,217,201,217,252,240,217,232,222,193,
   217,252,253,221,217,248,1,195,248,2,221,216,217,252,238,195,255,248,106,219,
   84,36,4,219,68,36,4,255,223,252,233,255,221,252,233,223,224,158,255,15,133,
   244,254,15,138,244,255,221,216,139,68,36,4,131,252,248,1,15,142,244,252,248,
@@ -477,14 +477,14 @@ static const unsigned char build_actionlist[15184] = {
   244,253,217,232,222,252,241,252,247,216,131,252,248,1,15,132,244,5,252,233,
   244,1,248,7,221,216,217,232,195,248,8,217,84,36,4,217,201,217,84,36,8,139,
   68,36,4,209,224,61,0,0,0,252,255,15,132,244,248,139,68,36,8,209,224,15,132,
-  244,250,61,0,0,0,252,255,15,132,244,250,217,252,241,252,233,244,147,248,9,
+  244,250,61,0,0,0,252,255,15,132,244,250,217,252,241,252,233,244,148,248,9,
   255,217,232,255,223,252,234,255,221,252,234,223,224,158,255,15,132,244,247,
   217,201,248,1,221,216,195,248,2,217,225,217,232,255,15,132,244,249,221,216,
   217,225,217,252,238,184,0,0,0,0,15,146,208,209,200,51,68,36,4,15,137,244,
   249,217,201,248,3,221,217,217,225,195,248,4,131,124,36,4,0,15,141,244,3,221,
   216,221,216,133,192,15,132,244,251,217,252,238,195,248,5,199,68,36,4,0,0,
-  128,127,217,68,36,4,195,255,248,106,255,248,148,252,242,15,45,193,252,242,
-  15,42,208,102,15,46,202,15,133,244,254,15,138,244,255,248,149,131,252,248,
+  128,127,217,68,36,4,195,255,248,106,255,248,149,252,242,15,45,193,252,242,
+  15,42,208,102,15,46,202,15,133,244,254,15,138,244,255,248,150,131,252,248,
   1,15,142,244,252,248,1,169,1,0,0,0,15,133,244,248,252,242,15,89,192,209,232,
   252,233,244,1,248,2,209,232,15,132,244,251,15,40,200,248,3,252,242,15,89,
   192,209,232,15,132,244,250,15,131,244,3,255,252,242,15,89,200,252,233,244,
@@ -504,28 +504,28 @@ static const unsigned char build_actionlist[15184] = {
   87,192,136,196,15,146,208,48,224,15,133,244,1,248,3,184,0,0,252,240,127,102,
   15,110,192,102,15,112,192,81,195,248,4,102,15,80,193,133,192,15,133,244,3,
   255,15,87,192,195,248,5,102,15,80,193,133,192,15,132,244,3,15,87,192,195,
-  248,150,255,139,68,36,12,252,242,15,16,68,36,4,131,252,248,1,15,132,244,247,
+  248,151,255,139,68,36,12,252,242,15,16,68,36,4,131,252,248,1,15,132,244,247,
   15,135,244,248,232,244,81,252,233,244,253,248,1,232,244,83,252,233,244,253,
   248,2,131,252,248,3,15,132,244,247,15,135,244,248,232,244,103,255,252,233,
   244,253,248,1,252,242,15,81,192,248,7,252,242,15,17,68,36,4,221,68,36,4,195,
-  248,2,221,68,36,4,131,252,248,5,15,130,244,87,15,132,244,146,248,2,131,252,
+  248,2,221,68,36,4,131,252,248,5,15,130,244,87,15,132,244,147,248,2,131,252,
   248,7,15,132,244,247,15,135,244,248,217,252,237,217,201,217,252,241,195,248,
   1,217,232,217,201,217,252,241,195,248,2,131,252,248,9,15,132,244,247,15,135,
   244,248,255,217,252,236,217,201,217,252,241,195,248,1,217,252,254,195,248,
   2,131,252,248,11,15,132,244,247,15,135,244,255,217,252,255,195,248,1,217,
   252,242,221,216,195,255,139,68,36,12,221,68,36,4,131,252,248,1,15,130,244,
   81,15,132,244,83,131,252,248,3,15,130,244,103,15,135,244,248,217,252,250,
-  195,248,2,131,252,248,5,15,130,244,87,15,132,244,146,131,252,248,7,15,132,
+  195,248,2,131,252,248,5,15,130,244,87,15,132,244,147,131,252,248,7,15,132,
   244,247,15,135,244,248,217,252,237,217,201,217,252,241,195,248,1,217,232,
   217,201,217,252,241,195,248,2,131,252,248,9,15,132,244,247,255,15,135,244,
   248,217,252,236,217,201,217,252,241,195,248,1,217,252,254,195,248,2,131,252,
   248,11,15,132,244,247,15,135,244,255,217,252,255,195,248,1,217,252,242,221,
-  216,195,255,248,9,204,248,151,255,139,68,36,20,252,242,15,16,68,36,4,252,
+  216,195,255,248,9,204,248,152,255,139,68,36,20,252,242,15,16,68,36,4,252,
   242,15,16,76,36,12,131,252,248,1,15,132,244,247,15,135,244,248,252,242,15,
   88,193,248,7,252,242,15,17,68,36,4,221,68,36,4,195,248,1,252,242,15,92,193,
   252,233,244,7,248,2,131,252,248,3,15,132,244,247,15,135,244,248,252,242,15,
   89,193,252,233,244,7,248,1,252,242,15,94,193,252,233,244,7,248,2,131,252,
-  248,5,15,132,244,247,255,15,135,244,248,232,244,145,252,233,244,7,248,1,90,
+  248,5,15,132,244,247,255,15,135,244,248,232,244,146,252,233,244,7,248,1,90,
   232,244,106,82,252,233,244,7,248,2,131,252,248,7,15,132,244,247,15,135,244,
   248,184,0,0,0,128,102,15,110,200,102,15,112,201,81,15,87,193,252,233,244,
   7,248,1,102,15,252,239,201,102,15,118,201,102,15,115,209,1,15,84,193,252,
@@ -535,14 +535,14 @@ static const unsigned char build_actionlist[15184] = {
   244,7,248,1,252,242,15,95,193,252,233,244,7,248,9,204,255,139,68,36,20,221,
   68,36,4,221,68,36,12,131,252,248,1,15,132,244,247,15,135,244,248,222,193,
   195,248,1,222,252,233,195,248,2,131,252,248,3,15,132,244,247,15,135,244,248,
-  222,201,195,248,1,222,252,249,195,248,2,131,252,248,5,15,130,244,145,15,132,
+  222,201,195,248,1,222,252,249,195,248,2,131,252,248,5,15,130,244,146,15,132,
   244,106,131,252,248,7,15,132,244,247,15,135,244,248,255,221,216,217,224,195,
   248,1,221,216,217,225,195,248,2,131,252,248,9,15,132,244,247,15,135,244,248,
   217,252,243,195,248,1,217,201,217,252,253,221,217,195,248,2,131,252,248,11,
   15,132,244,247,15,135,244,255,255,219,252,233,219,209,221,217,195,248,1,219,
   252,233,218,209,221,217,195,255,221,225,223,224,252,246,196,1,15,132,244,
   248,217,201,248,2,221,216,195,248,1,221,225,223,224,252,246,196,1,15,133,
-  244,248,217,201,248,2,221,216,195,255,248,152,156,90,137,209,129,252,242,
+  244,248,217,201,248,2,221,216,195,255,248,153,156,90,137,209,129,252,242,
   0,0,32,0,82,157,156,90,49,192,57,209,15,132,244,247,139,68,36,4,87,83,15,
   162,139,124,36,16,137,7,137,95,4,137,79,8,137,87,12,91,95,248,1,195,255,249,
   255,129,124,253,202,4,239,15,135,244,41,129,124,253,194,4,239,15,135,244,
@@ -593,8 +593,8 @@ static const unsigned char build_actionlist[15184] = {
   221,4,252,234,220,52,194,255,252,242,15,16,4,252,234,252,242,15,16,12,199,
   255,221,4,252,234,221,4,199,255,252,242,15,16,4,199,252,242,15,16,12,252,
   234,255,221,4,199,221,4,252,234,255,252,242,15,16,4,252,234,252,242,15,16,
-  12,194,255,221,4,252,234,221,4,194,255,248,153,232,244,145,255,252,233,244,
-  153,255,232,244,106,255,15,182,252,236,15,182,192,141,12,194,41,232,137,76,
+  12,194,255,221,4,252,234,221,4,194,255,248,154,232,244,146,255,252,233,244,
+  154,255,232,244,106,255,15,182,252,236,15,182,192,141,12,194,41,232,137,76,
   36,4,137,68,36,8,248,33,139,108,36,48,137,44,36,137,149,233,137,116,36,24,
   232,251,1,23,139,149,233,133,192,15,133,244,42,15,182,110,252,255,15,182,
   78,252,253,139,68,252,234,4,139,44,252,234,137,68,202,4,137,44,202,139,6,
@@ -637,8 +637,8 @@ static const unsigned char build_actionlist[15184] = {
   139,149,233,15,182,78,252,253,137,4,202,199,68,202,4,237,139,6,15,182,204,
   15,182,232,131,198,4,193,232,16,252,255,36,171,248,3,137,252,233,232,251,
   1,28,15,183,70,252,254,252,247,208,252,233,244,2,255,252,247,208,139,106,
-  252,248,139,173,233,139,4,135,252,233,244,154,255,252,247,208,139,106,252,
-  248,139,173,233,139,4,135,252,233,244,155,255,15,182,252,236,15,182,192,129,
+  252,248,139,173,233,139,4,135,252,233,244,155,255,252,247,208,139,106,252,
+  248,139,173,233,139,4,135,252,233,244,156,255,15,182,252,236,15,182,192,129,
   124,253,252,234,4,239,15,133,244,36,139,44,252,234,129,124,253,194,4,239,
   15,135,244,251,255,252,242,15,16,4,194,252,242,15,45,192,252,242,15,42,200,
   102,15,46,193,255,221,4,194,219,20,36,219,4,36,255,15,133,244,36,59,133,233,
@@ -646,9 +646,9 @@ static const unsigned char build_actionlist[15184] = {
   139,40,139,64,4,137,44,202,137,68,202,4,139,6,15,182,204,15,182,232,131,198,
   4,193,232,16,252,255,36,171,248,2,131,189,233,0,15,132,244,1,139,141,233,
   252,246,129,233,235,15,132,244,36,15,182,78,252,253,252,233,244,1,248,5,255,
-  129,124,253,194,4,239,15,133,244,36,139,4,194,252,233,244,154,255,15,182,
+  129,124,253,194,4,239,15,133,244,36,139,4,194,252,233,244,155,255,15,182,
   252,236,15,182,192,252,247,208,139,4,135,129,124,253,252,234,4,239,15,133,
-  244,34,139,44,252,234,248,154,139,141,233,35,136,233,105,201,239,3,141,233,
+  244,34,139,44,252,234,248,155,139,141,233,35,136,233,105,201,239,3,141,233,
   248,1,129,185,233,239,15,133,244,250,57,129,233,15,133,244,250,129,121,253,
   4,239,15,132,244,251,15,182,70,252,253,139,41,139,73,4,137,44,194,248,2,255,
   137,76,194,4,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,
@@ -666,10 +666,10 @@ static const unsigned char build_actionlist[15184] = {
   104,4,137,8,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,
   248,3,131,189,233,0,15,132,244,1,139,141,233,255,252,246,129,233,235,15,132,
   244,39,15,182,78,252,253,252,233,244,1,248,5,129,124,253,194,4,239,15,133,
-  244,39,139,4,194,252,233,244,155,248,7,128,165,233,235,139,139,233,137,171,
+  244,39,139,4,194,252,233,244,156,248,7,128,165,233,235,139,139,233,137,171,
   233,137,141,233,15,182,78,252,253,252,233,244,2,255,15,182,252,236,15,182,
   192,252,247,208,139,4,135,129,124,253,252,234,4,239,15,133,244,37,139,44,
-  252,234,248,155,139,141,233,35,136,233,105,201,239,198,133,233,0,3,141,233,
+  252,234,248,156,139,141,233,35,136,233,105,201,239,198,133,233,0,3,141,233,
   248,1,129,185,233,239,15,133,244,251,57,129,233,15,133,244,251,129,121,253,
   4,239,15,132,244,250,248,2,255,252,246,133,233,235,15,133,244,253,248,3,15,
   182,70,252,253,139,108,194,4,139,4,194,137,105,4,137,1,139,6,15,182,204,15,
@@ -730,7 +730,7 @@ static const unsigned char build_actionlist[15184] = {
   248,6,255,199,71,252,252,237,131,199,8,255,199,68,194,252,244,237,255,131,
   192,1,252,233,244,5,248,7,15,139,244,18,131,230,252,248,41,252,242,255,1,
   252,241,255,137,252,245,209,252,237,129,229,239,102,131,172,253,43,233,1,
-  15,132,244,138,255,141,12,202,255,129,121,253,4,239,15,135,244,52,129,121,
+  15,132,244,139,255,141,12,202,255,129,121,253,4,239,15,135,244,52,129,121,
   253,12,239,15,135,244,52,255,139,105,20,255,129,252,253,239,15,135,244,52,
   255,252,242,15,16,1,252,242,15,16,73,8,255,252,242,15,88,65,16,252,242,15,
   17,1,133,252,237,15,136,244,249,255,15,140,244,249,255,102,15,46,200,248,
@@ -875,6 +875,7 @@ enum {
   GLOB_ff_bit_ror,
   GLOB_vm_record,
   GLOB_vm_hook,
+  GLOB_cont_hook,
   GLOB_vm_hotloop,
   GLOB_vm_hotcall,
   GLOB_vm_exit_handler,
@@ -1024,6 +1025,7 @@ static const char *const globnames[] = {
   "ff_bit_ror",
   "vm_record",
   "vm_hook",
+  "cont_hook",
   "vm_hotloop",
   "vm_hotcall",
   "vm_exit_handler",
@@ -1065,7 +1067,7 @@ static const char *const extnames[] = {
   "lj_str_new",
   "lj_tab_len@4",
   "lj_gc_step@4",
-  "lj_dispatch_ins",
+  "lj_dispatch_ins@8",
   "lj_trace_hot@8",
   "lj_trace_exit@8",
   "lj_meta_cat",
@@ -1109,439 +1111,440 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse)
   dasm_put(Dst, 280, Dt8(->f), Dt1(->base), 8*LUA_MINSTACK, Dt1(->top), Dt1(->maxstack), DISPATCH_GL(vmstate), ~LJ_VMST_C, DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base), Dt1(->top), FRAME_TYPE);
   dasm_put(Dst, 362, FRAME_C, DISPATCH_GL(vmstate), ~LJ_VMST_C, Dt1(->base));
   dasm_put(Dst, 453, Dt1(->top), Dt1(->cframe), Dt1(->maxstack), LJ_TNIL, Dt1(->top));
-  dasm_put(Dst, 532, Dt1(->top), CFRAME_RAWMASK, Dt1(->glref), Dt2(->vmstate), ~LJ_VMST_C, CFRAME_RAWMASK, 1+1, Dt1(->base), Dt1(->glref), GG_G2DISP, LJ_TFALSE, DISPATCH_GL(vmstate), ~LJ_VMST_INTERP);
-  dasm_put(Dst, 637, FRAME_P, LJ_TTRUE, LUA_MINSTACK, Dt9(->bc), Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top), Dt7(->gate));
-  dasm_put(Dst, 759, FRAME_C, CFRAME_RESUME, Dt1(->glref), GG_G2DISP, Dt1(->cframe), Dt1(->status), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->status), Dt1(->base), Dt1(->top), FRAME_TYPE, FRAME_CP);
-  dasm_put(Dst, 864, FRAME_C, Dt1(->cframe), Dt1(->cframe), Dt1(->glref), GG_G2DISP, DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base), Dt1(->top), LJ_TFUNC, Dt7(->gate));
-  dasm_put(Dst, 957, Dt1(->stack), Dt1(->top), Dt1(->cframe), Dt1(->cframe), FRAME_CP, LJ_TNIL, Dt7(->pt), Dt9(->k), LJ_TSTR);
-  dasm_put(Dst, 1146, BC_GGET, DISPATCH_GL(tmptv), LJ_TTAB);
+  dasm_put(Dst, 532, Dt1(->top), Dt1(->glref), Dt2(->vmstate), ~LJ_VMST_C, CFRAME_RAWMASK, 1+1, Dt1(->base), Dt1(->glref), GG_G2DISP, LJ_TFALSE, DISPATCH_GL(vmstate), ~LJ_VMST_INTERP);
+  dasm_put(Dst, 634, FRAME_P, LJ_TTRUE, LUA_MINSTACK, Dt9(->bc), Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top), Dt7(->gate));
+  dasm_put(Dst, 756, FRAME_C, CFRAME_RESUME, Dt1(->glref), GG_G2DISP, Dt1(->cframe), Dt1(->status), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->status), Dt1(->base), Dt1(->top), FRAME_TYPE, FRAME_CP);
+  dasm_put(Dst, 861, FRAME_C, Dt1(->cframe), Dt1(->cframe), Dt1(->glref), GG_G2DISP, DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base), Dt1(->top), LJ_TFUNC, Dt7(->gate));
+  dasm_put(Dst, 954, Dt1(->stack), Dt1(->top), Dt1(->cframe), Dt1(->cframe), FRAME_CP, LJ_TNIL, Dt7(->pt), Dt9(->k), LJ_TSTR);
+  dasm_put(Dst, 1143, BC_GGET, DISPATCH_GL(tmptv), LJ_TTAB);
   if (sse) {
-    dasm_put(Dst, 1182);
+    dasm_put(Dst, 1179);
   } else {
-    dasm_put(Dst, 1195);
+    dasm_put(Dst, 1192);
   }
-  dasm_put(Dst, 1208, Dt1(->base), Dt1(->base), Dt1(->top), FRAME_CONT, Dt7(->gate), LJ_TSTR, BC_GSET, DISPATCH_GL(tmptv));
-  dasm_put(Dst, 1366, LJ_TTAB);
+  dasm_put(Dst, 1205, Dt1(->base), Dt1(->base), Dt1(->top), FRAME_CONT, Dt7(->gate), LJ_TSTR, BC_GSET, DISPATCH_GL(tmptv));
+  dasm_put(Dst, 1363, LJ_TTAB);
   if (sse) {
-    dasm_put(Dst, 1182);
+    dasm_put(Dst, 1179);
   } else {
-    dasm_put(Dst, 1195);
+    dasm_put(Dst, 1192);
   }
-  dasm_put(Dst, 1386, Dt1(->base), Dt1(->base), Dt1(->top), FRAME_CONT, Dt7(->gate), Dt1(->base), Dt1(->base));
-  dasm_put(Dst, 1593, -BCBIAS_J*4, LJ_TISTRUECOND, LJ_TISTRUECOND, Dt1(->base));
-  dasm_put(Dst, 1704, Dt1(->base), Dt1(->base), FRAME_CONT, LJ_TFUNC);
-  dasm_put(Dst, 1833, Dt7(->gate), Dt1(->base), Dt1(->base), Dt1(->base), Dt1(->base), Dt7(->gate), Dt1(->base), Dt1(->base), GG_DISP_STATIC*4, 1+1);
-  dasm_put(Dst, 1993, LJ_TISTRUECOND, 1+1, ~LJ_TNUMX);
+  dasm_put(Dst, 1383, Dt1(->base), Dt1(->base), Dt1(->top), FRAME_CONT, Dt7(->gate), Dt1(->base), Dt1(->base));
+  dasm_put(Dst, 1590, -BCBIAS_J*4, LJ_TISTRUECOND, LJ_TISTRUECOND, Dt1(->base));
+  dasm_put(Dst, 1701, Dt1(->base), Dt1(->base), FRAME_CONT, LJ_TFUNC);
+  dasm_put(Dst, 1830, Dt7(->gate), Dt1(->base), Dt1(->base), Dt1(->base), Dt1(->base), Dt7(->gate), Dt1(->base), Dt1(->base), GG_DISP_STATIC*4, 1+1);
+  dasm_put(Dst, 1990, LJ_TISTRUECOND, 1+1, ~LJ_TNUMX);
   if (cmov) {
-  dasm_put(Dst, 2089);
+  dasm_put(Dst, 2086);
   } else {
-  dasm_put(Dst, 2093);
+  dasm_put(Dst, 2090);
   }
-  dasm_put(Dst, 2102, ((char *)(&((GCfuncC *)0)->upvalue)), LJ_TSTR, 1+1, LJ_TTAB, Dt6(->metatable), LJ_TNIL, DISPATCH_GL(mmname)+4*MM_metatable, LJ_TTAB, Dt6(->hmask));
-  dasm_put(Dst, 2190, Dt5(->hash), sizeof(Node), Dt6(->node), DtB(->key.it), LJ_TSTR, DtB(->key.gcr), DtB(->next), LJ_TNIL);
-  dasm_put(Dst, 2245, LJ_TUDATA, LJ_TISNUM, LJ_TNUMX, DISPATCH_GL(gcroot[GCROOT_BASEMT]), 2+1, LJ_TTAB);
-  dasm_put(Dst, 2317, Dt6(->metatable), LJ_TTAB, Dt6(->metatable), LJ_TTAB, Dt6(->marked), LJ_GC_BLACK, Dt6(->marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist));
-  dasm_put(Dst, 2382, 2+1, LJ_TTAB, 1+1, LJ_TISNUM);
+  dasm_put(Dst, 2099, ((char *)(&((GCfuncC *)0)->upvalue)), LJ_TSTR, 1+1, LJ_TTAB, Dt6(->metatable), LJ_TNIL, DISPATCH_GL(mmname)+4*MM_metatable, LJ_TTAB, Dt6(->hmask));
+  dasm_put(Dst, 2187, Dt5(->hash), sizeof(Node), Dt6(->node), DtB(->key.it), LJ_TSTR, DtB(->key.gcr), DtB(->next), LJ_TNIL);
+  dasm_put(Dst, 2242, LJ_TUDATA, LJ_TISNUM, LJ_TNUMX, DISPATCH_GL(gcroot[GCROOT_BASEMT]), 2+1, LJ_TTAB);
+  dasm_put(Dst, 2314, Dt6(->metatable), LJ_TTAB, Dt6(->metatable), LJ_TTAB, Dt6(->marked), LJ_GC_BLACK, Dt6(->marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist));
+  dasm_put(Dst, 2379, 2+1, LJ_TTAB, 1+1, LJ_TISNUM);
   if (sse) {
-    dasm_put(Dst, 2473);
+    dasm_put(Dst, 2470);
   } else {
-    dasm_put(Dst, 2483);
+    dasm_put(Dst, 2480);
   }
-  dasm_put(Dst, 2490, 1+1, LJ_TSTR, LJ_TSTR, LJ_TISNUM, DISPATCH_GL(gcroot[GCROOT_BASEMT_NUM]), DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold));
-  dasm_put(Dst, 2552, Dt1(->base), Dt1(->base), 1+1, LJ_TTAB, Dt1(->base));
-  dasm_put(Dst, 2642, Dt1(->base), 1+2, LJ_TNIL, LJ_TNIL, 1+1, LJ_TTAB);
-  dasm_put(Dst, 2748, Dt8(->upvalue[0]), LJ_TFUNC, LJ_TNIL, 1+3, 1+1, LJ_TTAB, LJ_TISNUM);
+  dasm_put(Dst, 2487, 1+1, LJ_TSTR, LJ_TSTR, LJ_TISNUM, DISPATCH_GL(gcroot[GCROOT_BASEMT_NUM]), DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold));
+  dasm_put(Dst, 2549, Dt1(->base), Dt1(->base), 1+1, LJ_TTAB, Dt1(->base));
+  dasm_put(Dst, 2639, Dt1(->base), 1+2, LJ_TNIL, LJ_TNIL, 1+1, LJ_TTAB);
+  dasm_put(Dst, 2745, Dt8(->upvalue[0]), LJ_TFUNC, LJ_TNIL, 1+3, 1+1, LJ_TTAB, LJ_TISNUM);
   if (sse) {
-    dasm_put(Dst, 2803);
+    dasm_put(Dst, 2800);
   } else {
-    dasm_put(Dst, 2842);
+    dasm_put(Dst, 2839);
   }
-  dasm_put(Dst, 2860, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->hmask), 1+0);
-  dasm_put(Dst, 2946, 1+1, LJ_TTAB, Dt8(->upvalue[0]), LJ_TFUNC);
+  dasm_put(Dst, 2857, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->hmask), 1+0);
+  dasm_put(Dst, 2943, 1+1, LJ_TTAB, Dt8(->upvalue[0]), LJ_TFUNC);
   if (sse) {
-    dasm_put(Dst, 2976);
+    dasm_put(Dst, 2973);
   } else {
-    dasm_put(Dst, 2986);
+    dasm_put(Dst, 2983);
   }
-  dasm_put(Dst, 2993, 1+3, 1+1, 8+FRAME_PCALL, DISPATCH_GL(hookmask), HOOK_ACTIVE, LJ_TFUNC, Dt7(->gate));
-  dasm_put(Dst, 3066, 2+1, LJ_TFUNC, LJ_TFUNC, 2*8+FRAME_PCALL, 2*8, 1+1, LJ_TTHREAD);
-  dasm_put(Dst, 3164, Dt1(->cframe), Dt1(->status), LUA_YIELD, Dt1(->top), Dt1(->base), Dt1(->maxstack), Dt1(->top), Dt1(->base), Dt1(->top));
-  dasm_put(Dst, 3229, DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base), LUA_YIELD, Dt1(->base), Dt1(->top), Dt1(->top));
-  dasm_put(Dst, 3333, Dt1(->maxstack), LJ_TTRUE, FRAME_TYPE, LJ_TFALSE, Dt1(->top), Dt1(->top), 1+2);
-  dasm_put(Dst, 3452, Dt1(->top), Dt1(->base), Dt8(->upvalue[0].gcr), Dt1(->cframe), Dt1(->status), LUA_YIELD, Dt1(->top), Dt1(->base));
-  dasm_put(Dst, 3532, Dt1(->maxstack), Dt1(->top), Dt1(->base), Dt1(->top), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base));
-  dasm_put(Dst, 3640, LUA_YIELD, Dt1(->base), Dt1(->top), Dt1(->top), Dt1(->maxstack), FRAME_TYPE);
-  dasm_put(Dst, 3736, Dt1(->top), Dt1(->base), Dt1(->cframe), CFRAME_CANYIELD, Dt1(->base), Dt1(->top), Dt1(->cframe), LUA_YIELD, Dt1(->status));
+  dasm_put(Dst, 2990, 1+3, 1+1, 8+FRAME_PCALL, DISPATCH_GL(hookmask), HOOK_ACTIVE, LJ_TFUNC, Dt7(->gate));
+  dasm_put(Dst, 3063, 2+1, LJ_TFUNC, LJ_TFUNC, 2*8+FRAME_PCALL, 2*8, 1+1, LJ_TTHREAD);
+  dasm_put(Dst, 3161, Dt1(->cframe), Dt1(->status), LUA_YIELD, Dt1(->top), Dt1(->base), Dt1(->maxstack), Dt1(->top), Dt1(->base), Dt1(->top));
+  dasm_put(Dst, 3226, DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base), LUA_YIELD, Dt1(->base), Dt1(->top), Dt1(->top));
+  dasm_put(Dst, 3330, Dt1(->maxstack), LJ_TTRUE, FRAME_TYPE, LJ_TFALSE, Dt1(->top), Dt1(->top), 1+2);
+  dasm_put(Dst, 3449, Dt1(->top), Dt1(->base), Dt8(->upvalue[0].gcr), Dt1(->cframe), Dt1(->status), LUA_YIELD, Dt1(->top), Dt1(->base));
+  dasm_put(Dst, 3529, Dt1(->maxstack), Dt1(->top), Dt1(->base), Dt1(->top), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base));
+  dasm_put(Dst, 3637, LUA_YIELD, Dt1(->base), Dt1(->top), Dt1(->top), Dt1(->maxstack), FRAME_TYPE);
+  dasm_put(Dst, 3733, Dt1(->top), Dt1(->base), Dt1(->cframe), CFRAME_CANYIELD, Dt1(->base), Dt1(->top), Dt1(->cframe), LUA_YIELD, Dt1(->status));
   if (sse) {
-    dasm_put(Dst, 3822, 1+1, LJ_TISNUM);
+    dasm_put(Dst, 3819, 1+1, LJ_TISNUM);
   } else {
-    dasm_put(Dst, 3883, 1+1, LJ_TISNUM);
+    dasm_put(Dst, 3880, 1+1, LJ_TISNUM);
   }
-  dasm_put(Dst, 3915, 1+1, FRAME_TYPE, LJ_TNIL);
+  dasm_put(Dst, 3912, 1+1, FRAME_TYPE, LJ_TNIL);
   if (sse) {
-    dasm_put(Dst, 3996, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM);
-    dasm_put(Dst, 4058, 1+1, LJ_TISNUM);
+    dasm_put(Dst, 3993, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM);
+    dasm_put(Dst, 4055, 1+1, LJ_TISNUM);
   } else {
-    dasm_put(Dst, 4088, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM);
-    dasm_put(Dst, 4147, 1+1, LJ_TISNUM);
+    dasm_put(Dst, 4085, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM);
+    dasm_put(Dst, 4144, 1+1, LJ_TISNUM);
   }
-  dasm_put(Dst, 4174, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1);
-  dasm_put(Dst, 4243, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1);
-  dasm_put(Dst, 4300, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1);
-  dasm_put(Dst, 4363, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM);
-  dasm_put(Dst, 4453);
+  dasm_put(Dst, 4171, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1);
+  dasm_put(Dst, 4240, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1);
+  dasm_put(Dst, 4297, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1);
+  dasm_put(Dst, 4360, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM);
+  dasm_put(Dst, 4450);
   if (sse) {
-  dasm_put(Dst, 4465, 1+1, LJ_TISNUM);
+  dasm_put(Dst, 4462, 1+1, LJ_TISNUM);
   } else {
-  dasm_put(Dst, 4496, 1+1, LJ_TISNUM);
+  dasm_put(Dst, 4493, 1+1, LJ_TISNUM);
   }
-  dasm_put(Dst, 4521);
+  dasm_put(Dst, 4518);
   if (sse) {
-  dasm_put(Dst, 4543, 1+1, LJ_TISNUM);
+  dasm_put(Dst, 4540, 1+1, LJ_TISNUM);
   } else {
-  dasm_put(Dst, 4574, 1+1, LJ_TISNUM);
+  dasm_put(Dst, 4571, 1+1, LJ_TISNUM);
   }
-  dasm_put(Dst, 4599);
+  dasm_put(Dst, 4596);
   if (sse) {
-  dasm_put(Dst, 4621, 1+1, LJ_TISNUM);
+  dasm_put(Dst, 4618, 1+1, LJ_TISNUM);
   } else {
-  dasm_put(Dst, 4652, 1+1, LJ_TISNUM);
+  dasm_put(Dst, 4649, 1+1, LJ_TISNUM);
   }
-  dasm_put(Dst, 4677);
+  dasm_put(Dst, 4674);
   if (sse) {
-    dasm_put(Dst, 4701, 1+1, LJ_TISNUM, Dt8(->upvalue[0]));
+    dasm_put(Dst, 4698, 1+1, LJ_TISNUM, Dt8(->upvalue[0]));
   } else {
-    dasm_put(Dst, 4736, 1+1, LJ_TISNUM, Dt8(->upvalue[0]));
+    dasm_put(Dst, 4733, 1+1, LJ_TISNUM, Dt8(->upvalue[0]));
   }
-  dasm_put(Dst, 4765, 2+1, LJ_TISNUM, LJ_TISNUM, 2+1, LJ_TISNUM, LJ_TISNUM);
-  dasm_put(Dst, 4830, 1+1, LJ_TISNUM);
+  dasm_put(Dst, 4762, 2+1, LJ_TISNUM, LJ_TISNUM, 2+1, LJ_TISNUM, LJ_TISNUM);
+  dasm_put(Dst, 4827, 1+1, LJ_TISNUM);
   if (sse) {
-    dasm_put(Dst, 4925);
+    dasm_put(Dst, 4922);
   } else {
-    dasm_put(Dst, 4931);
+    dasm_put(Dst, 4928);
   }
-  dasm_put(Dst, 4940);
+  dasm_put(Dst, 4937);
   if (sse) {
-    dasm_put(Dst, 4965);
+    dasm_put(Dst, 4962);
   } else {
-    dasm_put(Dst, 4971);
+    dasm_put(Dst, 4968);
   }
-  dasm_put(Dst, 4974, 1+2);
+  dasm_put(Dst, 4971, 1+2);
   if (sse) {
-    dasm_put(Dst, 4983);
+    dasm_put(Dst, 4980);
   } else {
-    dasm_put(Dst, 4991);
+    dasm_put(Dst, 4988);
   }
-  dasm_put(Dst, 1590);
+  dasm_put(Dst, 1587);
   if (sse) {
-    dasm_put(Dst, 4999);
+    dasm_put(Dst, 4996);
   } else {
-    dasm_put(Dst, 5031);
+    dasm_put(Dst, 5028);
   }
-  dasm_put(Dst, 5050);
+  dasm_put(Dst, 5047);
   if (sse) {
-    dasm_put(Dst, 5066, 1+1, LJ_TISNUM);
+    dasm_put(Dst, 5063, 1+1, LJ_TISNUM);
   } else {
-    dasm_put(Dst, 5091, 1+1, LJ_TISNUM);
+    dasm_put(Dst, 5088, 1+1, LJ_TISNUM);
   }
-  dasm_put(Dst, 5113);
+  dasm_put(Dst, 5110);
   if (sse) {
-    dasm_put(Dst, 5131);
+    dasm_put(Dst, 5128);
   } else {
-    dasm_put(Dst, 5157);
+    dasm_put(Dst, 5154);
   }
-  dasm_put(Dst, 5174, 1+2);
+  dasm_put(Dst, 5171, 1+2);
   if (sse) {
-    dasm_put(Dst, 5214);
+    dasm_put(Dst, 5211);
   } else {
-    dasm_put(Dst, 5222);
+    dasm_put(Dst, 5219);
   }
-  dasm_put(Dst, 5232, 2+1, LJ_TISNUM, LJ_TISNUM);
+  dasm_put(Dst, 5229, 2+1, LJ_TISNUM, LJ_TISNUM);
   if (sse) {
-    dasm_put(Dst, 5284, 1+1, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 5281, 1+1, LJ_TISNUM, LJ_TISNUM);
   } else {
-    dasm_put(Dst, 5331, 2+1, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 5328, 2+1, LJ_TISNUM, LJ_TISNUM);
   }
   if (sse) {
-  dasm_put(Dst, 5372, 1+1, LJ_TISNUM, LJ_TISNUM);
+  dasm_put(Dst, 5369, 1+1, LJ_TISNUM, LJ_TISNUM);
   } else {
-  dasm_put(Dst, 5443, 1+1, LJ_TISNUM, LJ_TISNUM);
+  dasm_put(Dst, 5440, 1+1, LJ_TISNUM, LJ_TISNUM);
   if (cmov) {
-  dasm_put(Dst, 5496);
+  dasm_put(Dst, 5493);
   } else {
-  dasm_put(Dst, 5504);
+  dasm_put(Dst, 5501);
   }
-  dasm_put(Dst, 5435);
+  dasm_put(Dst, 5432);
   }
   if (sse) {
-  dasm_put(Dst, 5525, 1+1, LJ_TISNUM, LJ_TISNUM);
+  dasm_put(Dst, 5522, 1+1, LJ_TISNUM, LJ_TISNUM);
   } else {
-  dasm_put(Dst, 5596, 1+1, LJ_TISNUM, LJ_TISNUM);
+  dasm_put(Dst, 5593, 1+1, LJ_TISNUM, LJ_TISNUM);
   if (cmov) {
-  dasm_put(Dst, 5649);
+  dasm_put(Dst, 5646);
   } else {
-  dasm_put(Dst, 5657);
+  dasm_put(Dst, 5654);
   }
-  dasm_put(Dst, 5435);
+  dasm_put(Dst, 5432);
   }
   if (!sse) {
-    dasm_put(Dst, 5678);
+    dasm_put(Dst, 5675);
   }
-  dasm_put(Dst, 5687, 1+1, LJ_TSTR);
+  dasm_put(Dst, 5684, 1+1, LJ_TSTR);
   if (sse) {
-    dasm_put(Dst, 5709, Dt5(->len));
+    dasm_put(Dst, 5706, Dt5(->len));
   } else {
-    dasm_put(Dst, 5720, Dt5(->len));
+    dasm_put(Dst, 5717, Dt5(->len));
   }
-  dasm_put(Dst, 5728, 1+1, LJ_TSTR, Dt5(->len), Dt5([1]));
+  dasm_put(Dst, 5725, 1+1, LJ_TSTR, Dt5(->len), Dt5([1]));
   if (sse) {
-    dasm_put(Dst, 5762);
+    dasm_put(Dst, 5759);
   } else {
-    dasm_put(Dst, 5772);
+    dasm_put(Dst, 5769);
   }
-  dasm_put(Dst, 5785, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), 1+1, LJ_TISNUM);
+  dasm_put(Dst, 5782, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), 1+1, LJ_TISNUM);
   if (sse) {
-    dasm_put(Dst, 5820);
+    dasm_put(Dst, 5817);
   } else {
-    dasm_put(Dst, 5840);
+    dasm_put(Dst, 5837);
   }
-  dasm_put(Dst, 5860, Dt1(->base), Dt1(->base), LJ_TSTR, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), 1+2, LJ_TISNUM);
-  dasm_put(Dst, 2468);
+  dasm_put(Dst, 5857, Dt1(->base), Dt1(->base), LJ_TSTR, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), 1+2, LJ_TISNUM);
+  dasm_put(Dst, 2465);
   if (sse) {
-    dasm_put(Dst, 5971);
+    dasm_put(Dst, 5968);
   } else {
-    dasm_put(Dst, 5982);
+    dasm_put(Dst, 5979);
   }
-  dasm_put(Dst, 5990, LJ_TSTR, LJ_TISNUM, Dt5(->len));
+  dasm_put(Dst, 5987, LJ_TSTR, LJ_TISNUM, Dt5(->len));
   if (sse) {
-    dasm_put(Dst, 6020);
+    dasm_put(Dst, 6017);
   } else {
-    dasm_put(Dst, 6027);
+    dasm_put(Dst, 6024);
   }
-  dasm_put(Dst, 6039, sizeof(GCstr)-1);
-  dasm_put(Dst, 6114, 2+1, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold));
-  dasm_put(Dst, 6173, LJ_TSTR, LJ_TISNUM);
+  dasm_put(Dst, 6036, sizeof(GCstr)-1);
+  dasm_put(Dst, 6111, 2+1, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold));
+  dasm_put(Dst, 6170, LJ_TSTR, LJ_TISNUM);
   if (sse) {
-    dasm_put(Dst, 6198);
+    dasm_put(Dst, 6195);
   } else {
-    dasm_put(Dst, 6205);
+    dasm_put(Dst, 6202);
   }
-  dasm_put(Dst, 6217, Dt5(->len), DISPATCH_GL(tmpbuf.sz), Dt5([1]), DISPATCH_GL(tmpbuf.buf), DISPATCH_GL(tmpbuf.buf), 1+1);
-  dasm_put(Dst, 6282, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz), sizeof(GCstr), DISPATCH_GL(tmpbuf.buf));
-  dasm_put(Dst, 6349, 1+1, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz));
-  dasm_put(Dst, 6424, sizeof(GCstr), DISPATCH_GL(tmpbuf.buf), 1+1);
-  dasm_put(Dst, 6509, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz), sizeof(GCstr), DISPATCH_GL(tmpbuf.buf));
-  dasm_put(Dst, 6583, 1+1, LJ_TTAB);
+  dasm_put(Dst, 6214, Dt5(->len), DISPATCH_GL(tmpbuf.sz), Dt5([1]), DISPATCH_GL(tmpbuf.buf), DISPATCH_GL(tmpbuf.buf), 1+1);
+  dasm_put(Dst, 6279, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz), sizeof(GCstr), DISPATCH_GL(tmpbuf.buf));
+  dasm_put(Dst, 6346, 1+1, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz));
+  dasm_put(Dst, 6421, sizeof(GCstr), DISPATCH_GL(tmpbuf.buf), 1+1);
+  dasm_put(Dst, 6506, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz), sizeof(GCstr), DISPATCH_GL(tmpbuf.buf));
+  dasm_put(Dst, 6580, 1+1, LJ_TTAB);
   if (sse) {
-    dasm_put(Dst, 6659);
+    dasm_put(Dst, 6656);
   } else {
-    dasm_put(Dst, 6669);
+    dasm_put(Dst, 6666);
   }
   if (sse) {
-    dasm_put(Dst, 6680, 1+1, LJ_TISNUM);
+    dasm_put(Dst, 6677, 1+1, LJ_TISNUM);
   } else {
-    dasm_put(Dst, 6737, 1+1, LJ_TISNUM);
+    dasm_put(Dst, 6734, 1+1, LJ_TISNUM);
   }
   if (sse) {
-  dasm_put(Dst, 6781, 1+1, LJ_TISNUM);
+  dasm_put(Dst, 6778, 1+1, LJ_TISNUM);
   } else {
-  dasm_put(Dst, 6829, 1+1, LJ_TISNUM);
+  dasm_put(Dst, 6826, 1+1, LJ_TISNUM);
   }
-  dasm_put(Dst, 6869);
+  dasm_put(Dst, 6866);
   if (sse) {
-  dasm_put(Dst, 6879);
+  dasm_put(Dst, 6876);
   }
-  dasm_put(Dst, 6884, LJ_TISNUM);
+  dasm_put(Dst, 6881, LJ_TISNUM);
   if (sse) {
-  dasm_put(Dst, 6902);
+  dasm_put(Dst, 6899);
   } else {
-  dasm_put(Dst, 6919);
+  dasm_put(Dst, 6916);
   }
-  dasm_put(Dst, 6932);
+  dasm_put(Dst, 6929);
   if (sse) {
-  dasm_put(Dst, 6940, 1+1, LJ_TISNUM);
+  dasm_put(Dst, 6937, 1+1, LJ_TISNUM);
   } else {
-  dasm_put(Dst, 6988, 1+1, LJ_TISNUM);
+  dasm_put(Dst, 6985, 1+1, LJ_TISNUM);
   }
-  dasm_put(Dst, 6869);
+  dasm_put(Dst, 6866);
   if (sse) {
-  dasm_put(Dst, 6879);
+  dasm_put(Dst, 6876);
   }
-  dasm_put(Dst, 6884, LJ_TISNUM);
+  dasm_put(Dst, 6881, LJ_TISNUM);
   if (sse) {
-  dasm_put(Dst, 7028);
+  dasm_put(Dst, 7025);
   } else {
-  dasm_put(Dst, 7045);
+  dasm_put(Dst, 7042);
   }
-  dasm_put(Dst, 6932);
+  dasm_put(Dst, 6929);
   if (sse) {
-  dasm_put(Dst, 7058, 1+1, LJ_TISNUM);
+  dasm_put(Dst, 7055, 1+1, LJ_TISNUM);
   } else {
-  dasm_put(Dst, 7106, 1+1, LJ_TISNUM);
+  dasm_put(Dst, 7103, 1+1, LJ_TISNUM);
   }
-  dasm_put(Dst, 6869);
+  dasm_put(Dst, 6866);
   if (sse) {
-  dasm_put(Dst, 6879);
+  dasm_put(Dst, 6876);
   }
-  dasm_put(Dst, 6884, LJ_TISNUM);
+  dasm_put(Dst, 6881, LJ_TISNUM);
   if (sse) {
-  dasm_put(Dst, 7146);
+  dasm_put(Dst, 7143);
   } else {
-  dasm_put(Dst, 7163);
+  dasm_put(Dst, 7160);
   }
-  dasm_put(Dst, 6932);
+  dasm_put(Dst, 6929);
   if (sse) {
-  dasm_put(Dst, 7176, 1+1, LJ_TISNUM);
+  dasm_put(Dst, 7173, 1+1, LJ_TISNUM);
   } else {
-  dasm_put(Dst, 7224, 1+1, LJ_TISNUM);
+  dasm_put(Dst, 7221, 1+1, LJ_TISNUM);
   }
-  dasm_put(Dst, 7264);
+  dasm_put(Dst, 7261);
   if (sse) {
-  dasm_put(Dst, 7271, 1+1, LJ_TISNUM);
+  dasm_put(Dst, 7268, 1+1, LJ_TISNUM);
   } else {
-  dasm_put(Dst, 7319, 1+1, LJ_TISNUM);
+  dasm_put(Dst, 7316, 1+1, LJ_TISNUM);
   }
-  dasm_put(Dst, 7359);
+  dasm_put(Dst, 7356);
   if (sse) {
-    dasm_put(Dst, 7363);
+    dasm_put(Dst, 7360);
   } else {
-    dasm_put(Dst, 7390);
+    dasm_put(Dst, 7387);
   }
-  dasm_put(Dst, 7405);
+  dasm_put(Dst, 7402);
   if (sse) {
-    dasm_put(Dst, 6654);
+    dasm_put(Dst, 6651);
   }
-  dasm_put(Dst, 7408);
+  dasm_put(Dst, 7405);
   if (sse) {
-  dasm_put(Dst, 7417, 1+1, LJ_TISNUM, LJ_TISNUM);
+  dasm_put(Dst, 7414, 1+1, LJ_TISNUM, LJ_TISNUM);
   } else {
-  dasm_put(Dst, 7491, 2+1, LJ_TISNUM, LJ_TISNUM);
+  dasm_put(Dst, 7488, 2+1, LJ_TISNUM, LJ_TISNUM);
   }
-  dasm_put(Dst, 7557);
+  dasm_put(Dst, 7554);
   if (sse) {
-  dasm_put(Dst, 7566, 1+1, LJ_TISNUM, LJ_TISNUM);
+  dasm_put(Dst, 7563, 1+1, LJ_TISNUM, LJ_TISNUM);
   } else {
-  dasm_put(Dst, 7640, 2+1, LJ_TISNUM, LJ_TISNUM);
+  dasm_put(Dst, 7637, 2+1, LJ_TISNUM, LJ_TISNUM);
   }
-  dasm_put(Dst, 7706);
+  dasm_put(Dst, 7703);
   if (sse) {
-  dasm_put(Dst, 7716, 1+1, LJ_TISNUM, LJ_TISNUM);
+  dasm_put(Dst, 7713, 1+1, LJ_TISNUM, LJ_TISNUM);
   } else {
-  dasm_put(Dst, 7790, 2+1, LJ_TISNUM, LJ_TISNUM);
+  dasm_put(Dst, 7787, 2+1, LJ_TISNUM, LJ_TISNUM);
   }
-  dasm_put(Dst, 7856);
+  dasm_put(Dst, 7853);
   if (sse) {
-  dasm_put(Dst, 7866, 1+1, LJ_TISNUM, LJ_TISNUM);
+  dasm_put(Dst, 7863, 1+1, LJ_TISNUM, LJ_TISNUM);
   } else {
-  dasm_put(Dst, 7940, 2+1, LJ_TISNUM, LJ_TISNUM);
+  dasm_put(Dst, 7937, 2+1, LJ_TISNUM, LJ_TISNUM);
   }
-  dasm_put(Dst, 8006);
+  dasm_put(Dst, 8003);
   if (sse) {
-  dasm_put(Dst, 8015, 1+1, LJ_TISNUM, LJ_TISNUM);
+  dasm_put(Dst, 8012, 1+1, LJ_TISNUM, LJ_TISNUM);
   } else {
-  dasm_put(Dst, 8089, 2+1, LJ_TISNUM, LJ_TISNUM);
+  dasm_put(Dst, 8086, 2+1, LJ_TISNUM, LJ_TISNUM);
   }
-  dasm_put(Dst, 8155, 1+2, 1+1, Dt1(->base), 8*LUA_MINSTACK, Dt1(->top), Dt1(->maxstack), Dt8(->f), Dt1(->base));
-  dasm_put(Dst, 8239, Dt1(->top), Dt7(->gate), LJ_TFUNC, Dt7(->gate), Dt1(->base), LUA_MINSTACK, Dt1(->base), Dt1(->top));
-  dasm_put(Dst, 8358, Dt1(->base), Dt1(->top));
+  dasm_put(Dst, 8152, 1+2, 1+1, Dt1(->base), 8*LUA_MINSTACK, Dt1(->top), Dt1(->maxstack), Dt8(->f), Dt1(->base));
+  dasm_put(Dst, 8236, Dt1(->top), Dt7(->gate), LJ_TFUNC, Dt7(->gate), Dt1(->base), LUA_MINSTACK, Dt1(->base), Dt1(->top));
+  dasm_put(Dst, 8355, Dt1(->base), Dt1(->top));
 #if LJ_HASJIT
-  dasm_put(Dst, 8399, DISPATCH_GL(hookmask), HOOK_VMEVENT, HOOK_ACTIVE, LUA_MASKLINE|LUA_MASKCOUNT, DISPATCH_GL(hookcount));
+  dasm_put(Dst, 8396, DISPATCH_GL(hookmask), HOOK_VMEVENT, HOOK_ACTIVE, LUA_MASKLINE|LUA_MASKCOUNT, DISPATCH_GL(hookcount));
 #endif
-  dasm_put(Dst, 8430, DISPATCH_GL(hookmask), HOOK_ACTIVE, LUA_MASKLINE|LUA_MASKCOUNT, DISPATCH_GL(hookcount), LUA_MASKLINE, Dt1(->base), Dt1(->base), GG_DISP_STATIC*4);
+  dasm_put(Dst, 8427, DISPATCH_GL(hookmask), HOOK_ACTIVE, LUA_MASKLINE|LUA_MASKCOUNT, DISPATCH_GL(hookcount), LUA_MASKLINE, Dt1(->base), Dt1(->base));
+  dasm_put(Dst, 8493, GG_DISP_STATIC*4);
 #if LJ_HASJIT
-  dasm_put(Dst, 8521, Dt1(->base), GG_DISP2J, DISPATCH_J(L));
+  dasm_put(Dst, 8528, Dt1(->base), GG_DISP2J, DISPATCH_J(L));
 #endif
-  dasm_put(Dst, 8550);
+  dasm_put(Dst, 8557);
 #if LJ_HASJIT
-  dasm_put(Dst, 8553, Dt1(->base), GG_DISP2J, DISPATCH_J(L), Dt1(->base));
+  dasm_put(Dst, 8560, Dt1(->base), GG_DISP2J, DISPATCH_J(L), Dt1(->base));
 #endif
-  dasm_put(Dst, 8599);
+  dasm_put(Dst, 8606);
 #if LJ_HASJIT
-  dasm_put(Dst, 8602, DISPATCH_GL(vmstate), DISPATCH_GL(vmstate), ~LJ_VMST_EXIT, DISPATCH_J(exitno), DISPATCH_J(parent), 8*8+16, DISPATCH_J(flags), JIT_F_SSE2, DISPATCH_GL(jit_L), DISPATCH_GL(jit_base), DISPATCH_J(L), Dt1(->base), GG_DISP2J, Dt1(->base));
+  dasm_put(Dst, 8609, DISPATCH_GL(vmstate), DISPATCH_GL(vmstate), ~LJ_VMST_EXIT, DISPATCH_J(exitno), DISPATCH_J(parent), 8*8+16, DISPATCH_J(flags), JIT_F_SSE2, DISPATCH_GL(jit_L), DISPATCH_GL(jit_base), DISPATCH_J(L), Dt1(->base), GG_DISP2J, Dt1(->base));
 #endif
-  dasm_put(Dst, 8745);
+  dasm_put(Dst, 8752);
 #if LJ_HASJIT
-  dasm_put(Dst, 8748, Dt7(->pt), Dt9(->k), DISPATCH_GL(jit_L), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP);
+  dasm_put(Dst, 8755, Dt7(->pt), Dt9(->k), DISPATCH_GL(jit_L), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP);
 #endif
-  dasm_put(Dst, 8788);
+  dasm_put(Dst, 8795);
   if (!sse) {
-  dasm_put(Dst, 8791);
+  dasm_put(Dst, 8798);
   }
-  dasm_put(Dst, 8836);
+  dasm_put(Dst, 8843);
   if (!sse) {
-  dasm_put(Dst, 8938);
+  dasm_put(Dst, 8945);
   }
-  dasm_put(Dst, 8983);
+  dasm_put(Dst, 8990);
   if (!sse) {
-  dasm_put(Dst, 9085);
+  dasm_put(Dst, 9092);
   }
-  dasm_put(Dst, 9124);
+  dasm_put(Dst, 9131);
   if (sse) {
-    dasm_put(Dst, 9229);
+    dasm_put(Dst, 9236);
   } else {
-    dasm_put(Dst, 9359);
+    dasm_put(Dst, 9366);
   }
-  dasm_put(Dst, 9406);
+  dasm_put(Dst, 9413);
   if (!sse) {
-  dasm_put(Dst, 9480);
+  dasm_put(Dst, 9487);
   if (cmov) {
-  dasm_put(Dst, 9491);
+  dasm_put(Dst, 9498);
   } else {
-  dasm_put(Dst, 9495);
-  }
   dasm_put(Dst, 9502);
-  dasm_put(Dst, 9576);
-  dasm_put(Dst, 9676);
+  }
+  dasm_put(Dst, 9509);
+  dasm_put(Dst, 9583);
+  dasm_put(Dst, 9683);
   if (cmov) {
-  dasm_put(Dst, 9679);
+  dasm_put(Dst, 9686);
   } else {
-  dasm_put(Dst, 9683);
-  }
   dasm_put(Dst, 9690);
+  }
+  dasm_put(Dst, 9697);
   if (cmov) {
-  dasm_put(Dst, 9491);
+  dasm_put(Dst, 9498);
   } else {
-  dasm_put(Dst, 9495);
+  dasm_put(Dst, 9502);
   }
-  dasm_put(Dst, 9708);
+  dasm_put(Dst, 9715);
   } else {
-    dasm_put(Dst, 9787);
+    dasm_put(Dst, 9794);
   }
-  dasm_put(Dst, 9790);
-  dasm_put(Dst, 9875);
-  dasm_put(Dst, 10006);
-  dasm_put(Dst, 10205);
+  dasm_put(Dst, 9797);
+  dasm_put(Dst, 9882);
+  dasm_put(Dst, 10013);
+  dasm_put(Dst, 10212);
   if (sse) {
-    dasm_put(Dst, 10228);
-    dasm_put(Dst, 10285);
-    dasm_put(Dst, 10376);
+    dasm_put(Dst, 10235);
+    dasm_put(Dst, 10292);
+    dasm_put(Dst, 10383);
   } else {
-    dasm_put(Dst, 10418);
-    dasm_put(Dst, 10510);
+    dasm_put(Dst, 10425);
+    dasm_put(Dst, 10517);
   }
-  dasm_put(Dst, 10556);
+  dasm_put(Dst, 10563);
   if (sse) {
-    dasm_put(Dst, 10562);
-    dasm_put(Dst, 10667);
-    dasm_put(Dst, 10750);
+    dasm_put(Dst, 10569);
+    dasm_put(Dst, 10674);
+    dasm_put(Dst, 10757);
   } else {
-    dasm_put(Dst, 10822);
-    dasm_put(Dst, 10905);
+    dasm_put(Dst, 10829);
+    dasm_put(Dst, 10912);
     if (cmov) {
-    dasm_put(Dst, 10960);
+    dasm_put(Dst, 10967);
     } else {
-    dasm_put(Dst, 10979);
+    dasm_put(Dst, 10986);
     }
-    dasm_put(Dst, 10818);
+    dasm_put(Dst, 10825);
   }
-  dasm_put(Dst, 11020);
+  dasm_put(Dst, 11027);
 }
 
 /* Generate the code for a single instruction. */
 static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse)
 {
   int vk = 0;
-  dasm_put(Dst, 11074, defop);
+  dasm_put(Dst, 11081, defop);
 
   switch (op) {
 
@@ -1550,619 +1553,619 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse)
   /* Remember: all ops branch for a true comparison, fall through otherwise. */
 
   case BC_ISLT: case BC_ISGE: case BC_ISLE: case BC_ISGT:
-    dasm_put(Dst, 11076, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 11083, LJ_TISNUM, LJ_TISNUM);
     if (sse) {
-      dasm_put(Dst, 11097);
+      dasm_put(Dst, 11104);
     } else {
-      dasm_put(Dst, 11112);
+      dasm_put(Dst, 11119);
       if (cmov) {
-      dasm_put(Dst, 11122);
+      dasm_put(Dst, 11129);
       } else {
-      dasm_put(Dst, 11128);
+      dasm_put(Dst, 11135);
       }
     }
     switch (op) {
     case BC_ISLT:
-      dasm_put(Dst, 11135);
+      dasm_put(Dst, 11142);
       break;
     case BC_ISGE:
-      dasm_put(Dst, 10371);
+      dasm_put(Dst, 10378);
       break;
     case BC_ISLE:
-      dasm_put(Dst, 6578);
+      dasm_put(Dst, 6575);
       break;
     case BC_ISGT:
-      dasm_put(Dst, 11140);
+      dasm_put(Dst, 11147);
       break;
     default: break;  /* Shut up GCC. */
     }
-    dasm_put(Dst, 11145, -BCBIAS_J*4);
+    dasm_put(Dst, 11152, -BCBIAS_J*4);
     break;
 
   case BC_ISEQV: case BC_ISNEV:
     vk = op == BC_ISEQV;
-    dasm_put(Dst, 11178, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 11185, LJ_TISNUM, LJ_TISNUM);
     if (sse) {
-      dasm_put(Dst, 11204);
+      dasm_put(Dst, 11211);
     } else {
-      dasm_put(Dst, 11216);
+      dasm_put(Dst, 11223);
       if (cmov) {
-      dasm_put(Dst, 11122);
+      dasm_put(Dst, 11129);
       } else {
-      dasm_put(Dst, 11128);
+      dasm_put(Dst, 11135);
       }
     }
   iseqne_fp:
     if (vk) {
-      dasm_put(Dst, 11223);
+      dasm_put(Dst, 11230);
     } else {
-      dasm_put(Dst, 11232);
+      dasm_put(Dst, 11239);
     }
   iseqne_end:
     if (vk) {
-      dasm_put(Dst, 11241, -BCBIAS_J*4);
+      dasm_put(Dst, 11248, -BCBIAS_J*4);
     } else {
-      dasm_put(Dst, 11256, -BCBIAS_J*4);
+      dasm_put(Dst, 11263, -BCBIAS_J*4);
     }
-    dasm_put(Dst, 8580);
+    dasm_put(Dst, 8587);
     if (op == BC_ISEQV || op == BC_ISNEV) {
-      dasm_put(Dst, 11271, LJ_TISPRI, LJ_TISTABUD, Dt6(->metatable), Dt6(->nomm), 1<<MM_eq);
+      dasm_put(Dst, 11278, LJ_TISPRI, LJ_TISTABUD, Dt6(->metatable), Dt6(->nomm), 1<<MM_eq);
       if (vk) {
-       dasm_put(Dst, 11329);
+       dasm_put(Dst, 11336);
       } else {
-       dasm_put(Dst, 11333);
+       dasm_put(Dst, 11340);
       }
-      dasm_put(Dst, 11339);
+      dasm_put(Dst, 11346);
     }
     break;
   case BC_ISEQS: case BC_ISNES:
     vk = op == BC_ISEQS;
-    dasm_put(Dst, 11344, LJ_TSTR);
+    dasm_put(Dst, 11351, LJ_TSTR);
   iseqne_test:
     if (vk) {
-      dasm_put(Dst, 11227);
+      dasm_put(Dst, 11234);
     } else {
-      dasm_put(Dst, 10505);
+      dasm_put(Dst, 10512);
     }
     goto iseqne_end;
   case BC_ISEQN: case BC_ISNEN:
     vk = op == BC_ISEQN;
-    dasm_put(Dst, 11367, LJ_TISNUM);
+    dasm_put(Dst, 11374, LJ_TISNUM);
     if (sse) {
-      dasm_put(Dst, 11381);
+      dasm_put(Dst, 11388);
     } else {
-      dasm_put(Dst, 11393);
+      dasm_put(Dst, 11400);
       if (cmov) {
-      dasm_put(Dst, 11122);
+      dasm_put(Dst, 11129);
       } else {
-      dasm_put(Dst, 11128);
+      dasm_put(Dst, 11135);
       }
     }
     goto iseqne_fp;
   case BC_ISEQP: case BC_ISNEP:
     vk = op == BC_ISEQP;
-    dasm_put(Dst, 11400);
+    dasm_put(Dst, 11407);
     goto iseqne_test;
 
   /* -- Unary test and copy ops ------------------------------------------- */
 
   case BC_ISTC: case BC_ISFC: case BC_IST: case BC_ISF:
-    dasm_put(Dst, 11411, LJ_TISTRUECOND);
+    dasm_put(Dst, 11418, LJ_TISTRUECOND);
     if (op == BC_IST || op == BC_ISTC) {
-      dasm_put(Dst, 11423);
+      dasm_put(Dst, 11430);
     } else {
-      dasm_put(Dst, 11428);
+      dasm_put(Dst, 11435);
     }
     if (op == BC_ISTC || op == BC_ISFC) {
-      dasm_put(Dst, 11433);
+      dasm_put(Dst, 11440);
     }
-    dasm_put(Dst, 11444, -BCBIAS_J*4);
+    dasm_put(Dst, 11451, -BCBIAS_J*4);
     break;
 
   /* -- Unary ops --------------------------------------------------------- */
 
   case BC_MOV:
-    dasm_put(Dst, 11475);
+    dasm_put(Dst, 11482);
     break;
   case BC_NOT:
-    dasm_put(Dst, 11508, LJ_TISTRUECOND, LJ_TTRUE);
+    dasm_put(Dst, 11515, LJ_TISTRUECOND, LJ_TTRUE);
     break;
   case BC_UNM:
-    dasm_put(Dst, 11543, LJ_TISNUM);
+    dasm_put(Dst, 11550, LJ_TISNUM);
     if (sse) {
-      dasm_put(Dst, 11554);
+      dasm_put(Dst, 11561);
     } else {
-      dasm_put(Dst, 11584);
+      dasm_put(Dst, 11591);
     }
-    dasm_put(Dst, 8580);
+    dasm_put(Dst, 8587);
     break;
   case BC_LEN:
-    dasm_put(Dst, 11593, LJ_TSTR);
+    dasm_put(Dst, 11600, LJ_TSTR);
     if (sse) {
-      dasm_put(Dst, 11607, Dt5(->len));
+      dasm_put(Dst, 11614, Dt5(->len));
     } else {
-      dasm_put(Dst, 11625, Dt5(->len));
+      dasm_put(Dst, 11632, Dt5(->len));
     }
-    dasm_put(Dst, 11634, LJ_TTAB);
+    dasm_put(Dst, 11641, LJ_TTAB);
     if (sse) {
-      dasm_put(Dst, 11674);
+      dasm_put(Dst, 11681);
     } else {
-      dasm_put(Dst, 11683);
+      dasm_put(Dst, 11690);
     }
-    dasm_put(Dst, 11693);
+    dasm_put(Dst, 11700);
     break;
 
   /* -- Binary ops -------------------------------------------------------- */
 
 
   case BC_ADDVN: case BC_ADDNV: case BC_ADDVV:
-    dasm_put(Dst, 11703);
+    dasm_put(Dst, 11710);
     vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
     switch (vk) {
     case 0:
-    dasm_put(Dst, 11711, LJ_TISNUM);
+    dasm_put(Dst, 11718, LJ_TISNUM);
     if (sse) {
-    dasm_put(Dst, 11723);
+    dasm_put(Dst, 11730);
     } else {
-    dasm_put(Dst, 11737);
+    dasm_put(Dst, 11744);
     }
       break;
     case 1:
-    dasm_put(Dst, 11745, LJ_TISNUM);
+    dasm_put(Dst, 11752, LJ_TISNUM);
     if (sse) {
-    dasm_put(Dst, 11757);
+    dasm_put(Dst, 11764);
     } else {
-    dasm_put(Dst, 11771);
+    dasm_put(Dst, 11778);
     }
       break;
     default:
-    dasm_put(Dst, 11779, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 11786, LJ_TISNUM, LJ_TISNUM);
     if (sse) {
-    dasm_put(Dst, 11801);
+    dasm_put(Dst, 11808);
     } else {
-    dasm_put(Dst, 11815);
+    dasm_put(Dst, 11822);
     }
       break;
     }
     if (sse) {
-    dasm_put(Dst, 11577);
+    dasm_put(Dst, 11584);
     } else {
-    dasm_put(Dst, 11589);
+    dasm_put(Dst, 11596);
     }
-    dasm_put(Dst, 8580);
+    dasm_put(Dst, 8587);
     break;
   case BC_SUBVN: case BC_SUBNV: case BC_SUBVV:
-    dasm_put(Dst, 11703);
+    dasm_put(Dst, 11710);
     vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
     switch (vk) {
     case 0:
-    dasm_put(Dst, 11711, LJ_TISNUM);
+    dasm_put(Dst, 11718, LJ_TISNUM);
     if (sse) {
-    dasm_put(Dst, 11823);
+    dasm_put(Dst, 11830);
     } else {
-    dasm_put(Dst, 11837);
+    dasm_put(Dst, 11844);
     }
       break;
     case 1:
-    dasm_put(Dst, 11745, LJ_TISNUM);
+    dasm_put(Dst, 11752, LJ_TISNUM);
     if (sse) {
-    dasm_put(Dst, 11845);
+    dasm_put(Dst, 11852);
     } else {
-    dasm_put(Dst, 11859);
+    dasm_put(Dst, 11866);
     }
       break;
     default:
-    dasm_put(Dst, 11779, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 11786, LJ_TISNUM, LJ_TISNUM);
     if (sse) {
-    dasm_put(Dst, 11867);
+    dasm_put(Dst, 11874);
     } else {
-    dasm_put(Dst, 11881);
+    dasm_put(Dst, 11888);
     }
       break;
     }
     if (sse) {
-    dasm_put(Dst, 11577);
+    dasm_put(Dst, 11584);
     } else {
-    dasm_put(Dst, 11589);
+    dasm_put(Dst, 11596);
     }
-    dasm_put(Dst, 8580);
+    dasm_put(Dst, 8587);
     break;
   case BC_MULVN: case BC_MULNV: case BC_MULVV:
-    dasm_put(Dst, 11703);
+    dasm_put(Dst, 11710);
     vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
     switch (vk) {
     case 0:
-    dasm_put(Dst, 11711, LJ_TISNUM);
+    dasm_put(Dst, 11718, LJ_TISNUM);
     if (sse) {
-    dasm_put(Dst, 11889);
+    dasm_put(Dst, 11896);
     } else {
-    dasm_put(Dst, 11903);
+    dasm_put(Dst, 11910);
     }
       break;
     case 1:
-    dasm_put(Dst, 11745, LJ_TISNUM);
+    dasm_put(Dst, 11752, LJ_TISNUM);
     if (sse) {
-    dasm_put(Dst, 11911);
+    dasm_put(Dst, 11918);
     } else {
-    dasm_put(Dst, 11925);
+    dasm_put(Dst, 11932);
     }
       break;
     default:
-    dasm_put(Dst, 11779, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 11786, LJ_TISNUM, LJ_TISNUM);
     if (sse) {
-    dasm_put(Dst, 11933);
+    dasm_put(Dst, 11940);
     } else {
-    dasm_put(Dst, 11947);
+    dasm_put(Dst, 11954);
     }
       break;
     }
     if (sse) {
-    dasm_put(Dst, 11577);
+    dasm_put(Dst, 11584);
     } else {
-    dasm_put(Dst, 11589);
+    dasm_put(Dst, 11596);
     }
-    dasm_put(Dst, 8580);
+    dasm_put(Dst, 8587);
     break;
   case BC_DIVVN: case BC_DIVNV: case BC_DIVVV:
-    dasm_put(Dst, 11703);
+    dasm_put(Dst, 11710);
     vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
     switch (vk) {
     case 0:
-    dasm_put(Dst, 11711, LJ_TISNUM);
+    dasm_put(Dst, 11718, LJ_TISNUM);
     if (sse) {
-    dasm_put(Dst, 11955);
+    dasm_put(Dst, 11962);
     } else {
-    dasm_put(Dst, 11969);
+    dasm_put(Dst, 11976);
     }
       break;
     case 1:
-    dasm_put(Dst, 11745, LJ_TISNUM);
+    dasm_put(Dst, 11752, LJ_TISNUM);
     if (sse) {
-    dasm_put(Dst, 11977);
+    dasm_put(Dst, 11984);
     } else {
-    dasm_put(Dst, 11991);
+    dasm_put(Dst, 11998);
     }
       break;
     default:
-    dasm_put(Dst, 11779, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 11786, LJ_TISNUM, LJ_TISNUM);
     if (sse) {
-    dasm_put(Dst, 11999);
+    dasm_put(Dst, 12006);
     } else {
-    dasm_put(Dst, 12013);
+    dasm_put(Dst, 12020);
     }
       break;
     }
     if (sse) {
-    dasm_put(Dst, 11577);
+    dasm_put(Dst, 11584);
     } else {
-    dasm_put(Dst, 11589);
+    dasm_put(Dst, 11596);
     }
-    dasm_put(Dst, 8580);
+    dasm_put(Dst, 8587);
     break;
   case BC_MODVN:
-    dasm_put(Dst, 11703);
+    dasm_put(Dst, 11710);
     vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
     switch (vk) {
     case 0:
-    dasm_put(Dst, 11711, LJ_TISNUM);
+    dasm_put(Dst, 11718, LJ_TISNUM);
     if (sse) {
-    dasm_put(Dst, 12021);
+    dasm_put(Dst, 12028);
     } else {
-    dasm_put(Dst, 12035);
+    dasm_put(Dst, 12042);
     }
       break;
     case 1:
-    dasm_put(Dst, 11745, LJ_TISNUM);
+    dasm_put(Dst, 11752, LJ_TISNUM);
     if (sse) {
-    dasm_put(Dst, 12043);
+    dasm_put(Dst, 12050);
     } else {
-    dasm_put(Dst, 12057);
+    dasm_put(Dst, 12064);
     }
       break;
     default:
-    dasm_put(Dst, 11779, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 11786, LJ_TISNUM, LJ_TISNUM);
     if (sse) {
-    dasm_put(Dst, 12065);
+    dasm_put(Dst, 12072);
     } else {
-    dasm_put(Dst, 12079);
+    dasm_put(Dst, 12086);
     }
       break;
     }
-    dasm_put(Dst, 12087);
+    dasm_put(Dst, 12094);
     if (sse) {
-    dasm_put(Dst, 11577);
+    dasm_put(Dst, 11584);
     } else {
-    dasm_put(Dst, 11589);
+    dasm_put(Dst, 11596);
     }
-    dasm_put(Dst, 8580);
+    dasm_put(Dst, 8587);
     break;
   case BC_MODNV: case BC_MODVV:
-    dasm_put(Dst, 11703);
+    dasm_put(Dst, 11710);
     vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
     switch (vk) {
     case 0:
-    dasm_put(Dst, 11711, LJ_TISNUM);
+    dasm_put(Dst, 11718, LJ_TISNUM);
     if (sse) {
-    dasm_put(Dst, 12021);
+    dasm_put(Dst, 12028);
     } else {
-    dasm_put(Dst, 12035);
+    dasm_put(Dst, 12042);
     }
       break;
     case 1:
-    dasm_put(Dst, 11745, LJ_TISNUM);
+    dasm_put(Dst, 11752, LJ_TISNUM);
     if (sse) {
-    dasm_put(Dst, 12043);
+    dasm_put(Dst, 12050);
     } else {
-    dasm_put(Dst, 12057);
+    dasm_put(Dst, 12064);
     }
       break;
     default:
-    dasm_put(Dst, 11779, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 11786, LJ_TISNUM, LJ_TISNUM);
     if (sse) {
-    dasm_put(Dst, 12065);
+    dasm_put(Dst, 12072);
     } else {
-    dasm_put(Dst, 12079);
+    dasm_put(Dst, 12086);
     }
       break;
     }
-    dasm_put(Dst, 12093);
+    dasm_put(Dst, 12100);
     break;
   case BC_POW:
-    dasm_put(Dst, 11703);
+    dasm_put(Dst, 11710);
     vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
     switch (vk) {
     case 0:
-    dasm_put(Dst, 11711, LJ_TISNUM);
+    dasm_put(Dst, 11718, LJ_TISNUM);
     if (sse) {
-    dasm_put(Dst, 12021);
+    dasm_put(Dst, 12028);
     } else {
-    dasm_put(Dst, 12035);
+    dasm_put(Dst, 12042);
     }
       break;
     case 1:
-    dasm_put(Dst, 11745, LJ_TISNUM);
+    dasm_put(Dst, 11752, LJ_TISNUM);
     if (sse) {
-    dasm_put(Dst, 12043);
+    dasm_put(Dst, 12050);
     } else {
-    dasm_put(Dst, 12057);
+    dasm_put(Dst, 12064);
     }
       break;
     default:
-    dasm_put(Dst, 11779, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 11786, LJ_TISNUM, LJ_TISNUM);
     if (sse) {
-    dasm_put(Dst, 12065);
+    dasm_put(Dst, 12072);
     } else {
-    dasm_put(Dst, 12079);
+    dasm_put(Dst, 12086);
     }
       break;
     }
-    dasm_put(Dst, 12098);
+    dasm_put(Dst, 12105);
     if (sse) {
-    dasm_put(Dst, 11577);
+    dasm_put(Dst, 11584);
     } else {
-    dasm_put(Dst, 11589);
+    dasm_put(Dst, 11596);
     }
-    dasm_put(Dst, 8580);
+    dasm_put(Dst, 8587);
     break;
 
   case BC_CAT:
-    dasm_put(Dst, 12102, Dt1(->base), Dt1(->base));
+    dasm_put(Dst, 12109, Dt1(->base), Dt1(->base));
     break;
 
   /* -- Constant ops ------------------------------------------------------ */
 
   case BC_KSTR:
-    dasm_put(Dst, 12196, LJ_TSTR);
+    dasm_put(Dst, 12203, LJ_TSTR);
     break;
   case BC_KSHORT:
     if (sse) {
-      dasm_put(Dst, 12229);
+      dasm_put(Dst, 12236);
     } else {
-      dasm_put(Dst, 12244);
+      dasm_put(Dst, 12251);
     }
-    dasm_put(Dst, 8580);
+    dasm_put(Dst, 8587);
     break;
   case BC_KNUM:
     if (sse) {
-      dasm_put(Dst, 12252);
+      dasm_put(Dst, 12259);
     } else {
-      dasm_put(Dst, 12265);
+      dasm_put(Dst, 12272);
     }
-    dasm_put(Dst, 8580);
+    dasm_put(Dst, 8587);
     break;
   case BC_KPRI:
-    dasm_put(Dst, 12272);
+    dasm_put(Dst, 12279);
     break;
   case BC_KNIL:
-    dasm_put(Dst, 12298, LJ_TNIL);
+    dasm_put(Dst, 12305, LJ_TNIL);
     break;
 
   /* -- Upvalue and function ops ------------------------------------------ */
 
   case BC_UGET:
-    dasm_put(Dst, 12344, offsetof(GCfuncL, uvptr), DtA(->v));
+    dasm_put(Dst, 12351, offsetof(GCfuncL, uvptr), DtA(->v));
     break;
   case BC_USETV:
 #define TV2MARKOFS \
  ((int32_t)offsetof(GCupval, marked)-(int32_t)offsetof(GCupval, tv))
-    dasm_put(Dst, 12388, offsetof(GCfuncL, uvptr), DtA(->closed), DtA(->v), TV2MARKOFS, LJ_GC_BLACK, LJ_TISGCV, LJ_TISNUM - LJ_TISGCV, Dt4(->gch.marked), LJ_GC_WHITES, GG_DISP2G);
-    dasm_put(Dst, 12478);
+    dasm_put(Dst, 12395, offsetof(GCfuncL, uvptr), DtA(->closed), DtA(->v), TV2MARKOFS, LJ_GC_BLACK, LJ_TISGCV, LJ_TISNUM - LJ_TISGCV, Dt4(->gch.marked), LJ_GC_WHITES, GG_DISP2G);
+    dasm_put(Dst, 12485);
     break;
 #undef TV2MARKOFS
   case BC_USETS:
-    dasm_put(Dst, 12490, offsetof(GCfuncL, uvptr), DtA(->v), LJ_TSTR, DtA(->marked), LJ_GC_BLACK, Dt4(->gch.marked), LJ_GC_WHITES, DtA(->closed), GG_DISP2G);
+    dasm_put(Dst, 12497, offsetof(GCfuncL, uvptr), DtA(->v), LJ_TSTR, DtA(->marked), LJ_GC_BLACK, Dt4(->gch.marked), LJ_GC_WHITES, DtA(->closed), GG_DISP2G);
     break;
   case BC_USETN:
-    dasm_put(Dst, 12581);
+    dasm_put(Dst, 12588);
     if (sse) {
-      dasm_put(Dst, 12586);
+      dasm_put(Dst, 12593);
     } else {
-      dasm_put(Dst, 11396);
+      dasm_put(Dst, 11403);
     }
-    dasm_put(Dst, 12593, offsetof(GCfuncL, uvptr), DtA(->v));
+    dasm_put(Dst, 12600, offsetof(GCfuncL, uvptr), DtA(->v));
     if (sse) {
-      dasm_put(Dst, 4965);
+      dasm_put(Dst, 4962);
     } else {
-      dasm_put(Dst, 4971);
+      dasm_put(Dst, 4968);
     }
-    dasm_put(Dst, 8580);
+    dasm_put(Dst, 8587);
     break;
   case BC_USETP:
-    dasm_put(Dst, 12602, offsetof(GCfuncL, uvptr), DtA(->v));
+    dasm_put(Dst, 12609, offsetof(GCfuncL, uvptr), DtA(->v));
     break;
   case BC_UCLO:
-    dasm_put(Dst, 12639, -BCBIAS_J*4, Dt1(->openupval), Dt1(->base), Dt1(->base));
+    dasm_put(Dst, 12646, -BCBIAS_J*4, Dt1(->openupval), Dt1(->base), Dt1(->base));
     break;
 
   case BC_FNEW:
-    dasm_put(Dst, 12693, Dt1(->base), Dt1(->base), LJ_TFUNC);
+    dasm_put(Dst, 12700, Dt1(->base), Dt1(->base), LJ_TFUNC);
     break;
 
   /* -- Table ops --------------------------------------------------------- */
 
   case BC_TNEW:
-    dasm_put(Dst, 12764, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), Dt1(->base), LJ_TTAB);
+    dasm_put(Dst, 12771, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), Dt1(->base), LJ_TTAB);
     break;
   case BC_TDUP:
-    dasm_put(Dst, 12885, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), Dt1(->base), LJ_TTAB);
+    dasm_put(Dst, 12892, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), Dt1(->base), LJ_TTAB);
     break;
 
   case BC_GGET:
-    dasm_put(Dst, 12977, Dt7(->env));
+    dasm_put(Dst, 12984, Dt7(->env));
     break;
   case BC_GSET:
-    dasm_put(Dst, 12995, Dt7(->env));
+    dasm_put(Dst, 13002, Dt7(->env));
     break;
 
   case BC_TGETV:
-    dasm_put(Dst, 13013, LJ_TTAB, LJ_TISNUM);
+    dasm_put(Dst, 13020, LJ_TTAB, LJ_TISNUM);
     if (sse) {
-      dasm_put(Dst, 13046);
+      dasm_put(Dst, 13053);
     } else {
-      dasm_put(Dst, 13067);
+      dasm_put(Dst, 13074);
       if (cmov) {
-      dasm_put(Dst, 11122);
+      dasm_put(Dst, 11129);
       } else {
-      dasm_put(Dst, 11128);
+      dasm_put(Dst, 11135);
       }
-      dasm_put(Dst, 2856);
+      dasm_put(Dst, 2853);
     }
-    dasm_put(Dst, 13077, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<<MM_index);
-    dasm_put(Dst, 13169, LJ_TSTR);
+    dasm_put(Dst, 13084, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<<MM_index);
+    dasm_put(Dst, 13176, LJ_TSTR);
     break;
   case BC_TGETS:
-    dasm_put(Dst, 13187, LJ_TTAB, Dt6(->hmask), Dt5(->hash), sizeof(Node), Dt6(->node), DtB(->key.it), LJ_TSTR, DtB(->key.gcr), LJ_TNIL);
-    dasm_put(Dst, 13271, LJ_TNIL, DtB(->next), Dt6(->metatable), Dt6(->nomm), 1<<MM_index);
+    dasm_put(Dst, 13194, LJ_TTAB, Dt6(->hmask), Dt5(->hash), sizeof(Node), Dt6(->node), DtB(->key.it), LJ_TSTR, DtB(->key.gcr), LJ_TNIL);
+    dasm_put(Dst, 13278, LJ_TNIL, DtB(->next), Dt6(->metatable), Dt6(->nomm), 1<<MM_index);
     break;
   case BC_TGETB:
-    dasm_put(Dst, 13342, LJ_TTAB, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<<MM_index);
-    dasm_put(Dst, 11693);
+    dasm_put(Dst, 13349, LJ_TTAB, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<<MM_index);
+    dasm_put(Dst, 11700);
     break;
 
   case BC_TSETV:
-    dasm_put(Dst, 13441, LJ_TTAB, LJ_TISNUM);
+    dasm_put(Dst, 13448, LJ_TTAB, LJ_TISNUM);
     if (sse) {
-      dasm_put(Dst, 13046);
+      dasm_put(Dst, 13053);
     } else {
-      dasm_put(Dst, 13067);
+      dasm_put(Dst, 13074);
       if (cmov) {
-      dasm_put(Dst, 11122);
+      dasm_put(Dst, 11129);
       } else {
-      dasm_put(Dst, 11128);
+      dasm_put(Dst, 11135);
       }
-      dasm_put(Dst, 2856);
+      dasm_put(Dst, 2853);
     }
-    dasm_put(Dst, 13474, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->metatable));
-    dasm_put(Dst, 13557, Dt6(->nomm), 1<<MM_newindex, LJ_TSTR, Dt6(->marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist));
+    dasm_put(Dst, 13481, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->metatable));
+    dasm_put(Dst, 13564, Dt6(->nomm), 1<<MM_newindex, LJ_TSTR, Dt6(->marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist));
     break;
   case BC_TSETS:
-    dasm_put(Dst, 13619, LJ_TTAB, Dt6(->hmask), Dt5(->hash), sizeof(Node), Dt6(->nomm), Dt6(->node), DtB(->key.it), LJ_TSTR, DtB(->key.gcr), LJ_TNIL);
-    dasm_put(Dst, 13694, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, DtB(->next));
-    dasm_put(Dst, 13786, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, LJ_TSTR, Dt1(->base), Dt1(->base), Dt6(->marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist));
+    dasm_put(Dst, 13626, LJ_TTAB, Dt6(->hmask), Dt5(->hash), sizeof(Node), Dt6(->nomm), Dt6(->node), DtB(->key.it), LJ_TSTR, DtB(->key.gcr), LJ_TNIL);
+    dasm_put(Dst, 13701, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, DtB(->next));
+    dasm_put(Dst, 13793, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, LJ_TSTR, Dt1(->base), Dt1(->base), Dt6(->marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist));
     break;
   case BC_TSETB:
-    dasm_put(Dst, 13882, LJ_TTAB, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable));
-    dasm_put(Dst, 13980, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, Dt6(->marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist));
+    dasm_put(Dst, 13889, LJ_TTAB, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable));
+    dasm_put(Dst, 13987, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, Dt6(->marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist));
     break;
 
   case BC_TSETM:
-    dasm_put(Dst, 14026);
+    dasm_put(Dst, 14033);
     if (sse) {
-      dasm_put(Dst, 12586);
+      dasm_put(Dst, 12593);
     } else {
-      dasm_put(Dst, 14031);
+      dasm_put(Dst, 14038);
     }
-    dasm_put(Dst, 14039, Dt6(->marked), LJ_GC_BLACK);
+    dasm_put(Dst, 14046, Dt6(->marked), LJ_GC_BLACK);
     if (sse) {
-      dasm_put(Dst, 14064);
-    } else {
       dasm_put(Dst, 14071);
+    } else {
+      dasm_put(Dst, 14078);
     }
-    dasm_put(Dst, 14076, Dt6(->asize), Dt6(->array), Dt1(->base), Dt1(->base), Dt6(->marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain));
-    dasm_put(Dst, 14204, Dt6(->gclist));
+    dasm_put(Dst, 14083, Dt6(->asize), Dt6(->array), Dt1(->base), Dt1(->base), Dt6(->marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain));
+    dasm_put(Dst, 14211, Dt6(->gclist));
     break;
 
   /* -- Calls and vararg handling ----------------------------------------- */
 
   case BC_CALL: case BC_CALLM:
-    dasm_put(Dst, 11707);
+    dasm_put(Dst, 11714);
     if (op == BC_CALLM) {
-      dasm_put(Dst, 14212);
+      dasm_put(Dst, 14219);
     }
-    dasm_put(Dst, 14217, LJ_TFUNC, Dt7(->gate));
+    dasm_put(Dst, 14224, LJ_TFUNC, Dt7(->gate));
     break;
 
   case BC_CALLMT:
-    dasm_put(Dst, 14212);
+    dasm_put(Dst, 14219);
     break;
   case BC_CALLT:
-    dasm_put(Dst, 14240, LJ_TFUNC, FRAME_TYPE, Dt7(->ffid), Dt7(->gate));
-    dasm_put(Dst, 14345, FRAME_TYPE, Dt7(->pt), Dt9(->k));
+    dasm_put(Dst, 14247, LJ_TFUNC, FRAME_TYPE, Dt7(->ffid), Dt7(->gate));
+    dasm_put(Dst, 14352, FRAME_TYPE, Dt7(->pt), Dt9(->k));
     break;
 
   case BC_ITERC:
-    dasm_put(Dst, 14402, LJ_TFUNC, Dt7(->gate));
+    dasm_put(Dst, 14409, LJ_TFUNC, Dt7(->gate));
     break;
 
   case BC_VARG:
-    dasm_put(Dst, 14464, Dt7(->pt), Dt9(->numparams), (8+FRAME_VARG), LJ_TNIL);
-    dasm_put(Dst, 14608, Dt1(->maxstack), Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top));
+    dasm_put(Dst, 14471, Dt7(->pt), Dt9(->numparams), (8+FRAME_VARG), LJ_TNIL);
+    dasm_put(Dst, 14615, Dt1(->maxstack), Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top));
     break;
 
   /* -- Returns ----------------------------------------------------------- */
 
   case BC_RETM:
-    dasm_put(Dst, 14212);
+    dasm_put(Dst, 14219);
     break;
 
   case BC_RET: case BC_RET0: case BC_RET1:
     if (op != BC_RET0) {
-      dasm_put(Dst, 14707);
+      dasm_put(Dst, 14714);
     }
-    dasm_put(Dst, 14711, FRAME_TYPE);
+    dasm_put(Dst, 14718, FRAME_TYPE);
     switch (op) {
     case BC_RET:
-      dasm_put(Dst, 14730);
+      dasm_put(Dst, 14737);
       break;
     case BC_RET1:
-      dasm_put(Dst, 14788);
+      dasm_put(Dst, 14795);
       /* fallthrough */
     case BC_RET0:
-      dasm_put(Dst, 14804);
+      dasm_put(Dst, 14811);
     default:
       break;
     }
-    dasm_put(Dst, 14815, Dt7(->pt), Dt9(->k));
+    dasm_put(Dst, 14822, Dt7(->pt), Dt9(->k));
     if (op == BC_RET) {
-      dasm_put(Dst, 14857, LJ_TNIL);
+      dasm_put(Dst, 14864, LJ_TNIL);
     } else {
-      dasm_put(Dst, 14866, LJ_TNIL);
+      dasm_put(Dst, 14873, LJ_TNIL);
     }
-    dasm_put(Dst, 14873);
+    dasm_put(Dst, 14880);
     if (op != BC_RET0) {
-      dasm_put(Dst, 14894);
+      dasm_put(Dst, 14901);
     }
-    dasm_put(Dst, 5061);
+    dasm_put(Dst, 5058);
     break;
 
   /* -- Loops and branches ------------------------------------------------ */
@@ -2170,7 +2173,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse)
 
   case BC_FORL:
 #if LJ_HASJIT
-    dasm_put(Dst, 14898, HOTCOUNT_PCMASK, GG_DISP2HOT);
+    dasm_put(Dst, 14905, HOTCOUNT_PCMASK, GG_DISP2HOT);
 #endif
     break;
 
@@ -2182,57 +2185,57 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse)
   case BC_FORI:
   case BC_IFORL:
     vk = (op == BC_IFORL || op == BC_JFORL);
-    dasm_put(Dst, 14919);
+    dasm_put(Dst, 14926);
     if (!vk) {
-      dasm_put(Dst, 14923, LJ_TISNUM, LJ_TISNUM);
+      dasm_put(Dst, 14930, LJ_TISNUM, LJ_TISNUM);
     }
-    dasm_put(Dst, 14942);
+    dasm_put(Dst, 14949);
     if (!vk) {
-      dasm_put(Dst, 14946, LJ_TISNUM);
+      dasm_put(Dst, 14953, LJ_TISNUM);
     }
     if (sse) {
-      dasm_put(Dst, 14955);
+      dasm_put(Dst, 14962);
       if (vk) {
-       dasm_put(Dst, 14967);
+       dasm_put(Dst, 14974);
       } else {
-        dasm_put(Dst, 14986);
+        dasm_put(Dst, 14993);
       }
-      dasm_put(Dst, 14991);
+      dasm_put(Dst, 14998);
     } else {
-      dasm_put(Dst, 15004);
+      dasm_put(Dst, 15011);
       if (vk) {
-       dasm_put(Dst, 15010);
+       dasm_put(Dst, 15017);
       } else {
-       dasm_put(Dst, 15026);
+       dasm_put(Dst, 15033);
       }
-      dasm_put(Dst, 15034);
+      dasm_put(Dst, 15041);
       if (cmov) {
-      dasm_put(Dst, 11122);
+      dasm_put(Dst, 11129);
       } else {
-      dasm_put(Dst, 11128);
+      dasm_put(Dst, 11135);
       }
       if (!cmov) {
-       dasm_put(Dst, 15039);
+       dasm_put(Dst, 15046);
       }
     }
     if (op == BC_FORI) {
-      dasm_put(Dst, 15045, -BCBIAS_J*4);
+      dasm_put(Dst, 15052, -BCBIAS_J*4);
     } else if (op == BC_JFORI) {
-      dasm_put(Dst, 15055, -BCBIAS_J*4, BC_JLOOP);
+      dasm_put(Dst, 15062, -BCBIAS_J*4, BC_JLOOP);
     } else if (op == BC_IFORL) {
-      dasm_put(Dst, 15069, -BCBIAS_J*4);
+      dasm_put(Dst, 15076, -BCBIAS_J*4);
     } else {
-      dasm_put(Dst, 15065, BC_JLOOP);
+      dasm_put(Dst, 15072, BC_JLOOP);
     }
-    dasm_put(Dst, 11157);
+    dasm_put(Dst, 11164);
     if (sse) {
-      dasm_put(Dst, 15079);
+      dasm_put(Dst, 15086);
     }
     break;
 
   case BC_ITERL:
 #if LJ_HASJIT
-    dasm_put(Dst, 14898, HOTCOUNT_PCMASK, GG_DISP2HOT);
+    dasm_put(Dst, 14905, HOTCOUNT_PCMASK, GG_DISP2HOT);
 #endif
     break;
 
@@ -2241,33 +2244,33 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse)
     break;
 #endif
   case BC_IITERL:
-    dasm_put(Dst, 15090, LJ_TNIL);
+    dasm_put(Dst, 15097, LJ_TNIL);
     if (op == BC_JITERL) {
-      dasm_put(Dst, 15105, BC_JLOOP);
+      dasm_put(Dst, 15112, BC_JLOOP);
     } else {
-      dasm_put(Dst, 15119, -BCBIAS_J*4);
+      dasm_put(Dst, 15126, -BCBIAS_J*4);
     }
-    dasm_put(Dst, 11454);
+    dasm_put(Dst, 11461);
     break;
 
   case BC_LOOP:
 #if LJ_HASJIT
-    dasm_put(Dst, 14898, HOTCOUNT_PCMASK, GG_DISP2HOT);
+    dasm_put(Dst, 14905, HOTCOUNT_PCMASK, GG_DISP2HOT);
 #endif
     break;
 
   case BC_ILOOP:
-    dasm_put(Dst, 8580);
+    dasm_put(Dst, 8587);
     break;
 
   case BC_JLOOP:
 #if LJ_HASJIT
-    dasm_put(Dst, 15135, DISPATCH_J(trace), DtD(->mcode), DISPATCH_GL(jit_base), DISPATCH_GL(jit_L));
+    dasm_put(Dst, 15142, DISPATCH_J(trace), DtD(->mcode), DISPATCH_GL(jit_base), DISPATCH_GL(jit_L));
 #endif
     break;
 
   case BC_JMP:
-    dasm_put(Dst, 15158, -BCBIAS_J*4);
+    dasm_put(Dst, 15165, -BCBIAS_J*4);
     break;
 
   /* ---------------------------------------------------------------------- */
@@ -2295,7 +2298,7 @@ static int build_backend(BuildCtx *ctx)
 
   build_subroutines(ctx, cmov, sse);
 
-  dasm_put(Dst, 15182);
+  dasm_put(Dst, 15189);
   for (op = 0; op < BC__MAX; op++)
     build_ins(ctx, (BCOp)op, op, cmov, sse);
 
index 4b7847c8054fda3ea7cb424ebd844dbc23a588e0..961e5150a4ebd80fdbce35989f89f314b6d076b7 100644 (file)
@@ -1056,19 +1056,32 @@ LUALIB_API int luaL_callmeta(lua_State *L, int idx, const char *field)
 LUA_API int lua_yield(lua_State *L, int nresults)
 {
   void *cf = L->cframe;
-  cTValue *f;
-  if (!cframe_canyield(cf))
-    lj_err_msg(L, LJ_ERR_CYIELD);
-  f = L->top - nresults;
-  if (f > L->base) {
-    TValue *t = L->base;
-    while (--nresults >= 0) copyTV(L, t++, f++);
-    L->top = t;
+  global_State *g = G(L);
+  if (cframe_canyield(cf)) {
+    cf = cframe_raw(cf);
+    if (!hook_active(g)) {  /* Regular yield: move results down if needed. */
+      cTValue *f = L->top - nresults;
+      if (f > L->base) {
+       TValue *t = L->base;
+       while (--nresults >= 0) copyTV(L, t++, f++);
+       L->top = t;
+      }
+    } else {  /* Yield from hook: add a pseudo-frame. */
+      TValue *top = L->top;
+      hook_leave(g);
+      top->u64 = cframe_multres(cf);
+      setcont(top+1, lj_cont_hook);
+      setframe_pc(top+1, cframe_pc(cf)-1);
+      setframe_gc(top+2, obj2gco(L));
+      top[2].fr.tp.ftsz = cast_int((char *)(top+3)-(char *)L->base)+FRAME_CONT;
+      L->top = L->base = top+3;
+    }
+    L->cframe = NULL;
+    L->status = LUA_YIELD;
+    lj_vm_unwind_c(cf, LUA_YIELD);
   }
-  L->cframe = NULL;
-  L->status = LUA_YIELD;
-  lj_vm_unwind_c(cf, LUA_YIELD);
-  return -1;  /* unreachable */
+  lj_err_msg(L, LJ_ERR_CYIELD);
+  return 0;  /* unreachable */
 }
 
 LUA_API int lua_resume(lua_State *L, int nargs)
index 3ce093718d7e90ca776c5055473432f978d91179..2ffe363c4f8c3020f51df9b616450b4ce5f6c486 100644 (file)
@@ -258,15 +258,16 @@ static BCReg cur_topslot(GCproto *pt, const BCIns *pc, uint32_t nres)
 }
 
 /* Instruction dispatch callback for instr/line hooks or when recording. */
-void lj_dispatch_ins(lua_State *L, const BCIns *pc, uint32_t nres)
+void LJ_FASTCALL lj_dispatch_ins(lua_State *L, const BCIns *pc)
 {
   GCfunc *fn = curr_func(L);
   GCproto *pt = funcproto(fn);
-  BCReg slots = cur_topslot(pt, pc, nres);
-  global_State *g = G(L);
   void *cf = cframe_raw(L->cframe);
   const BCIns *oldpc = cframe_pc(cf);
+  global_State *g = G(L);
+  BCReg slots;
   setcframe_pc(cf, pc);
+  slots = cur_topslot(pt, pc, cframe_multres(cf));
   L->top = L->base + slots;  /* Fix top. */
 #if LJ_HASJIT
   {
index 298aa166a66e12fc6bfb7cb317b5e32812749182..26c14fb9e11385c9d65fb92cc53e043fac570758 100644 (file)
@@ -59,6 +59,6 @@ LJ_FUNC void lj_dispatch_init(GG_State *GG);
 LJ_FUNC void lj_dispatch_update(global_State *g);
 
 /* Instruction dispatch callback for instr/line hooks or when recording. */
-LJ_FUNCA void lj_dispatch_ins(lua_State *L, const BCIns *pc, uint32_t nres);
+LJ_FUNCA void LJ_FASTCALL lj_dispatch_ins(lua_State *L, const BCIns *pc);
 
 #endif
index da2555f9b8bfafc8489bd29b7658f1ed5ab22c33..ebc9ad1205b8a57e789a13671e25117b57ba59fa 100644 (file)
@@ -470,7 +470,7 @@ uncaught:
   L->cframe = NULL;
   if (cframe_canyield(cf)) {  /* Resume? */
     unwindstack(L, L->top, errcode);
-    lj_vm_unwind_c(cf, errcode);
+    lj_vm_unwind_c(cframe_raw(cf), errcode);
   }
   /* Better rethrow on main thread than panic. */
   {
index 398ec4e5d47b78cf0f47b49c71900dab4d202386..2704ee40e36d9dad11abb821bc7e6f14b6c2ae52 100644 (file)
@@ -63,6 +63,7 @@ enum {
 #define CFRAME_OFS_PREV                (13*4)
 #define CFRAME_OFS_L           (12*4)
 #define CFRAME_OFS_PC          (6*4)
+#define CFRAME_OFS_MULTRES     (5*4)
 #define CFRAME_SIZE            (12*4)
 #elif LJ_TARGET_X64
 #if _WIN64
@@ -71,6 +72,7 @@ enum {
 #define CFRAME_OFS_L           (32*4)
 #define CFRAME_OFS_ERRF                (31*4)
 #define CFRAME_OFS_NRES                (30*4)
+#define CFRAME_OFS_MULTRES     (29*4)
 #define CFRAME_SIZE            (14*8)
 #else
 #define CFRAME_OFS_PREV                (4*8)
@@ -78,6 +80,7 @@ enum {
 #define CFRAME_OFS_L           (4*4)
 #define CFRAME_OFS_ERRF                (3*4)
 #define CFRAME_OFS_NRES                (2*4)
+#define CFRAME_OFS_MULTRES     (1*4)
 #define CFRAME_SIZE            (12*8)
 #endif
 #else
@@ -91,6 +94,7 @@ enum {
 #define cframe_errfunc(cf)     (*(int32_t *)(((char *)(cf))+CFRAME_OFS_ERRF))
 #define cframe_nres(cf)                (*(int32_t *)(((char *)(cf))+CFRAME_OFS_NRES))
 #define cframe_prev(cf)                (*(void **)(((char *)(cf))+CFRAME_OFS_PREV))
+#define cframe_multres(cf)  (*(uint32_t *)(((char *)(cf))+CFRAME_OFS_MULTRES))
 #define cframe_L(cf) \
   (&gcref(*(GCRef *)(((char *)(cf))+CFRAME_OFS_L))->th)
 #define cframe_pc(cf) \
index ed375747c4a7c60f75696a55b7d2fd9026603ea8..3e4ea45c7345857f5cc0d1d852c3560156db35d8 100644 (file)
@@ -54,6 +54,7 @@ LJ_ASMF void lj_cont_ra(void);  /* Store result in RA from instruction. */
 LJ_ASMF void lj_cont_nop(void);  /* Do nothing, just continue execution. */
 LJ_ASMF void lj_cont_condt(void);  /* Branch if result is true. */
 LJ_ASMF void lj_cont_condf(void);  /* Branch if result is false. */
+LJ_ASMF void lj_cont_hook(void);  /* Continue from hook yield. */
 
 /* Start of the ASM code. */
 LJ_ASMF char lj_vm_asm_begin[];