(module
 (type $i32_=>_none (func (param i32)))
 (type $i32_i32_=>_none (func (param i32 i32)))
 (type $none_=>_none (func))
 (type $none_=>_i32 (func (result i32)))
 (import "env" "import" (func $import))
 (import "env" "import2" (func $import2 (param i32)))
 (memory $0 1 2)
 (table $0 2 2 funcref)
 (elem (i32.const 0) $liveness2 $liveness2)
 (global $__asyncify_state (mut i32) (i32.const 0))
 (global $__asyncify_data (mut i32) (i32.const 0))
 (export "asyncify_start_unwind" (func $asyncify_start_unwind))
 (export "asyncify_stop_unwind" (func $asyncify_stop_unwind))
 (export "asyncify_start_rewind" (func $asyncify_start_rewind))
 (export "asyncify_stop_rewind" (func $asyncify_stop_rewind))
 (export "asyncify_get_state" (func $asyncify_get_state))
 (func $liveness1 (param $live0 i32) (param $dead0 i32)
  (local $live1 i32)
  (local $dead1 i32)
  (local $4 i32)
  (local $5 i32)
  (local $6 i32)
  (local $7 i32)
  (local $8 i32)
  (local $9 i32)
  (local $10 i32)
  (local $11 i32)
  (if
   (i32.eq
    (global.get $__asyncify_state)
    (i32.const 2)
   )
   (block
    (i32.store
     (global.get $__asyncify_data)
     (i32.add
      (i32.load
       (global.get $__asyncify_data)
      )
      (i32.const -8)
     )
    )
    (local.set $10
     (i32.load
      (global.get $__asyncify_data)
     )
    )
    (local.set $live0
     (i32.load
      (local.get $10)
     )
    )
    (local.set $live1
     (i32.load offset=4
      (local.get $10)
     )
    )
   )
  )
  (local.set $8
   (block $__asyncify_unwind (result i32)
    (block
     (block
      (if
       (i32.eq
        (global.get $__asyncify_state)
        (i32.const 2)
       )
       (block
        (i32.store
         (global.get $__asyncify_data)
         (i32.add
          (i32.load
           (global.get $__asyncify_data)
          )
          (i32.const -4)
         )
        )
        (local.set $9
         (i32.load
          (i32.load
           (global.get $__asyncify_data)
          )
         )
        )
       )
      )
      (block
       (if
        (i32.eq
         (global.get $__asyncify_state)
         (i32.const 0)
        )
        (block
         (local.set $4
          (local.get $dead0)
         )
         (drop
          (local.get $4)
         )
         (local.set $5
          (local.get $dead1)
         )
         (drop
          (local.get $5)
         )
        )
       )
       (nop)
       (nop)
       (nop)
       (if
        (if (result i32)
         (i32.eq
          (global.get $__asyncify_state)
          (i32.const 0)
         )
         (i32.const 1)
         (i32.eq
          (local.get $9)
          (i32.const 0)
         )
        )
        (block
         (call $import)
         (if
          (i32.eq
           (global.get $__asyncify_state)
           (i32.const 1)
          )
          (br $__asyncify_unwind
           (i32.const 0)
          )
         )
        )
       )
       (if
        (i32.eq
         (global.get $__asyncify_state)
         (i32.const 0)
        )
        (block
         (local.set $6
          (local.get $live0)
         )
         (drop
          (local.get $6)
         )
         (local.set $7
          (local.get $live1)
         )
         (drop
          (local.get $7)
         )
        )
       )
       (nop)
       (nop)
       (nop)
      )
     )
     (return)
    )
   )
  )
  (block
   (i32.store
    (i32.load
     (global.get $__asyncify_data)
    )
    (local.get $8)
   )
   (i32.store
    (global.get $__asyncify_data)
    (i32.add
     (i32.load
      (global.get $__asyncify_data)
     )
     (i32.const 4)
    )
   )
  )
  (block
   (local.set $11
    (i32.load
     (global.get $__asyncify_data)
    )
   )
   (i32.store
    (local.get $11)
    (local.get $live0)
   )
   (i32.store offset=4
    (local.get $11)
    (local.get $live1)
   )
   (i32.store
    (global.get $__asyncify_data)
    (i32.add
     (i32.load
      (global.get $__asyncify_data)
     )
     (i32.const 8)
    )
   )
  )
 )
 (func $liveness2 (param $live0 i32) (param $dead0 i32)
  (local $live1 i32)
  (local $dead1 i32)
  (local $4 i32)
  (local $5 i32)
  (local $6 i32)
  (local $7 i32)
  (local $8 i32)
  (local $9 i32)
  (local $10 i32)
  (local $11 i32)
  (if
   (i32.eq
    (global.get $__asyncify_state)
    (i32.const 2)
   )
   (block
    (i32.store
     (global.get $__asyncify_data)
     (i32.add
      (i32.load
       (global.get $__asyncify_data)
      )
      (i32.const -8)
     )
    )
    (local.set $10
     (i32.load
      (global.get $__asyncify_data)
     )
    )
    (local.set $live0
     (i32.load
      (local.get $10)
     )
    )
    (local.set $live1
     (i32.load offset=4
      (local.get $10)
     )
    )
   )
  )
  (local.set $8
   (block $__asyncify_unwind (result i32)
    (block
     (block
      (if
       (i32.eq
        (global.get $__asyncify_state)
        (i32.const 2)
       )
       (block
        (i32.store
         (global.get $__asyncify_data)
         (i32.add
          (i32.load
           (global.get $__asyncify_data)
          )
          (i32.const -4)
         )
        )
        (local.set $9
         (i32.load
          (i32.load
           (global.get $__asyncify_data)
          )
         )
        )
       )
      )
      (block
       (if
        (i32.eq
         (global.get $__asyncify_state)
         (i32.const 0)
        )
        (block
         (local.set $4
          (local.get $dead0)
         )
         (drop
          (local.get $4)
         )
         (local.set $5
          (local.get $dead1)
         )
         (drop
          (local.get $5)
         )
        )
       )
       (nop)
       (nop)
       (nop)
       (if
        (if (result i32)
         (i32.eq
          (global.get $__asyncify_state)
          (i32.const 0)
         )
         (i32.const 1)
         (i32.eq
          (local.get $9)
          (i32.const 0)
         )
        )
        (block
         (call $import)
         (if
          (i32.eq
           (global.get $__asyncify_state)
           (i32.const 1)
          )
          (br $__asyncify_unwind
           (i32.const 0)
          )
         )
        )
       )
       (if
        (i32.eq
         (global.get $__asyncify_state)
         (i32.const 0)
        )
        (block
         (local.set $6
          (local.get $live0)
         )
         (drop
          (local.get $6)
         )
         (local.set $7
          (local.get $live1)
         )
         (drop
          (local.get $7)
         )
        )
       )
       (nop)
       (nop)
       (nop)
      )
     )
     (return)
    )
   )
  )
  (block
   (i32.store
    (i32.load
     (global.get $__asyncify_data)
    )
    (local.get $8)
   )
   (i32.store
    (global.get $__asyncify_data)
    (i32.add
     (i32.load
      (global.get $__asyncify_data)
     )
     (i32.const 4)
    )
   )
  )
  (block
   (local.set $11
    (i32.load
     (global.get $__asyncify_data)
    )
   )
   (i32.store
    (local.get $11)
    (local.get $live0)
   )
   (i32.store offset=4
    (local.get $11)
    (local.get $live1)
   )
   (i32.store
    (global.get $__asyncify_data)
    (i32.add
     (i32.load
      (global.get $__asyncify_data)
     )
     (i32.const 8)
    )
   )
  )
 )
 (func $liveness3 (param $live0 i32) (param $dead0 i32)
  (local $live1 i32)
  (local $dead1 i32)
  (local $4 i32)
  (local $5 i32)
  (local $6 i32)
  (local $7 i32)
  (local $8 i32)
  (local $9 i32)
  (if
   (i32.eq
    (global.get $__asyncify_state)
    (i32.const 2)
   )
   (block
    (i32.store
     (global.get $__asyncify_data)
     (i32.add
      (i32.load
       (global.get $__asyncify_data)
      )
      (i32.const -8)
     )
    )
    (local.set $8
     (i32.load
      (global.get $__asyncify_data)
     )
    )
    (local.set $live0
     (i32.load
      (local.get $8)
     )
    )
    (local.set $live1
     (i32.load offset=4
      (local.get $8)
     )
    )
   )
  )
  (local.set $6
   (block $__asyncify_unwind (result i32)
    (block
     (block
      (if
       (i32.eq
        (global.get $__asyncify_state)
        (i32.const 2)
       )
       (block
        (i32.store
         (global.get $__asyncify_data)
         (i32.add
          (i32.load
           (global.get $__asyncify_data)
          )
          (i32.const -4)
         )
        )
        (local.set $7
         (i32.load
          (i32.load
           (global.get $__asyncify_data)
          )
         )
        )
       )
      )
      (block
       (if
        (if (result i32)
         (i32.eq
          (global.get $__asyncify_state)
          (i32.const 0)
         )
         (i32.const 1)
         (i32.eq
          (local.get $7)
          (i32.const 0)
         )
        )
        (block
         (call $import)
         (if
          (i32.eq
           (global.get $__asyncify_state)
           (i32.const 1)
          )
          (br $__asyncify_unwind
           (i32.const 0)
          )
         )
        )
       )
       (if
        (i32.eq
         (global.get $__asyncify_state)
         (i32.const 0)
        )
        (block
         (local.set $4
          (local.get $live0)
         )
         (drop
          (local.get $4)
         )
        )
       )
       (nop)
       (if
        (if (result i32)
         (i32.eq
          (global.get $__asyncify_state)
          (i32.const 0)
         )
         (i32.const 1)
         (i32.eq
          (local.get $7)
          (i32.const 1)
         )
        )
        (block
         (call $import)
         (if
          (i32.eq
           (global.get $__asyncify_state)
           (i32.const 1)
          )
          (br $__asyncify_unwind
           (i32.const 1)
          )
         )
        )
       )
       (if
        (i32.eq
         (global.get $__asyncify_state)
         (i32.const 0)
        )
        (block
         (local.set $5
          (local.get $live1)
         )
         (drop
          (local.get $5)
         )
        )
       )
       (nop)
      )
     )
     (return)
    )
   )
  )
  (block
   (i32.store
    (i32.load
     (global.get $__asyncify_data)
    )
    (local.get $6)
   )
   (i32.store
    (global.get $__asyncify_data)
    (i32.add
     (i32.load
      (global.get $__asyncify_data)
     )
     (i32.const 4)
    )
   )
  )
  (block
   (local.set $9
    (i32.load
     (global.get $__asyncify_data)
    )
   )
   (i32.store
    (local.get $9)
    (local.get $live0)
   )
   (i32.store offset=4
    (local.get $9)
    (local.get $live1)
   )
   (i32.store
    (global.get $__asyncify_data)
    (i32.add
     (i32.load
      (global.get $__asyncify_data)
     )
     (i32.const 8)
    )
   )
  )
 )
 (func $liveness4 (param $live0 i32) (param $dead0 i32)
  (local $2 i32)
  (local $3 i32)
  (local $4 i32)
  (local $5 i32)
  (local $6 i32)
  (if
   (i32.eq
    (global.get $__asyncify_state)
    (i32.const 2)
   )
   (block
    (i32.store
     (global.get $__asyncify_data)
     (i32.add
      (i32.load
       (global.get $__asyncify_data)
      )
      (i32.const -4)
     )
    )
    (local.set $5
     (i32.load
      (global.get $__asyncify_data)
     )
    )
    (local.set $live0
     (i32.load
      (local.get $5)
     )
    )
   )
  )
  (local.set $3
   (block $__asyncify_unwind (result i32)
    (block
     (block
      (if
       (i32.eq
        (global.get $__asyncify_state)
        (i32.const 2)
       )
       (block
        (i32.store
         (global.get $__asyncify_data)
         (i32.add
          (i32.load
           (global.get $__asyncify_data)
          )
          (i32.const -4)
         )
        )
        (local.set $4
         (i32.load
          (i32.load
           (global.get $__asyncify_data)
          )
         )
        )
       )
      )
      (block
       (if
        (i32.or
         (i32.const 0)
         (i32.eq
          (global.get $__asyncify_state)
          (i32.const 2)
         )
        )
        (if
         (if (result i32)
          (i32.eq
           (global.get $__asyncify_state)
           (i32.const 0)
          )
          (i32.const 1)
          (i32.eq
           (local.get $4)
           (i32.const 0)
          )
         )
         (block
          (call $import)
          (if
           (i32.eq
            (global.get $__asyncify_state)
            (i32.const 1)
           )
           (br $__asyncify_unwind
            (i32.const 0)
           )
          )
         )
        )
       )
       (if
        (i32.eq
         (global.get $__asyncify_state)
         (i32.const 0)
        )
        (block
         (local.set $2
          (local.get $live0)
         )
         (drop
          (local.get $2)
         )
        )
       )
       (nop)
      )
     )
     (return)
    )
   )
  )
  (block
   (i32.store
    (i32.load
     (global.get $__asyncify_data)
    )
    (local.get $3)
   )
   (i32.store
    (global.get $__asyncify_data)
    (i32.add
     (i32.load
      (global.get $__asyncify_data)
     )
     (i32.const 4)
    )
   )
  )
  (block
   (local.set $6
    (i32.load
     (global.get $__asyncify_data)
    )
   )
   (i32.store
    (local.get $6)
    (local.get $live0)
   )
   (i32.store
    (global.get $__asyncify_data)
    (i32.add
     (i32.load
      (global.get $__asyncify_data)
     )
     (i32.const 4)
    )
   )
  )
 )
 (func $liveness5 (param $dead0 i32)
  (local $1 i32)
  (local $2 i32)
  (local $3 i32)
  (local $4 i32)
  (if
   (i32.eq
    (global.get $__asyncify_state)
    (i32.const 2)
   )
   (nop)
  )
  (local.set $3
   (block $__asyncify_unwind (result i32)
    (block
     (block
      (if
       (i32.eq
        (global.get $__asyncify_state)
        (i32.const 2)
       )
       (block
        (i32.store
         (global.get $__asyncify_data)
         (i32.add
          (i32.load
           (global.get $__asyncify_data)
          )
          (i32.const -4)
         )
        )
        (local.set $4
         (i32.load
          (i32.load
           (global.get $__asyncify_data)
          )
         )
        )
       )
      )
      (block
       (if
        (i32.eq
         (global.get $__asyncify_state)
         (i32.const 0)
        )
        (block
         (local.set $1
          (local.get $dead0)
         )
         (drop
          (local.get $1)
         )
        )
       )
       (nop)
       (if
        (i32.or
         (i32.const 0)
         (i32.eq
          (global.get $__asyncify_state)
          (i32.const 2)
         )
        )
        (if
         (if (result i32)
          (i32.eq
           (global.get $__asyncify_state)
           (i32.const 0)
          )
          (i32.const 1)
          (i32.eq
           (local.get $4)
           (i32.const 0)
          )
         )
         (block
          (call $import)
          (if
           (i32.eq
            (global.get $__asyncify_state)
            (i32.const 1)
           )
           (br $__asyncify_unwind
            (i32.const 0)
           )
          )
         )
        )
       )
       (if
        (i32.eq
         (global.get $__asyncify_state)
         (i32.const 0)
        )
        (block
         (local.set $dead0
          (i32.const 1)
         )
         (local.set $2
          (local.get $dead0)
         )
         (drop
          (local.get $2)
         )
        )
       )
       (nop)
       (nop)
      )
     )
     (return)
    )
   )
  )
  (block
   (i32.store
    (i32.load
     (global.get $__asyncify_data)
    )
    (local.get $3)
   )
   (i32.store
    (global.get $__asyncify_data)
    (i32.add
     (i32.load
      (global.get $__asyncify_data)
     )
     (i32.const 4)
    )
   )
  )
  (nop)
 )
 (func $liveness-call-kills (param $live i32)
  (local $1 i32)
  (local $2 i32)
  (local $3 i32)
  (local $4 i32)
  (local $5 i32)
  (if
   (i32.eq
    (global.get $__asyncify_state)
    (i32.const 2)
   )
   (block
    (i32.store
     (global.get $__asyncify_data)
     (i32.add
      (i32.load
       (global.get $__asyncify_data)
      )
      (i32.const -4)
     )
    )
    (local.set $4
     (i32.load
      (global.get $__asyncify_data)
     )
    )
    (local.set $1
     (i32.load
      (local.get $4)
     )
    )
   )
  )
  (local.set $2
   (block $__asyncify_unwind (result i32)
    (block
     (block
      (if
       (i32.eq
        (global.get $__asyncify_state)
        (i32.const 2)
       )
       (block
        (i32.store
         (global.get $__asyncify_data)
         (i32.add
          (i32.load
           (global.get $__asyncify_data)
          )
          (i32.const -4)
         )
        )
        (local.set $3
         (i32.load
          (i32.load
           (global.get $__asyncify_data)
          )
         )
        )
       )
      )
      (block
       (if
        (i32.eq
         (global.get $__asyncify_state)
         (i32.const 0)
        )
        (local.set $1
         (local.get $live)
        )
       )
       (if
        (if (result i32)
         (i32.eq
          (global.get $__asyncify_state)
          (i32.const 0)
         )
         (i32.const 1)
         (i32.eq
          (local.get $3)
          (i32.const 0)
         )
        )
        (block
         (call $import2
          (local.get $1)
         )
         (if
          (i32.eq
           (global.get $__asyncify_state)
           (i32.const 1)
          )
          (br $__asyncify_unwind
           (i32.const 0)
          )
         )
        )
       )
      )
     )
     (return)
    )
   )
  )
  (block
   (i32.store
    (i32.load
     (global.get $__asyncify_data)
    )
    (local.get $2)
   )
   (i32.store
    (global.get $__asyncify_data)
    (i32.add
     (i32.load
      (global.get $__asyncify_data)
     )
     (i32.const 4)
    )
   )
  )
  (block
   (local.set $5
    (i32.load
     (global.get $__asyncify_data)
    )
   )
   (i32.store
    (local.get $5)
    (local.get $1)
   )
   (i32.store
    (global.get $__asyncify_data)
    (i32.add
     (i32.load
      (global.get $__asyncify_data)
     )
     (i32.const 4)
    )
   )
  )
 )
 (func $liveness-indirect-kills (param $live0 i32) (param $live1 i32)
  (local $2 i32)
  (local $3 i32)
  (local $4 i32)
  (local $5 i32)
  (local $6 i32)
  (local $7 i32)
  (if
   (i32.eq
    (global.get $__asyncify_state)
    (i32.const 2)
   )
   (block
    (i32.store
     (global.get $__asyncify_data)
     (i32.add
      (i32.load
       (global.get $__asyncify_data)
      )
      (i32.const -8)
     )
    )
    (local.set $6
     (i32.load
      (global.get $__asyncify_data)
     )
    )
    (local.set $2
     (i32.load
      (local.get $6)
     )
    )
    (local.set $3
     (i32.load offset=4
      (local.get $6)
     )
    )
   )
  )
  (local.set $4
   (block $__asyncify_unwind (result i32)
    (block
     (block
      (if
       (i32.eq
        (global.get $__asyncify_state)
        (i32.const 2)
       )
       (block
        (i32.store
         (global.get $__asyncify_data)
         (i32.add
          (i32.load
           (global.get $__asyncify_data)
          )
          (i32.const -4)
         )
        )
        (local.set $5
         (i32.load
          (i32.load
           (global.get $__asyncify_data)
          )
         )
        )
       )
      )
      (block
       (if
        (i32.eq
         (global.get $__asyncify_state)
         (i32.const 0)
        )
        (block
         (local.set $2
          (local.get $live0)
         )
         (local.set $3
          (local.get $live1)
         )
        )
       )
       (nop)
       (if
        (if (result i32)
         (i32.eq
          (global.get $__asyncify_state)
          (i32.const 0)
         )
         (i32.const 1)
         (i32.eq
          (local.get $5)
          (i32.const 0)
         )
        )
        (block
         (call_indirect (type $i32_=>_none)
          (local.get $2)
          (local.get $3)
         )
         (if
          (i32.eq
           (global.get $__asyncify_state)
           (i32.const 1)
          )
          (br $__asyncify_unwind
           (i32.const 0)
          )
         )
        )
       )
      )
     )
     (return)
    )
   )
  )
  (block
   (i32.store
    (i32.load
     (global.get $__asyncify_data)
    )
    (local.get $4)
   )
   (i32.store
    (global.get $__asyncify_data)
    (i32.add
     (i32.load
      (global.get $__asyncify_data)
     )
     (i32.const 4)
    )
   )
  )
  (block
   (local.set $7
    (i32.load
     (global.get $__asyncify_data)
    )
   )
   (i32.store
    (local.get $7)
    (local.get $2)
   )
   (i32.store offset=4
    (local.get $7)
    (local.get $3)
   )
   (i32.store
    (global.get $__asyncify_data)
    (i32.add
     (i32.load
      (global.get $__asyncify_data)
     )
     (i32.const 8)
    )
   )
  )
 )
 (func $asyncify_start_unwind (param $0 i32)
  (global.set $__asyncify_state
   (i32.const 1)
  )
  (global.set $__asyncify_data
   (local.get $0)
  )
  (if
   (i32.gt_u
    (i32.load
     (global.get $__asyncify_data)
    )
    (i32.load offset=4
     (global.get $__asyncify_data)
    )
   )
   (unreachable)
  )
 )
 (func $asyncify_stop_unwind
  (global.set $__asyncify_state
   (i32.const 0)
  )
  (if
   (i32.gt_u
    (i32.load
     (global.get $__asyncify_data)
    )
    (i32.load offset=4
     (global.get $__asyncify_data)
    )
   )
   (unreachable)
  )
 )
 (func $asyncify_start_rewind (param $0 i32)
  (global.set $__asyncify_state
   (i32.const 2)
  )
  (global.set $__asyncify_data
   (local.get $0)
  )
  (if
   (i32.gt_u
    (i32.load
     (global.get $__asyncify_data)
    )
    (i32.load offset=4
     (global.get $__asyncify_data)
    )
   )
   (unreachable)
  )
 )
 (func $asyncify_stop_rewind
  (global.set $__asyncify_state
   (i32.const 0)
  )
  (if
   (i32.gt_u
    (i32.load
     (global.get $__asyncify_data)
    )
    (i32.load offset=4
     (global.get $__asyncify_data)
    )
   )
   (unreachable)
  )
 )
 (func $asyncify_get_state (result i32)
  (global.get $__asyncify_state)
 )
)
