run normal function opts twice in -O4, to recoup the step backwards from flattening etc.
diff --git a/src/passes/pass.cpp b/src/passes/pass.cpp
index 752e1cd..41b1710 100644
--- a/src/passes/pass.cpp
+++ b/src/passes/pass.cpp
@@ -203,6 +203,18 @@
     add("rse"); // after all coalesce-locals, and before a final vacuum
   }
   add("vacuum"); // just to be safe
+  if (options.optimizeLevel >= 4) {
+    // -O4 optimizations, in particular flattening and relooping, are "one step
+    // back two steps forward" in that they make the IR more verbose and less
+    // optimized, but more optimizeable. Our main passes need to optimize such
+    // code more than once to avoid -O4 being less effective than -O3 in some
+    // cases, so queue them to run again.
+    auto old = options.optimizeLevel;
+    options.optimizeLevel = 3;
+    addDefaultFunctionOptimizationPasses();
+    addDefaultFunctionOptimizationPasses();
+    options.optimizeLevel = old;
+  }
 }
 
 void PassRunner::addDefaultGlobalOptimizationPrePasses() {
diff --git a/test/passes/O4_metrics.txt b/test/passes/O4_metrics.txt
index a27b993..1ad36ff 100644
--- a/test/passes/O4_metrics.txt
+++ b/test/passes/O4_metrics.txt
@@ -3,28 +3,28 @@
  [imports]      : 25      
  [memory-data]  : 23      
  [table-data]   : 18      
- [total]        : 9871    
- [vars]         : 144     
+ [total]        : 9833    
+ [vars]         : 143     
  binary         : 1672    
- block          : 478     
- break          : 299     
+ block          : 477     
+ break          : 292     
  call           : 198     
  call_indirect  : 8       
  const          : 1574    
- drop           : 41      
+ drop           : 40      
  get_global     : 68      
- get_local      : 2660    
- if             : 370     
+ get_local      : 2657    
+ if             : 375     
  load           : 465     
  loop           : 71      
  nop            : 1       
  return         : 19      
  select         : 71      
  set_global     : 38      
- set_local      : 1256    
+ set_local      : 1233    
  store          : 458     
  switch         : 3       
- unary          : 121     
+ unary          : 113     
 (module
  (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32)))
  (type $FUNCSIG$id (func (param f64) (result i32)))
@@ -201,10 +201,10 @@
    (get_local $0)
   )
   (set_local $5
-   (tee_local $3
+   (tee_local $2
     (i32.and
      (call $_bitshift64Lshr
-      (tee_local $2
+      (tee_local $3
        (i32.load
         (get_global $tempDoublePtr)
        )
@@ -221,68 +221,66 @@
    )
   )
   (if
-   (get_local $3)
-   (block $block$2$break
-    (br_if $block$2$break
-     (i32.eq
-      (get_local $5)
-      (i32.const 2047)
-     )
+   (get_local $2)
+   (if
+    (i32.ne
+     (get_local $5)
+     (i32.const 2047)
     )
-    (i32.store
-     (get_local $1)
-     (i32.add
-      (get_local $3)
-      (i32.const -1022)
-     )
-    )
-    (i32.store
-     (get_global $tempDoublePtr)
-     (get_local $2)
-    )
-    (i32.store offset=4
-     (get_global $tempDoublePtr)
-     (i32.or
-      (i32.and
-       (get_local $4)
-       (i32.const -2146435073)
+    (block
+     (i32.store
+      (get_local $1)
+      (i32.add
+       (get_local $2)
+       (i32.const -1022)
       )
-      (i32.const 1071644672)
      )
-    )
-    (set_local $0
-     (f64.load
+     (i32.store
       (get_global $tempDoublePtr)
+      (get_local $3)
+     )
+     (i32.store offset=4
+      (get_global $tempDoublePtr)
+      (i32.or
+       (i32.and
+        (get_local $4)
+        (i32.const -2146435073)
+       )
+       (i32.const 1071644672)
+      )
+     )
+     (set_local $0
+      (f64.load
+       (get_global $tempDoublePtr)
+      )
      )
     )
    )
    (i32.store
     (get_local $1)
-    (tee_local $2
-     (if (result i32)
-      (f64.ne
-       (get_local $0)
-       (f64.const 0)
-      )
-      (block (result i32)
-       (set_local $0
-        (call $_frexp
-         (f64.mul
-          (get_local $0)
-          (f64.const 18446744073709551615)
-         )
-         (get_local $1)
-        )
-       )
-       (i32.add
-        (i32.load
-         (get_local $1)
-        )
-        (i32.const -64)
-       )
-      )
-      (i32.const 0)
+    (if (result i32)
+     (f64.ne
+      (get_local $0)
+      (f64.const 0)
      )
+     (block (result i32)
+      (set_local $0
+       (call $_frexp
+        (f64.mul
+         (get_local $0)
+         (f64.const 18446744073709551615)
+        )
+        (get_local $1)
+       )
+      )
+      (i32.add
+       (i32.load
+        (get_local $1)
+       )
+       (i32.const -64)
+      )
+     )
+     (i32.const 0)
     )
    )
   )
@@ -723,7 +721,7 @@
    )
    (tee_local $4
     (i32.load
-     (tee_local $7
+     (tee_local $6
       (i32.add
        (get_local $0)
        (i32.const 28)
@@ -850,18 +848,16 @@
       )
      )
      (if
-      (i32.eqz
-       (i32.lt_s
-        (get_local $4)
-        (i32.const 0)
-       )
+      (i32.ge_s
+       (get_local $4)
+       (i32.const 0)
       )
       (block
-       (set_local $6
+       (set_local $7
         (if (result i32)
          (i32.gt_u
           (get_local $4)
-          (tee_local $6
+          (tee_local $7
            (i32.load offset=4
             (get_local $1)
            )
@@ -869,7 +865,7 @@
          )
          (block (result i32)
           (i32.store
-           (get_local $7)
+           (get_local $6)
            (tee_local $9
             (i32.load
              (get_local $13)
@@ -899,7 +895,7 @@
           )
           (i32.sub
            (get_local $4)
-           (get_local $6)
+           (get_local $7)
           )
          )
          (block (result i32)
@@ -910,10 +906,10 @@
            )
            (block
             (i32.store
-             (get_local $7)
+             (get_local $6)
              (i32.add
               (i32.load
-               (get_local $7)
+               (get_local $6)
               )
               (get_local $4)
              )
@@ -924,7 +920,7 @@
            )
           )
           (set_local $9
-           (get_local $6)
+           (get_local $7)
           )
           (get_local $4)
          )
@@ -936,14 +932,14 @@
          (i32.load
           (get_local $1)
          )
-         (get_local $6)
+         (get_local $7)
         )
        )
        (i32.store offset=4
         (get_local $1)
         (i32.sub
          (get_local $9)
-         (get_local $6)
+         (get_local $7)
         )
        )
        (set_local $11
@@ -961,7 +957,7 @@
      (i32.const 0)
     )
     (i32.store
-     (get_local $7)
+     (get_local $6)
      (i32.const 0)
     )
     (i32.store
@@ -1008,7 +1004,7 @@
     )
    )
    (i32.store
-    (get_local $7)
+    (get_local $6)
     (get_local $1)
    )
    (i32.store
@@ -1340,7 +1336,7 @@
       (get_local $3)
       (tee_local $4
        (i32.load
-        (tee_local $6
+        (tee_local $5
          (i32.add
           (get_local $2)
           (i32.const 20)
@@ -1371,7 +1367,7 @@
      (br $block$2$break)
     )
    )
-   (set_local $5
+   (set_local $6
     (block $block$20$break (result i32)
      (if
       (i32.gt_s
@@ -1387,34 +1383,30 @@
        (loop $shape$14$continue
         (drop
          (br_if $block$20$break
-          (tee_local $5
-           (i32.const 0)
-          )
+          (i32.const 0)
           (i32.eqz
            (get_local $3)
           )
          )
         )
         (if
-         (i32.eqz
-          (i32.eq
-           (i32.load8_s
-            (i32.add
-             (tee_local $5
-              (i32.add
-               (get_local $3)
-               (i32.const -1)
-              )
+         (i32.ne
+          (i32.load8_s
+           (i32.add
+            (tee_local $6
+             (i32.add
+              (get_local $3)
+              (i32.const -1)
              )
-             (get_local $0)
             )
+            (get_local $0)
            )
-           (i32.const 10)
           )
+          (i32.const 10)
          )
          (block
           (set_local $3
-           (get_local $5)
+           (get_local $6)
           )
           (br $shape$14$continue)
          )
@@ -1441,7 +1433,7 @@
        )
        (set_local $4
         (i32.load
-         (get_local $6)
+         (get_local $5)
         )
        )
        (set_local $1
@@ -1472,10 +1464,10 @@
     )
    )
    (i32.store
-    (get_local $6)
+    (get_local $5)
     (i32.add
      (i32.load
-      (get_local $6)
+      (get_local $5)
      )
      (get_local $1)
     )
@@ -1483,7 +1475,7 @@
    (set_local $3
     (i32.add
      (get_local $1)
-     (get_local $5)
+     (get_local $6)
     )
    )
   )
@@ -1512,233 +1504,229 @@
     (get_local $1)
    )
   )
-  (tee_local $0
-   (if (result i32)
-    (i32.and
+  (if (result i32)
+   (i32.and
+    (tee_local $1
+     (i32.load
+      (get_local $0)
+     )
+    )
+    (i32.const 8)
+   )
+   (block (result i32)
+    (i32.store
+     (get_local $0)
+     (i32.or
+      (get_local $1)
+      (i32.const 32)
+     )
+    )
+    (i32.const -1)
+   )
+   (block (result i32)
+    (i32.store offset=8
+     (get_local $0)
+     (i32.const 0)
+    )
+    (i32.store offset=4
+     (get_local $0)
+     (i32.const 0)
+    )
+    (i32.store offset=28
+     (get_local $0)
      (tee_local $1
-      (i32.load
+      (i32.load offset=44
        (get_local $0)
       )
      )
-     (i32.const 8)
     )
-    (block (result i32)
-     (i32.store
-      (get_local $0)
-      (i32.or
-       (get_local $1)
-       (i32.const 32)
-      )
-     )
-     (i32.const -1)
+    (i32.store offset=20
+     (get_local $0)
+     (get_local $1)
     )
-    (block (result i32)
-     (i32.store offset=8
-      (get_local $0)
-      (i32.const 0)
-     )
-     (i32.store offset=4
-      (get_local $0)
-      (i32.const 0)
-     )
-     (i32.store offset=28
-      (get_local $0)
-      (tee_local $1
-       (i32.load offset=44
-        (get_local $0)
-       )
+    (i32.store offset=16
+     (get_local $0)
+     (i32.add
+      (i32.load offset=48
+       (get_local $0)
       )
-     )
-     (i32.store offset=20
-      (get_local $0)
       (get_local $1)
      )
-     (i32.store offset=16
-      (get_local $0)
-      (i32.add
-       (i32.load offset=48
-        (get_local $0)
-       )
-       (get_local $1)
-      )
-     )
-     (i32.const 0)
     )
+    (i32.const 0)
    )
   )
  )
  (func $_wcrtomb (; 39 ;) (; has Stack IR ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (tee_local $0
-   (if (result i32)
-    (get_local $0)
-    (block $block$2$break (result i32)
-     (if
-      (i32.lt_u
+  (if (result i32)
+   (get_local $0)
+   (block $block$2$break (result i32)
+    (if
+     (i32.lt_u
+      (get_local $1)
+      (i32.const 128)
+     )
+     (block
+      (i32.store8
+       (get_local $0)
        (get_local $1)
-       (i32.const 128)
       )
-      (block
-       (i32.store8
-        (get_local $0)
-        (get_local $1)
-       )
-       (br $block$2$break
-        (i32.const 1)
-       )
+      (br $block$2$break
+       (i32.const 1)
       )
      )
-     (if
+    )
+    (if
+     (i32.lt_u
+      (get_local $1)
+      (i32.const 2048)
+     )
+     (block
+      (i32.store8
+       (get_local $0)
+       (i32.or
+        (i32.shr_u
+         (get_local $1)
+         (i32.const 6)
+        )
+        (i32.const 192)
+       )
+      )
+      (i32.store8 offset=1
+       (get_local $0)
+       (i32.or
+        (i32.and
+         (get_local $1)
+         (i32.const 63)
+        )
+        (i32.const 128)
+       )
+      )
+      (br $block$2$break
+       (i32.const 2)
+      )
+     )
+    )
+    (if
+     (i32.or
+      (i32.eq
+       (i32.and
+        (get_local $1)
+        (i32.const -8192)
+       )
+       (i32.const 57344)
+      )
       (i32.lt_u
        (get_local $1)
-       (i32.const 2048)
+       (i32.const 55296)
       )
-      (block
-       (i32.store8
-        (get_local $0)
-        (i32.or
+     )
+     (block
+      (i32.store8
+       (get_local $0)
+       (i32.or
+        (i32.shr_u
+         (get_local $1)
+         (i32.const 12)
+        )
+        (i32.const 224)
+       )
+      )
+      (i32.store8 offset=1
+       (get_local $0)
+       (i32.or
+        (i32.and
          (i32.shr_u
           (get_local $1)
           (i32.const 6)
          )
-         (i32.const 192)
+         (i32.const 63)
         )
-       )
-       (i32.store8 offset=1
-        (get_local $0)
-        (i32.or
-         (i32.and
-          (get_local $1)
-          (i32.const 63)
-         )
-         (i32.const 128)
-        )
-       )
-       (br $block$2$break
-        (i32.const 2)
+        (i32.const 128)
        )
       )
-     )
-     (if
-      (i32.or
-       (i32.eq
+      (i32.store8 offset=2
+       (get_local $0)
+       (i32.or
         (i32.and
          (get_local $1)
-         (i32.const -8192)
+         (i32.const 63)
         )
-        (i32.const 57344)
-       )
-       (i32.lt_u
-        (get_local $1)
-        (i32.const 55296)
+        (i32.const 128)
        )
       )
-      (block
-       (i32.store8
-        (get_local $0)
-        (i32.or
+      (br $block$2$break
+       (i32.const 3)
+      )
+     )
+    )
+    (if (result i32)
+     (i32.lt_u
+      (i32.add
+       (get_local $1)
+       (i32.const -65536)
+      )
+      (i32.const 1048576)
+     )
+     (block (result i32)
+      (i32.store8
+       (get_local $0)
+       (i32.or
+        (i32.shr_u
+         (get_local $1)
+         (i32.const 18)
+        )
+        (i32.const 240)
+       )
+      )
+      (i32.store8 offset=1
+       (get_local $0)
+       (i32.or
+        (i32.and
          (i32.shr_u
           (get_local $1)
           (i32.const 12)
          )
-         (i32.const 224)
+         (i32.const 63)
         )
-       )
-       (i32.store8 offset=1
-        (get_local $0)
-        (i32.or
-         (i32.and
-          (i32.shr_u
-           (get_local $1)
-           (i32.const 6)
-          )
-          (i32.const 63)
-         )
-         (i32.const 128)
-        )
-       )
-       (i32.store8 offset=2
-        (get_local $0)
-        (i32.or
-         (i32.and
-          (get_local $1)
-          (i32.const 63)
-         )
-         (i32.const 128)
-        )
-       )
-       (br $block$2$break
-        (i32.const 3)
+        (i32.const 128)
        )
       )
-     )
-     (if (result i32)
-      (i32.lt_u
-       (i32.add
-        (get_local $1)
-        (i32.const -65536)
-       )
-       (i32.const 1048576)
-      )
-      (block (result i32)
-       (i32.store8
-        (get_local $0)
-        (i32.or
+      (i32.store8 offset=2
+       (get_local $0)
+       (i32.or
+        (i32.and
          (i32.shr_u
           (get_local $1)
-          (i32.const 18)
+          (i32.const 6)
          )
-         (i32.const 240)
+         (i32.const 63)
         )
+        (i32.const 128)
        )
-       (i32.store8 offset=1
-        (get_local $0)
-        (i32.or
-         (i32.and
-          (i32.shr_u
-           (get_local $1)
-           (i32.const 12)
-          )
-          (i32.const 63)
-         )
-         (i32.const 128)
-        )
-       )
-       (i32.store8 offset=2
-        (get_local $0)
-        (i32.or
-         (i32.and
-          (i32.shr_u
-           (get_local $1)
-           (i32.const 6)
-          )
-          (i32.const 63)
-         )
-         (i32.const 128)
-        )
-       )
-       (i32.store8 offset=3
-        (get_local $0)
-        (i32.or
-         (i32.and
-          (get_local $1)
-          (i32.const 63)
-         )
-         (i32.const 128)
-        )
-       )
-       (i32.const 4)
       )
-      (block (result i32)
-       (i32.store
-        (call $___errno_location)
-        (i32.const 84)
+      (i32.store8 offset=3
+       (get_local $0)
+       (i32.or
+        (i32.and
+         (get_local $1)
+         (i32.const 63)
+        )
+        (i32.const 128)
        )
-       (i32.const -1)
       )
+      (i32.const 4)
+     )
+     (block (result i32)
+      (i32.store
+       (call $___errno_location)
+       (i32.const 84)
+      )
+      (i32.const -1)
      )
     )
-    (i32.const 1)
    )
+   (i32.const 1)
   )
  )
  (func $_wctomb (; 40 ;) (; has Stack IR ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
@@ -1958,88 +1946,35 @@
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (tee_local $0
-   (block $block$2$break (result i32)
-    (if
-     (i32.gt_u
-      (i32.load
-       (tee_local $1
-        (i32.add
-         (get_local $0)
-         (i32.const 20)
-        )
-       )
-      )
-      (i32.load
-       (tee_local $2
-        (i32.add
-         (get_local $0)
-         (i32.const 28)
-        )
+  (block $block$2$break (result i32)
+   (if
+    (i32.gt_u
+     (i32.load
+      (tee_local $1
+       (i32.add
+        (get_local $0)
+        (i32.const 20)
        )
       )
      )
-     (block $block$3$break
-      (drop
-       (call_indirect (type $FUNCSIG$iiii)
+     (i32.load
+      (tee_local $2
+       (i32.add
         (get_local $0)
-        (i32.const 0)
-        (i32.const 0)
-        (i32.add
-         (i32.and
-          (i32.load offset=36
-           (get_local $0)
-          )
-          (i32.const 7)
-         )
-         (i32.const 2)
-        )
+        (i32.const 28)
        )
       )
-      (br_if $block$3$break
-       (i32.load
-        (get_local $1)
-       )
-      )
-      (br $block$2$break
-       (i32.const -1)
-      )
      )
     )
-    (if
-     (i32.lt_u
-      (tee_local $4
-       (i32.load
-        (tee_local $3
-         (i32.add
-          (get_local $0)
-          (i32.const 4)
-         )
-        )
-       )
-      )
-      (tee_local $6
-       (i32.load
-        (tee_local $5
-         (i32.add
-          (get_local $0)
-          (i32.const 8)
-         )
-        )
-       )
-      )
-     )
+    (block $block$3$break
      (drop
       (call_indirect (type $FUNCSIG$iiii)
        (get_local $0)
-       (i32.sub
-        (get_local $4)
-        (get_local $6)
-       )
-       (i32.const 1)
+       (i32.const 0)
+       (i32.const 0)
        (i32.add
         (i32.and
-         (i32.load offset=40
+         (i32.load offset=36
           (get_local $0)
          )
          (i32.const 7)
@@ -2048,29 +1983,80 @@
        )
       )
      )
+     (br_if $block$3$break
+      (i32.load
+       (get_local $1)
+      )
+     )
+     (br $block$2$break
+      (i32.const -1)
+     )
     )
-    (i32.store offset=16
-     (get_local $0)
-     (i32.const 0)
+   )
+   (if
+    (i32.lt_u
+     (tee_local $4
+      (i32.load
+       (tee_local $3
+        (i32.add
+         (get_local $0)
+         (i32.const 4)
+        )
+       )
+      )
+     )
+     (tee_local $6
+      (i32.load
+       (tee_local $5
+        (i32.add
+         (get_local $0)
+         (i32.const 8)
+        )
+       )
+      )
+     )
     )
-    (i32.store
-     (get_local $2)
-     (i32.const 0)
+    (drop
+     (call_indirect (type $FUNCSIG$iiii)
+      (get_local $0)
+      (i32.sub
+       (get_local $4)
+       (get_local $6)
+      )
+      (i32.const 1)
+      (i32.add
+       (i32.and
+        (i32.load offset=40
+         (get_local $0)
+        )
+        (i32.const 7)
+       )
+       (i32.const 2)
+      )
+     )
     )
-    (i32.store
-     (get_local $1)
-     (i32.const 0)
-    )
-    (i32.store
-     (get_local $5)
-     (i32.const 0)
-    )
-    (i32.store
-     (get_local $3)
-     (i32.const 0)
-    )
+   )
+   (i32.store offset=16
+    (get_local $0)
     (i32.const 0)
    )
+   (i32.store
+    (get_local $2)
+    (i32.const 0)
+   )
+   (i32.store
+    (get_local $1)
+    (i32.const 0)
+   )
+   (i32.store
+    (get_local $5)
+    (i32.const 0)
+   )
+   (i32.store
+    (get_local $3)
+    (i32.const 0)
+   )
+   (i32.const 0)
   )
  )
  (func $_cleanup (; 44 ;) (; has Stack IR ;) (type $FUNCSIG$vi) (param $0 i32)
@@ -2126,7 +2112,6 @@
   (local $47 i32)
   (local $48 i32)
   (local $49 i32)
-  (local $50 i32)
   (set_local $14
    (get_global $STACKTOP)
   )
@@ -2149,13 +2134,13 @@
     (i32.const 16)
    )
   )
-  (set_local $35
+  (set_local $34
    (i32.add
     (get_local $14)
     (i32.const 528)
    )
   )
-  (set_local $29
+  (set_local $28
    (i32.ne
     (get_local $0)
     (i32.const 0)
@@ -2180,7 +2165,7 @@
     (i32.const 39)
    )
   )
-  (set_local $45
+  (set_local $44
    (i32.add
     (tee_local $40
      (i32.add
@@ -2216,27 +2201,27 @@
     )
    )
   )
-  (set_local $46
+  (set_local $45
    (i32.sub
     (get_local $23)
     (get_local $22)
    )
   )
-  (set_local $47
+  (set_local $46
    (i32.sub
     (i32.const -2)
     (get_local $22)
    )
   )
-  (set_local $48
+  (set_local $47
    (i32.add
     (get_local $23)
     (i32.const 2)
    )
   )
-  (set_local $50
+  (set_local $49
    (i32.add
-    (tee_local $49
+    (tee_local $48
      (i32.add
       (get_local $14)
       (i32.const 24)
@@ -2246,14 +2231,14 @@
    )
   )
   (set_local $43
-   (tee_local $30
+   (tee_local $29
     (i32.add
      (get_local $22)
      (i32.const 9)
     )
    )
   )
-  (set_local $34
+  (set_local $33
    (i32.add
     (get_local $22)
     (i32.const 8)
@@ -2278,16 +2263,16 @@
             (block $block$5$break
              (if
               (i32.gt_s
-               (get_local $17)
+               (get_local $16)
                (i32.const -1)
               )
-              (set_local $17
+              (set_local $16
                (if (result i32)
                 (i32.gt_s
                  (get_local $10)
                  (i32.sub
                   (i32.const 2147483647)
-                  (get_local $17)
+                  (get_local $16)
                  )
                 )
                 (block (result i32)
@@ -2299,7 +2284,7 @@
                 )
                 (i32.add
                  (get_local $10)
-                 (get_local $17)
+                 (get_local $16)
                 )
                )
               )
@@ -2395,9 +2380,9 @@
               )
              )
              (if
-              (get_local $29)
-              (block $block$38$break
-               (br_if $block$38$break
+              (get_local $28)
+              (if
+               (i32.eqz
                 (i32.and
                  (i32.load
                   (get_local $0)
@@ -2429,7 +2414,7 @@
                (br $shape$4$continue)
               )
              )
-             (set_local $18
+             (set_local $17
               (if (result i32)
                (i32.lt_u
                 (tee_local $8
@@ -2598,7 +2583,7 @@
              (set_local $1
               (block $block$61$break (result i32)
                (block $block$91$break
-                (set_local $16
+                (set_local $18
                  (if (result i32)
                   (i32.eq
                    (i32.and
@@ -2666,7 +2651,7 @@
                         (set_local $8
                          (i32.const 1)
                         )
-                        (set_local $16
+                        (set_local $18
                          (i32.load
                           (get_local $6)
                          )
@@ -2685,7 +2670,7 @@
                      )
                      (if
                       (i32.eqz
-                       (get_local $29)
+                       (get_local $28)
                       )
                       (block
                        (set_local $12
@@ -2694,7 +2679,7 @@
                        (set_local $10
                         (get_local $6)
                        )
-                       (set_local $16
+                       (set_local $18
                         (i32.const 0)
                        )
                        (br $block$61$break
@@ -2702,7 +2687,7 @@
                        )
                       )
                      )
-                     (set_local $16
+                     (set_local $18
                       (i32.load
                        (tee_local $10
                         (i32.and
@@ -2732,7 +2717,7 @@
                    )
                    (br_if $block$91$break
                     (i32.ge_s
-                     (get_local $16)
+                     (get_local $18)
                      (i32.const 0)
                     )
                    )
@@ -2744,12 +2729,12 @@
                    )
                    (i32.sub
                     (i32.const 0)
-                    (get_local $16)
+                    (get_local $18)
                    )
                   )
                   (block (result i32)
                    (if
-                    (i32.ge_u
+                    (i32.lt_u
                      (tee_local $6
                       (i32.add
                        (i32.shr_s
@@ -2765,58 +2750,55 @@
                      (i32.const 10)
                     )
                     (block
-                     (set_local $16
+                     (set_local $12
                       (i32.const 0)
                      )
-                     (br $block$91$break)
-                    )
-                   )
-                   (set_local $12
-                    (i32.const 0)
-                   )
-                   (loop $shape$66$continue
-                    (set_local $6
-                     (i32.add
-                      (i32.mul
-                       (get_local $12)
-                       (i32.const 10)
+                     (loop $shape$65$continue
+                      (set_local $6
+                       (i32.add
+                        (i32.mul
+                         (get_local $12)
+                         (i32.const 10)
+                        )
+                        (get_local $6)
+                       )
                       )
-                      (get_local $6)
-                     )
-                    )
-                    (if
-                     (i32.eqz
-                      (i32.ge_u
-                       (tee_local $9
-                        (i32.add
-                         (i32.load8_s
-                          (tee_local $10
-                           (i32.add
-                            (get_local $10)
-                            (i32.const 1)
+                      (if
+                       (i32.lt_u
+                        (tee_local $9
+                         (i32.add
+                          (i32.load8_s
+                           (tee_local $10
+                            (i32.add
+                             (get_local $10)
+                             (i32.const 1)
+                            )
                            )
                           )
+                          (i32.const -48)
                          )
-                         (i32.const -48)
                         )
+                        (i32.const 10)
                        )
-                       (i32.const 10)
+                       (block
+                        (set_local $12
+                         (get_local $6)
+                        )
+                        (set_local $6
+                         (get_local $9)
+                        )
+                        (br $shape$65$continue)
+                       )
                       )
                      )
-                     (block
-                      (set_local $12
+                     (br_if $block$11$break
+                      (i32.lt_s
                        (get_local $6)
+                       (i32.const 0)
                       )
-                      (set_local $6
-                       (get_local $9)
-                      )
-                      (br $shape$66$continue)
                      )
                     )
-                   )
-                   (br_if $block$11$break
-                    (i32.lt_s
-                     (get_local $6)
+                    (set_local $6
                      (i32.const 0)
                     )
                    )
@@ -2883,7 +2865,7 @@
                  (set_local $6
                   (get_local $9)
                  )
-                 (loop $shape$81$continue
+                 (loop $shape$82$continue
                   (set_local $8
                    (tee_local $6
                     (i32.add
@@ -2919,7 +2901,7 @@
                   (set_local $6
                    (get_local $9)
                   )
-                  (br $shape$81$continue)
+                  (br $shape$82$continue)
                  )
                 )
                )
@@ -2995,7 +2977,7 @@
                 (get_local $1)
                )
                (if
-                (get_local $29)
+                (get_local $28)
                 (block
                  (set_local $8
                   (i32.load
@@ -3041,7 +3023,7 @@
              (set_local $9
               (i32.const 0)
              )
-             (loop $shape$96$continue
+             (loop $shape$97$continue
               (br_if $block$9$break
                (i32.gt_u
                 (tee_local $11
@@ -3062,32 +3044,30 @@
                )
               )
               (if
-               (i32.eqz
-                (i32.ge_u
-                 (i32.add
-                  (tee_local $11
-                   (i32.and
-                    (tee_local $13
-                     (i32.load8_s
+               (i32.lt_u
+                (i32.add
+                 (tee_local $11
+                  (i32.and
+                   (tee_local $13
+                    (i32.load8_s
+                     (i32.add
                       (i32.add
-                       (i32.add
-                        (i32.mul
-                         (get_local $9)
-                         (i32.const 58)
-                        )
-                        (i32.const 3611)
+                       (i32.mul
+                        (get_local $9)
+                        (i32.const 58)
                        )
-                       (get_local $11)
+                       (i32.const 3611)
                       )
+                      (get_local $11)
                      )
                     )
-                    (i32.const 255)
                    )
+                   (i32.const 255)
                   )
-                  (i32.const -1)
                  )
-                 (i32.const 8)
+                 (i32.const -1)
                 )
+                (i32.const 8)
                )
                (block
                 (set_local $8
@@ -3096,7 +3076,7 @@
                 (set_local $9
                  (get_local $11)
                 )
-                (br $shape$96$continue)
+                (br $shape$97$continue)
                )
               )
              )
@@ -3113,7 +3093,7 @@
              )
              (set_local $8
               (i32.gt_s
-               (get_local $18)
+               (get_local $17)
                (i32.const -1)
               )
              )
@@ -3136,7 +3116,7 @@
                   (i32.store
                    (i32.add
                     (i32.shl
-                     (get_local $18)
+                     (get_local $17)
                      (i32.const 2)
                     )
                     (get_local $4)
@@ -3148,7 +3128,7 @@
                     (tee_local $8
                      (i32.add
                       (i32.shl
-                       (get_local $18)
+                       (get_local $17)
                        (i32.const 3)
                       )
                       (get_local $3)
@@ -3171,7 +3151,7 @@
                 )
                 (br_if $block$6$break
                  (i32.eqz
-                  (get_local $29)
+                  (get_local $28)
                  )
                 )
                 (call $_pop_arg_336
@@ -3183,7 +3163,7 @@
                )
               )
               (br_if $block$129$break
-               (get_local $29)
+               (get_local $28)
               )
               (set_local $5
                (get_local $10)
@@ -3281,51 +3261,49 @@
                                  )
                                  (set_local $7
                                   (block $block$241$break (result i32)
-                                   (set_local $31
-                                    (tee_local $5
-                                     (if (result i32)
-                                      (i32.lt_s
-                                       (i32.load offset=4
-                                        (get_global $tempDoublePtr)
+                                   (set_local $30
+                                    (if (result i32)
+                                     (i32.lt_s
+                                      (i32.load offset=4
+                                       (get_global $tempDoublePtr)
+                                      )
+                                      (i32.const 0)
+                                     )
+                                     (block (result i32)
+                                      (set_local $27
+                                       (i32.const 1)
+                                      )
+                                      (set_local $15
+                                       (f64.neg
+                                        (get_local $15)
                                        )
-                                       (i32.const 0)
+                                      )
+                                      (i32.const 4108)
+                                     )
+                                     (if (result i32)
+                                      (i32.and
+                                       (get_local $12)
+                                       (i32.const 2048)
                                       )
                                       (block (result i32)
-                                       (set_local $28
+                                       (set_local $27
                                         (i32.const 1)
                                        )
-                                       (set_local $15
-                                        (f64.neg
-                                         (get_local $15)
-                                        )
-                                       )
-                                       (i32.const 4108)
+                                       (i32.const 4111)
                                       )
-                                      (if (result i32)
-                                       (i32.and
-                                        (get_local $12)
-                                        (i32.const 2048)
-                                       )
-                                       (block (result i32)
-                                        (set_local $28
-                                         (i32.const 1)
-                                        )
-                                        (i32.const 4111)
-                                       )
-                                       (block (result i32)
-                                        (set_local $28
-                                         (tee_local $5
-                                          (i32.and
-                                           (get_local $12)
-                                           (i32.const 1)
-                                          )
+                                      (block (result i32)
+                                       (set_local $27
+                                        (tee_local $5
+                                         (i32.and
+                                          (get_local $12)
+                                          (i32.const 1)
                                          )
                                         )
-                                        (select
-                                         (i32.const 4114)
-                                         (i32.const 4109)
-                                         (get_local $5)
-                                        )
+                                       )
+                                       (select
+                                        (i32.const 4114)
+                                        (i32.const 4109)
+                                        (get_local $5)
                                        )
                                       )
                                      )
@@ -3390,10 +3368,10 @@
                                        (set_local $9
                                         (select
                                          (i32.add
-                                          (get_local $31)
+                                          (get_local $30)
                                           (i32.const 9)
                                          )
-                                         (get_local $31)
+                                         (get_local $30)
                                          (tee_local $13
                                           (i32.and
                                            (get_local $19)
@@ -3423,14 +3401,14 @@
                                           (set_local $15
                                            (f64.const 8)
                                           )
-                                          (loop $shape$133$continue
+                                          (loop $shape$134$continue
                                            (set_local $15
                                             (f64.mul
                                              (get_local $15)
                                              (f64.const 16)
                                             )
                                            )
-                                           (br_if $shape$133$continue
+                                           (br_if $shape$134$continue
                                             (tee_local $5
                                              (i32.add
                                               (get_local $5)
@@ -3516,7 +3494,7 @@
                                        )
                                        (set_local $11
                                         (i32.or
-                                         (get_local $28)
+                                         (get_local $27)
                                          (i32.const 2)
                                         )
                                        )
@@ -3554,7 +3532,7 @@
                                          (i32.const 1)
                                         )
                                        )
-                                       (set_local $18
+                                       (set_local $17
                                         (i32.eqz
                                          (i32.and
                                           (get_local $12)
@@ -3565,7 +3543,7 @@
                                        (set_local $5
                                         (get_local $22)
                                        )
-                                       (loop $shape$144$continue
+                                       (loop $shape$145$continue
                                         (i32.store8
                                          (get_local $5)
                                          (i32.or
@@ -3606,8 +3584,8 @@
                                           )
                                           (i32.const 1)
                                          )
-                                         (block $block$266$break
-                                          (br_if $block$266$break
+                                         (if
+                                          (i32.eqz
                                            (i32.and
                                             (i32.and
                                              (f64.eq
@@ -3616,17 +3594,19 @@
                                              )
                                              (get_local $19)
                                             )
-                                            (get_local $18)
+                                            (get_local $17)
                                            )
                                           )
-                                          (i32.store8
-                                           (get_local $7)
-                                           (i32.const 46)
-                                          )
-                                          (set_local $7
-                                           (i32.add
-                                            (get_local $5)
-                                            (i32.const 2)
+                                          (block
+                                           (i32.store8
+                                            (get_local $7)
+                                            (i32.const 46)
+                                           )
+                                           (set_local $7
+                                            (i32.add
+                                             (get_local $5)
+                                             (i32.const 2)
+                                            )
                                            )
                                           )
                                          )
@@ -3634,7 +3614,7 @@
                                         (set_local $5
                                          (get_local $7)
                                         )
-                                        (br_if $shape$144$continue
+                                        (br_if $shape$145$continue
                                          (f64.ne
                                           (get_local $15)
                                           (f64.const 0)
@@ -3644,7 +3624,7 @@
                                        (call $_pad
                                         (get_local $0)
                                         (i32.const 32)
-                                        (get_local $16)
+                                        (get_local $18)
                                         (tee_local $7
                                          (i32.add
                                           (get_local $11)
@@ -3653,13 +3633,13 @@
                                             (i32.sub
                                              (i32.add
                                               (get_local $6)
-                                              (get_local $48)
+                                              (get_local $47)
                                              )
                                              (get_local $8)
                                             )
                                             (i32.add
                                              (i32.sub
-                                              (get_local $46)
+                                              (get_local $45)
                                               (get_local $8)
                                              )
                                              (get_local $5)
@@ -3672,7 +3652,7 @@
                                              (i32.lt_s
                                               (i32.add
                                                (get_local $5)
-                                               (get_local $47)
+                                               (get_local $46)
                                               )
                                               (get_local $6)
                                              )
@@ -3703,7 +3683,7 @@
                                        (call $_pad
                                         (get_local $0)
                                         (i32.const 48)
-                                        (get_local $16)
+                                        (get_local $18)
                                         (get_local $7)
                                         (i32.xor
                                          (get_local $12)
@@ -3774,7 +3754,7 @@
                                        (call $_pad
                                         (get_local $0)
                                         (i32.const 32)
-                                        (get_local $16)
+                                        (get_local $18)
                                         (get_local $7)
                                         (i32.xor
                                          (get_local $12)
@@ -3783,11 +3763,11 @@
                                        )
                                        (br $block$241$break
                                         (select
-                                         (get_local $16)
+                                         (get_local $18)
                                          (get_local $7)
                                          (i32.lt_s
                                           (get_local $7)
-                                          (get_local $16)
+                                          (get_local $18)
                                          )
                                         )
                                        )
@@ -3826,8 +3806,8 @@
                                      (set_local $7
                                       (tee_local $8
                                        (select
+                                        (get_local $48)
                                         (get_local $49)
-                                        (get_local $50)
                                         (i32.lt_s
                                          (get_local $5)
                                          (i32.const 0)
@@ -3835,7 +3815,7 @@
                                        )
                                       )
                                      )
-                                     (loop $shape$165$continue
+                                     (loop $shape$166$continue
                                       (i32.store
                                        (get_local $7)
                                        (tee_local $5
@@ -3850,7 +3830,7 @@
                                         (i32.const 4)
                                        )
                                       )
-                                      (br_if $shape$165$continue
+                                      (br_if $shape$166$continue
                                        (f64.ne
                                         (tee_local $15
                                          (f64.mul
@@ -3880,7 +3860,7 @@
                                        (set_local $5
                                         (get_local $8)
                                        )
-                                       (loop $shape$170$continue
+                                       (loop $shape$171$continue
                                         (set_local $13
                                          (select
                                           (i32.const 29)
@@ -3905,10 +3885,10 @@
                                           (set_local $11
                                            (i32.const 0)
                                           )
-                                          (loop $shape$174$continue
+                                          (loop $shape$175$continue
                                            (set_local $11
                                             (i32.add
-                                             (tee_local $18
+                                             (tee_local $17
                                               (call $_bitshift64Shl
                                                (i32.load
                                                 (get_local $9)
@@ -3925,7 +3905,7 @@
                                              (get_global $tempRet0)
                                              (i32.lt_u
                                               (get_local $11)
-                                              (get_local $18)
+                                              (get_local $17)
                                              )
                                             )
                                            )
@@ -3933,7 +3913,7 @@
                                             (get_local $9)
                                             (call $___uremdi3
                                              (get_local $11)
-                                             (tee_local $18
+                                             (tee_local $17
                                               (get_global $tempRet0)
                                              )
                                              (i32.const 1000000000)
@@ -3942,11 +3922,11 @@
                                            (set_local $11
                                             (call $___udivdi3
                                              (get_local $11)
-                                             (get_local $18)
+                                             (get_local $17)
                                              (i32.const 1000000000)
                                             )
                                            )
-                                           (br_if $shape$174$continue
+                                           (br_if $shape$175$continue
                                             (i32.ge_u
                                              (tee_local $9
                                               (i32.add
@@ -3974,7 +3954,7 @@
                                           )
                                          )
                                         )
-                                        (loop $shape$178$continue
+                                        (loop $shape$179$continue
                                          (block $block$293$break
                                           (br_if $block$293$break
                                            (i32.le_u
@@ -3995,7 +3975,7 @@
                                           (set_local $7
                                            (get_local $9)
                                           )
-                                          (br $shape$178$continue)
+                                          (br $shape$179$continue)
                                          )
                                         )
                                         (i32.store
@@ -4009,7 +3989,7 @@
                                           )
                                          )
                                         )
-                                        (br_if $shape$170$continue
+                                        (br_if $shape$171$continue
                                          (i32.gt_s
                                           (get_local $9)
                                           (i32.const 0)
@@ -4021,7 +4001,7 @@
                                        (get_local $8)
                                       )
                                      )
-                                     (set_local $18
+                                     (set_local $17
                                       (select
                                        (i32.const 6)
                                        (get_local $6)
@@ -4039,21 +4019,17 @@
                                       (block
                                        (set_local $21
                                         (i32.add
-                                         (tee_local $6
-                                          (i32.div_s
-                                           (tee_local $6
-                                            (i32.add
-                                             (get_local $18)
-                                             (i32.const 25)
-                                            )
-                                           )
-                                           (i32.const 9)
+                                         (i32.div_s
+                                          (i32.add
+                                           (get_local $17)
+                                           (i32.const 25)
                                           )
+                                          (i32.const 9)
                                          )
                                          (i32.const 1)
                                         )
                                        )
-                                       (set_local $32
+                                       (set_local $31
                                         (i32.eq
                                          (get_local $26)
                                          (i32.const 102)
@@ -4065,7 +4041,7 @@
                                        (set_local $5
                                         (get_local $7)
                                        )
-                                       (loop $shape$195$continue
+                                       (loop $shape$196$continue
                                         (set_local $13
                                          (select
                                           (i32.const 9)
@@ -4096,7 +4072,7 @@
                                             (i32.const -1)
                                            )
                                           )
-                                          (set_local $36
+                                          (set_local $35
                                            (i32.shr_u
                                             (i32.const 1000000000)
                                             (get_local $13)
@@ -4108,12 +4084,12 @@
                                           (set_local $7
                                            (get_local $6)
                                           )
-                                          (loop $shape$199$continue
+                                          (loop $shape$200$continue
                                            (i32.store
                                             (get_local $7)
                                             (i32.add
                                              (i32.shr_u
-                                              (tee_local $33
+                                              (tee_local $32
                                                (i32.load
                                                 (get_local $7)
                                                )
@@ -4127,12 +4103,12 @@
                                             (i32.mul
                                              (i32.and
                                               (get_local $11)
-                                              (get_local $33)
+                                              (get_local $32)
                                              )
-                                             (get_local $36)
+                                             (get_local $35)
                                             )
                                            )
-                                           (br_if $shape$199$continue
+                                           (br_if $shape$200$continue
                                             (i32.lt_u
                                              (tee_local $7
                                               (i32.add
@@ -4192,7 +4168,7 @@
                                             (select
                                              (get_local $8)
                                              (get_local $7)
-                                             (get_local $32)
+                                             (get_local $31)
                                             )
                                            )
                                            (i32.shl
@@ -4225,11 +4201,9 @@
                                          )
                                         )
                                         (if
-                                         (i32.eqz
-                                          (i32.ge_s
-                                           (get_local $9)
-                                           (i32.const 0)
-                                          )
+                                         (i32.lt_s
+                                          (get_local $9)
+                                          (i32.const 0)
                                          )
                                          (block
                                           (set_local $6
@@ -4238,7 +4212,7 @@
                                           (set_local $5
                                            (get_local $11)
                                           )
-                                          (br $shape$195$continue)
+                                          (br $shape$196$continue)
                                          )
                                         )
                                        )
@@ -4286,14 +4260,14 @@
                                        (set_local $6
                                         (i32.const 10)
                                        )
-                                       (loop $shape$212$continue
+                                       (loop $shape$213$continue
                                         (set_local $7
                                          (i32.add
                                           (get_local $7)
                                           (i32.const 1)
                                          )
                                         )
-                                        (br_if $shape$212$continue
+                                        (br_if $shape$213$continue
                                          (i32.ge_u
                                           (get_local $11)
                                           (tee_local $6
@@ -4316,7 +4290,7 @@
                                         (tee_local $6
                                          (i32.add
                                           (i32.sub
-                                           (get_local $18)
+                                           (get_local $17)
                                            (select
                                             (get_local $7)
                                             (i32.const 0)
@@ -4329,13 +4303,13 @@
                                           (i32.shr_s
                                            (i32.shl
                                             (i32.and
-                                             (tee_local $32
+                                             (tee_local $31
                                               (i32.ne
-                                               (get_local $18)
+                                               (get_local $17)
                                                (i32.const 0)
                                               )
                                              )
-                                             (tee_local $36
+                                             (tee_local $35
                                               (i32.eq
                                                (get_local $26)
                                                (i32.const 103)
@@ -4364,18 +4338,14 @@
                                        )
                                        (block (result i32)
                                         (set_local $13
-                                         (tee_local $11
-                                          (i32.div_s
-                                           (tee_local $11
-                                            (tee_local $6
-                                             (i32.add
-                                              (get_local $6)
-                                              (i32.const 9216)
-                                             )
-                                            )
+                                         (i32.div_s
+                                          (tee_local $6
+                                           (i32.add
+                                            (get_local $6)
+                                            (i32.const 9216)
                                            )
-                                           (i32.const 9)
                                           )
+                                          (i32.const 9)
                                          )
                                         )
                                         (if
@@ -4395,14 +4365,14 @@
                                           (set_local $11
                                            (i32.const 10)
                                           )
-                                          (loop $shape$228$continue
+                                          (loop $shape$229$continue
                                            (set_local $11
                                             (i32.mul
                                              (get_local $11)
                                              (i32.const 10)
                                             )
                                            )
-                                           (br_if $shape$228$continue
+                                           (br_if $shape$229$continue
                                             (i32.ne
                                              (tee_local $6
                                               (i32.add
@@ -4440,7 +4410,7 @@
                                         (if
                                          (i32.eqz
                                           (i32.and
-                                           (tee_local $33
+                                           (tee_local $32
                                             (i32.eq
                                              (i32.add
                                               (get_local $6)
@@ -4452,12 +4422,10 @@
                                            (i32.eqz
                                             (tee_local $13
                                              (if (result i32)
-                                              (tee_local $27
-                                               (get_local $11)
-                                              )
+                                              (get_local $11)
                                               (i32.rem_u
                                                (get_local $13)
-                                               (get_local $27)
+                                               (get_local $11)
                                               )
                                               (i32.const 0)
                                              )
@@ -4466,12 +4434,12 @@
                                           )
                                          )
                                          (block $block$378$break
-                                          (set_local $37
+                                          (set_local $36
                                            (if (result i32)
-                                            (get_local $27)
+                                            (get_local $11)
                                             (i32.div_u
                                              (get_local $26)
-                                             (get_local $27)
+                                             (get_local $11)
                                             )
                                             (i32.const 0)
                                            )
@@ -4479,13 +4447,11 @@
                                           (set_local $15
                                            (if (result f64)
                                             (i32.lt_u
-                                             (tee_local $44
-                                              (get_local $13)
-                                             )
-                                             (tee_local $13
+                                             (get_local $13)
+                                             (tee_local $11
                                               (i32.div_s
-                                               (tee_local $13
-                                                (get_local $27)
+                                               (tee_local $37
+                                                (get_local $11)
                                                )
                                                (i32.const 2)
                                               )
@@ -4497,10 +4463,10 @@
                                              (f64.const 1.5)
                                              (i32.and
                                               (i32.eq
+                                               (get_local $11)
                                                (get_local $13)
-                                               (get_local $44)
                                               )
-                                              (get_local $33)
+                                              (get_local $32)
                                              )
                                             )
                                            )
@@ -4510,30 +4476,30 @@
                                             (f64.const 9007199254740994)
                                             (f64.const 9007199254740992)
                                             (i32.and
-                                             (get_local $37)
+                                             (get_local $36)
                                              (i32.const 1)
                                             )
                                            )
                                           )
                                           (if
-                                           (get_local $28)
-                                           (block $block$367$break
-                                            (br_if $block$367$break
-                                             (i32.ne
-                                              (i32.load8_s
-                                               (get_local $31)
+                                           (get_local $27)
+                                           (if
+                                            (i32.eq
+                                             (i32.load8_s
+                                              (get_local $30)
+                                             )
+                                             (i32.const 45)
+                                            )
+                                            (block
+                                             (set_local $24
+                                              (f64.neg
+                                               (get_local $24)
                                               )
-                                              (i32.const 45)
                                              )
-                                            )
-                                            (set_local $24
-                                             (f64.neg
-                                              (get_local $24)
-                                             )
-                                            )
-                                            (set_local $15
-                                             (f64.neg
-                                              (get_local $15)
+                                             (set_local $15
+                                              (f64.neg
+                                               (get_local $15)
+                                              )
                                              )
                                             )
                                            )
@@ -4543,7 +4509,7 @@
                                            (tee_local $13
                                             (i32.sub
                                              (get_local $26)
-                                             (get_local $44)
+                                             (get_local $13)
                                             )
                                            )
                                           )
@@ -4560,8 +4526,8 @@
                                            (get_local $6)
                                            (tee_local $7
                                             (i32.add
-                                             (get_local $11)
                                              (get_local $13)
+                                             (get_local $37)
                                             )
                                            )
                                           )
@@ -4570,7 +4536,7 @@
                                             (get_local $7)
                                             (i32.const 999999999)
                                            )
-                                           (loop $shape$260$continue
+                                           (loop $shape$261$continue
                                             (i32.store
                                              (get_local $6)
                                              (i32.const 0)
@@ -4606,7 +4572,7 @@
                                               )
                                              )
                                             )
-                                            (br_if $shape$260$continue
+                                            (br_if $shape$261$continue
                                              (i32.gt_u
                                               (get_local $7)
                                               (i32.const 999999999)
@@ -4639,14 +4605,14 @@
                                           (set_local $11
                                            (i32.const 10)
                                           )
-                                          (loop $shape$267$continue
+                                          (loop $shape$268$continue
                                            (set_local $7
                                             (i32.add
                                              (get_local $7)
                                              (i32.const 1)
                                             )
                                            )
-                                           (br_if $shape$267$continue
+                                           (br_if $shape$268$continue
                                             (i32.ge_u
                                              (get_local $13)
                                              (tee_local $11
@@ -4691,7 +4657,7 @@
                                        )
                                       )
                                      )
-                                     (set_local $33
+                                     (set_local $32
                                       (i32.sub
                                        (i32.const 0)
                                        (get_local $13)
@@ -4700,7 +4666,7 @@
                                      (set_local $26
                                       (block $block$381$break (result i32)
                                        (block $block$389$break
-                                        (loop $shape$272$continue
+                                        (loop $shape$273$continue
                                          (br_if $block$389$break
                                           (i32.le_u
                                            (get_local $5)
@@ -4722,7 +4688,7 @@
                                            (set_local $5
                                             (get_local $7)
                                            )
-                                           (br $shape$272$continue)
+                                           (br $shape$273$continue)
                                           )
                                          )
                                         )
@@ -4733,388 +4699,379 @@
                                        (i32.const 0)
                                       )
                                      )
-                                     (set_local $27
-                                      (i32.add
-                                       (i32.add
-                                        (tee_local $5
-                                         (block $block$392$break (result i32)
-                                          (set_local $9
-                                           (get_local $5)
-                                          )
-                                          (set_local $37
-                                           (i32.add
-                                            (get_local $28)
-                                            (i32.const 1)
-                                           )
-                                          )
-                                          (if (result i32)
-                                           (get_local $36)
-                                           (block (result i32)
-                                            (set_local $7
-                                             (if (result i32)
-                                              (i32.and
-                                               (i32.gt_s
-                                                (tee_local $5
-                                                 (i32.add
-                                                  (i32.xor
-                                                   (get_local $32)
-                                                   (i32.const 1)
-                                                  )
-                                                  (get_local $18)
-                                                 )
-                                                )
-                                                (get_local $13)
-                                               )
-                                               (i32.gt_s
-                                                (get_local $13)
-                                                (i32.const -5)
-                                               )
-                                              )
-                                              (block (result i32)
-                                               (set_local $18
-                                                (i32.sub
-                                                 (i32.add
-                                                  (get_local $5)
-                                                  (i32.const -1)
-                                                 )
-                                                 (get_local $13)
-                                                )
-                                               )
-                                               (i32.add
-                                                (get_local $19)
-                                                (i32.const -1)
-                                               )
-                                              )
-                                              (block (result i32)
-                                               (set_local $18
-                                                (i32.add
-                                                 (get_local $5)
-                                                 (i32.const -1)
-                                                )
-                                               )
-                                               (i32.add
-                                                (get_local $19)
-                                                (i32.const -2)
-                                               )
-                                              )
-                                             )
-                                            )
-                                            (if
-                                             (tee_local $5
-                                              (i32.and
-                                               (get_local $12)
-                                               (i32.const 8)
-                                              )
-                                             )
-                                             (block
-                                              (set_local $21
-                                               (get_local $5)
-                                              )
-                                              (br $block$392$break
-                                               (get_local $18)
-                                              )
-                                             )
-                                            )
-                                            (if
-                                             (get_local $26)
-                                             (block $block$425$break
-                                              (if
-                                               (i32.eqz
-                                                (tee_local $19
-                                                 (i32.load
-                                                  (i32.add
-                                                   (get_local $9)
-                                                   (i32.const -4)
-                                                  )
-                                                 )
-                                                )
-                                               )
-                                               (block
-                                                (set_local $5
-                                                 (i32.const 9)
-                                                )
-                                                (br $block$425$break)
-                                               )
-                                              )
-                                              (if
-                                               (tee_local $5
-                                                (i32.rem_u
-                                                 (get_local $19)
-                                                 (i32.const 10)
-                                                )
-                                               )
-                                               (block
-                                                (set_local $5
-                                                 (i32.const 0)
-                                                )
-                                                (br $block$425$break)
-                                               )
-                                              )
-                                              (set_local $6
-                                               (i32.const 10)
-                                              )
-                                              (set_local $5
-                                               (i32.const 0)
-                                              )
-                                              (loop $shape$301$continue
-                                               (set_local $5
-                                                (i32.add
-                                                 (get_local $5)
-                                                 (i32.const 1)
-                                                )
-                                               )
-                                               (set_local $27
-                                                (tee_local $6
-                                                 (i32.mul
-                                                  (get_local $6)
-                                                  (i32.const 10)
-                                                 )
-                                                )
-                                               )
-                                               (br_if $shape$301$continue
-                                                (i32.eqz
-                                                 (tee_local $27
-                                                  (if (result i32)
-                                                   (get_local $6)
-                                                   (i32.rem_u
-                                                    (get_local $19)
-                                                    (get_local $27)
-                                                   )
-                                                   (i32.const 0)
-                                                  )
-                                                 )
-                                                )
-                                               )
-                                              )
-                                             )
-                                             (set_local $5
-                                              (i32.const 9)
-                                             )
-                                            )
-                                            (set_local $6
-                                             (i32.add
-                                              (i32.mul
-                                               (i32.shr_s
-                                                (i32.sub
-                                                 (get_local $9)
-                                                 (get_local $21)
-                                                )
-                                                (i32.const 2)
-                                               )
-                                               (i32.const 9)
-                                              )
-                                              (i32.const -9)
-                                             )
-                                            )
-                                            (if (result i32)
-                                             (i32.eq
-                                              (i32.or
-                                               (get_local $7)
-                                               (i32.const 32)
-                                              )
-                                              (i32.const 102)
-                                             )
-                                             (block (result i32)
-                                              (set_local $21
-                                               (i32.const 0)
-                                              )
-                                              (select
-                                               (get_local $18)
-                                               (tee_local $5
-                                                (select
-                                                 (i32.const 0)
-                                                 (tee_local $5
-                                                  (i32.sub
-                                                   (get_local $6)
-                                                   (get_local $5)
-                                                  )
-                                                 )
-                                                 (i32.lt_s
-                                                  (get_local $5)
-                                                  (i32.const 0)
-                                                 )
-                                                )
-                                               )
-                                               (i32.lt_s
-                                                (get_local $18)
-                                                (get_local $5)
-                                               )
-                                              )
-                                             )
-                                             (block (result i32)
-                                              (set_local $21
-                                               (i32.const 0)
-                                              )
-                                              (select
-                                               (get_local $18)
-                                               (tee_local $5
-                                                (select
-                                                 (i32.const 0)
-                                                 (tee_local $5
-                                                  (i32.sub
-                                                   (i32.add
-                                                    (get_local $6)
-                                                    (get_local $13)
-                                                   )
-                                                   (get_local $5)
-                                                  )
-                                                 )
-                                                 (i32.lt_s
-                                                  (get_local $5)
-                                                  (i32.const 0)
-                                                 )
-                                                )
-                                               )
-                                               (i32.lt_s
-                                                (get_local $18)
-                                                (get_local $5)
-                                               )
-                                              )
-                                             )
-                                            )
-                                           )
-                                           (block (result i32)
-                                            (set_local $21
-                                             (i32.and
-                                              (get_local $12)
-                                              (i32.const 8)
-                                             )
-                                            )
-                                            (set_local $7
-                                             (get_local $19)
-                                            )
-                                            (get_local $18)
-                                           )
-                                          )
-                                         )
-                                        )
-                                        (get_local $37)
-                                       )
-                                       (i32.ne
-                                        (tee_local $32
-                                         (i32.or
-                                          (get_local $5)
-                                          (get_local $21)
-                                         )
-                                        )
-                                        (i32.const 0)
-                                       )
-                                      )
-                                     )
                                      (call $_pad
                                       (get_local $0)
                                       (i32.const 32)
-                                      (get_local $16)
+                                      (get_local $18)
                                       (tee_local $13
                                        (i32.add
-                                        (get_local $27)
-                                        (tee_local $7
-                                         (if (result i32)
-                                          (tee_local $18
-                                           (i32.eq
-                                            (i32.or
-                                             (get_local $7)
-                                             (i32.const 32)
+                                        (i32.add
+                                         (i32.add
+                                          (tee_local $5
+                                           (block $block$392$break (result i32)
+                                            (set_local $9
+                                             (get_local $5)
                                             )
-                                            (i32.const 102)
-                                           )
-                                          )
-                                          (block (result i32)
-                                           (set_local $19
-                                            (i32.const 0)
-                                           )
-                                           (select
-                                            (get_local $13)
-                                            (i32.const 0)
-                                            (i32.gt_s
-                                             (get_local $13)
-                                             (i32.const 0)
+                                            (set_local $36
+                                             (i32.add
+                                              (get_local $27)
+                                              (i32.const 1)
+                                             )
                                             )
-                                           )
-                                          )
-                                          (block (result i32)
-                                           (if
-                                            (i32.lt_s
-                                             (i32.sub
-                                              (get_local $23)
-                                              (tee_local $6
-                                               (call $_fmt_u
-                                                (tee_local $6
-                                                 (select
-                                                  (get_local $33)
+                                            (if (result i32)
+                                             (get_local $35)
+                                             (block (result i32)
+                                              (set_local $7
+                                               (if (result i32)
+                                                (i32.and
+                                                 (i32.gt_s
+                                                  (tee_local $5
+                                                   (i32.add
+                                                    (i32.xor
+                                                     (get_local $31)
+                                                     (i32.const 1)
+                                                    )
+                                                    (get_local $17)
+                                                   )
+                                                  )
                                                   (get_local $13)
-                                                  (i32.lt_s
+                                                 )
+                                                 (i32.gt_s
+                                                  (get_local $13)
+                                                  (i32.const -5)
+                                                 )
+                                                )
+                                                (block (result i32)
+                                                 (set_local $17
+                                                  (i32.sub
+                                                   (i32.add
+                                                    (get_local $5)
+                                                    (i32.const -1)
+                                                   )
                                                    (get_local $13)
+                                                  )
+                                                 )
+                                                 (i32.add
+                                                  (get_local $19)
+                                                  (i32.const -1)
+                                                 )
+                                                )
+                                                (block (result i32)
+                                                 (set_local $17
+                                                  (i32.add
+                                                   (get_local $5)
+                                                   (i32.const -1)
+                                                  )
+                                                 )
+                                                 (i32.add
+                                                  (get_local $19)
+                                                  (i32.const -2)
+                                                 )
+                                                )
+                                               )
+                                              )
+                                              (if
+                                               (tee_local $5
+                                                (i32.and
+                                                 (get_local $12)
+                                                 (i32.const 8)
+                                                )
+                                               )
+                                               (block
+                                                (set_local $21
+                                                 (get_local $5)
+                                                )
+                                                (br $block$392$break
+                                                 (get_local $17)
+                                                )
+                                               )
+                                              )
+                                              (if
+                                               (get_local $26)
+                                               (block $block$425$break
+                                                (if
+                                                 (i32.eqz
+                                                  (tee_local $19
+                                                   (i32.load
+                                                    (i32.add
+                                                     (get_local $9)
+                                                     (i32.const -4)
+                                                    )
+                                                   )
+                                                  )
+                                                 )
+                                                 (block
+                                                  (set_local $5
+                                                   (i32.const 9)
+                                                  )
+                                                  (br $block$425$break)
+                                                 )
+                                                )
+                                                (if
+                                                 (i32.rem_u
+                                                  (get_local $19)
+                                                  (i32.const 10)
+                                                 )
+                                                 (block
+                                                  (set_local $5
                                                    (i32.const 0)
                                                   )
+                                                  (br $block$425$break)
+                                                 )
+                                                )
+                                                (set_local $6
+                                                 (i32.const 10)
+                                                )
+                                                (set_local $5
+                                                 (i32.const 0)
+                                                )
+                                                (loop $shape$302$continue
+                                                 (set_local $5
+                                                  (i32.add
+                                                   (get_local $5)
+                                                   (i32.const 1)
+                                                  )
+                                                 )
+                                                 (set_local $37
+                                                  (tee_local $6
+                                                   (i32.mul
+                                                    (get_local $6)
+                                                    (i32.const 10)
+                                                   )
+                                                  )
+                                                 )
+                                                 (br_if $shape$302$continue
+                                                  (i32.eqz
+                                                   (if (result i32)
+                                                    (get_local $6)
+                                                    (i32.rem_u
+                                                     (get_local $19)
+                                                     (get_local $37)
+                                                    )
+                                                    (i32.const 0)
+                                                   )
+                                                  )
                                                  )
                                                 )
-                                                (i32.shr_s
-                                                 (i32.shl
-                                                  (i32.lt_s
-                                                   (get_local $6)
-                                                   (i32.const 0)
+                                               )
+                                               (set_local $5
+                                                (i32.const 9)
+                                               )
+                                              )
+                                              (set_local $6
+                                               (i32.add
+                                                (i32.mul
+                                                 (i32.shr_s
+                                                  (i32.sub
+                                                   (get_local $9)
+                                                   (get_local $21)
                                                   )
-                                                  (i32.const 31)
+                                                  (i32.const 2)
+                                                 )
+                                                 (i32.const 9)
+                                                )
+                                                (i32.const -9)
+                                               )
+                                              )
+                                              (if (result i32)
+                                               (i32.eq
+                                                (i32.or
+                                                 (get_local $7)
+                                                 (i32.const 32)
+                                                )
+                                                (i32.const 102)
+                                               )
+                                               (block (result i32)
+                                                (set_local $21
+                                                 (i32.const 0)
+                                                )
+                                                (select
+                                                 (get_local $17)
+                                                 (tee_local $5
+                                                  (select
+                                                   (i32.const 0)
+                                                   (tee_local $5
+                                                    (i32.sub
+                                                     (get_local $6)
+                                                     (get_local $5)
+                                                    )
+                                                   )
+                                                   (i32.lt_s
+                                                    (get_local $5)
+                                                    (i32.const 0)
+                                                   )
+                                                  )
+                                                 )
+                                                 (i32.lt_s
+                                                  (get_local $17)
+                                                  (get_local $5)
+                                                 )
+                                                )
+                                               )
+                                               (block (result i32)
+                                                (set_local $21
+                                                 (i32.const 0)
+                                                )
+                                                (select
+                                                 (get_local $17)
+                                                 (tee_local $5
+                                                  (select
+                                                   (i32.const 0)
+                                                   (tee_local $5
+                                                    (i32.sub
+                                                     (i32.add
+                                                      (get_local $6)
+                                                      (get_local $13)
+                                                     )
+                                                     (get_local $5)
+                                                    )
+                                                   )
+                                                   (i32.lt_s
+                                                    (get_local $5)
+                                                    (i32.const 0)
+                                                   )
+                                                  )
+                                                 )
+                                                 (i32.lt_s
+                                                  (get_local $17)
+                                                  (get_local $5)
+                                                 )
+                                                )
+                                               )
+                                              )
+                                             )
+                                             (block (result i32)
+                                              (set_local $21
+                                               (i32.and
+                                                (get_local $12)
+                                                (i32.const 8)
+                                               )
+                                              )
+                                              (set_local $7
+                                               (get_local $19)
+                                              )
+                                              (get_local $17)
+                                             )
+                                            )
+                                           )
+                                          )
+                                          (get_local $36)
+                                         )
+                                         (i32.ne
+                                          (tee_local $31
+                                           (i32.or
+                                            (get_local $5)
+                                            (get_local $21)
+                                           )
+                                          )
+                                          (i32.const 0)
+                                         )
+                                        )
+                                        (if (result i32)
+                                         (tee_local $17
+                                          (i32.eq
+                                           (i32.or
+                                            (get_local $7)
+                                            (i32.const 32)
+                                           )
+                                           (i32.const 102)
+                                          )
+                                         )
+                                         (block (result i32)
+                                          (set_local $19
+                                           (i32.const 0)
+                                          )
+                                          (select
+                                           (get_local $13)
+                                           (i32.const 0)
+                                           (i32.gt_s
+                                            (get_local $13)
+                                            (i32.const 0)
+                                           )
+                                          )
+                                         )
+                                         (block (result i32)
+                                          (if
+                                           (i32.lt_s
+                                            (i32.sub
+                                             (get_local $23)
+                                             (tee_local $6
+                                              (call $_fmt_u
+                                               (tee_local $6
+                                                (select
+                                                 (get_local $32)
+                                                 (get_local $13)
+                                                 (i32.lt_s
+                                                  (get_local $13)
+                                                  (i32.const 0)
+                                                 )
+                                                )
+                                               )
+                                               (i32.shr_s
+                                                (i32.shl
+                                                 (i32.lt_s
+                                                  (get_local $6)
+                                                  (i32.const 0)
                                                  )
                                                  (i32.const 31)
                                                 )
-                                                (get_local $23)
+                                                (i32.const 31)
                                                )
-                                              )
-                                             )
-                                             (i32.const 2)
-                                            )
-                                            (loop $shape$321$continue
-                                             (i32.store8
-                                              (tee_local $6
-                                               (i32.add
-                                                (get_local $6)
-                                                (i32.const -1)
-                                               )
-                                              )
-                                              (i32.const 48)
-                                             )
-                                             (br_if $shape$321$continue
-                                              (i32.lt_s
-                                               (i32.sub
-                                                (get_local $23)
-                                                (get_local $6)
-                                               )
-                                               (i32.const 2)
+                                               (get_local $23)
                                               )
                                              )
                                             )
+                                            (i32.const 2)
                                            )
-                                           (i32.store8
-                                            (i32.add
-                                             (get_local $6)
-                                             (i32.const -1)
+                                           (loop $shape$322$continue
+                                            (i32.store8
+                                             (tee_local $6
+                                              (i32.add
+                                               (get_local $6)
+                                               (i32.const -1)
+                                              )
+                                             )
+                                             (i32.const 48)
                                             )
-                                            (i32.add
-                                             (i32.and
-                                              (i32.shr_s
-                                               (get_local $13)
-                                               (i32.const 31)
+                                            (br_if $shape$322$continue
+                                             (i32.lt_s
+                                              (i32.sub
+                                               (get_local $23)
+                                               (get_local $6)
                                               )
                                               (i32.const 2)
                                              )
-                                             (i32.const 43)
                                             )
                                            )
-                                           (i32.store8
-                                            (tee_local $19
-                                             (i32.add
-                                              (get_local $6)
-                                              (i32.const -2)
+                                          )
+                                          (i32.store8
+                                           (i32.add
+                                            (get_local $6)
+                                            (i32.const -1)
+                                           )
+                                           (i32.add
+                                            (i32.and
+                                             (i32.shr_s
+                                              (get_local $13)
+                                              (i32.const 31)
                                              )
+                                             (i32.const 2)
                                             )
-                                            (get_local $7)
+                                            (i32.const 43)
                                            )
-                                           (i32.sub
-                                            (get_local $23)
-                                            (get_local $19)
+                                          )
+                                          (i32.store8
+                                           (tee_local $19
+                                            (i32.add
+                                             (get_local $6)
+                                             (i32.const -2)
+                                            )
                                            )
+                                           (get_local $7)
+                                          )
+                                          (i32.sub
+                                           (get_local $23)
+                                           (get_local $19)
                                           )
                                          )
                                         )
@@ -5133,8 +5090,8 @@
                                       )
                                       (drop
                                        (call $___fwritex
-                                        (get_local $31)
-                                        (get_local $28)
+                                        (get_local $30)
+                                        (get_local $27)
                                         (get_local $0)
                                        )
                                       )
@@ -5142,7 +5099,7 @@
                                      (call $_pad
                                       (get_local $0)
                                       (i32.const 48)
-                                      (get_local $16)
+                                      (get_local $18)
                                       (get_local $13)
                                       (i32.xor
                                        (get_local $12)
@@ -5150,7 +5107,7 @@
                                       )
                                      )
                                      (if
-                                      (get_local $18)
+                                      (get_local $17)
                                       (block
                                        (set_local $6
                                         (tee_local $11
@@ -5164,14 +5121,14 @@
                                          )
                                         )
                                        )
-                                       (loop $shape$330$continue
+                                       (loop $shape$331$continue
                                         (set_local $7
                                          (call $_fmt_u
                                           (i32.load
                                            (get_local $6)
                                           )
                                           (i32.const 0)
-                                          (get_local $30)
+                                          (get_local $29)
                                          )
                                         )
                                         (block $block$442$break
@@ -5184,15 +5141,15 @@
                                            (br_if $block$442$break
                                             (i32.ne
                                              (get_local $7)
-                                             (get_local $30)
+                                             (get_local $29)
                                             )
                                            )
                                            (i32.store8
-                                            (get_local $34)
+                                            (get_local $33)
                                             (i32.const 48)
                                            )
                                            (set_local $7
-                                            (get_local $34)
+                                            (get_local $33)
                                            )
                                           )
                                           (block
@@ -5202,7 +5159,7 @@
                                              (get_local $22)
                                             )
                                            )
-                                           (loop $shape$336$continue
+                                           (loop $shape$337$continue
                                             (i32.store8
                                              (tee_local $7
                                               (i32.add
@@ -5212,7 +5169,7 @@
                                              )
                                              (i32.const 48)
                                             )
-                                            (br_if $shape$336$continue
+                                            (br_if $shape$337$continue
                                              (i32.gt_u
                                               (get_local $7)
                                               (get_local $22)
@@ -5243,27 +5200,25 @@
                                          )
                                         )
                                         (if
-                                         (i32.eqz
-                                          (i32.gt_u
-                                           (tee_local $7
-                                            (i32.add
-                                             (get_local $6)
-                                             (i32.const 4)
-                                            )
+                                         (i32.le_u
+                                          (tee_local $7
+                                           (i32.add
+                                            (get_local $6)
+                                            (i32.const 4)
                                            )
-                                           (get_local $8)
                                           )
+                                          (get_local $8)
                                          )
                                          (block
                                           (set_local $6
                                            (get_local $7)
                                           )
-                                          (br $shape$330$continue)
+                                          (br $shape$331$continue)
                                          )
                                         )
                                        )
                                        (if
-                                        (get_local $32)
+                                        (get_local $31)
                                         (if
                                          (i32.eqz
                                           (i32.and
@@ -5294,7 +5249,7 @@
                                          )
                                         )
                                         (block
-                                         (loop $shape$349$continue
+                                         (loop $shape$350$continue
                                           (if
                                            (i32.gt_u
                                             (tee_local $6
@@ -5303,12 +5258,12 @@
                                                (get_local $7)
                                               )
                                               (i32.const 0)
-                                              (get_local $30)
+                                              (get_local $29)
                                              )
                                             )
                                             (get_local $22)
                                            )
-                                           (loop $shape$352$continue
+                                           (loop $shape$353$continue
                                             (i32.store8
                                              (tee_local $6
                                               (i32.add
@@ -5318,7 +5273,7 @@
                                              )
                                              (i32.const 48)
                                             )
-                                            (br_if $shape$352$continue
+                                            (br_if $shape$353$continue
                                              (i32.gt_u
                                               (get_local $6)
                                               (get_local $22)
@@ -5376,7 +5331,7 @@
                                             (set_local $5
                                              (get_local $6)
                                             )
-                                            (br $shape$349$continue)
+                                            (br $shape$350$continue)
                                            )
                                           )
                                          )
@@ -5413,7 +5368,7 @@
                                          (i32.const -1)
                                         )
                                         (block
-                                         (set_local $18
+                                         (set_local $17
                                           (i32.eqz
                                            (get_local $21)
                                           )
@@ -5424,27 +5379,27 @@
                                          (set_local $7
                                           (get_local $5)
                                          )
-                                         (loop $shape$364$continue
+                                         (loop $shape$365$continue
                                           (if
                                            (i32.eq
-                                            (get_local $30)
+                                            (get_local $29)
                                             (tee_local $5
                                              (call $_fmt_u
                                               (i32.load
                                                (get_local $6)
                                               )
                                               (i32.const 0)
-                                              (get_local $30)
+                                              (get_local $29)
                                              )
                                             )
                                            )
                                            (block
                                             (i32.store8
-                                             (get_local $34)
+                                             (get_local $33)
                                              (i32.const 48)
                                             )
                                             (set_local $5
-                                             (get_local $34)
+                                             (get_local $33)
                                             )
                                            )
                                           )
@@ -5484,7 +5439,7 @@
                                                 (get_local $7)
                                                 (i32.const 1)
                                                )
-                                               (get_local $18)
+                                               (get_local $17)
                                               )
                                              )
                                              (br_if $block$481$break
@@ -5510,7 +5465,7 @@
                                                (get_local $22)
                                               )
                                              )
-                                             (loop $shape$377$continue
+                                             (loop $shape$378$continue
                                               (i32.store8
                                                (tee_local $5
                                                 (i32.add
@@ -5520,7 +5475,7 @@
                                                )
                                                (i32.const 48)
                                               )
-                                              (br_if $shape$377$continue
+                                              (br_if $shape$378$continue
                                                (i32.gt_u
                                                 (get_local $5)
                                                 (get_local $22)
@@ -5560,7 +5515,7 @@
                                             )
                                            )
                                           )
-                                          (br_if $shape$364$continue
+                                          (br_if $shape$365$continue
                                            (i32.and
                                             (i32.lt_u
                                              (tee_local $6
@@ -5621,7 +5576,7 @@
                                      (call $_pad
                                       (get_local $0)
                                       (i32.const 32)
-                                      (get_local $16)
+                                      (get_local $18)
                                       (get_local $13)
                                       (i32.xor
                                        (get_local $12)
@@ -5629,11 +5584,11 @@
                                       )
                                      )
                                      (select
-                                      (get_local $16)
+                                      (get_local $18)
                                       (get_local $13)
                                       (i32.lt_s
                                        (get_local $13)
-                                       (get_local $16)
+                                       (get_local $18)
                                       )
                                      )
                                     )
@@ -5641,13 +5596,13 @@
                                      (call $_pad
                                       (get_local $0)
                                       (i32.const 32)
-                                      (get_local $16)
+                                      (get_local $18)
                                       (tee_local $7
                                        (i32.add
                                         (tee_local $9
                                          (select
                                           (i32.const 0)
-                                          (get_local $28)
+                                          (get_local $27)
                                           (tee_local $6
                                            (f64.ne
                                             (get_local $15)
@@ -5675,7 +5630,7 @@
                                       (block
                                        (drop
                                         (call $___fwritex
-                                         (get_local $31)
+                                         (get_local $30)
                                          (get_local $9)
                                          (get_local $0)
                                         )
@@ -5728,7 +5683,7 @@
                                      (call $_pad
                                       (get_local $0)
                                       (i32.const 32)
-                                      (get_local $16)
+                                      (get_local $18)
                                       (get_local $7)
                                       (i32.xor
                                        (get_local $12)
@@ -5736,11 +5691,11 @@
                                       )
                                      )
                                      (select
-                                      (get_local $16)
+                                      (get_local $18)
                                       (get_local $7)
                                       (i32.lt_s
                                        (get_local $7)
-                                       (get_local $16)
+                                       (get_local $18)
                                       )
                                      )
                                     )
@@ -5767,7 +5722,7 @@
                                   (call $_pad
                                    (get_local $0)
                                    (i32.const 32)
-                                   (get_local $16)
+                                   (get_local $18)
                                    (i32.const 0)
                                    (get_local $12)
                                   )
@@ -5790,7 +5745,7 @@
                                 )
                                )
                                (i32.store
-                                (get_local $45)
+                                (get_local $44)
                                 (i32.const 0)
                                )
                                (i32.store
@@ -5966,7 +5921,7 @@
                            (set_local $8
                             (get_local $25)
                            )
-                           (loop $shape$417$continue
+                           (loop $shape$418$continue
                             (i32.store8
                              (tee_local $8
                               (i32.add
@@ -5982,7 +5937,7 @@
                               (i32.const 48)
                              )
                             )
-                            (br_if $shape$417$continue
+                            (br_if $shape$418$continue
                              (i32.or
                               (tee_local $5
                                (call $_bitshift64Lshr
@@ -6093,14 +6048,14 @@
                                 (get_local $14)
                                )
                               )
-                              (get_local $17)
+                              (get_local $16)
                              )
                              (i32.store offset=4
                               (get_local $5)
                               (i32.shr_s
                                (i32.shl
                                 (i32.lt_s
-                                 (get_local $17)
+                                 (get_local $16)
                                  (i32.const 0)
                                 )
                                 (i32.const 31)
@@ -6120,7 +6075,7 @@
                              (i32.load
                               (get_local $14)
                              )
-                             (get_local $17)
+                             (get_local $16)
                             )
                             (set_local $5
                              (get_local $10)
@@ -6134,7 +6089,7 @@
                             (i32.load
                              (get_local $14)
                             )
-                            (get_local $17)
+                            (get_local $16)
                            )
                            (set_local $5
                             (get_local $10)
@@ -6148,7 +6103,7 @@
                            (i32.load
                             (get_local $14)
                            )
-                           (get_local $17)
+                           (get_local $16)
                           )
                           (set_local $5
                            (get_local $10)
@@ -6164,14 +6119,14 @@
                             (get_local $14)
                            )
                           )
-                          (get_local $17)
+                          (get_local $16)
                          )
                          (i32.store offset=4
                           (get_local $5)
                           (i32.shr_s
                            (i32.shl
                             (i32.lt_s
-                             (get_local $17)
+                             (get_local $16)
                              (i32.const 0)
                             )
                             (i32.const 31)
@@ -6191,7 +6146,7 @@
                          (i32.load
                           (get_local $14)
                          )
-                         (get_local $17)
+                         (get_local $16)
                         )
                         (set_local $5
                          (get_local $10)
@@ -6205,7 +6160,7 @@
                         (i32.load
                          (get_local $14)
                         )
-                        (get_local $17)
+                        (get_local $16)
                        )
                        (set_local $5
                         (get_local $10)
@@ -6273,7 +6228,7 @@
                     (set_local $8
                      (get_local $25)
                     )
-                    (loop $shape$463$continue
+                    (loop $shape$464$continue
                      (i32.store8
                       (tee_local $8
                        (i32.add
@@ -6294,7 +6249,7 @@
                        (get_local $9)
                       )
                      )
-                     (br_if $shape$463$continue
+                     (br_if $shape$464$continue
                       (i32.or
                        (tee_local $7
                         (call $_bitshift64Lshr
@@ -6419,7 +6374,7 @@
                    (get_local $14)
                   )
                  )
-                 (loop $shape$440$continue
+                 (loop $shape$441$continue
                   (block $block$509$break
                    (br_if $block$509$break
                     (i32.eqz
@@ -6435,7 +6390,7 @@
                      (i32.lt_s
                       (tee_local $7
                        (call $_wctomb
-                        (get_local $35)
+                        (get_local $34)
                         (get_local $9)
                        )
                       )
@@ -6456,7 +6411,7 @@
                      (i32.const 4)
                     )
                    )
-                   (br_if $shape$440$continue
+                   (br_if $shape$441$continue
                     (i32.gt_u
                      (get_local $8)
                      (tee_local $5
@@ -6478,7 +6433,7 @@
                  (call $_pad
                   (get_local $0)
                   (i32.const 32)
-                  (get_local $16)
+                  (get_local $18)
                   (get_local $5)
                   (get_local $12)
                  )
@@ -6493,7 +6448,7 @@
                      (get_local $14)
                     )
                    )
-                   (loop $shape$448$continue
+                   (loop $shape$449$continue
                     (set_local $9
                      (get_local $5)
                     )
@@ -6512,7 +6467,7 @@
                        (i32.add
                         (tee_local $8
                          (call $_wctomb
-                          (get_local $35)
+                          (get_local $34)
                           (get_local $8)
                          )
                         )
@@ -6533,7 +6488,7 @@
                      )
                      (drop
                       (call $___fwritex
-                       (get_local $35)
+                       (get_local $34)
                        (get_local $8)
                        (get_local $0)
                       )
@@ -6545,7 +6500,7 @@
                       (i32.const 4)
                      )
                     )
-                    (br_if $shape$448$continue
+                    (br_if $shape$449$continue
                      (i32.lt_u
                       (get_local $6)
                       (get_local $5)
@@ -6564,7 +6519,7 @@
                 (call $_pad
                  (get_local $0)
                  (i32.const 32)
-                 (get_local $16)
+                 (get_local $18)
                  (tee_local $7
                   (get_local $9)
                  )
@@ -6578,10 +6533,10 @@
                 )
                 (set_local $10
                  (select
-                  (get_local $16)
+                  (get_local $18)
                   (get_local $7)
                   (i32.gt_s
-                   (get_local $16)
+                   (get_local $18)
                    (get_local $7)
                   )
                  )
@@ -6686,9 +6641,9 @@
                   (get_local $8)
                  )
                 )
-                (get_local $16)
+                (get_local $18)
                 (i32.lt_s
-                 (get_local $16)
+                 (get_local $18)
                  (get_local $6)
                 )
                )
@@ -6766,42 +6721,42 @@
              (br $shape$4$continue)
             )
            )
-           (set_local $17
+           (set_local $16
             (i32.const -1)
            )
            (br $block$4$break)
           )
-          (set_local $17
+          (set_local $16
            (i32.const 0)
           )
           (br $block$4$break)
          )
-         (set_local $17
+         (set_local $16
           (i32.const -1)
          )
          (br $block$4$break)
         )
-        (set_local $17
+        (set_local $16
          (i32.const -1)
         )
         (br $block$4$break)
        )
-       (set_local $17
+       (set_local $16
         (i32.const -1)
        )
        (br $block$4$break)
       )
-      (set_local $17
+      (set_local $16
        (i32.const -1)
       )
       (br $block$4$break)
      )
-     (set_local $17
+     (set_local $16
       (i32.const -1)
      )
      (br $block$4$break)
     )
-    (set_local $17
+    (set_local $16
      (i32.const -1)
     )
     (br $block$4$break)
@@ -6814,7 +6769,7 @@
      (get_local $1)
     )
     (block
-     (set_local $17
+     (set_local $16
       (i32.const 0)
      )
      (br $block$4$break)
@@ -6824,7 +6779,7 @@
     (i32.const 1)
    )
    (block $block$558$break
-    (loop $shape$495$continue
+    (loop $shape$496$continue
      (br_if $block$558$break
       (i32.eqz
        (tee_local $1
@@ -6851,7 +6806,7 @@
       (get_local $1)
       (get_local $2)
      )
-     (br_if $shape$495$continue
+     (br_if $shape$496$continue
       (i32.lt_s
        (tee_local $0
         (i32.add
@@ -6863,7 +6818,7 @@
       )
      )
     )
-    (set_local $17
+    (set_local $16
      (i32.const 1)
     )
     (br $block$4$break)
@@ -6874,14 +6829,14 @@
      (i32.const 10)
     )
     (block
-     (set_local $17
+     (set_local $16
       (i32.const 1)
      )
      (br $block$4$break)
     )
    )
    (block $block$576$break
-    (loop $shape$503$continue
+    (loop $shape$504$continue
      (br_if $block$576$break
       (i32.load
        (i32.add
@@ -6893,7 +6848,7 @@
        )
       )
      )
-     (br_if $shape$503$continue
+     (br_if $shape$504$continue
       (i32.lt_s
        (tee_local $0
         (i32.add
@@ -6905,19 +6860,19 @@
       )
      )
     )
-    (set_local $17
+    (set_local $16
      (i32.const 1)
     )
     (br $block$4$break)
    )
-   (set_local $17
+   (set_local $16
     (i32.const -1)
    )
   )
   (set_global $STACKTOP
    (get_local $14)
   )
-  (get_local $17)
+  (get_local $16)
  )
  (func $_pop_arg_336 (; 46 ;) (; has Stack IR ;) (type $10) (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
@@ -7399,20 +7354,16 @@
    (get_local $0)
    (loop $shape$8$continue
     (i32.store8
-     (tee_local $1
-      (tee_local $2
-       (i32.add
-        (get_local $2)
-        (i32.const -1)
-       )
+     (tee_local $2
+      (i32.add
+       (get_local $2)
+       (i32.const -1)
       )
      )
      (i32.or
-      (tee_local $3
-       (i32.rem_u
-        (get_local $0)
-        (i32.const 10)
-       )
+      (i32.rem_u
+       (get_local $0)
+       (i32.const 10)
       )
       (i32.const 48)
      )
@@ -7424,11 +7375,9 @@
      )
     )
     (if
-     (i32.eqz
-      (i32.lt_u
-       (get_local $0)
-       (i32.const 10)
-      )
+     (i32.ge_u
+      (get_local $0)
+      (i32.const 10)
      )
      (block
       (set_local $0
@@ -9142,9 +9091,7 @@
               (block
                (drop
                 (br_if $block$3$break
-                 (tee_local $4
-                  (get_local $2)
-                 )
+                 (get_local $2)
                  (i32.eqz
                   (tee_local $1
                    (i32.and
@@ -11187,491 +11134,489 @@
             (i32.store
              (tee_local $0
               (i32.add
-               (tee_local $0
-                (if (result i32)
-                 (i32.eq
-                  (i32.and
-                   (tee_local $0
-                    (i32.load offset=4
-                     (get_local $7)
-                    )
+               (if (result i32)
+                (i32.eq
+                 (i32.and
+                  (tee_local $0
+                   (i32.load offset=4
+                    (get_local $7)
                    )
+                  )
+                  (i32.const 3)
+                 )
+                 (i32.const 1)
+                )
+                (block (result i32)
+                 (set_local $10
+                  (i32.and
+                   (get_local $0)
+                   (i32.const -8)
+                  )
+                 )
+                 (set_local $1
+                  (i32.shr_u
+                   (get_local $0)
                    (i32.const 3)
                   )
-                  (i32.const 1)
                  )
-                 (block (result i32)
-                  (set_local $10
-                   (i32.and
+                 (block $block$520$break
+                  (if
+                   (i32.lt_u
                     (get_local $0)
-                    (i32.const -8)
+                    (i32.const 256)
                    )
-                  )
-                  (set_local $1
-                   (i32.shr_u
-                    (get_local $0)
-                    (i32.const 3)
-                   )
-                  )
-                  (block $block$520$break
-                   (if
-                    (i32.lt_u
-                     (get_local $0)
-                     (i32.const 256)
+                   (block
+                    (set_local $2
+                     (i32.load offset=12
+                      (get_local $7)
+                     )
                     )
-                    (block
-                     (set_local $2
-                      (i32.load offset=12
-                       (get_local $7)
+                    (if
+                     (i32.ne
+                      (tee_local $0
+                       (i32.add
+                        (i32.shl
+                         (get_local $1)
+                         (i32.const 3)
+                        )
+                        (i32.const 216)
+                       )
+                      )
+                      (tee_local $3
+                       (i32.load offset=8
+                        (get_local $7)
+                       )
                       )
                      )
-                     (if
-                      (i32.ne
-                       (tee_local $0
-                        (i32.add
-                         (i32.shl
-                          (get_local $1)
-                          (i32.const 3)
-                         )
-                         (i32.const 216)
-                        )
-                       )
-                       (tee_local $3
-                        (i32.load offset=8
-                         (get_local $7)
-                        )
-                       )
-                      )
-                      (block $block$523$break
-                       (if
-                        (i32.lt_u
-                         (get_local $3)
-                         (get_local $4)
-                        )
-                        (call $_abort)
-                       )
-                       (br_if $block$523$break
-                        (i32.eq
-                         (i32.load offset=12
-                          (get_local $3)
-                         )
-                         (get_local $7)
-                        )
+                     (block $block$523$break
+                      (if
+                       (i32.lt_u
+                        (get_local $3)
+                        (get_local $4)
                        )
                        (call $_abort)
                       )
-                     )
-                     (if
-                      (i32.eq
-                       (get_local $2)
-                       (get_local $3)
-                      )
-                      (block
-                       (i32.store
-                        (i32.const 176)
-                        (i32.and
-                         (i32.load
-                          (i32.const 176)
-                         )
-                         (i32.xor
-                          (i32.shl
-                           (i32.const 1)
-                           (get_local $1)
-                          )
-                          (i32.const -1)
-                         )
-                        )
-                       )
-                       (br $block$520$break)
-                      )
-                     )
-                     (if
-                      (i32.eq
-                       (get_local $0)
-                       (get_local $2)
-                      )
-                      (set_local $15
-                       (i32.add
-                        (get_local $2)
-                        (i32.const 8)
-                       )
-                      )
-                      (block
-                       (if
-                        (i32.lt_u
-                         (get_local $2)
-                         (get_local $4)
-                        )
-                        (call $_abort)
-                       )
-                       (if
-                        (i32.eq
-                         (i32.load
-                          (tee_local $0
-                           (i32.add
-                            (get_local $2)
-                            (i32.const 8)
-                           )
-                          )
-                         )
-                         (get_local $7)
-                        )
-                        (set_local $15
-                         (get_local $0)
-                        )
-                        (call $_abort)
-                       )
-                      )
-                     )
-                     (i32.store offset=12
-                      (get_local $3)
-                      (get_local $2)
-                     )
-                     (i32.store
-                      (get_local $15)
-                      (get_local $3)
-                     )
-                    )
-                    (block
-                     (set_local $5
-                      (i32.load offset=24
-                       (get_local $7)
-                      )
-                     )
-                     (if
-                      (i32.eq
-                       (get_local $7)
-                       (tee_local $0
+                      (br_if $block$523$break
+                       (i32.eq
                         (i32.load offset=12
-                         (get_local $7)
+                         (get_local $3)
                         )
-                       )
-                      )
-                      (block $block$551$break
-                       (if
-                        (i32.eqz
-                         (tee_local $1
-                          (i32.load
-                           (tee_local $0
-                            (i32.add
-                             (tee_local $3
-                              (i32.add
-                               (get_local $7)
-                               (i32.const 16)
-                              )
-                             )
-                             (i32.const 4)
-                            )
-                           )
-                          )
-                         )
-                        )
-                        (block
-                         (br_if $block$551$break
-                          (i32.eqz
-                           (tee_local $1
-                            (i32.load
-                             (get_local $3)
-                            )
-                           )
-                          )
-                         )
-                         (set_local $0
-                          (get_local $3)
-                         )
-                        )
-                       )
-                       (loop $shape$418$continue
-                        (if
-                         (tee_local $3
-                          (i32.load
-                           (tee_local $2
-                            (i32.add
-                             (get_local $1)
-                             (i32.const 20)
-                            )
-                           )
-                          )
-                         )
-                         (block
-                          (set_local $1
-                           (get_local $3)
-                          )
-                          (set_local $0
-                           (get_local $2)
-                          )
-                          (br $shape$418$continue)
-                         )
-                        )
-                        (if
-                         (tee_local $3
-                          (i32.load
-                           (tee_local $2
-                            (i32.add
-                             (get_local $1)
-                             (i32.const 16)
-                            )
-                           )
-                          )
-                         )
-                         (block
-                          (set_local $1
-                           (get_local $3)
-                          )
-                          (set_local $0
-                           (get_local $2)
-                          )
-                          (br $shape$418$continue)
-                         )
-                        )
-                       )
-                       (if
-                        (i32.lt_u
-                         (get_local $0)
-                         (get_local $4)
-                        )
-                        (call $_abort)
-                        (block
-                         (i32.store
-                          (get_local $0)
-                          (i32.const 0)
-                         )
-                         (set_local $9
-                          (get_local $1)
-                         )
-                        )
-                       )
-                      )
-                      (block
-                       (if
-                        (i32.lt_u
-                         (tee_local $2
-                          (i32.load offset=8
-                           (get_local $7)
-                          )
-                         )
-                         (get_local $4)
-                        )
-                        (call $_abort)
-                       )
-                       (if
-                        (i32.ne
-                         (i32.load
-                          (tee_local $3
-                           (i32.add
-                            (get_local $2)
-                            (i32.const 12)
-                           )
-                          )
-                         )
-                         (get_local $7)
-                        )
-                        (call $_abort)
-                       )
-                       (if
-                        (i32.eq
-                         (i32.load
-                          (tee_local $1
-                           (i32.add
-                            (get_local $0)
-                            (i32.const 8)
-                           )
-                          )
-                         )
-                         (get_local $7)
-                        )
-                        (block
-                         (i32.store
-                          (get_local $3)
-                          (get_local $0)
-                         )
-                         (i32.store
-                          (get_local $1)
-                          (get_local $2)
-                         )
-                         (set_local $9
-                          (get_local $0)
-                         )
-                        )
-                        (call $_abort)
-                       )
-                      )
-                     )
-                     (br_if $block$520$break
-                      (i32.eqz
-                       (get_local $5)
-                      )
-                     )
-                     (if
-                      (i32.eq
-                       (i32.load
-                        (tee_local $0
-                         (i32.add
-                          (i32.shl
-                           (tee_local $1
-                            (i32.load offset=28
-                             (get_local $7)
-                            )
-                           )
-                           (i32.const 2)
-                          )
-                          (i32.const 480)
-                         )
-                        )
-                       )
-                       (get_local $7)
-                      )
-                      (block $block$587$break
-                       (i32.store
-                        (get_local $0)
-                        (get_local $9)
-                       )
-                       (br_if $block$587$break
-                        (get_local $9)
-                       )
-                       (i32.store
-                        (i32.const 180)
-                        (i32.and
-                         (i32.load
-                          (i32.const 180)
-                         )
-                         (i32.xor
-                          (i32.shl
-                           (i32.const 1)
-                           (get_local $1)
-                          )
-                          (i32.const -1)
-                         )
-                        )
-                       )
-                       (br $block$520$break)
-                      )
-                      (block
-                       (if
-                        (i32.lt_u
-                         (get_local $5)
-                         (i32.load
-                          (i32.const 192)
-                         )
-                        )
-                        (call $_abort)
-                       )
-                       (if
-                        (i32.eq
-                         (i32.load
-                          (tee_local $0
-                           (i32.add
-                            (get_local $5)
-                            (i32.const 16)
-                           )
-                          )
-                         )
-                         (get_local $7)
-                        )
-                        (i32.store
-                         (get_local $0)
-                         (get_local $9)
-                        )
-                        (i32.store offset=20
-                         (get_local $5)
-                         (get_local $9)
-                        )
-                       )
-                       (br_if $block$520$break
-                        (i32.eqz
-                         (get_local $9)
-                        )
-                       )
-                      )
-                     )
-                     (if
-                      (i32.lt_u
-                       (get_local $9)
-                       (tee_local $1
-                        (i32.load
-                         (i32.const 192)
-                        )
+                        (get_local $7)
                        )
                       )
                       (call $_abort)
                      )
-                     (i32.store offset=24
-                      (get_local $9)
-                      (get_local $5)
+                    )
+                    (if
+                     (i32.eq
+                      (get_local $2)
+                      (get_local $3)
                      )
-                     (if
-                      (tee_local $3
-                       (i32.load
-                        (tee_local $0
-                         (i32.add
-                          (get_local $7)
-                          (i32.const 16)
+                     (block
+                      (i32.store
+                       (i32.const 176)
+                       (i32.and
+                        (i32.load
+                         (i32.const 176)
+                        )
+                        (i32.xor
+                         (i32.shl
+                          (i32.const 1)
+                          (get_local $1)
                          )
+                         (i32.const -1)
+                        )
+                       )
+                      )
+                      (br $block$520$break)
+                     )
+                    )
+                    (if
+                     (i32.eq
+                      (get_local $0)
+                      (get_local $2)
+                     )
+                     (set_local $15
+                      (i32.add
+                       (get_local $2)
+                       (i32.const 8)
+                      )
+                     )
+                     (block
+                      (if
+                       (i32.lt_u
+                        (get_local $2)
+                        (get_local $4)
+                       )
+                       (call $_abort)
+                      )
+                      (if
+                       (i32.eq
+                        (i32.load
+                         (tee_local $0
+                          (i32.add
+                           (get_local $2)
+                           (i32.const 8)
+                          )
+                         )
+                        )
+                        (get_local $7)
+                       )
+                       (set_local $15
+                        (get_local $0)
+                       )
+                       (call $_abort)
+                      )
+                     )
+                    )
+                    (i32.store offset=12
+                     (get_local $3)
+                     (get_local $2)
+                    )
+                    (i32.store
+                     (get_local $15)
+                     (get_local $3)
+                    )
+                   )
+                   (block
+                    (set_local $5
+                     (i32.load offset=24
+                      (get_local $7)
+                     )
+                    )
+                    (if
+                     (i32.eq
+                      (get_local $7)
+                      (tee_local $0
+                       (i32.load offset=12
+                        (get_local $7)
+                       )
+                      )
+                     )
+                     (block $block$551$break
+                      (if
+                       (i32.eqz
+                        (tee_local $1
+                         (i32.load
+                          (tee_local $0
+                           (i32.add
+                            (tee_local $3
+                             (i32.add
+                              (get_local $7)
+                              (i32.const 16)
+                             )
+                            )
+                            (i32.const 4)
+                           )
+                          )
+                         )
+                        )
+                       )
+                       (block
+                        (br_if $block$551$break
+                         (i32.eqz
+                          (tee_local $1
+                           (i32.load
+                            (get_local $3)
+                           )
+                          )
+                         )
+                        )
+                        (set_local $0
+                         (get_local $3)
+                        )
+                       )
+                      )
+                      (loop $shape$418$continue
+                       (if
+                        (tee_local $3
+                         (i32.load
+                          (tee_local $2
+                           (i32.add
+                            (get_local $1)
+                            (i32.const 20)
+                           )
+                          )
+                         )
+                        )
+                        (block
+                         (set_local $1
+                          (get_local $3)
+                         )
+                         (set_local $0
+                          (get_local $2)
+                         )
+                         (br $shape$418$continue)
+                        )
+                       )
+                       (if
+                        (tee_local $3
+                         (i32.load
+                          (tee_local $2
+                           (i32.add
+                            (get_local $1)
+                            (i32.const 16)
+                           )
+                          )
+                         )
+                        )
+                        (block
+                         (set_local $1
+                          (get_local $3)
+                         )
+                         (set_local $0
+                          (get_local $2)
+                         )
+                         (br $shape$418$continue)
                         )
                        )
                       )
                       (if
                        (i32.lt_u
-                        (get_local $3)
-                        (get_local $1)
+                        (get_local $0)
+                        (get_local $4)
                        )
                        (call $_abort)
                        (block
-                        (i32.store offset=16
-                         (get_local $9)
-                         (get_local $3)
+                        (i32.store
+                         (get_local $0)
+                         (i32.const 0)
                         )
-                        (i32.store offset=24
-                         (get_local $3)
-                         (get_local $9)
+                        (set_local $9
+                         (get_local $1)
                         )
                        )
                       )
                      )
-                     (br_if $block$520$break
-                      (i32.eqz
-                       (tee_local $0
-                        (i32.load offset=4
+                     (block
+                      (if
+                       (i32.lt_u
+                        (tee_local $2
+                         (i32.load offset=8
+                          (get_local $7)
+                         )
+                        )
+                        (get_local $4)
+                       )
+                       (call $_abort)
+                      )
+                      (if
+                       (i32.ne
+                        (i32.load
+                         (tee_local $3
+                          (i32.add
+                           (get_local $2)
+                           (i32.const 12)
+                          )
+                         )
+                        )
+                        (get_local $7)
+                       )
+                       (call $_abort)
+                      )
+                      (if
+                       (i32.eq
+                        (i32.load
+                         (tee_local $1
+                          (i32.add
+                           (get_local $0)
+                           (i32.const 8)
+                          )
+                         )
+                        )
+                        (get_local $7)
+                       )
+                       (block
+                        (i32.store
+                         (get_local $3)
                          (get_local $0)
                         )
+                        (i32.store
+                         (get_local $1)
+                         (get_local $2)
+                        )
+                        (set_local $9
+                         (get_local $0)
+                        )
+                       )
+                       (call $_abort)
+                      )
+                     )
+                    )
+                    (br_if $block$520$break
+                     (i32.eqz
+                      (get_local $5)
+                     )
+                    )
+                    (if
+                     (i32.eq
+                      (i32.load
+                       (tee_local $0
+                        (i32.add
+                         (i32.shl
+                          (tee_local $1
+                           (i32.load offset=28
+                            (get_local $7)
+                           )
+                          )
+                          (i32.const 2)
+                         )
+                         (i32.const 480)
+                        )
+                       )
+                      )
+                      (get_local $7)
+                     )
+                     (block $block$587$break
+                      (i32.store
+                       (get_local $0)
+                       (get_local $9)
+                      )
+                      (br_if $block$587$break
+                       (get_local $9)
+                      )
+                      (i32.store
+                       (i32.const 180)
+                       (i32.and
+                        (i32.load
+                         (i32.const 180)
+                        )
+                        (i32.xor
+                         (i32.shl
+                          (i32.const 1)
+                          (get_local $1)
+                         )
+                         (i32.const -1)
+                        )
+                       )
+                      )
+                      (br $block$520$break)
+                     )
+                     (block
+                      (if
+                       (i32.lt_u
+                        (get_local $5)
+                        (i32.load
+                         (i32.const 192)
+                        )
+                       )
+                       (call $_abort)
+                      )
+                      (if
+                       (i32.eq
+                        (i32.load
+                         (tee_local $0
+                          (i32.add
+                           (get_local $5)
+                           (i32.const 16)
+                          )
+                         )
+                        )
+                        (get_local $7)
+                       )
+                       (i32.store
+                        (get_local $0)
+                        (get_local $9)
+                       )
+                       (i32.store offset=20
+                        (get_local $5)
+                        (get_local $9)
+                       )
+                      )
+                      (br_if $block$520$break
+                       (i32.eqz
+                        (get_local $9)
+                       )
+                      )
+                     )
+                    )
+                    (if
+                     (i32.lt_u
+                      (get_local $9)
+                      (tee_local $1
+                       (i32.load
+                        (i32.const 192)
+                       )
+                      )
+                     )
+                     (call $_abort)
+                    )
+                    (i32.store offset=24
+                     (get_local $9)
+                     (get_local $5)
+                    )
+                    (if
+                     (tee_local $3
+                      (i32.load
+                       (tee_local $0
+                        (i32.add
+                         (get_local $7)
+                         (i32.const 16)
+                        )
                        )
                       )
                      )
                      (if
                       (i32.lt_u
-                       (get_local $0)
-                       (i32.load
-                        (i32.const 192)
-                       )
+                       (get_local $3)
+                       (get_local $1)
                       )
                       (call $_abort)
                       (block
-                       (i32.store offset=20
+                       (i32.store offset=16
                         (get_local $9)
-                        (get_local $0)
+                        (get_local $3)
                        )
                        (i32.store offset=24
-                        (get_local $0)
+                        (get_local $3)
                         (get_local $9)
                        )
                       )
                      )
                     )
+                    (br_if $block$520$break
+                     (i32.eqz
+                      (tee_local $0
+                       (i32.load offset=4
+                        (get_local $0)
+                       )
+                      )
+                     )
+                    )
+                    (if
+                     (i32.lt_u
+                      (get_local $0)
+                      (i32.load
+                       (i32.const 192)
+                      )
+                     )
+                     (call $_abort)
+                     (block
+                      (i32.store offset=20
+                       (get_local $9)
+                       (get_local $0)
+                      )
+                      (i32.store offset=24
+                       (get_local $0)
+                       (get_local $9)
+                      )
+                     )
+                    )
                    )
                   )
-                  (set_local $6
-                   (i32.add
-                    (get_local $6)
-                    (get_local $10)
-                   )
-                  )
+                 )
+                 (set_local $6
                   (i32.add
-                   (get_local $7)
+                   (get_local $6)
                    (get_local $10)
                   )
                  )
-                 (get_local $7)
+                 (i32.add
+                  (get_local $7)
+                  (get_local $10)
+                 )
                 )
+                (get_local $7)
                )
                (i32.const 4)
               )
@@ -11807,98 +11752,94 @@
                    (i32.const 8)
                   )
                  )
-                 (block $block$637$break (result i32)
-                  (drop
-                   (br_if $block$637$break
-                    (tee_local $2
-                     (i32.const 31)
-                    )
-                    (i32.gt_u
-                     (get_local $6)
-                     (i32.const 16777215)
-                    )
-                   )
+                 (if (result i32)
+                  (i32.gt_u
+                   (get_local $6)
+                   (i32.const 16777215)
                   )
-                  (set_local $3
-                   (i32.or
-                    (tee_local $0
-                     (i32.and
-                      (i32.shr_u
-                       (i32.add
-                        (tee_local $1
-                         (i32.shl
-                          (get_local $0)
-                          (tee_local $3
-                           (i32.and
-                            (i32.shr_u
-                             (i32.add
-                              (get_local $0)
-                              (i32.const 1048320)
-                             )
-                             (i32.const 16)
-                            )
-                            (i32.const 8)
-                           )
-                          )
-                         )
-                        )
-                        (i32.const 520192)
-                       )
-                       (i32.const 16)
-                      )
-                      (i32.const 4)
-                     )
-                    )
-                    (get_local $3)
-                   )
-                  )
-                  (i32.or
-                   (i32.and
-                    (i32.shr_u
-                     (get_local $6)
-                     (i32.add
-                      (tee_local $0
-                       (i32.add
-                        (i32.sub
-                         (i32.const 14)
-                         (i32.or
-                          (get_local $3)
-                          (tee_local $0
-                           (i32.and
-                            (i32.shr_u
-                             (i32.add
-                              (tee_local $1
-                               (i32.shl
-                                (get_local $1)
-                                (get_local $0)
-                               )
+                  (i32.const 31)
+                  (block (result i32)
+                   (set_local $3
+                    (i32.or
+                     (tee_local $0
+                      (i32.and
+                       (i32.shr_u
+                        (i32.add
+                         (tee_local $1
+                          (i32.shl
+                           (get_local $0)
+                           (tee_local $3
+                            (i32.and
+                             (i32.shr_u
+                              (i32.add
+                               (get_local $0)
+                               (i32.const 1048320)
                               )
-                              (i32.const 245760)
+                              (i32.const 16)
                              )
-                             (i32.const 16)
+                             (i32.const 8)
                             )
-                            (i32.const 2)
                            )
                           )
                          )
+                         (i32.const 520192)
                         )
-                        (i32.shr_u
-                         (i32.shl
-                          (get_local $1)
-                          (get_local $0)
+                        (i32.const 16)
+                       )
+                       (i32.const 4)
+                      )
+                     )
+                     (get_local $3)
+                    )
+                   )
+                   (i32.or
+                    (i32.and
+                     (i32.shr_u
+                      (get_local $6)
+                      (i32.add
+                       (tee_local $0
+                        (i32.add
+                         (i32.sub
+                          (i32.const 14)
+                          (i32.or
+                           (get_local $3)
+                           (tee_local $0
+                            (i32.and
+                             (i32.shr_u
+                              (i32.add
+                               (tee_local $1
+                                (i32.shl
+                                 (get_local $1)
+                                 (get_local $0)
+                                )
+                               )
+                               (i32.const 245760)
+                              )
+                              (i32.const 16)
+                             )
+                             (i32.const 2)
+                            )
+                           )
+                          )
                          )
-                         (i32.const 15)
+                         (i32.shr_u
+                          (i32.shl
+                           (get_local $1)
+                           (get_local $0)
+                          )
+                          (i32.const 15)
+                         )
                         )
                        )
+                       (i32.const 7)
                       )
-                      (i32.const 7)
                      )
+                     (i32.const 1)
                     )
-                    (i32.const 1)
-                   )
-                   (i32.shl
-                    (get_local $0)
-                    (i32.const 1)
+                    (i32.shl
+                     (get_local $0)
+                     (i32.const 1)
+                    )
                    )
                   )
                  )
@@ -13535,13 +13476,6 @@
          )
         )
        )
-       (set_local $2
-        (get_local $1)
-       )
-       (set_local $3
-        (get_local $0)
-       )
-       (br $block$10$break)
       )
       (block
        (if
@@ -13577,15 +13511,15 @@
        (br_if $block$119$break
         (get_local $6)
        )
-       (set_local $2
-        (get_local $1)
-       )
-       (set_local $3
-        (get_local $0)
-       )
-       (br $block$10$break)
       )
      )
+     (set_local $2
+      (get_local $1)
+     )
+     (set_local $3
+      (get_local $0)
+     )
+     (br $block$10$break)
     )
     (if
      (i32.lt_u
@@ -13761,12 +13695,10 @@
        )
       )
       (if
-       (i32.eqz
-        (i32.ne
-         (i32.load
-          (i32.const 196)
-         )
-         (get_local $2)
+       (i32.eq
+        (get_local $2)
+        (i32.load
+         (i32.const 196)
         )
        )
        (block
@@ -14932,11 +14864,9 @@
   )
   (loop $shape$12$continue
    (if
-    (i32.eqz
-     (i32.ge_s
-      (get_local $0)
-      (get_local $4)
-     )
+    (i32.lt_s
+     (get_local $0)
+     (get_local $4)
     )
     (block
      (i32.store8
@@ -15176,11 +15106,9 @@
   )
   (loop $shape$14$continue
    (if
-    (i32.eqz
-     (i32.le_s
-      (get_local $2)
-      (i32.const 0)
-     )
+    (i32.gt_s
+     (get_local $2)
+     (i32.const 0)
     )
     (block
      (i32.store8