public class org.jruby.util.ShellLauncher
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: org.jruby.util.ShellLauncher
  super_class: java.lang.Object
{
  private static final boolean DEBUG;
    descriptor: Z
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 0

  private static final java.lang.String PATH_ENV;
    descriptor: Ljava/lang/String;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: "PATH"

  private static final java.lang.String[] DEFAULT_PATH;
    descriptor: [Ljava/lang/String;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private static final java.lang.String[] WINDOWS_EXE_SUFFIXES;
    descriptor: [Ljava/lang/String;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private static final java.lang.String[] WINDOWS_INTERNAL_CMDS;
    descriptor: [Ljava/lang/String;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private static final java.util.regex.Pattern SHELL_METACHARACTER_PATTERN;
    descriptor: Ljava/util/regex/Pattern;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private static final java.util.regex.Pattern WIN_ENVVAR_PATTERN;
    descriptor: Ljava/util/regex/Pattern;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private static final java.lang.Class UNIXProcess;
    descriptor: Ljava/lang/Class;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private static final java.lang.reflect.Field UNIXProcess_pid;
    descriptor: Ljava/lang/reflect/Field;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private static final java.lang.Class ProcessImpl;
    descriptor: Ljava/lang/Class;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private static final java.lang.reflect.Field ProcessImpl_handle;
    descriptor: Ljava/lang/reflect/Field;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private static final org.jruby.util.ShellLauncher$PidGetter PID_GETTER;
    descriptor: Lorg/jruby/util/ShellLauncher$PidGetter;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=4, locals=5, args_size=0
         0: .line 88
            iconst_4
            anewarray java.lang.String
            dup
            iconst_0
            ldc "/usr/local/bin"
            aastore
            dup
            iconst_1
            ldc "/usr/ucb"
            aastore
            dup
            iconst_2
            ldc "/usr/bin"
            aastore
            dup
            iconst_3
            ldc "/bin"
            aastore
         1: .line 87
            putstatic org.jruby.util.ShellLauncher.DEFAULT_PATH:[Ljava/lang/String;
         2: .line 91
            iconst_4
            anewarray java.lang.String
            dup
            iconst_0
            ldc ".exe"
            aastore
            dup
            iconst_1
            ldc ".com"
            aastore
            dup
            iconst_2
            ldc ".bat"
            aastore
            dup
            iconst_3
            ldc ".cmd"
            aastore
         3: .line 90
            putstatic org.jruby.util.ShellLauncher.WINDOWS_EXE_SUFFIXES:[Ljava/lang/String;
         4: .line 93
            bipush 49
            anewarray java.lang.String
            dup
            iconst_0
         5: .line 94
            ldc "assoc"
            aastore
            dup
            iconst_1
            ldc "break"
            aastore
            dup
            iconst_2
            ldc "call"
            aastore
            dup
            iconst_3
            ldc "cd"
            aastore
            dup
            iconst_4
            ldc "chcp"
            aastore
            dup
            iconst_5
         6: .line 95
            ldc "chdir"
            aastore
            dup
            bipush 6
            ldc "cls"
            aastore
            dup
            bipush 7
            ldc "color"
            aastore
            dup
            bipush 8
            ldc "copy"
            aastore
            dup
            bipush 9
            ldc "ctty"
            aastore
            dup
            bipush 10
            ldc "date"
            aastore
            dup
            bipush 11
            ldc "del"
            aastore
            dup
            bipush 12
            ldc "dir"
            aastore
            dup
            bipush 13
            ldc "echo"
            aastore
            dup
            bipush 14
            ldc "endlocal"
            aastore
            dup
            bipush 15
         7: .line 96
            ldc "erase"
            aastore
            dup
            bipush 16
            ldc "exit"
            aastore
            dup
            bipush 17
            ldc "for"
            aastore
            dup
            bipush 18
            ldc "ftype"
            aastore
            dup
            bipush 19
            ldc "goto"
            aastore
            dup
            bipush 20
            ldc "if"
            aastore
            dup
            bipush 21
            ldc "lfnfor"
            aastore
            dup
            bipush 22
            ldc "lh"
            aastore
            dup
            bipush 23
            ldc "lock"
            aastore
            dup
            bipush 24
            ldc "md"
            aastore
            dup
            bipush 25
            ldc "mkdir"
            aastore
            dup
            bipush 26
         8: .line 97
            ldc "move"
            aastore
            dup
            bipush 27
            ldc "path"
            aastore
            dup
            bipush 28
            ldc "pause"
            aastore
            dup
            bipush 29
            ldc "popd"
            aastore
            dup
            bipush 30
            ldc "prompt"
            aastore
            dup
            bipush 31
            ldc "pushd"
            aastore
            dup
            bipush 32
            ldc "rd"
            aastore
            dup
            bipush 33
            ldc "rem"
            aastore
            dup
            bipush 34
            ldc "ren"
            aastore
            dup
            bipush 35
            ldc "rename"
            aastore
            dup
            bipush 36
         9: .line 98
            ldc "rmdir"
            aastore
            dup
            bipush 37
            ldc "set"
            aastore
            dup
            bipush 38
            ldc "setlocal"
            aastore
            dup
            bipush 39
            ldc "shift"
            aastore
            dup
            bipush 40
            ldc "start"
            aastore
            dup
            bipush 41
            ldc "time"
            aastore
            dup
            bipush 42
            ldc "title"
            aastore
            dup
            bipush 43
            ldc "truename"
            aastore
            dup
            bipush 44
            ldc "type"
            aastore
            dup
            bipush 45
        10: .line 99
            ldc "unlock"
            aastore
            dup
            bipush 46
            ldc "ver"
            aastore
            dup
            bipush 47
            ldc "verify"
            aastore
            dup
            bipush 48
            ldc "vol"
            aastore
        11: .line 93
            putstatic org.jruby.util.ShellLauncher.WINDOWS_INTERNAL_CMDS:[Ljava/lang/String;
        12: .line 103
            ldc "[*?{}\\[\\]<>()~&|$;'`\\\\\"\\n]"
            invokestatic java.util.regex.Pattern.compile:(Ljava/lang/String;)Ljava/util/regex/Pattern;
        13: .line 102
            putstatic org.jruby.util.ShellLauncher.SHELL_METACHARACTER_PATTERN:Ljava/util/regex/Pattern;
        14: .line 105
            ldc "%\\w+%"
            invokestatic java.util.regex.Pattern.compile:(Ljava/lang/String;)Ljava/util/regex/Pattern;
            putstatic org.jruby.util.ShellLauncher.WIN_ENVVAR_PATTERN:Ljava/util/regex/Pattern;
        15: .line 663
            aconst_null
            astore 1 /* up */
        start local 1 // java.lang.Class up
        16: .line 664
            aconst_null
            astore 2 /* pid */
        start local 2 // java.lang.reflect.Field pid
        17: .line 666
            ldc "java.lang.UNIXProcess"
            invokestatic java.lang.Class.forName:(Ljava/lang/String;)Ljava/lang/Class;
            astore 1 /* up */
        18: .line 667
            aload 1 /* up */
            ldc "pid"
            invokevirtual java.lang.Class.getDeclaredField:(Ljava/lang/String;)Ljava/lang/reflect/Field;
            astore 2 /* pid */
        19: .line 668
            aload 2 /* pid */
            iconst_1
            invokevirtual java.lang.reflect.Field.setAccessible:(Z)V
        20: .line 669
            goto 22
      StackMap locals: top java.lang.Class java.lang.reflect.Field
      StackMap stack: java.lang.Exception
        21: pop
        22: .line 672
      StackMap locals:
      StackMap stack:
            aload 1 /* up */
            putstatic org.jruby.util.ShellLauncher.UNIXProcess:Ljava/lang/Class;
        23: .line 673
            aload 2 /* pid */
            putstatic org.jruby.util.ShellLauncher.UNIXProcess_pid:Ljava/lang/reflect/Field;
        24: .line 675
            aconst_null
            astore 3 /* pi */
        start local 3 // java.lang.Class pi
        25: .line 676
            aconst_null
            astore 4 /* handle */
        start local 4 // java.lang.reflect.Field handle
        26: .line 678
            ldc "java.lang.ProcessImpl"
            invokestatic java.lang.Class.forName:(Ljava/lang/String;)Ljava/lang/Class;
            astore 3 /* pi */
        27: .line 679
            aload 3 /* pi */
            ldc "handle"
            invokevirtual java.lang.Class.getDeclaredField:(Ljava/lang/String;)Ljava/lang/reflect/Field;
            astore 4 /* handle */
        28: .line 680
            aload 4 /* handle */
            iconst_1
            invokevirtual java.lang.reflect.Field.setAccessible:(Z)V
        29: .line 681
            goto 31
      StackMap locals: top java.lang.Class java.lang.reflect.Field java.lang.Class java.lang.reflect.Field
      StackMap stack: java.lang.Exception
        30: pop
        31: .line 684
      StackMap locals:
      StackMap stack:
            aload 3 /* pi */
            putstatic org.jruby.util.ShellLauncher.ProcessImpl:Ljava/lang/Class;
        32: .line 685
            aload 4 /* handle */
            putstatic org.jruby.util.ShellLauncher.ProcessImpl_handle:Ljava/lang/reflect/Field;
        33: .line 687
            getstatic org.jruby.util.ShellLauncher.UNIXProcess_pid:Ljava/lang/reflect/Field;
            ifnull 39
        34: .line 688
            getstatic org.jruby.util.ShellLauncher.ProcessImpl_handle:Ljava/lang/reflect/Field;
            ifnull 37
        35: .line 690
            new org.jruby.util.ShellLauncher$1
            dup
            invokespecial org.jruby.util.ShellLauncher$1.<init>:()V
            astore 0 /* pidGetter */
        start local 0 // org.jruby.util.ShellLauncher$PidGetter pidGetter
        36: .line 705
            goto 43
        end local 0 // org.jruby.util.ShellLauncher$PidGetter pidGetter
        37: .line 707
      StackMap locals:
      StackMap stack:
            new org.jruby.util.ShellLauncher$2
            dup
            invokespecial org.jruby.util.ShellLauncher$2.<init>:()V
            astore 0 /* pidGetter */
        start local 0 // org.jruby.util.ShellLauncher$PidGetter pidGetter
        38: .line 720
            goto 43
        end local 0 // org.jruby.util.ShellLauncher$PidGetter pidGetter
      StackMap locals:
      StackMap stack:
        39: getstatic org.jruby.util.ShellLauncher.ProcessImpl_handle:Ljava/lang/reflect/Field;
            ifnull 42
        40: .line 722
            new org.jruby.util.ShellLauncher$3
            dup
            invokespecial org.jruby.util.ShellLauncher$3.<init>:()V
            astore 0 /* pidGetter */
        start local 0 // org.jruby.util.ShellLauncher$PidGetter pidGetter
        41: .line 736
            goto 43
        end local 0 // org.jruby.util.ShellLauncher$PidGetter pidGetter
        42: .line 738
      StackMap locals:
      StackMap stack:
            new org.jruby.util.ShellLauncher$4
            dup
            invokespecial org.jruby.util.ShellLauncher$4.<init>:()V
            astore 0 /* pidGetter */
        start local 0 // org.jruby.util.ShellLauncher$PidGetter pidGetter
        43: .line 744
      StackMap locals: org.jruby.util.ShellLauncher$PidGetter java.lang.Class java.lang.reflect.Field java.lang.Class java.lang.reflect.Field
      StackMap stack:
            aload 0 /* pidGetter */
            putstatic org.jruby.util.ShellLauncher.PID_GETTER:Lorg/jruby/util/ShellLauncher$PidGetter;
        end local 4 // java.lang.reflect.Field handle
        end local 3 // java.lang.Class pi
        end local 2 // java.lang.reflect.Field pid
        end local 1 // java.lang.Class up
        end local 0 // org.jruby.util.ShellLauncher$PidGetter pidGetter
        44: .line 745
            return
      LocalVariableTable:
        Start  End  Slot       Name  Signature
           36   37     0  pidGetter  Lorg/jruby/util/ShellLauncher$PidGetter;
           38   39     0  pidGetter  Lorg/jruby/util/ShellLauncher$PidGetter;
           41   42     0  pidGetter  Lorg/jruby/util/ShellLauncher$PidGetter;
           43   44     0  pidGetter  Lorg/jruby/util/ShellLauncher$PidGetter;
           16   44     1         up  Ljava/lang/Class;
           17   44     2        pid  Ljava/lang/reflect/Field;
           25   44     3         pi  Ljava/lang/Class;
           26   44     4     handle  Ljava/lang/reflect/Field;
      Exception table:
        from    to  target  type
          17    20      21  Class java.lang.Exception
          26    29      30  Class java.lang.Exception

  public void <init>();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.jruby.util.ShellLauncher this
         0: .line 81
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
            return
        end local 0 // org.jruby.util.ShellLauncher this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/jruby/util/ShellLauncher;

  public static java.lang.String[] getCurrentEnv(org.jruby.Ruby);
    descriptor: (Lorg/jruby/Ruby;)[Ljava/lang/String;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // org.jruby.Ruby runtime
         0: .line 219
            aload 0 /* runtime */
            getstatic java.util.Collections.EMPTY_LIST:Ljava/util/List;
            iconst_0
            invokestatic org.jruby.util.ShellLauncher.getModifiedEnv:(Lorg/jruby/Ruby;Ljava/util/Collection;Z)[Ljava/lang/String;
            areturn
        end local 0 // org.jruby.Ruby runtime
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    1     0  runtime  Lorg/jruby/Ruby;
    MethodParameters:
         Name  Flags
      runtime  

  private static java.lang.String[] getCurrentEnv(org.jruby.Ruby, java.util.Map);
    descriptor: (Lorg/jruby/Ruby;Ljava/util/Map;)[Ljava/lang/String;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // org.jruby.Ruby runtime
        start local 1 // java.util.Map mergeEnv
         0: .line 224
            aload 0 /* runtime */
            aload 1 /* mergeEnv */
            ifnonnull 1
            getstatic java.util.Collections.EMPTY_LIST:Ljava/util/List;
            goto 2
      StackMap locals:
      StackMap stack: org.jruby.Ruby
         1: aload 1 /* mergeEnv */
            invokeinterface java.util.Map.entrySet:()Ljava/util/Set;
      StackMap locals: org.jruby.Ruby java.util.Map
      StackMap stack: org.jruby.Ruby java.util.Collection
         2: iconst_0
            invokestatic org.jruby.util.ShellLauncher.getModifiedEnv:(Lorg/jruby/Ruby;Ljava/util/Collection;Z)[Ljava/lang/String;
            areturn
        end local 1 // java.util.Map mergeEnv
        end local 0 // org.jruby.Ruby runtime
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    3     0   runtime  Lorg/jruby/Ruby;
            0    3     1  mergeEnv  Ljava/util/Map;
    MethodParameters:
          Name  Flags
      runtime   
      mergeEnv  

  public static java.lang.String[] getModifiedEnv(org.jruby.Ruby, java.util.Collection, boolean);
    descriptor: (Lorg/jruby/Ruby;Ljava/util/Collection;Z)[Ljava/lang/String;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=7, locals=12, args_size=3
        start local 0 // org.jruby.Ruby runtime
        start local 1 // java.util.Collection mergeEnv
        start local 2 // boolean clearEnv
         0: .line 228
            aload 0 /* runtime */
            invokevirtual org.jruby.Ruby.getCurrentContext:()Lorg/jruby/runtime/ThreadContext;
            astore 3 /* context */
        start local 3 // org.jruby.runtime.ThreadContext context
         1: .line 231
            aload 3 /* context */
            invokevirtual org.jruby.runtime.ThreadContext.isEventHooksEnabled:()Z
            istore 4 /* traceEnabled */
        start local 4 // boolean traceEnabled
         2: .line 232
            aload 3 /* context */
            iconst_0
            invokevirtual org.jruby.runtime.ThreadContext.setEventHooksEnabled:(Z)V
         3: .line 236
            aconst_null
            astore 5 /* hash */
        start local 5 // org.jruby.RubyHash hash
         4: .line 237
            iload 2 /* clearEnv */
            ifne 6
         5: .line 238
            aload 0 /* runtime */
            invokevirtual org.jruby.Ruby.getObject:()Lorg/jruby/RubyClass;
            ldc "ENV"
            invokevirtual org.jruby.RubyClass.getConstant:(Ljava/lang/String;)Lorg/jruby/runtime/builtin/IRubyObject;
            invokeinterface org.jruby.runtime.builtin.IRubyObject.dup:()Lorg/jruby/runtime/builtin/IRubyObject;
            checkcast org.jruby.RubyHash
            astore 5 /* hash */
         6: .line 242
      StackMap locals: org.jruby.runtime.ThreadContext int org.jruby.RubyHash
      StackMap stack:
            aload 1 /* mergeEnv */
            ifnull 9
         7: .line 243
            aload 5 /* hash */
            invokevirtual org.jruby.RubyHash.size:()I
            aload 1 /* mergeEnv */
            invokeinterface java.util.Collection.size:()I
            iadd
            anewarray java.lang.String
            astore 6 /* ret */
        start local 6 // java.lang.String[] ret
         8: .line 244
            goto 10
        end local 6 // java.lang.String[] ret
         9: .line 245
      StackMap locals:
      StackMap stack:
            aload 5 /* hash */
            invokevirtual org.jruby.RubyHash.size:()I
            anewarray java.lang.String
            astore 6 /* ret */
        start local 6 // java.lang.String[] ret
        10: .line 248
      StackMap locals: java.lang.String[]
      StackMap stack:
            iconst_0
            istore 7 /* i */
        start local 7 // int i
        11: .line 249
            aload 5 /* hash */
            ifnull 21
        12: .line 250
            aload 5 /* hash */
            invokevirtual org.jruby.RubyHash.entrySet:()Ljava/util/Set;
            invokeinterface java.util.Set.iterator:()Ljava/util/Iterator;
            astore 9
            goto 20
      StackMap locals: org.jruby.Ruby java.util.Collection int org.jruby.runtime.ThreadContext int org.jruby.RubyHash java.lang.String[] int top java.util.Iterator
      StackMap stack:
        13: aload 9
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.util.Map$Entry
            astore 8 /* e */
        start local 8 // java.util.Map$Entry e
        14: .line 252
            aload 8 /* e */
            invokeinterface java.util.Map$Entry.getKey:()Ljava/lang/Object;
            ifnonnull 16
        15: .line 253
            aload 0 /* runtime */
            aload 0 /* runtime */
            invokevirtual org.jruby.Ruby.getNil:()Lorg/jruby/runtime/builtin/IRubyObject;
            aload 0 /* runtime */
            invokevirtual org.jruby.Ruby.getStructClass:()Lorg/jruby/RubyClass;
            invokevirtual org.jruby.Ruby.newTypeError:(Lorg/jruby/runtime/builtin/IRubyObject;Lorg/jruby/RubyClass;)Lorg/jruby/exceptions/RaiseException;
            athrow
        16: .line 256
      StackMap locals: org.jruby.Ruby java.util.Collection int org.jruby.runtime.ThreadContext int org.jruby.RubyHash java.lang.String[] int java.util.Map$Entry java.util.Iterator
      StackMap stack:
            aload 8 /* e */
            invokeinterface java.util.Map$Entry.getValue:()Ljava/lang/Object;
            ifnonnull 18
        17: .line 257
            goto 20
        18: .line 259
      StackMap locals:
      StackMap stack:
            aload 6 /* ret */
            iload 7 /* i */
            new java.lang.StringBuilder
            dup
            aload 8 /* e */
            invokeinterface java.util.Map$Entry.getKey:()Ljava/lang/Object;
            checkcast java.lang.String
            invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            bipush 61
            invokevirtual java.lang.StringBuilder.append:(C)Ljava/lang/StringBuilder;
            aload 8 /* e */
            invokeinterface java.util.Map$Entry.getValue:()Ljava/lang/Object;
            checkcast java.lang.String
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            aastore
        19: .line 260
            iinc 7 /* i */ 1
        end local 8 // java.util.Map$Entry e
        20: .line 250
      StackMap locals: org.jruby.Ruby java.util.Collection int org.jruby.runtime.ThreadContext int org.jruby.RubyHash java.lang.String[] int top java.util.Iterator
      StackMap stack:
            aload 9
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 13
        21: .line 263
      StackMap locals: org.jruby.Ruby java.util.Collection int org.jruby.runtime.ThreadContext int org.jruby.RubyHash java.lang.String[] int
      StackMap stack:
            aload 1 /* mergeEnv */
            ifnull 47
        22: .line 264
            aload 1 /* mergeEnv */
            instanceof java.util.Set
            ifeq 33
        23: .line 265
            aload 1 /* mergeEnv */
            checkcast java.util.Set
            invokeinterface java.util.Set.iterator:()Ljava/util/Iterator;
            astore 9
            goto 31
      StackMap locals: org.jruby.Ruby java.util.Collection int org.jruby.runtime.ThreadContext int org.jruby.RubyHash java.lang.String[] int top java.util.Iterator
      StackMap stack:
        24: aload 9
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.util.Map$Entry
            astore 8 /* e */
        start local 8 // java.util.Map$Entry e
        25: .line 267
            aload 8 /* e */
            invokeinterface java.util.Map$Entry.getKey:()Ljava/lang/Object;
            ifnonnull 27
        26: .line 268
            aload 0 /* runtime */
            aload 0 /* runtime */
            invokevirtual org.jruby.Ruby.getNil:()Lorg/jruby/runtime/builtin/IRubyObject;
            aload 0 /* runtime */
            invokevirtual org.jruby.Ruby.getStructClass:()Lorg/jruby/RubyClass;
            invokevirtual org.jruby.Ruby.newTypeError:(Lorg/jruby/runtime/builtin/IRubyObject;Lorg/jruby/RubyClass;)Lorg/jruby/exceptions/RaiseException;
            athrow
        27: .line 271
      StackMap locals: org.jruby.Ruby java.util.Collection int org.jruby.runtime.ThreadContext int org.jruby.RubyHash java.lang.String[] int java.util.Map$Entry java.util.Iterator
      StackMap stack:
            aload 8 /* e */
            invokeinterface java.util.Map$Entry.getValue:()Ljava/lang/Object;
            ifnonnull 29
        28: .line 272
            goto 31
        29: .line 274
      StackMap locals:
      StackMap stack:
            aload 6 /* ret */
            iload 7 /* i */
            new java.lang.StringBuilder
            dup
            aload 8 /* e */
            invokeinterface java.util.Map$Entry.getKey:()Ljava/lang/Object;
            invokevirtual java.lang.Object.toString:()Ljava/lang/String;
            invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            bipush 61
            invokevirtual java.lang.StringBuilder.append:(C)Ljava/lang/StringBuilder;
            aload 8 /* e */
            invokeinterface java.util.Map$Entry.getValue:()Ljava/lang/Object;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            aastore
        30: .line 275
            iinc 7 /* i */ 1
        end local 8 // java.util.Map$Entry e
        31: .line 265
      StackMap locals: org.jruby.Ruby java.util.Collection int org.jruby.runtime.ThreadContext int org.jruby.RubyHash java.lang.String[] int top java.util.Iterator
      StackMap stack:
            aload 9
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 24
        32: .line 277
            goto 47
      StackMap locals: org.jruby.Ruby java.util.Collection int org.jruby.runtime.ThreadContext int org.jruby.RubyHash java.lang.String[] int
      StackMap stack:
        33: aload 1 /* mergeEnv */
            instanceof org.jruby.RubyArray
            ifeq 47
        34: .line 278
            iconst_0
            istore 8 /* j */
        start local 8 // int j
        35: goto 46
        36: .line 279
      StackMap locals: int
      StackMap stack:
            aload 1 /* mergeEnv */
            checkcast org.jruby.RubyArray
            iload 8 /* j */
            i2l
            invokevirtual org.jruby.RubyArray.eltOk:(J)Lorg/jruby/runtime/builtin/IRubyObject;
            invokeinterface org.jruby.runtime.builtin.IRubyObject.convertToArray:()Lorg/jruby/RubyArray;
            astore 9 /* e */
        start local 9 // org.jruby.RubyArray e
        37: .line 281
            aload 9 /* e */
            invokevirtual org.jruby.RubyArray.size:()I
            iconst_2
            if_icmpeq 39
        38: .line 282
            aload 0 /* runtime */
            ldc "env assignments must come in pairs"
            invokevirtual org.jruby.Ruby.newArgumentError:(Ljava/lang/String;)Lorg/jruby/exceptions/RaiseException;
            athrow
        39: .line 285
      StackMap locals: org.jruby.RubyArray
      StackMap stack:
            aload 9 /* e */
            lconst_0
            invokevirtual org.jruby.RubyArray.eltOk:(J)Lorg/jruby/runtime/builtin/IRubyObject;
            ifnonnull 41
        40: .line 286
            aload 0 /* runtime */
            aload 0 /* runtime */
            invokevirtual org.jruby.Ruby.getNil:()Lorg/jruby/runtime/builtin/IRubyObject;
            aload 0 /* runtime */
            invokevirtual org.jruby.Ruby.getStructClass:()Lorg/jruby/RubyClass;
            invokevirtual org.jruby.Ruby.newTypeError:(Lorg/jruby/runtime/builtin/IRubyObject;Lorg/jruby/RubyClass;)Lorg/jruby/exceptions/RaiseException;
            athrow
        41: .line 289
      StackMap locals:
      StackMap stack:
            aload 9 /* e */
            lconst_1
            invokevirtual org.jruby.RubyArray.eltOk:(J)Lorg/jruby/runtime/builtin/IRubyObject;
            ifnonnull 43
        42: .line 290
            goto 45
        43: .line 292
      StackMap locals:
      StackMap stack:
            aload 6 /* ret */
            iload 7 /* i */
            new java.lang.StringBuilder
            dup
            aload 9 /* e */
            lconst_0
            invokevirtual org.jruby.RubyArray.eltOk:(J)Lorg/jruby/runtime/builtin/IRubyObject;
            invokevirtual java.lang.Object.toString:()Ljava/lang/String;
            invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            bipush 61
            invokevirtual java.lang.StringBuilder.append:(C)Ljava/lang/StringBuilder;
            aload 9 /* e */
            lconst_1
            invokevirtual org.jruby.RubyArray.eltOk:(J)Lorg/jruby/runtime/builtin/IRubyObject;
            invokevirtual java.lang.Object.toString:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            aastore
        44: .line 293
            iinc 7 /* i */ 1
        end local 9 // org.jruby.RubyArray e
        45: .line 278
      StackMap locals:
      StackMap stack:
            iinc 8 /* j */ 1
      StackMap locals:
      StackMap stack:
        46: iload 8 /* j */
            aload 1 /* mergeEnv */
            invokeinterface java.util.Collection.size:()I
            if_icmplt 36
        end local 8 // int j
        47: .line 298
      StackMap locals:
      StackMap stack:
            aload 6 /* ret */
            iload 7 /* i */
            invokestatic org.jruby.util.ShellLauncher.arrayOfLength:([Ljava/lang/String;I)[Ljava/lang/String;
            astore 11
        48: .line 301
            aload 3 /* context */
            iload 4 /* traceEnabled */
            invokevirtual org.jruby.runtime.ThreadContext.setEventHooksEnabled:(Z)V
        49: .line 298
            aload 11
            areturn
        end local 7 // int i
        end local 6 // java.lang.String[] ret
        end local 5 // org.jruby.RubyHash hash
        50: .line 300
      StackMap locals: org.jruby.Ruby java.util.Collection int org.jruby.runtime.ThreadContext int
      StackMap stack: java.lang.Throwable
            astore 10
        51: .line 301
            aload 3 /* context */
            iload 4 /* traceEnabled */
            invokevirtual org.jruby.runtime.ThreadContext.setEventHooksEnabled:(Z)V
        52: .line 302
            aload 10
            athrow
        end local 4 // boolean traceEnabled
        end local 3 // org.jruby.runtime.ThreadContext context
        end local 2 // boolean clearEnv
        end local 1 // java.util.Collection mergeEnv
        end local 0 // org.jruby.Ruby runtime
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0   53     0       runtime  Lorg/jruby/Ruby;
            0   53     1      mergeEnv  Ljava/util/Collection;
            0   53     2      clearEnv  Z
            1   53     3       context  Lorg/jruby/runtime/ThreadContext;
            2   53     4  traceEnabled  Z
            4   50     5          hash  Lorg/jruby/RubyHash;
            8    9     6           ret  [Ljava/lang/String;
           10   50     6           ret  [Ljava/lang/String;
           11   50     7             i  I
           14   20     8             e  Ljava/util/Map$Entry<Ljava/lang/String;Ljava/lang/String;>;
           25   31     8             e  Ljava/util/Map$Entry;
           35   47     8             j  I
           37   45     9             e  Lorg/jruby/RubyArray;
      Exception table:
        from    to  target  type
           3    48      50  any
    MethodParameters:
          Name  Flags
      runtime   
      mergeEnv  
      clearEnv  

  private static java.lang.String[] arrayOfLength(java.lang.String[], int);
    descriptor: ([Ljava/lang/String;I)[Ljava/lang/String;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // java.lang.String[] ary
        start local 1 // int len
         0: .line 306
            iload 1 /* len */
            aload 0 /* ary */
            arraylength
            if_icmpne 1
            aload 0 /* ary */
            goto 2
      StackMap locals:
      StackMap stack:
         1: aload 0 /* ary */
            iload 1 /* len */
            invokestatic java.util.Arrays.copyOf:([Ljava/lang/Object;I)[Ljava/lang/Object;
            checkcast java.lang.String[]
      StackMap locals:
      StackMap stack: java.lang.String[]
         2: areturn
        end local 1 // int len
        end local 0 // java.lang.String[] ary
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0   ary  [Ljava/lang/String;
            0    3     1   len  I
    MethodParameters:
      Name  Flags
      ary   final
      len   final

  private static boolean filenameIsPathSearchable(java.lang.String, boolean);
    descriptor: (Ljava/lang/String;Z)Z
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // java.lang.String fname
        start local 1 // boolean forExec
         0: .line 310
            aload 0 /* fname */
            ldc "/"
            invokevirtual java.lang.String.startsWith:(Ljava/lang/String;)Z
            ifne 4
         1: .line 311
            aload 0 /* fname */
            ldc "./"
            invokevirtual java.lang.String.startsWith:(Ljava/lang/String;)Z
            ifne 4
         2: .line 312
            aload 0 /* fname */
            ldc "../"
            invokevirtual java.lang.String.startsWith:(Ljava/lang/String;)Z
            ifne 4
         3: .line 313
            iload 1 /* forExec */
            ifeq 5
            aload 0 /* fname */
            bipush 47
            invokevirtual java.lang.String.indexOf:(I)I
            iconst_m1
            if_icmpeq 5
         4: .line 314
      StackMap locals:
      StackMap stack:
            iconst_0
            ireturn
         5: .line 316
      StackMap locals:
      StackMap stack:
            getstatic jnr.posix.util.Platform.IS_WINDOWS:Z
            ifeq 12
         6: .line 317
            aload 0 /* fname */
            ldc "\\"
            invokevirtual java.lang.String.startsWith:(Ljava/lang/String;)Z
            ifne 11
         7: .line 318
            aload 0 /* fname */
            ldc ".\\"
            invokevirtual java.lang.String.startsWith:(Ljava/lang/String;)Z
            ifne 11
         8: .line 319
            aload 0 /* fname */
            ldc "..\\"
            invokevirtual java.lang.String.startsWith:(Ljava/lang/String;)Z
            ifne 11
         9: .line 320
            aload 0 /* fname */
            invokevirtual java.lang.String.length:()I
            iconst_2
            if_icmple 10
            aload 0 /* fname */
            iconst_1
            invokevirtual java.lang.String.charAt:(I)C
            bipush 58
            if_icmpeq 11
        10: .line 321
      StackMap locals:
      StackMap stack:
            iload 1 /* forExec */
            ifeq 12
            aload 0 /* fname */
            bipush 92
            invokevirtual java.lang.String.indexOf:(I)I
            iconst_m1
            if_icmpeq 12
        11: .line 322
      StackMap locals:
      StackMap stack:
            iconst_0
            ireturn
        12: .line 325
      StackMap locals:
      StackMap stack:
            iconst_1
            ireturn
        end local 1 // boolean forExec
        end local 0 // java.lang.String fname
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0   13     0    fname  Ljava/lang/String;
            0   13     1  forExec  Z
    MethodParameters:
         Name  Flags
      fname    
      forExec  

  private static java.io.File tryFile(org.jruby.Ruby, java.lang.String, java.lang.String);
    descriptor: (Lorg/jruby/Ruby;Ljava/lang/String;Ljava/lang/String;)Ljava/io/File;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=4, locals=4, args_size=3
        start local 0 // org.jruby.Ruby runtime
        start local 1 // java.lang.String fdir
        start local 2 // java.lang.String fname
         0: .line 330
            aload 1 /* fdir */
            ifnonnull 3
         1: .line 331
            new java.io.File
            dup
            aload 2 /* fname */
            invokespecial java.io.File.<init>:(Ljava/lang/String;)V
            astore 3 /* pathFile */
        start local 3 // java.io.File pathFile
         2: .line 332
            goto 4
        end local 3 // java.io.File pathFile
         3: .line 333
      StackMap locals:
      StackMap stack:
            new java.io.File
            dup
            aload 1 /* fdir */
            aload 2 /* fname */
            invokespecial java.io.File.<init>:(Ljava/lang/String;Ljava/lang/String;)V
            astore 3 /* pathFile */
        start local 3 // java.io.File pathFile
         4: .line 336
      StackMap locals: java.io.File
      StackMap stack:
            aload 3 /* pathFile */
            invokevirtual java.io.File.isAbsolute:()Z
            ifne 6
         5: .line 337
            new java.io.File
            dup
            aload 0 /* runtime */
            invokevirtual org.jruby.Ruby.getCurrentDirectory:()Ljava/lang/String;
            aload 3 /* pathFile */
            invokevirtual java.io.File.getPath:()Ljava/lang/String;
            invokespecial java.io.File.<init>:(Ljava/lang/String;Ljava/lang/String;)V
            astore 3 /* pathFile */
         6: .line 340
      StackMap locals:
      StackMap stack:
            aload 0 /* runtime */
            new java.lang.StringBuilder
            dup
            ldc "Trying file "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 3 /* pathFile */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokestatic org.jruby.util.ShellLauncher.log:(Lorg/jruby/Ruby;Ljava/lang/String;)V
         7: .line 341
            aload 3 /* pathFile */
            invokevirtual java.io.File.exists:()Z
            ifeq 8
            aload 3 /* pathFile */
            areturn
         8: .line 343
      StackMap locals:
      StackMap stack:
            aconst_null
            areturn
        end local 3 // java.io.File pathFile
        end local 2 // java.lang.String fname
        end local 1 // java.lang.String fdir
        end local 0 // org.jruby.Ruby runtime
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    9     0   runtime  Lorg/jruby/Ruby;
            0    9     1      fdir  Ljava/lang/String;
            0    9     2     fname  Ljava/lang/String;
            2    3     3  pathFile  Ljava/io/File;
            4    9     3  pathFile  Ljava/io/File;
    MethodParameters:
         Name  Flags
      runtime  
      fdir     
      fname    

  private static boolean withExeSuffix(java.lang.String);
    descriptor: (Ljava/lang/String;)Z
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=6, args_size=1
        start local 0 // java.lang.String fname
         0: .line 347
            aload 0 /* fname */
            invokevirtual java.lang.String.toLowerCase:()Ljava/lang/String;
            astore 1 /* lowerCaseFname */
        start local 1 // java.lang.String lowerCaseFname
         1: .line 348
            getstatic org.jruby.util.ShellLauncher.WINDOWS_EXE_SUFFIXES:[Ljava/lang/String;
            dup
            astore 5
            arraylength
            istore 4
            iconst_0
            istore 3
            goto 6
      StackMap locals: java.lang.String java.lang.String top int int java.lang.String[]
      StackMap stack:
         2: aload 5
            iload 3
            aaload
            astore 2 /* suffix */
        start local 2 // java.lang.String suffix
         3: .line 349
            aload 1 /* lowerCaseFname */
            aload 2 /* suffix */
            invokevirtual java.lang.String.endsWith:(Ljava/lang/String;)Z
            ifeq 5
         4: .line 350
            iconst_1
            ireturn
        end local 2 // java.lang.String suffix
         5: .line 348
      StackMap locals:
      StackMap stack:
            iinc 3 1
      StackMap locals:
      StackMap stack:
         6: iload 3
            iload 4
            if_icmplt 2
         7: .line 353
            iconst_0
            ireturn
        end local 1 // java.lang.String lowerCaseFname
        end local 0 // java.lang.String fname
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0    8     0           fname  Ljava/lang/String;
            1    8     1  lowerCaseFname  Ljava/lang/String;
            3    5     2          suffix  Ljava/lang/String;
    MethodParameters:
       Name  Flags
      fname  

  private static java.io.File isValidFile(org.jruby.Ruby, java.lang.String, java.lang.String, boolean);
    descriptor: (Lorg/jruby/Ruby;Ljava/lang/String;Ljava/lang/String;Z)Ljava/io/File;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=5, locals=9, args_size=4
        start local 0 // org.jruby.Ruby runtime
        start local 1 // java.lang.String fdir
        start local 2 // java.lang.String fname
        start local 3 // boolean isExec
         0: .line 357
            aconst_null
            astore 4 /* validFile */
        start local 4 // java.io.File validFile
         1: .line 358
            iload 3 /* isExec */
            ifeq 13
            getstatic jnr.posix.util.Platform.IS_WINDOWS:Z
            ifeq 13
         2: .line 359
            aload 2 /* fname */
            invokestatic org.jruby.util.ShellLauncher.withExeSuffix:(Ljava/lang/String;)Z
            ifeq 5
         3: .line 360
            aload 0 /* runtime */
            aload 1 /* fdir */
            aload 2 /* fname */
            invokestatic org.jruby.util.ShellLauncher.tryFile:(Lorg/jruby/Ruby;Ljava/lang/String;Ljava/lang/String;)Ljava/io/File;
            astore 4 /* validFile */
         4: .line 361
            goto 19
         5: .line 362
      StackMap locals: java.io.File
      StackMap stack:
            getstatic org.jruby.util.ShellLauncher.WINDOWS_EXE_SUFFIXES:[Ljava/lang/String;
            dup
            astore 8
            arraylength
            istore 7
            iconst_0
            istore 6
            goto 11
      StackMap locals: org.jruby.Ruby java.lang.String java.lang.String int java.io.File top int int java.lang.String[]
      StackMap stack:
         6: aload 8
            iload 6
            aaload
            astore 5 /* suffix */
        start local 5 // java.lang.String suffix
         7: .line 363
            aload 0 /* runtime */
            aload 1 /* fdir */
            new java.lang.StringBuilder
            dup
            aload 2 /* fname */
            invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 5 /* suffix */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokestatic org.jruby.util.ShellLauncher.tryFile:(Lorg/jruby/Ruby;Ljava/lang/String;Ljava/lang/String;)Ljava/io/File;
            astore 4 /* validFile */
         8: .line 364
            aload 4 /* validFile */
            ifnull 10
         9: .line 366
            goto 19
        end local 5 // java.lang.String suffix
        10: .line 362
      StackMap locals:
      StackMap stack:
            iinc 6 1
      StackMap locals:
      StackMap stack:
        11: iload 6
            iload 7
            if_icmplt 6
        12: .line 370
            goto 19
        13: .line 371
      StackMap locals: org.jruby.Ruby java.lang.String java.lang.String int java.io.File
      StackMap stack:
            aload 0 /* runtime */
            aload 1 /* fdir */
            aload 2 /* fname */
            invokestatic org.jruby.util.ShellLauncher.tryFile:(Lorg/jruby/Ruby;Ljava/lang/String;Ljava/lang/String;)Ljava/io/File;
            astore 4 /* validFile */
        14: .line 372
            aload 4 /* validFile */
            ifnull 19
        15: .line 373
            aload 4 /* validFile */
            invokevirtual java.io.File.isDirectory:()Z
            ifeq 17
        16: .line 374
            aconst_null
            areturn
        17: .line 376
      StackMap locals:
      StackMap stack:
            iload 3 /* isExec */
            ifeq 19
            aload 0 /* runtime */
            invokevirtual org.jruby.Ruby.getPosix:()Ljnr/posix/POSIX;
            aload 4 /* validFile */
            invokevirtual java.io.File.getAbsolutePath:()Ljava/lang/String;
            invokeinterface jnr.posix.POSIX.stat:(Ljava/lang/String;)Ljnr/posix/FileStat;
            invokeinterface jnr.posix.FileStat.isExecutable:()Z
            ifne 19
        18: .line 377
            aload 0 /* runtime */
            aload 4 /* validFile */
            invokevirtual java.io.File.getAbsolutePath:()Ljava/lang/String;
            invokevirtual org.jruby.Ruby.newErrnoEACCESError:(Ljava/lang/String;)Lorg/jruby/exceptions/RaiseException;
            athrow
        19: .line 381
      StackMap locals:
      StackMap stack:
            aload 4 /* validFile */
            areturn
        end local 4 // java.io.File validFile
        end local 3 // boolean isExec
        end local 2 // java.lang.String fname
        end local 1 // java.lang.String fdir
        end local 0 // org.jruby.Ruby runtime
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0   20     0    runtime  Lorg/jruby/Ruby;
            0   20     1       fdir  Ljava/lang/String;
            0   20     2      fname  Ljava/lang/String;
            0   20     3     isExec  Z
            1   20     4  validFile  Ljava/io/File;
            7   10     5     suffix  Ljava/lang/String;
    MethodParameters:
         Name  Flags
      runtime  
      fdir     
      fname    
      isExec   

  private static java.io.File isValidFile(org.jruby.Ruby, java.lang.String, boolean);
    descriptor: (Lorg/jruby/Ruby;Ljava/lang/String;Z)Ljava/io/File;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=4, locals=4, args_size=3
        start local 0 // org.jruby.Ruby runtime
        start local 1 // java.lang.String fname
        start local 2 // boolean isExec
         0: .line 385
            aconst_null
            astore 3 /* fdir */
        start local 3 // java.lang.String fdir
         1: .line 386
            aload 0 /* runtime */
            aload 3 /* fdir */
            aload 1 /* fname */
            iload 2 /* isExec */
            invokestatic org.jruby.util.ShellLauncher.isValidFile:(Lorg/jruby/Ruby;Ljava/lang/String;Ljava/lang/String;Z)Ljava/io/File;
            areturn
        end local 3 // java.lang.String fdir
        end local 2 // boolean isExec
        end local 1 // java.lang.String fname
        end local 0 // org.jruby.Ruby runtime
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    2     0  runtime  Lorg/jruby/Ruby;
            0    2     1    fname  Ljava/lang/String;
            0    2     2   isExec  Z
            1    2     3     fdir  Ljava/lang/String;
    MethodParameters:
         Name  Flags
      runtime  
      fname    
      isExec   

  private static java.io.File findPathFile(org.jruby.Ruby, java.lang.String, java.lang.String[], boolean);
    descriptor: (Lorg/jruby/Ruby;Ljava/lang/String;[Ljava/lang/String;Z)Ljava/io/File;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=4, locals=10, args_size=4
        start local 0 // org.jruby.Ruby runtime
        start local 1 // java.lang.String fname
        start local 2 // java.lang.String[] path
        start local 3 // boolean isExec
         0: .line 390
            aconst_null
            astore 4 /* pathFile */
        start local 4 // java.io.File pathFile
         1: .line 391
            getstatic jnr.posix.util.Platform.IS_WINDOWS:Z
            ifeq 3
            aload 1 /* fname */
            ldc "\""
            invokevirtual java.lang.String.startsWith:(Ljava/lang/String;)Z
            ifeq 3
            aload 1 /* fname */
            ldc "\""
            invokevirtual java.lang.String.endsWith:(Ljava/lang/String;)Z
            ifeq 3
         2: .line 392
            aload 1 /* fname */
            iconst_1
            aload 1 /* fname */
            invokevirtual java.lang.String.length:()I
            iconst_1
            isub
            invokevirtual java.lang.String.substring:(II)Ljava/lang/String;
            astore 1 /* fname */
         3: .line 394
      StackMap locals: java.io.File
      StackMap stack:
            aload 1 /* fname */
            iload 3 /* isExec */
            invokestatic org.jruby.util.ShellLauncher.filenameIsPathSearchable:(Ljava/lang/String;Z)Z
            istore 5 /* doPathSearch */
        start local 5 // boolean doPathSearch
         4: .line 395
            iload 5 /* doPathSearch */
            ifeq 14
         5: .line 396
            aload 2 /* path */
            dup
            astore 9
            arraylength
            istore 8
            iconst_0
            istore 7
            goto 12
      StackMap locals: org.jruby.Ruby java.lang.String java.lang.String[] int java.io.File int top int int java.lang.String[]
      StackMap stack:
         6: aload 9
            iload 7
            aaload
            astore 6 /* fdir */
        start local 6 // java.lang.String fdir
         7: .line 401
            aload 0 /* runtime */
            aload 6 /* fdir */
            aload 1 /* fname */
            iload 3 /* isExec */
            invokestatic org.jruby.util.ShellLauncher.isValidFile:(Lorg/jruby/Ruby;Ljava/lang/String;Ljava/lang/String;Z)Ljava/io/File;
            astore 4 /* pathFile */
         8: .line 402
            aload 4 /* pathFile */
            ifnull 11
         9: .line 403
            goto 15
        10: .line 405
      StackMap locals: org.jruby.Ruby java.lang.String java.lang.String[] int java.io.File int java.lang.String int int java.lang.String[]
      StackMap stack: java.lang.SecurityException
            pop
        end local 6 // java.lang.String fdir
        11: .line 396
      StackMap locals: org.jruby.Ruby java.lang.String java.lang.String[] int java.io.File int top int int java.lang.String[]
      StackMap stack:
            iinc 7 1
      StackMap locals:
      StackMap stack:
        12: iload 7
            iload 8
            if_icmplt 6
        13: .line 410
            goto 15
        14: .line 411
      StackMap locals: org.jruby.Ruby java.lang.String java.lang.String[] int java.io.File int
      StackMap stack:
            aload 0 /* runtime */
            aload 1 /* fname */
            iload 3 /* isExec */
            invokestatic org.jruby.util.ShellLauncher.isValidFile:(Lorg/jruby/Ruby;Ljava/lang/String;Z)Ljava/io/File;
            astore 4 /* pathFile */
        15: .line 413
      StackMap locals:
      StackMap stack:
            aload 4 /* pathFile */
            areturn
        end local 5 // boolean doPathSearch
        end local 4 // java.io.File pathFile
        end local 3 // boolean isExec
        end local 2 // java.lang.String[] path
        end local 1 // java.lang.String fname
        end local 0 // org.jruby.Ruby runtime
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0   16     0       runtime  Lorg/jruby/Ruby;
            0   16     1         fname  Ljava/lang/String;
            0   16     2          path  [Ljava/lang/String;
            0   16     3        isExec  Z
            1   16     4      pathFile  Ljava/io/File;
            4   16     5  doPathSearch  Z
            7   11     6          fdir  Ljava/lang/String;
      Exception table:
        from    to  target  type
           7     9      10  Class java.lang.SecurityException
    MethodParameters:
         Name  Flags
      runtime  
      fname    
      path     
      isExec   

  public static java.io.File findPathExecutable(org.jruby.Ruby, java.lang.String);
    descriptor: (Lorg/jruby/Ruby;Ljava/lang/String;)Ljava/io/File;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=4, locals=4, args_size=2
        start local 0 // org.jruby.Ruby runtime
        start local 1 // java.lang.String fname
         0: .line 417
            aload 0 /* runtime */
            invokevirtual org.jruby.Ruby.getObject:()Lorg/jruby/RubyClass;
            ldc "ENV"
            invokevirtual org.jruby.RubyClass.getConstant:(Ljava/lang/String;)Lorg/jruby/runtime/builtin/IRubyObject;
            checkcast org.jruby.RubyHash
            astore 2 /* env */
        start local 2 // org.jruby.RubyHash env
         1: .line 418
            aload 2 /* env */
            aload 0 /* runtime */
            invokevirtual org.jruby.Ruby.getCurrentContext:()Lorg/jruby/runtime/ThreadContext;
            aload 0 /* runtime */
            ldc "PATH"
            invokestatic org.jruby.RubyString.newString:(Lorg/jruby/Ruby;Ljava/lang/String;)Lorg/jruby/RubyString;
            invokevirtual org.jruby.RubyHash.op_aref:(Lorg/jruby/runtime/ThreadContext;Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/runtime/builtin/IRubyObject;
            astore 3 /* pathObject */
        start local 3 // org.jruby.runtime.builtin.IRubyObject pathObject
         2: .line 419
            aload 0 /* runtime */
            aload 1 /* fname */
            aload 3 /* pathObject */
            invokestatic org.jruby.util.ShellLauncher.findPathExecutable:(Lorg/jruby/Ruby;Ljava/lang/String;Lorg/jruby/runtime/builtin/IRubyObject;)Ljava/io/File;
            areturn
        end local 3 // org.jruby.runtime.builtin.IRubyObject pathObject
        end local 2 // org.jruby.RubyHash env
        end local 1 // java.lang.String fname
        end local 0 // org.jruby.Ruby runtime
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    3     0     runtime  Lorg/jruby/Ruby;
            0    3     1       fname  Ljava/lang/String;
            1    3     2         env  Lorg/jruby/RubyHash;
            2    3     3  pathObject  Lorg/jruby/runtime/builtin/IRubyObject;
    MethodParameters:
         Name  Flags
      runtime  
      fname    

  public static java.io.File findPathExecutable(org.jruby.Ruby, java.lang.String, org.jruby.runtime.builtin.IRubyObject);
    descriptor: (Lorg/jruby/Ruby;Ljava/lang/String;Lorg/jruby/runtime/builtin/IRubyObject;)Ljava/io/File;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=4, locals=6, args_size=3
        start local 0 // org.jruby.Ruby runtime
        start local 1 // java.lang.String fname
        start local 2 // org.jruby.runtime.builtin.IRubyObject pathObject
         0: .line 426
            aload 2 /* pathObject */
            ifnull 1
            aload 2 /* pathObject */
            invokeinterface org.jruby.runtime.builtin.IRubyObject.isNil:()Z
            ifeq 3
         1: .line 427
      StackMap locals:
      StackMap stack:
            aload 0 /* runtime */
            invokevirtual org.jruby.Ruby.getObject:()Lorg/jruby/RubyClass;
            ldc "ENV"
            invokevirtual org.jruby.RubyClass.getConstant:(Ljava/lang/String;)Lorg/jruby/runtime/builtin/IRubyObject;
            checkcast org.jruby.RubyHash
            astore 4 /* env */
        start local 4 // org.jruby.RubyHash env
         2: .line 428
            aload 4 /* env */
            aload 0 /* runtime */
            invokevirtual org.jruby.Ruby.getCurrentContext:()Lorg/jruby/runtime/ThreadContext;
            aload 0 /* runtime */
            ldc "PATH"
            invokestatic org.jruby.RubyString.newString:(Lorg/jruby/Ruby;Ljava/lang/String;)Lorg/jruby/RubyString;
            invokevirtual org.jruby.RubyHash.op_aref:(Lorg/jruby/runtime/ThreadContext;Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/runtime/builtin/IRubyObject;
            astore 2 /* pathObject */
        end local 4 // org.jruby.RubyHash env
         3: .line 431
      StackMap locals:
      StackMap stack:
            aload 2 /* pathObject */
            ifnonnull 6
         4: .line 432
            getstatic org.jruby.util.ShellLauncher.DEFAULT_PATH:[Ljava/lang/String;
            astore 3 /* pathNodes */
        start local 3 // java.lang.String[] pathNodes
         5: .line 433
            goto 11
        end local 3 // java.lang.String[] pathNodes
         6: .line 436
      StackMap locals:
      StackMap stack:
            ldc "path.separator"
            invokestatic java.lang.System.getProperty:(Ljava/lang/String;)Ljava/lang/String;
            astore 4 /* pathSeparator */
        start local 4 // java.lang.String pathSeparator
         7: .line 437
            aload 2 /* pathObject */
            invokevirtual java.lang.Object.toString:()Ljava/lang/String;
            astore 5 /* path */
        start local 5 // java.lang.String path
         8: .line 438
            getstatic jnr.posix.util.Platform.IS_WINDOWS:Z
            ifeq 10
         9: .line 440
            new java.lang.StringBuilder
            dup
            ldc "."
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 4 /* pathSeparator */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 5 /* path */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            astore 5 /* path */
        10: .line 442
      StackMap locals: org.jruby.Ruby java.lang.String org.jruby.runtime.builtin.IRubyObject top java.lang.String java.lang.String
      StackMap stack:
            aload 5 /* path */
            aload 4 /* pathSeparator */
            invokevirtual java.lang.String.split:(Ljava/lang/String;)[Ljava/lang/String;
            astore 3 /* pathNodes */
        end local 5 // java.lang.String path
        end local 4 // java.lang.String pathSeparator
        start local 3 // java.lang.String[] pathNodes
        11: .line 444
      StackMap locals: org.jruby.Ruby java.lang.String org.jruby.runtime.builtin.IRubyObject java.lang.String[]
      StackMap stack:
            aload 0 /* runtime */
            aload 1 /* fname */
            aload 3 /* pathNodes */
            iconst_1
            invokestatic org.jruby.util.ShellLauncher.findPathFile:(Lorg/jruby/Ruby;Ljava/lang/String;[Ljava/lang/String;Z)Ljava/io/File;
            areturn
        end local 3 // java.lang.String[] pathNodes
        end local 2 // org.jruby.runtime.builtin.IRubyObject pathObject
        end local 1 // java.lang.String fname
        end local 0 // org.jruby.Ruby runtime
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0   12     0        runtime  Lorg/jruby/Ruby;
            0   12     1          fname  Ljava/lang/String;
            0   12     2     pathObject  Lorg/jruby/runtime/builtin/IRubyObject;
            5    6     3      pathNodes  [Ljava/lang/String;
           11   12     3      pathNodes  [Ljava/lang/String;
            2    3     4            env  Lorg/jruby/RubyHash;
            7   11     4  pathSeparator  Ljava/lang/String;
            8   11     5           path  Ljava/lang/String;
    MethodParameters:
            Name  Flags
      runtime     
      fname       
      pathObject  

  public static int runAndWait(org.jruby.Ruby, org.jruby.runtime.builtin.IRubyObject[]);
    descriptor: (Lorg/jruby/Ruby;[Lorg/jruby/runtime/builtin/IRubyObject;)I
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // org.jruby.Ruby runtime
        start local 1 // org.jruby.runtime.builtin.IRubyObject[] rawArgs
         0: .line 448
            aload 0 /* runtime */
            aload 1 /* rawArgs */
            aload 0 /* runtime */
            invokevirtual org.jruby.Ruby.getOutputStream:()Ljava/io/PrintStream;
            invokestatic org.jruby.util.ShellLauncher.runAndWait:(Lorg/jruby/Ruby;[Lorg/jruby/runtime/builtin/IRubyObject;Ljava/io/OutputStream;)I
            ireturn
        end local 1 // org.jruby.runtime.builtin.IRubyObject[] rawArgs
        end local 0 // org.jruby.Ruby runtime
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    1     0  runtime  Lorg/jruby/Ruby;
            0    1     1  rawArgs  [Lorg/jruby/runtime/builtin/IRubyObject;
    MethodParameters:
         Name  Flags
      runtime  
      rawArgs  

  public static long[] runAndWaitPid(org.jruby.Ruby, org.jruby.runtime.builtin.IRubyObject[]);
    descriptor: (Lorg/jruby/Ruby;[Lorg/jruby/runtime/builtin/IRubyObject;)[J
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=4, locals=2, args_size=2
        start local 0 // org.jruby.Ruby runtime
        start local 1 // org.jruby.runtime.builtin.IRubyObject[] rawArgs
         0: .line 452
            aload 0 /* runtime */
            aload 1 /* rawArgs */
            aload 0 /* runtime */
            invokevirtual org.jruby.Ruby.getOutputStream:()Ljava/io/PrintStream;
            iconst_1
            invokestatic org.jruby.util.ShellLauncher.runAndWaitPid:(Lorg/jruby/Ruby;[Lorg/jruby/runtime/builtin/IRubyObject;Ljava/io/OutputStream;Z)[J
            areturn
        end local 1 // org.jruby.runtime.builtin.IRubyObject[] rawArgs
        end local 0 // org.jruby.Ruby runtime
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    1     0  runtime  Lorg/jruby/Ruby;
            0    1     1  rawArgs  [Lorg/jruby/runtime/builtin/IRubyObject;
    MethodParameters:
         Name  Flags
      runtime  
      rawArgs  

  public static long runWithoutWait(org.jruby.Ruby, org.jruby.runtime.builtin.IRubyObject[]);
    descriptor: (Lorg/jruby/Ruby;[Lorg/jruby/runtime/builtin/IRubyObject;)J
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // org.jruby.Ruby runtime
        start local 1 // org.jruby.runtime.builtin.IRubyObject[] rawArgs
         0: .line 456
            aload 0 /* runtime */
            aload 1 /* rawArgs */
            aload 0 /* runtime */
            invokevirtual org.jruby.Ruby.getOutputStream:()Ljava/io/PrintStream;
            invokestatic org.jruby.util.ShellLauncher.runWithoutWait:(Lorg/jruby/Ruby;[Lorg/jruby/runtime/builtin/IRubyObject;Ljava/io/OutputStream;)J
            lreturn
        end local 1 // org.jruby.runtime.builtin.IRubyObject[] rawArgs
        end local 0 // org.jruby.Ruby runtime
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    1     0  runtime  Lorg/jruby/Ruby;
            0    1     1  rawArgs  [Lorg/jruby/runtime/builtin/IRubyObject;
    MethodParameters:
         Name  Flags
      runtime  
      rawArgs  

  public static int runExternalAndWait(org.jruby.Ruby, org.jruby.runtime.builtin.IRubyObject[], java.util.Map);
    descriptor: (Lorg/jruby/Ruby;[Lorg/jruby/runtime/builtin/IRubyObject;Ljava/util/Map;)I
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=5, locals=10, args_size=3
        start local 0 // org.jruby.Ruby runtime
        start local 1 // org.jruby.runtime.builtin.IRubyObject[] rawArgs
        start local 2 // java.util.Map mergeEnv
         0: .line 460
            aload 0 /* runtime */
            invokevirtual org.jruby.Ruby.getOutputStream:()Ljava/io/PrintStream;
            astore 3 /* output */
        start local 3 // java.io.OutputStream output
         1: .line 461
            aload 0 /* runtime */
            invokevirtual org.jruby.Ruby.getErrorStream:()Ljava/io/PrintStream;
            astore 4 /* error */
        start local 4 // java.io.OutputStream error
         2: .line 462
            aload 0 /* runtime */
            invokevirtual org.jruby.Ruby.getInputStream:()Ljava/io/InputStream;
            astore 5 /* input */
        start local 5 // java.io.InputStream input
         3: .line 464
            new java.io.File
            dup
            aload 0 /* runtime */
            invokevirtual org.jruby.Ruby.getCurrentDirectory:()Ljava/lang/String;
            invokespecial java.io.File.<init>:(Ljava/lang/String;)V
            astore 6 /* pwd */
        start local 6 // java.io.File pwd
         4: .line 465
            new org.jruby.util.ShellLauncher$LaunchConfig
            dup
            aload 0 /* runtime */
            aload 1 /* rawArgs */
            iconst_1
            invokespecial org.jruby.util.ShellLauncher$LaunchConfig.<init>:(Lorg/jruby/Ruby;[Lorg/jruby/runtime/builtin/IRubyObject;Z)V
            astore 7 /* cfg */
        start local 7 // org.jruby.util.ShellLauncher$LaunchConfig cfg
         5: .line 470
            aload 7 /* cfg */
            invokevirtual org.jruby.util.ShellLauncher$LaunchConfig.shouldRunInShell:()Z
            ifeq 10
         6: .line 471
            aload 0 /* runtime */
            ldc "Launching with shell"
            invokestatic org.jruby.util.ShellLauncher.log:(Lorg/jruby/Ruby;Ljava/lang/String;)V
         7: .line 473
            aload 7 /* cfg */
            invokevirtual org.jruby.util.ShellLauncher$LaunchConfig.verifyExecutableForShell:()V
         8: .line 474
            aload 0 /* runtime */
            aload 7 /* cfg */
            invokevirtual org.jruby.util.ShellLauncher$LaunchConfig.getExecArgs:()[Ljava/lang/String;
            aload 0 /* runtime */
            aload 2 /* mergeEnv */
            invokestatic org.jruby.util.ShellLauncher.getCurrentEnv:(Lorg/jruby/Ruby;Ljava/util/Map;)[Ljava/lang/String;
            aload 6 /* pwd */
            invokestatic org.jruby.util.ShellLauncher.buildProcess:(Lorg/jruby/Ruby;[Ljava/lang/String;[Ljava/lang/String;Ljava/io/File;)Ljava/lang/Process;
            astore 8 /* process */
        start local 8 // java.lang.Process process
         9: .line 475
            goto 12
        end local 8 // java.lang.Process process
        10: .line 476
      StackMap locals: org.jruby.Ruby org.jruby.runtime.builtin.IRubyObject[] java.util.Map java.io.OutputStream java.io.OutputStream java.io.InputStream java.io.File org.jruby.util.ShellLauncher$LaunchConfig
      StackMap stack:
            aload 0 /* runtime */
            ldc "Launching directly (no shell)"
            invokestatic org.jruby.util.ShellLauncher.log:(Lorg/jruby/Ruby;Ljava/lang/String;)V
        11: .line 477
            aload 7 /* cfg */
            invokevirtual org.jruby.util.ShellLauncher$LaunchConfig.verifyExecutableForDirect:()V
        12: .line 480
      StackMap locals:
      StackMap stack:
            aload 7 /* cfg */
            invokevirtual org.jruby.util.ShellLauncher$LaunchConfig.getExecArgs:()[Ljava/lang/String;
            astore 9 /* execArgs */
        start local 9 // java.lang.String[] execArgs
        13: .line 481
            aload 0 /* runtime */
            aload 9 /* execArgs */
            invokestatic org.jruby.util.ShellLauncher.changeDirInsideJar:(Lorg/jruby/Ruby;[Ljava/lang/String;)Z
            ifeq 15
        14: .line 482
            new java.io.File
            dup
            ldc "user.dir"
            invokestatic java.lang.System.getProperty:(Ljava/lang/String;)Ljava/lang/String;
            invokespecial java.io.File.<init>:(Ljava/lang/String;)V
            astore 6 /* pwd */
        15: .line 484
      StackMap locals: org.jruby.Ruby org.jruby.runtime.builtin.IRubyObject[] java.util.Map java.io.OutputStream java.io.OutputStream java.io.InputStream java.io.File org.jruby.util.ShellLauncher$LaunchConfig top java.lang.String[]
      StackMap stack:
            aload 0 /* runtime */
            aload 9 /* execArgs */
            aload 0 /* runtime */
            aload 2 /* mergeEnv */
            invokestatic org.jruby.util.ShellLauncher.getCurrentEnv:(Lorg/jruby/Ruby;Ljava/util/Map;)[Ljava/lang/String;
            aload 6 /* pwd */
            invokestatic org.jruby.util.ShellLauncher.buildProcess:(Lorg/jruby/Ruby;[Ljava/lang/String;[Ljava/lang/String;Ljava/io/File;)Ljava/lang/Process;
            astore 8 /* process */
        end local 9 // java.lang.String[] execArgs
        start local 8 // java.lang.Process process
        16: .line 485
            goto 19
        end local 8 // java.lang.Process process
      StackMap locals: org.jruby.Ruby org.jruby.runtime.builtin.IRubyObject[] java.util.Map java.io.OutputStream java.io.OutputStream java.io.InputStream java.io.File org.jruby.util.ShellLauncher$LaunchConfig
      StackMap stack: java.lang.SecurityException
        17: astore 9 /* se */
        start local 9 // java.lang.SecurityException se
        18: .line 486
            aload 0 /* runtime */
            aload 9 /* se */
            invokevirtual java.lang.SecurityException.getLocalizedMessage:()Ljava/lang/String;
            invokevirtual org.jruby.Ruby.newSecurityError:(Ljava/lang/String;)Lorg/jruby/exceptions/RaiseException;
            athrow
        end local 9 // java.lang.SecurityException se
        start local 8 // java.lang.Process process
        19: .line 488
      StackMap locals: java.lang.Process
      StackMap stack:
            aload 0 /* runtime */
            aload 8 /* process */
            aload 5 /* input */
            aload 3 /* output */
            aload 4 /* error */
            invokestatic org.jruby.util.ShellLauncher.handleStreams:(Lorg/jruby/Ruby;Ljava/lang/Process;Ljava/io/InputStream;Ljava/io/OutputStream;Ljava/io/OutputStream;)V
        20: .line 489
            aload 8 /* process */
            invokevirtual java.lang.Process.waitFor:()I
        21: ireturn
        end local 8 // java.lang.Process process
        22: .line 490
      StackMap locals: org.jruby.Ruby org.jruby.runtime.builtin.IRubyObject[] java.util.Map java.io.OutputStream java.io.OutputStream java.io.InputStream java.io.File org.jruby.util.ShellLauncher$LaunchConfig
      StackMap stack: java.io.IOException
            astore 8 /* e */
        start local 8 // java.io.IOException e
        23: .line 491
            aload 0 /* runtime */
            aload 8 /* e */
            invokevirtual org.jruby.Ruby.newIOErrorFromException:(Ljava/io/IOException;)Lorg/jruby/exceptions/RaiseException;
            athrow
        end local 8 // java.io.IOException e
        24: .line 492
      StackMap locals:
      StackMap stack: java.lang.InterruptedException
            pop
        25: .line 493
            aload 0 /* runtime */
            ldc "unexpected interrupt"
            invokevirtual org.jruby.Ruby.newThreadError:(Ljava/lang/String;)Lorg/jruby/exceptions/RaiseException;
            athrow
        end local 7 // org.jruby.util.ShellLauncher$LaunchConfig cfg
        end local 6 // java.io.File pwd
        end local 5 // java.io.InputStream input
        end local 4 // java.io.OutputStream error
        end local 3 // java.io.OutputStream output
        end local 2 // java.util.Map mergeEnv
        end local 1 // org.jruby.runtime.builtin.IRubyObject[] rawArgs
        end local 0 // org.jruby.Ruby runtime
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0   26     0   runtime  Lorg/jruby/Ruby;
            0   26     1   rawArgs  [Lorg/jruby/runtime/builtin/IRubyObject;
            0   26     2  mergeEnv  Ljava/util/Map;
            1   26     3    output  Ljava/io/OutputStream;
            2   26     4     error  Ljava/io/OutputStream;
            3   26     5     input  Ljava/io/InputStream;
            4   26     6       pwd  Ljava/io/File;
            5   26     7       cfg  Lorg/jruby/util/ShellLauncher$LaunchConfig;
            9   10     8   process  Ljava/lang/Process;
           16   17     8   process  Ljava/lang/Process;
           19   22     8   process  Ljava/lang/Process;
           13   16     9  execArgs  [Ljava/lang/String;
           18   19     9        se  Ljava/lang/SecurityException;
           23   24     8         e  Ljava/io/IOException;
      Exception table:
        from    to  target  type
           5    16      17  Class java.lang.SecurityException
           5    21      22  Class java.io.IOException
           5    21      24  Class java.lang.InterruptedException
    MethodParameters:
          Name  Flags
      runtime   
      rawArgs   
      mergeEnv  

  public static long runExternalWithoutWait(org.jruby.Ruby, org.jruby.runtime.builtin.IRubyObject, org.jruby.runtime.builtin.IRubyObject, org.jruby.runtime.builtin.IRubyObject, org.jruby.runtime.builtin.IRubyObject);
    descriptor: (Lorg/jruby/Ruby;Lorg/jruby/runtime/builtin/IRubyObject;Lorg/jruby/runtime/builtin/IRubyObject;Lorg/jruby/runtime/builtin/IRubyObject;Lorg/jruby/runtime/builtin/IRubyObject;)J
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=6, locals=5, args_size=5
        start local 0 // org.jruby.Ruby runtime
        start local 1 // org.jruby.runtime.builtin.IRubyObject env
        start local 2 // org.jruby.runtime.builtin.IRubyObject prog
        start local 3 // org.jruby.runtime.builtin.IRubyObject options
        start local 4 // org.jruby.runtime.builtin.IRubyObject args
         0: .line 498
            aload 0 /* runtime */
            aload 1 /* env */
            aload 2 /* prog */
            aload 3 /* options */
            aload 4 /* args */
            iconst_0
            invokestatic org.jruby.util.ShellLauncher.runExternal:(Lorg/jruby/Ruby;Lorg/jruby/runtime/builtin/IRubyObject;Lorg/jruby/runtime/builtin/IRubyObject;Lorg/jruby/runtime/builtin/IRubyObject;Lorg/jruby/runtime/builtin/IRubyObject;Z)J
            lreturn
        end local 4 // org.jruby.runtime.builtin.IRubyObject args
        end local 3 // org.jruby.runtime.builtin.IRubyObject options
        end local 2 // org.jruby.runtime.builtin.IRubyObject prog
        end local 1 // org.jruby.runtime.builtin.IRubyObject env
        end local 0 // org.jruby.Ruby runtime
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    1     0  runtime  Lorg/jruby/Ruby;
            0    1     1      env  Lorg/jruby/runtime/builtin/IRubyObject;
            0    1     2     prog  Lorg/jruby/runtime/builtin/IRubyObject;
            0    1     3  options  Lorg/jruby/runtime/builtin/IRubyObject;
            0    1     4     args  Lorg/jruby/runtime/builtin/IRubyObject;
    MethodParameters:
         Name  Flags
      runtime  
      env      
      prog     
      options  
      args     

  public static long runExternal(org.jruby.Ruby, org.jruby.runtime.builtin.IRubyObject, org.jruby.runtime.builtin.IRubyObject, org.jruby.runtime.builtin.IRubyObject, org.jruby.runtime.builtin.IRubyObject, boolean);
    descriptor: (Lorg/jruby/Ruby;Lorg/jruby/runtime/builtin/IRubyObject;Lorg/jruby/runtime/builtin/IRubyObject;Lorg/jruby/runtime/builtin/IRubyObject;Lorg/jruby/runtime/builtin/IRubyObject;Z)J
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=5, locals=14, args_size=6
        start local 0 // org.jruby.Ruby runtime
        start local 1 // org.jruby.runtime.builtin.IRubyObject env
        start local 2 // org.jruby.runtime.builtin.IRubyObject prog
        start local 3 // org.jruby.runtime.builtin.IRubyObject options
        start local 4 // org.jruby.runtime.builtin.IRubyObject args
        start local 5 // boolean wait
         0: .line 502
            aload 1 /* env */
            invokeinterface org.jruby.runtime.builtin.IRubyObject.isNil:()Z
            ifne 1
            aload 1 /* env */
            instanceof java.util.Map
            ifne 2
         1: .line 503
      StackMap locals:
      StackMap stack:
            aconst_null
            astore 1 /* env */
         2: .line 506
      StackMap locals:
      StackMap stack:
            aload 4 /* args */
            invokeinterface org.jruby.runtime.builtin.IRubyObject.convertToArray:()Lorg/jruby/RubyArray;
            invokevirtual org.jruby.RubyArray.toJavaArray:()[Lorg/jruby/runtime/builtin/IRubyObject;
            astore 6 /* rawArgs */
        start local 6 // org.jruby.runtime.builtin.IRubyObject[] rawArgs
         3: .line 508
            aload 0 /* runtime */
            invokevirtual org.jruby.Ruby.getOutputStream:()Ljava/io/PrintStream;
            astore 7 /* output */
        start local 7 // java.io.OutputStream output
         4: .line 509
            aload 0 /* runtime */
            invokevirtual org.jruby.Ruby.getErrorStream:()Ljava/io/PrintStream;
            astore 8 /* error */
        start local 8 // java.io.OutputStream error
         5: .line 510
            aload 0 /* runtime */
            invokevirtual org.jruby.Ruby.getInputStream:()Ljava/io/InputStream;
            astore 9 /* input */
        start local 9 // java.io.InputStream input
         6: .line 512
            new java.io.File
            dup
            aload 0 /* runtime */
            invokevirtual org.jruby.Ruby.getCurrentDirectory:()Ljava/lang/String;
            invokespecial java.io.File.<init>:(Ljava/lang/String;)V
            astore 10 /* pwd */
        start local 10 // java.io.File pwd
         7: .line 513
            new org.jruby.util.ShellLauncher$LaunchConfig
            dup
            aload 0 /* runtime */
            aload 6 /* rawArgs */
            iconst_1
            invokespecial org.jruby.util.ShellLauncher$LaunchConfig.<init>:(Lorg/jruby/Ruby;[Lorg/jruby/runtime/builtin/IRubyObject;Z)V
            astore 11 /* cfg */
        start local 11 // org.jruby.util.ShellLauncher$LaunchConfig cfg
         8: .line 518
            aload 11 /* cfg */
            invokevirtual org.jruby.util.ShellLauncher$LaunchConfig.shouldRunInShell:()Z
            ifeq 12
         9: .line 519
            aload 0 /* runtime */
            ldc "Launching with shell"
            invokestatic org.jruby.util.ShellLauncher.log:(Lorg/jruby/Ruby;Ljava/lang/String;)V
        10: .line 522
            aload 11 /* cfg */
            invokevirtual org.jruby.util.ShellLauncher$LaunchConfig.verifyExecutableForShell:()V
        11: .line 523
            goto 14
        12: .line 524
      StackMap locals: org.jruby.Ruby org.jruby.runtime.builtin.IRubyObject org.jruby.runtime.builtin.IRubyObject org.jruby.runtime.builtin.IRubyObject org.jruby.runtime.builtin.IRubyObject int org.jruby.runtime.builtin.IRubyObject[] java.io.OutputStream java.io.OutputStream java.io.InputStream java.io.File org.jruby.util.ShellLauncher$LaunchConfig
      StackMap stack:
            aload 0 /* runtime */
            ldc "Launching directly (no shell)"
            invokestatic org.jruby.util.ShellLauncher.log:(Lorg/jruby/Ruby;Ljava/lang/String;)V
        13: .line 525
            aload 11 /* cfg */
            invokevirtual org.jruby.util.ShellLauncher$LaunchConfig.verifyExecutableForDirect:()V
        14: .line 528
      StackMap locals:
      StackMap stack:
            aload 11 /* cfg */
            invokevirtual org.jruby.util.ShellLauncher$LaunchConfig.getExecArgs:()[Ljava/lang/String;
            astore 13 /* execArgs */
        start local 13 // java.lang.String[] execArgs
        15: .line 529
            aload 0 /* runtime */
            aload 13 /* execArgs */
            invokestatic org.jruby.util.ShellLauncher.changeDirInsideJar:(Lorg/jruby/Ruby;[Ljava/lang/String;)Z
            ifeq 17
        16: .line 530
            new java.io.File
            dup
            ldc "."
            invokespecial java.io.File.<init>:(Ljava/lang/String;)V
            astore 10 /* pwd */
        17: .line 532
      StackMap locals: org.jruby.Ruby org.jruby.runtime.builtin.IRubyObject org.jruby.runtime.builtin.IRubyObject org.jruby.runtime.builtin.IRubyObject org.jruby.runtime.builtin.IRubyObject int org.jruby.runtime.builtin.IRubyObject[] java.io.OutputStream java.io.OutputStream java.io.InputStream java.io.File org.jruby.util.ShellLauncher$LaunchConfig top java.lang.String[]
      StackMap stack:
            aload 0 /* runtime */
            aload 13 /* execArgs */
            aload 0 /* runtime */
            aload 1 /* env */
            checkcast java.util.Map
            invokestatic org.jruby.util.ShellLauncher.getCurrentEnv:(Lorg/jruby/Ruby;Ljava/util/Map;)[Ljava/lang/String;
            aload 10 /* pwd */
            invokestatic org.jruby.util.ShellLauncher.buildProcess:(Lorg/jruby/Ruby;[Ljava/lang/String;[Ljava/lang/String;Ljava/io/File;)Ljava/lang/Process;
            astore 12 /* process */
        end local 13 // java.lang.String[] execArgs
        start local 12 // java.lang.Process process
        18: .line 533
            goto 21
        end local 12 // java.lang.Process process
      StackMap locals: org.jruby.Ruby org.jruby.runtime.builtin.IRubyObject org.jruby.runtime.builtin.IRubyObject org.jruby.runtime.builtin.IRubyObject org.jruby.runtime.builtin.IRubyObject int org.jruby.runtime.builtin.IRubyObject[] java.io.OutputStream java.io.OutputStream java.io.InputStream java.io.File org.jruby.util.ShellLauncher$LaunchConfig
      StackMap stack: java.lang.SecurityException
        19: astore 13 /* se */
        start local 13 // java.lang.SecurityException se
        20: .line 534
            aload 0 /* runtime */
            aload 13 /* se */
            invokevirtual java.lang.SecurityException.getLocalizedMessage:()Ljava/lang/String;
            invokevirtual org.jruby.Ruby.newSecurityError:(Ljava/lang/String;)Lorg/jruby/exceptions/RaiseException;
            athrow
        end local 13 // java.lang.SecurityException se
        start local 12 // java.lang.Process process
        21: .line 537
      StackMap locals: java.lang.Process
      StackMap stack:
            iload 5 /* wait */
            ifeq 27
        22: .line 538
            aload 0 /* runtime */
            aload 12 /* process */
            aload 9 /* input */
            aload 7 /* output */
            aload 8 /* error */
            invokestatic org.jruby.util.ShellLauncher.handleStreams:(Lorg/jruby/Ruby;Ljava/lang/Process;Ljava/io/InputStream;Ljava/io/OutputStream;Ljava/io/OutputStream;)V
        23: .line 540
            aload 12 /* process */
            invokevirtual java.lang.Process.waitFor:()I
            i2l
        24: lreturn
        25: .line 541
      StackMap locals:
      StackMap stack: java.lang.InterruptedException
            pop
        26: .line 542
            aload 0 /* runtime */
            ldc "unexpected interrupt"
            invokevirtual org.jruby.Ruby.newThreadError:(Ljava/lang/String;)Lorg/jruby/exceptions/RaiseException;
            athrow
        27: .line 545
      StackMap locals:
      StackMap stack:
            aload 0 /* runtime */
            aload 12 /* process */
            aload 0 /* runtime */
            invokevirtual org.jruby.Ruby.getOutputStream:()Ljava/io/PrintStream;
            aload 8 /* error */
            invokestatic org.jruby.util.ShellLauncher.handleStreamsNonblocking:(Lorg/jruby/Ruby;Ljava/lang/Process;Ljava/io/OutputStream;Ljava/io/OutputStream;)V
        28: .line 546
            aload 12 /* process */
            invokestatic org.jruby.util.ShellLauncher.getPidFromProcess:(Ljava/lang/Process;)J
        29: lreturn
        end local 12 // java.lang.Process process
        30: .line 548
      StackMap locals: org.jruby.Ruby org.jruby.runtime.builtin.IRubyObject org.jruby.runtime.builtin.IRubyObject org.jruby.runtime.builtin.IRubyObject org.jruby.runtime.builtin.IRubyObject int org.jruby.runtime.builtin.IRubyObject[] java.io.OutputStream java.io.OutputStream java.io.InputStream java.io.File org.jruby.util.ShellLauncher$LaunchConfig
      StackMap stack: java.io.IOException
            astore 12 /* e */
        start local 12 // java.io.IOException e
        31: .line 549
            aload 0 /* runtime */
            aload 12 /* e */
            invokevirtual org.jruby.Ruby.newIOErrorFromException:(Ljava/io/IOException;)Lorg/jruby/exceptions/RaiseException;
            athrow
        end local 12 // java.io.IOException e
        end local 11 // org.jruby.util.ShellLauncher$LaunchConfig cfg
        end local 10 // java.io.File pwd
        end local 9 // java.io.InputStream input
        end local 8 // java.io.OutputStream error
        end local 7 // java.io.OutputStream output
        end local 6 // org.jruby.runtime.builtin.IRubyObject[] rawArgs
        end local 5 // boolean wait
        end local 4 // org.jruby.runtime.builtin.IRubyObject args
        end local 3 // org.jruby.runtime.builtin.IRubyObject options
        end local 2 // org.jruby.runtime.builtin.IRubyObject prog
        end local 1 // org.jruby.runtime.builtin.IRubyObject env
        end local 0 // org.jruby.Ruby runtime
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0   32     0   runtime  Lorg/jruby/Ruby;
            0   32     1       env  Lorg/jruby/runtime/builtin/IRubyObject;
            0   32     2      prog  Lorg/jruby/runtime/builtin/IRubyObject;
            0   32     3   options  Lorg/jruby/runtime/builtin/IRubyObject;
            0   32     4      args  Lorg/jruby/runtime/builtin/IRubyObject;
            0   32     5      wait  Z
            3   32     6   rawArgs  [Lorg/jruby/runtime/builtin/IRubyObject;
            4   32     7    output  Ljava/io/OutputStream;
            5   32     8     error  Ljava/io/OutputStream;
            6   32     9     input  Ljava/io/InputStream;
            7   32    10       pwd  Ljava/io/File;
            8   32    11       cfg  Lorg/jruby/util/ShellLauncher$LaunchConfig;
           18   19    12   process  Ljava/lang/Process;
           21   30    12   process  Ljava/lang/Process;
           15   18    13  execArgs  [Ljava/lang/String;
           20   21    13        se  Ljava/lang/SecurityException;
           31   32    12         e  Ljava/io/IOException;
      Exception table:
        from    to  target  type
           8    18      19  Class java.lang.SecurityException
          23    24      25  Class java.lang.InterruptedException
           8    24      30  Class java.io.IOException
          25    29      30  Class java.io.IOException
    MethodParameters:
         Name  Flags
      runtime  
      env      
      prog     
      options  
      args     
      wait     

  private static boolean changeDirInsideJar(org.jruby.Ruby, java.lang.String[]);
    descriptor: (Lorg/jruby/Ruby;[Ljava/lang/String;)Z
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=4, locals=3, args_size=2
        start local 0 // org.jruby.Ruby runtime
        start local 1 // java.lang.String[] args
         0: .line 555
            aload 0 /* runtime */
            aload 1 /* args */
            aload 1 /* args */
            arraylength
            iconst_1
            isub
            aaload
            invokestatic org.jruby.util.ShellLauncher.changeDirInsideJar:(Lorg/jruby/Ruby;Ljava/lang/String;)Ljava/lang/String;
            dup
            astore 2 /* arg */
        start local 2 // java.lang.String arg
         1: ifnull 4
         2: .line 556
            aload 1 /* args */
            aload 1 /* args */
            arraylength
            iconst_1
            isub
            aload 2 /* arg */
            aastore
         3: .line 557
            iconst_1
            ireturn
         4: .line 559
      StackMap locals: java.lang.String
      StackMap stack:
            iconst_0
            ireturn
        end local 2 // java.lang.String arg
        end local 1 // java.lang.String[] args
        end local 0 // org.jruby.Ruby runtime
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    5     0  runtime  Lorg/jruby/Ruby;
            0    5     1     args  [Ljava/lang/String;
            1    5     2      arg  Ljava/lang/String;
    MethodParameters:
         Name  Flags
      runtime  final
      args     final

  public static java.lang.String changeDirInsideJar(org.jruby.Ruby, java.lang.String);
    descriptor: (Lorg/jruby/Ruby;Ljava/lang/String;)Ljava/lang/String;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=5, locals=2, args_size=2
        start local 0 // org.jruby.Ruby runtime
        start local 1 // java.lang.String arg
         0: .line 564
            aload 0 /* runtime */
            invokevirtual org.jruby.Ruby.getCurrentDirectory:()Ljava/lang/String;
            ldc "uri:classloader:"
            invokevirtual java.lang.String.startsWith:(Ljava/lang/String;)Z
            ifeq 2
            aload 1 /* arg */
            ldc "org.jruby.Main"
            invokevirtual java.lang.String.contains:(Ljava/lang/CharSequence;)Z
            ifeq 2
         1: .line 565
            aload 1 /* arg */
            ldc "org.jruby.Main"
            new java.lang.StringBuilder
            dup
            ldc "org.jruby.Main -C "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 0 /* runtime */
            invokevirtual org.jruby.Ruby.getCurrentDirectory:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokestatic org.jruby.util.StringSupport.replaceFirst:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/CharSequence;
            invokeinterface java.lang.CharSequence.toString:()Ljava/lang/String;
            areturn
         2: .line 567
      StackMap locals:
      StackMap stack:
            aconst_null
            areturn
        end local 1 // java.lang.String arg
        end local 0 // org.jruby.Ruby runtime
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    3     0  runtime  Lorg/jruby/Ruby;
            0    3     1      arg  Ljava/lang/String;
    MethodParameters:
         Name  Flags
      runtime  final
      arg      final

  public static java.lang.Process buildProcess(org.jruby.Ruby, java.lang.String[], java.lang.String[], java.io.File);
    descriptor: (Lorg/jruby/Ruby;[Ljava/lang/String;[Ljava/lang/String;Ljava/io/File;)Ljava/lang/Process;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=4, args_size=4
        start local 0 // org.jruby.Ruby runtime
        start local 1 // java.lang.String[] args
        start local 2 // java.lang.String[] env
        start local 3 // java.io.File pwd
         0: .line 571
            aload 0 /* runtime */
            invokevirtual org.jruby.Ruby.getPosix:()Ljnr/posix/POSIX;
            aload 1 /* args */
            invokeinterface jnr.posix.POSIX.newProcessMaker:([Ljava/lang/String;)Ljnr/posix/util/ProcessMaker;
         1: .line 572
            aload 2 /* env */
            invokeinterface jnr.posix.util.ProcessMaker.environment:([Ljava/lang/String;)Ljnr/posix/util/ProcessMaker;
         2: .line 573
            aload 3 /* pwd */
            invokeinterface jnr.posix.util.ProcessMaker.directory:(Ljava/io/File;)Ljnr/posix/util/ProcessMaker;
         3: .line 574
            invokeinterface jnr.posix.util.ProcessMaker.start:()Ljava/lang/Process;
         4: .line 571
            areturn
        end local 3 // java.io.File pwd
        end local 2 // java.lang.String[] env
        end local 1 // java.lang.String[] args
        end local 0 // org.jruby.Ruby runtime
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    5     0  runtime  Lorg/jruby/Ruby;
            0    5     1     args  [Ljava/lang/String;
            0    5     2      env  [Ljava/lang/String;
            0    5     3      pwd  Ljava/io/File;
    Exceptions:
      throws java.io.IOException
    MethodParameters:
         Name  Flags
      runtime  
      args     
      env      
      pwd      

  public static long runExternalWithoutWait(org.jruby.Ruby, org.jruby.runtime.builtin.IRubyObject[]);
    descriptor: (Lorg/jruby/Ruby;[Lorg/jruby/runtime/builtin/IRubyObject;)J
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // org.jruby.Ruby runtime
        start local 1 // org.jruby.runtime.builtin.IRubyObject[] rawArgs
         0: .line 578
            aload 0 /* runtime */
            aload 1 /* rawArgs */
            aload 0 /* runtime */
            invokevirtual org.jruby.Ruby.getOutputStream:()Ljava/io/PrintStream;
            invokestatic org.jruby.util.ShellLauncher.runWithoutWait:(Lorg/jruby/Ruby;[Lorg/jruby/runtime/builtin/IRubyObject;Ljava/io/OutputStream;)J
            lreturn
        end local 1 // org.jruby.runtime.builtin.IRubyObject[] rawArgs
        end local 0 // org.jruby.Ruby runtime
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    1     0  runtime  Lorg/jruby/Ruby;
            0    1     1  rawArgs  [Lorg/jruby/runtime/builtin/IRubyObject;
    MethodParameters:
         Name  Flags
      runtime  
      rawArgs  

  public static int execAndWait(org.jruby.Ruby, org.jruby.runtime.builtin.IRubyObject[]);
    descriptor: (Lorg/jruby/Ruby;[Lorg/jruby/runtime/builtin/IRubyObject;)I
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // org.jruby.Ruby runtime
        start local 1 // org.jruby.runtime.builtin.IRubyObject[] rawArgs
         0: .line 582
            aload 0 /* runtime */
            aload 1 /* rawArgs */
            getstatic java.util.Collections.EMPTY_MAP:Ljava/util/Map;
            invokestatic org.jruby.util.ShellLauncher.execAndWait:(Lorg/jruby/Ruby;[Lorg/jruby/runtime/builtin/IRubyObject;Ljava/util/Map;)I
            ireturn
        end local 1 // org.jruby.runtime.builtin.IRubyObject[] rawArgs
        end local 0 // org.jruby.Ruby runtime
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    1     0  runtime  Lorg/jruby/Ruby;
            0    1     1  rawArgs  [Lorg/jruby/runtime/builtin/IRubyObject;
    MethodParameters:
         Name  Flags
      runtime  
      rawArgs  

  public static int execAndWait(org.jruby.Ruby, org.jruby.runtime.builtin.IRubyObject[], java.util.Map);
    descriptor: (Lorg/jruby/Ruby;[Lorg/jruby/runtime/builtin/IRubyObject;Ljava/util/Map;)I
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=7, locals=6, args_size=3
        start local 0 // org.jruby.Ruby runtime
        start local 1 // org.jruby.runtime.builtin.IRubyObject[] rawArgs
        start local 2 // java.util.Map mergeEnv
         0: .line 586
            new java.io.File
            dup
            aload 0 /* runtime */
            invokevirtual org.jruby.Ruby.getCurrentDirectory:()Ljava/lang/String;
            invokespecial java.io.File.<init>:(Ljava/lang/String;)V
            astore 3 /* pwd */
        start local 3 // java.io.File pwd
         1: .line 587
            new org.jruby.util.ShellLauncher$LaunchConfig
            dup
            aload 0 /* runtime */
            aload 1 /* rawArgs */
            iconst_1
            invokespecial org.jruby.util.ShellLauncher$LaunchConfig.<init>:(Lorg/jruby/Ruby;[Lorg/jruby/runtime/builtin/IRubyObject;Z)V
            astore 4 /* cfg */
        start local 4 // org.jruby.util.ShellLauncher$LaunchConfig cfg
         2: .line 589
            aload 4 /* cfg */
            invokevirtual org.jruby.util.ShellLauncher$LaunchConfig.shouldRunInProcess:()Z
            ifeq 14
         3: .line 590
            aload 0 /* runtime */
            ldc "ExecAndWait in-process"
            invokestatic org.jruby.util.ShellLauncher.log:(Lorg/jruby/Ruby;Ljava/lang/String;)V
         4: .line 596
            new org.jruby.util.ShellLauncher$ScriptThreadProcess
            dup
         5: .line 597
            aload 0 /* runtime */
            aload 4 /* cfg */
            invokevirtual org.jruby.util.ShellLauncher$LaunchConfig.getExecArgs:()[Ljava/lang/String;
            aload 0 /* runtime */
            aload 2 /* mergeEnv */
            invokestatic org.jruby.util.ShellLauncher.getCurrentEnv:(Lorg/jruby/Ruby;Ljava/util/Map;)[Ljava/lang/String;
            aload 3 /* pwd */
            iconst_0
         6: .line 596
            invokespecial org.jruby.util.ShellLauncher$ScriptThreadProcess.<init>:(Lorg/jruby/Ruby;[Ljava/lang/String;[Ljava/lang/String;Ljava/io/File;Z)V
            astore 5 /* ipScript */
        start local 5 // org.jruby.util.ShellLauncher$ScriptThreadProcess ipScript
         7: .line 598
            aload 5 /* ipScript */
            invokevirtual org.jruby.util.ShellLauncher$ScriptThreadProcess.start:()V
         8: .line 599
            aload 5 /* ipScript */
            invokevirtual org.jruby.util.ShellLauncher$ScriptThreadProcess.waitFor:()I
         9: ireturn
        end local 5 // org.jruby.util.ShellLauncher$ScriptThreadProcess ipScript
        10: .line 600
      StackMap locals: org.jruby.Ruby org.jruby.runtime.builtin.IRubyObject[] java.util.Map java.io.File org.jruby.util.ShellLauncher$LaunchConfig
      StackMap stack: java.io.IOException
            astore 5 /* e */
        start local 5 // java.io.IOException e
        11: .line 601
            aload 0 /* runtime */
            aload 5 /* e */
            invokevirtual org.jruby.Ruby.newIOErrorFromException:(Ljava/io/IOException;)Lorg/jruby/exceptions/RaiseException;
            athrow
        end local 5 // java.io.IOException e
        12: .line 602
      StackMap locals:
      StackMap stack: java.lang.InterruptedException
            pop
        13: .line 603
            aload 0 /* runtime */
            ldc "unexpected interrupt"
            invokevirtual org.jruby.Ruby.newThreadError:(Ljava/lang/String;)Lorg/jruby/exceptions/RaiseException;
            athrow
        14: .line 606
      StackMap locals:
      StackMap stack:
            aload 0 /* runtime */
            aload 1 /* rawArgs */
            aload 2 /* mergeEnv */
            invokestatic org.jruby.util.ShellLauncher.runExternalAndWait:(Lorg/jruby/Ruby;[Lorg/jruby/runtime/builtin/IRubyObject;Ljava/util/Map;)I
            ireturn
        end local 4 // org.jruby.util.ShellLauncher$LaunchConfig cfg
        end local 3 // java.io.File pwd
        end local 2 // java.util.Map mergeEnv
        end local 1 // org.jruby.runtime.builtin.IRubyObject[] rawArgs
        end local 0 // org.jruby.Ruby runtime
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0   15     0   runtime  Lorg/jruby/Ruby;
            0   15     1   rawArgs  [Lorg/jruby/runtime/builtin/IRubyObject;
            0   15     2  mergeEnv  Ljava/util/Map;
            1   15     3       pwd  Ljava/io/File;
            2   15     4       cfg  Lorg/jruby/util/ShellLauncher$LaunchConfig;
            7   10     5  ipScript  Lorg/jruby/util/ShellLauncher$ScriptThreadProcess;
           11   12     5         e  Ljava/io/IOException;
      Exception table:
        from    to  target  type
           4     9      10  Class java.io.IOException
           4     9      12  Class java.lang.InterruptedException
    MethodParameters:
          Name  Flags
      runtime   
      rawArgs   
      mergeEnv  

  public static int runAndWait(org.jruby.Ruby, org.jruby.runtime.builtin.IRubyObject[], java.io.OutputStream);
    descriptor: (Lorg/jruby/Ruby;[Lorg/jruby/runtime/builtin/IRubyObject;Ljava/io/OutputStream;)I
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=4, locals=3, args_size=3
        start local 0 // org.jruby.Ruby runtime
        start local 1 // org.jruby.runtime.builtin.IRubyObject[] rawArgs
        start local 2 // java.io.OutputStream output
         0: .line 611
            aload 0 /* runtime */
            aload 1 /* rawArgs */
            aload 2 /* output */
            iconst_1
            invokestatic org.jruby.util.ShellLauncher.runAndWait:(Lorg/jruby/Ruby;[Lorg/jruby/runtime/builtin/IRubyObject;Ljava/io/OutputStream;Z)I
            ireturn
        end local 2 // java.io.OutputStream output
        end local 1 // org.jruby.runtime.builtin.IRubyObject[] rawArgs
        end local 0 // org.jruby.Ruby runtime
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    1     0  runtime  Lorg/jruby/Ruby;
            0    1     1  rawArgs  [Lorg/jruby/runtime/builtin/IRubyObject;
            0    1     2   output  Ljava/io/OutputStream;
    MethodParameters:
         Name  Flags
      runtime  
      rawArgs  
      output   

  public static int runAndWait(org.jruby.Ruby, org.jruby.runtime.builtin.IRubyObject[], java.io.OutputStream, boolean);
    descriptor: (Lorg/jruby/Ruby;[Lorg/jruby/runtime/builtin/IRubyObject;Ljava/io/OutputStream;Z)I
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=4, locals=4, args_size=4
        start local 0 // org.jruby.Ruby runtime
        start local 1 // org.jruby.runtime.builtin.IRubyObject[] rawArgs
        start local 2 // java.io.OutputStream output
        start local 3 // boolean doExecutableSearch
         0: .line 615
            aload 0 /* runtime */
            aload 1 /* rawArgs */
            aload 2 /* output */
            iload 3 /* doExecutableSearch */
            invokestatic org.jruby.util.ShellLauncher.runAndWaitPid:(Lorg/jruby/Ruby;[Lorg/jruby/runtime/builtin/IRubyObject;Ljava/io/OutputStream;Z)[J
            iconst_0
            laload
            l2i
            ireturn
        end local 3 // boolean doExecutableSearch
        end local 2 // java.io.OutputStream output
        end local 1 // org.jruby.runtime.builtin.IRubyObject[] rawArgs
        end local 0 // org.jruby.Ruby runtime
      LocalVariableTable:
        Start  End  Slot                Name  Signature
            0    1     0             runtime  Lorg/jruby/Ruby;
            0    1     1             rawArgs  [Lorg/jruby/runtime/builtin/IRubyObject;
            0    1     2              output  Ljava/io/OutputStream;
            0    1     3  doExecutableSearch  Z
    MethodParameters:
                    Name  Flags
      runtime             
      rawArgs             
      output              
      doExecutableSearch  

  public static long[] runAndWaitPid(org.jruby.Ruby, org.jruby.runtime.builtin.IRubyObject[], java.io.OutputStream, boolean);
    descriptor: (Lorg/jruby/Ruby;[Lorg/jruby/runtime/builtin/IRubyObject;Ljava/io/OutputStream;Z)[J
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=5, locals=7, args_size=4
        start local 0 // org.jruby.Ruby runtime
        start local 1 // org.jruby.runtime.builtin.IRubyObject[] rawArgs
        start local 2 // java.io.OutputStream output
        start local 3 // boolean doExecutableSearch
         0: .line 619
            aload 0 /* runtime */
            invokevirtual org.jruby.Ruby.getErrorStream:()Ljava/io/PrintStream;
            astore 4 /* error */
        start local 4 // java.io.OutputStream error
         1: .line 620
            aload 0 /* runtime */
            invokevirtual org.jruby.Ruby.getInputStream:()Ljava/io/InputStream;
            astore 5 /* input */
        start local 5 // java.io.InputStream input
         2: .line 622
            aload 0 /* runtime */
            aload 1 /* rawArgs */
            iload 3 /* doExecutableSearch */
            invokestatic org.jruby.util.ShellLauncher.run:(Lorg/jruby/Ruby;[Lorg/jruby/runtime/builtin/IRubyObject;Z)Ljava/lang/Process;
            astore 6 /* aProcess */
        start local 6 // java.lang.Process aProcess
         3: .line 623
            aload 0 /* runtime */
            aload 6 /* aProcess */
            aload 5 /* input */
            aload 2 /* output */
            aload 4 /* error */
            invokestatic org.jruby.util.ShellLauncher.handleStreams:(Lorg/jruby/Ruby;Ljava/lang/Process;Ljava/io/InputStream;Ljava/io/OutputStream;Ljava/io/OutputStream;)V
         4: .line 624
            iconst_2
            newarray 11
            dup
            iconst_0
            aload 6 /* aProcess */
            invokevirtual java.lang.Process.waitFor:()I
            i2l
            lastore
            dup
            iconst_1
            aload 6 /* aProcess */
            invokestatic org.jruby.util.ShellLauncher.getPidFromProcess:(Ljava/lang/Process;)J
            lastore
         5: areturn
        end local 6 // java.lang.Process aProcess
         6: .line 625
      StackMap locals: org.jruby.Ruby org.jruby.runtime.builtin.IRubyObject[] java.io.OutputStream int java.io.OutputStream java.io.InputStream
      StackMap stack: java.io.IOException
            astore 6 /* e */
        start local 6 // java.io.IOException e
         7: .line 626
            aload 0 /* runtime */
            aload 6 /* e */
            invokevirtual org.jruby.Ruby.newIOErrorFromException:(Ljava/io/IOException;)Lorg/jruby/exceptions/RaiseException;
            athrow
        end local 6 // java.io.IOException e
         8: .line 627
      StackMap locals:
      StackMap stack: java.lang.InterruptedException
            pop
         9: .line 628
            aload 0 /* runtime */
            ldc "unexpected interrupt"
            invokevirtual org.jruby.Ruby.newThreadError:(Ljava/lang/String;)Lorg/jruby/exceptions/RaiseException;
            athrow
        end local 5 // java.io.InputStream input
        end local 4 // java.io.OutputStream error
        end local 3 // boolean doExecutableSearch
        end local 2 // java.io.OutputStream output
        end local 1 // org.jruby.runtime.builtin.IRubyObject[] rawArgs
        end local 0 // org.jruby.Ruby runtime
      LocalVariableTable:
        Start  End  Slot                Name  Signature
            0   10     0             runtime  Lorg/jruby/Ruby;
            0   10     1             rawArgs  [Lorg/jruby/runtime/builtin/IRubyObject;
            0   10     2              output  Ljava/io/OutputStream;
            0   10     3  doExecutableSearch  Z
            1   10     4               error  Ljava/io/OutputStream;
            2   10     5               input  Ljava/io/InputStream;
            3    6     6            aProcess  Ljava/lang/Process;
            7    8     6                   e  Ljava/io/IOException;
      Exception table:
        from    to  target  type
           2     5       6  Class java.io.IOException
           2     5       8  Class java.lang.InterruptedException
    MethodParameters:
                    Name  Flags
      runtime             
      rawArgs             
      output              
      doExecutableSearch  

  private static long runWithoutWait(org.jruby.Ruby, org.jruby.runtime.builtin.IRubyObject[], java.io.OutputStream);
    descriptor: (Lorg/jruby/Ruby;[Lorg/jruby/runtime/builtin/IRubyObject;Ljava/io/OutputStream;)J
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=4, locals=5, args_size=3
        start local 0 // org.jruby.Ruby runtime
        start local 1 // org.jruby.runtime.builtin.IRubyObject[] rawArgs
        start local 2 // java.io.OutputStream output
         0: .line 633
            aload 0 /* runtime */
            invokevirtual org.jruby.Ruby.getErrorStream:()Ljava/io/PrintStream;
            astore 3 /* error */
        start local 3 // java.io.OutputStream error
         1: .line 635
            aload 0 /* runtime */
            aload 1 /* rawArgs */
            iconst_1
            invokestatic org.jruby.util.ShellLauncher.run:(Lorg/jruby/Ruby;[Lorg/jruby/runtime/builtin/IRubyObject;Z)Ljava/lang/Process;
            astore 4 /* aProcess */
        start local 4 // java.lang.Process aProcess
         2: .line 636
            aload 0 /* runtime */
            aload 4 /* aProcess */
            aload 2 /* output */
            aload 3 /* error */
            invokestatic org.jruby.util.ShellLauncher.handleStreamsNonblocking:(Lorg/jruby/Ruby;Ljava/lang/Process;Ljava/io/OutputStream;Ljava/io/OutputStream;)V
         3: .line 637
            aload 4 /* aProcess */
            invokestatic org.jruby.util.ShellLauncher.getPidFromProcess:(Ljava/lang/Process;)J
         4: lreturn
        end local 4 // java.lang.Process aProcess
         5: .line 638
      StackMap locals: org.jruby.Ruby org.jruby.runtime.builtin.IRubyObject[] java.io.OutputStream java.io.OutputStream
      StackMap stack: java.io.IOException
            astore 4 /* e */
        start local 4 // java.io.IOException e
         6: .line 639
            aload 0 /* runtime */
            aload 4 /* e */
            invokevirtual org.jruby.Ruby.newIOErrorFromException:(Ljava/io/IOException;)Lorg/jruby/exceptions/RaiseException;
            athrow
        end local 4 // java.io.IOException e
        end local 3 // java.io.OutputStream error
        end local 2 // java.io.OutputStream output
        end local 1 // org.jruby.runtime.builtin.IRubyObject[] rawArgs
        end local 0 // org.jruby.Ruby runtime
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    7     0   runtime  Lorg/jruby/Ruby;
            0    7     1   rawArgs  [Lorg/jruby/runtime/builtin/IRubyObject;
            0    7     2    output  Ljava/io/OutputStream;
            1    7     3     error  Ljava/io/OutputStream;
            2    5     4  aProcess  Ljava/lang/Process;
            6    7     4         e  Ljava/io/IOException;
      Exception table:
        from    to  target  type
           1     4       5  Class java.io.IOException
    MethodParameters:
         Name  Flags
      runtime  
      rawArgs  
      output   

  public static long getPidFromProcess(java.lang.Process);
    descriptor: (Ljava/lang/Process;)J
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // java.lang.Process process
         0: .line 644
            aload 0 /* process */
            instanceof org.jruby.util.ShellLauncher$ScriptThreadProcess
            ifeq 2
         1: .line 645
            aload 0 /* process */
            invokevirtual java.lang.Object.hashCode:()I
            i2l
            lreturn
         2: .line 646
      StackMap locals:
      StackMap stack:
            aload 0 /* process */
            instanceof org.jruby.util.ShellLauncher$POpenProcess
            ifeq 4
         3: .line 647
            aload 0 /* process */
            checkcast org.jruby.util.ShellLauncher$POpenProcess
            invokevirtual org.jruby.util.ShellLauncher$POpenProcess.getChild:()Ljava/lang/Process;
            invokestatic org.jruby.util.ShellLauncher.reflectPidFromProcess:(Ljava/lang/Process;)J
            lreturn
         4: .line 649
      StackMap locals:
      StackMap stack:
            aload 0 /* process */
            invokestatic org.jruby.util.ShellLauncher.reflectPidFromProcess:(Ljava/lang/Process;)J
            lreturn
        end local 0 // java.lang.Process process
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    5     0  process  Ljava/lang/Process;
    MethodParameters:
         Name  Flags
      process  

  public static long reflectPidFromProcess(java.lang.Process);
    descriptor: (Ljava/lang/Process;)J
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // java.lang.Process process
         0: .line 748
            getstatic org.jruby.util.ShellLauncher.PID_GETTER:Lorg/jruby/util/ShellLauncher$PidGetter;
            aload 0 /* process */
            invokeinterface org.jruby.util.ShellLauncher$PidGetter.getPid:(Ljava/lang/Process;)J
            lreturn
        end local 0 // java.lang.Process process
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    1     0  process  Ljava/lang/Process;
    MethodParameters:
         Name  Flags
      process  

  public static java.lang.Process run(org.jruby.Ruby, org.jruby.runtime.builtin.IRubyObject);
    descriptor: (Lorg/jruby/Ruby;Lorg/jruby/runtime/builtin/IRubyObject;)Ljava/lang/Process;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=5, locals=2, args_size=2
        start local 0 // org.jruby.Ruby runtime
        start local 1 // org.jruby.runtime.builtin.IRubyObject string
         0: .line 752
            aload 0 /* runtime */
            iconst_1
            anewarray org.jruby.runtime.builtin.IRubyObject
            dup
            iconst_0
            aload 1 /* string */
            aastore
            iconst_0
            invokestatic org.jruby.util.ShellLauncher.run:(Lorg/jruby/Ruby;[Lorg/jruby/runtime/builtin/IRubyObject;Z)Ljava/lang/Process;
            areturn
        end local 1 // org.jruby.runtime.builtin.IRubyObject string
        end local 0 // org.jruby.Ruby runtime
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    1     0  runtime  Lorg/jruby/Ruby;
            0    1     1   string  Lorg/jruby/runtime/builtin/IRubyObject;
    Exceptions:
      throws java.io.IOException
    MethodParameters:
         Name  Flags
      runtime  
      string   

  public static org.jruby.util.ShellLauncher$POpenProcess popen(org.jruby.Ruby, org.jruby.runtime.builtin.IRubyObject, org.jruby.util.io.ModeFlags);
    descriptor: (Lorg/jruby/Ruby;Lorg/jruby/runtime/builtin/IRubyObject;Lorg/jruby/util/io/ModeFlags;)Lorg/jruby/util/ShellLauncher$POpenProcess;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=7, locals=3, args_size=3
        start local 0 // org.jruby.Ruby runtime
        start local 1 // org.jruby.runtime.builtin.IRubyObject string
        start local 2 // org.jruby.util.io.ModeFlags modes
         0: .line 756
            new org.jruby.util.ShellLauncher$POpenProcess
            dup
            aload 0 /* runtime */
            iconst_1
            anewarray org.jruby.runtime.builtin.IRubyObject
            dup
            iconst_0
            aload 1 /* string */
            aastore
            aconst_null
            iconst_1
            invokestatic org.jruby.util.ShellLauncher.popenShared:(Lorg/jruby/Ruby;[Lorg/jruby/runtime/builtin/IRubyObject;Ljava/util/Map;Z)Ljava/lang/Process;
            aload 0 /* runtime */
            aload 2 /* modes */
            invokespecial org.jruby.util.ShellLauncher$POpenProcess.<init>:(Ljava/lang/Process;Lorg/jruby/Ruby;Lorg/jruby/util/io/ModeFlags;)V
            areturn
        end local 2 // org.jruby.util.io.ModeFlags modes
        end local 1 // org.jruby.runtime.builtin.IRubyObject string
        end local 0 // org.jruby.Ruby runtime
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    1     0  runtime  Lorg/jruby/Ruby;
            0    1     1   string  Lorg/jruby/runtime/builtin/IRubyObject;
            0    1     2    modes  Lorg/jruby/util/io/ModeFlags;
    Exceptions:
      throws java.io.IOException
    MethodParameters:
         Name  Flags
      runtime  
      string   
      modes    

  public static org.jruby.util.ShellLauncher$POpenProcess popen(org.jruby.Ruby, org.jruby.runtime.builtin.IRubyObject[], java.util.Map, org.jruby.util.io.ModeFlags);
    descriptor: (Lorg/jruby/Ruby;[Lorg/jruby/runtime/builtin/IRubyObject;Ljava/util/Map;Lorg/jruby/util/io/ModeFlags;)Lorg/jruby/util/ShellLauncher$POpenProcess;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=5, locals=4, args_size=4
        start local 0 // org.jruby.Ruby runtime
        start local 1 // org.jruby.runtime.builtin.IRubyObject[] strings
        start local 2 // java.util.Map env
        start local 3 // org.jruby.util.io.ModeFlags modes
         0: .line 760
            new org.jruby.util.ShellLauncher$POpenProcess
            dup
            aload 0 /* runtime */
            aload 1 /* strings */
            aload 2 /* env */
            invokestatic org.jruby.util.ShellLauncher.popenShared:(Lorg/jruby/Ruby;[Lorg/jruby/runtime/builtin/IRubyObject;Ljava/util/Map;)Ljava/lang/Process;
            aload 0 /* runtime */
            aload 3 /* modes */
            invokespecial org.jruby.util.ShellLauncher$POpenProcess.<init>:(Ljava/lang/Process;Lorg/jruby/Ruby;Lorg/jruby/util/io/ModeFlags;)V
            areturn
        end local 3 // org.jruby.util.io.ModeFlags modes
        end local 2 // java.util.Map env
        end local 1 // org.jruby.runtime.builtin.IRubyObject[] strings
        end local 0 // org.jruby.Ruby runtime
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    1     0  runtime  Lorg/jruby/Ruby;
            0    1     1  strings  [Lorg/jruby/runtime/builtin/IRubyObject;
            0    1     2      env  Ljava/util/Map;
            0    1     3    modes  Lorg/jruby/util/io/ModeFlags;
    Exceptions:
      throws java.io.IOException
    MethodParameters:
         Name  Flags
      runtime  
      strings  
      env      
      modes    

  public static org.jruby.util.ShellLauncher$POpenProcess popen(org.jruby.Ruby, org.jruby.runtime.builtin.IRubyObject, java.util.Map, org.jruby.util.io.ModeFlags);
    descriptor: (Lorg/jruby/Ruby;Lorg/jruby/runtime/builtin/IRubyObject;Ljava/util/Map;Lorg/jruby/util/io/ModeFlags;)Lorg/jruby/util/ShellLauncher$POpenProcess;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=7, locals=4, args_size=4
        start local 0 // org.jruby.Ruby runtime
        start local 1 // org.jruby.runtime.builtin.IRubyObject string
        start local 2 // java.util.Map env
        start local 3 // org.jruby.util.io.ModeFlags modes
         0: .line 764
            new org.jruby.util.ShellLauncher$POpenProcess
            dup
            aload 0 /* runtime */
            iconst_1
            anewarray org.jruby.runtime.builtin.IRubyObject
            dup
            iconst_0
            aload 1 /* string */
            aastore
            aload 2 /* env */
            iconst_1
            invokestatic org.jruby.util.ShellLauncher.popenShared:(Lorg/jruby/Ruby;[Lorg/jruby/runtime/builtin/IRubyObject;Ljava/util/Map;Z)Ljava/lang/Process;
            aload 0 /* runtime */
            aload 3 /* modes */
            invokespecial org.jruby.util.ShellLauncher$POpenProcess.<init>:(Ljava/lang/Process;Lorg/jruby/Ruby;Lorg/jruby/util/io/ModeFlags;)V
            areturn
        end local 3 // org.jruby.util.io.ModeFlags modes
        end local 2 // java.util.Map env
        end local 1 // org.jruby.runtime.builtin.IRubyObject string
        end local 0 // org.jruby.Ruby runtime
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    1     0  runtime  Lorg/jruby/Ruby;
            0    1     1   string  Lorg/jruby/runtime/builtin/IRubyObject;
            0    1     2      env  Ljava/util/Map;
            0    1     3    modes  Lorg/jruby/util/io/ModeFlags;
    Exceptions:
      throws java.io.IOException
    MethodParameters:
         Name  Flags
      runtime  
      string   
      env      
      modes    

  public static org.jruby.util.ShellLauncher$POpenProcess popen(org.jruby.Ruby, org.jruby.runtime.builtin.IRubyObject, org.jruby.util.io.IOOptions);
    descriptor: (Lorg/jruby/Ruby;Lorg/jruby/runtime/builtin/IRubyObject;Lorg/jruby/util/io/IOOptions;)Lorg/jruby/util/ShellLauncher$POpenProcess;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=7, locals=3, args_size=3
        start local 0 // org.jruby.Ruby runtime
        start local 1 // org.jruby.runtime.builtin.IRubyObject string
        start local 2 // org.jruby.util.io.IOOptions modes
         0: .line 769
            new org.jruby.util.ShellLauncher$POpenProcess
            dup
            aload 0 /* runtime */
            iconst_1
            anewarray org.jruby.runtime.builtin.IRubyObject
            dup
            iconst_0
            aload 1 /* string */
            aastore
            aconst_null
            iconst_1
            invokestatic org.jruby.util.ShellLauncher.popenShared:(Lorg/jruby/Ruby;[Lorg/jruby/runtime/builtin/IRubyObject;Ljava/util/Map;Z)Ljava/lang/Process;
            aload 0 /* runtime */
            aload 2 /* modes */
            invokespecial org.jruby.util.ShellLauncher$POpenProcess.<init>:(Ljava/lang/Process;Lorg/jruby/Ruby;Lorg/jruby/util/io/IOOptions;)V
            areturn
        end local 2 // org.jruby.util.io.IOOptions modes
        end local 1 // org.jruby.runtime.builtin.IRubyObject string
        end local 0 // org.jruby.Ruby runtime
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    1     0  runtime  Lorg/jruby/Ruby;
            0    1     1   string  Lorg/jruby/runtime/builtin/IRubyObject;
            0    1     2    modes  Lorg/jruby/util/io/IOOptions;
    Exceptions:
      throws java.io.IOException
    RuntimeVisibleAnnotations: 
      java.lang.Deprecated()
    MethodParameters:
         Name  Flags
      runtime  
      string   
      modes    

  public static org.jruby.util.ShellLauncher$POpenProcess popen(org.jruby.Ruby, org.jruby.runtime.builtin.IRubyObject[], java.util.Map, org.jruby.util.io.IOOptions);
    descriptor: (Lorg/jruby/Ruby;[Lorg/jruby/runtime/builtin/IRubyObject;Ljava/util/Map;Lorg/jruby/util/io/IOOptions;)Lorg/jruby/util/ShellLauncher$POpenProcess;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=5, locals=4, args_size=4
        start local 0 // org.jruby.Ruby runtime
        start local 1 // org.jruby.runtime.builtin.IRubyObject[] strings
        start local 2 // java.util.Map env
        start local 3 // org.jruby.util.io.IOOptions modes
         0: .line 774
            new org.jruby.util.ShellLauncher$POpenProcess
            dup
            aload 0 /* runtime */
            aload 1 /* strings */
            aload 2 /* env */
            invokestatic org.jruby.util.ShellLauncher.popenShared:(Lorg/jruby/Ruby;[Lorg/jruby/runtime/builtin/IRubyObject;Ljava/util/Map;)Ljava/lang/Process;
            aload 0 /* runtime */
            aload 3 /* modes */
            invokespecial org.jruby.util.ShellLauncher$POpenProcess.<init>:(Ljava/lang/Process;Lorg/jruby/Ruby;Lorg/jruby/util/io/IOOptions;)V
            areturn
        end local 3 // org.jruby.util.io.IOOptions modes
        end local 2 // java.util.Map env
        end local 1 // org.jruby.runtime.builtin.IRubyObject[] strings
        end local 0 // org.jruby.Ruby runtime
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    1     0  runtime  Lorg/jruby/Ruby;
            0    1     1  strings  [Lorg/jruby/runtime/builtin/IRubyObject;
            0    1     2      env  Ljava/util/Map;
            0    1     3    modes  Lorg/jruby/util/io/IOOptions;
    Exceptions:
      throws java.io.IOException
    RuntimeVisibleAnnotations: 
      java.lang.Deprecated()
    MethodParameters:
         Name  Flags
      runtime  
      strings  
      env      
      modes    

  public static org.jruby.util.ShellLauncher$POpenProcess popen3(org.jruby.Ruby, org.jruby.runtime.builtin.IRubyObject[]);
    descriptor: (Lorg/jruby/Ruby;[Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/util/ShellLauncher$POpenProcess;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=4, locals=2, args_size=2
        start local 0 // org.jruby.Ruby runtime
        start local 1 // org.jruby.runtime.builtin.IRubyObject[] strings
         0: .line 779
            new org.jruby.util.ShellLauncher$POpenProcess
            dup
            aload 0 /* runtime */
            aload 1 /* strings */
            invokestatic org.jruby.util.ShellLauncher.popenShared:(Lorg/jruby/Ruby;[Lorg/jruby/runtime/builtin/IRubyObject;)Ljava/lang/Process;
            invokespecial org.jruby.util.ShellLauncher$POpenProcess.<init>:(Ljava/lang/Process;)V
            areturn
        end local 1 // org.jruby.runtime.builtin.IRubyObject[] strings
        end local 0 // org.jruby.Ruby runtime
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    1     0  runtime  Lorg/jruby/Ruby;
            0    1     1  strings  [Lorg/jruby/runtime/builtin/IRubyObject;
    Exceptions:
      throws java.io.IOException
    RuntimeVisibleAnnotations: 
      java.lang.Deprecated()
    MethodParameters:
         Name  Flags
      runtime  
      strings  

  public static org.jruby.util.ShellLauncher$POpenProcess popen3(org.jruby.Ruby, org.jruby.runtime.builtin.IRubyObject[], boolean);
    descriptor: (Lorg/jruby/Ruby;[Lorg/jruby/runtime/builtin/IRubyObject;Z)Lorg/jruby/util/ShellLauncher$POpenProcess;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=6, locals=3, args_size=3
        start local 0 // org.jruby.Ruby runtime
        start local 1 // org.jruby.runtime.builtin.IRubyObject[] strings
        start local 2 // boolean addShell
         0: .line 784
            new org.jruby.util.ShellLauncher$POpenProcess
            dup
            aload 0 /* runtime */
            aload 1 /* strings */
            aconst_null
            iload 2 /* addShell */
            invokestatic org.jruby.util.ShellLauncher.popenShared:(Lorg/jruby/Ruby;[Lorg/jruby/runtime/builtin/IRubyObject;Ljava/util/Map;Z)Ljava/lang/Process;
            invokespecial org.jruby.util.ShellLauncher$POpenProcess.<init>:(Ljava/lang/Process;)V
            areturn
        end local 2 // boolean addShell
        end local 1 // org.jruby.runtime.builtin.IRubyObject[] strings
        end local 0 // org.jruby.Ruby runtime
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    1     0   runtime  Lorg/jruby/Ruby;
            0    1     1   strings  [Lorg/jruby/runtime/builtin/IRubyObject;
            0    1     2  addShell  Z
    Exceptions:
      throws java.io.IOException
    RuntimeVisibleAnnotations: 
      java.lang.Deprecated()
    MethodParameters:
          Name  Flags
      runtime   
      strings   
      addShell  

  private static java.lang.Process popenShared(org.jruby.Ruby, org.jruby.runtime.builtin.IRubyObject[]);
    descriptor: (Lorg/jruby/Ruby;[Lorg/jruby/runtime/builtin/IRubyObject;)Ljava/lang/Process;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // org.jruby.Ruby runtime
        start local 1 // org.jruby.runtime.builtin.IRubyObject[] strings
         0: .line 788
            aload 0 /* runtime */
            aload 1 /* strings */
            aconst_null
            invokestatic org.jruby.util.ShellLauncher.popenShared:(Lorg/jruby/Ruby;[Lorg/jruby/runtime/builtin/IRubyObject;Ljava/util/Map;)Ljava/lang/Process;
            areturn
        end local 1 // org.jruby.runtime.builtin.IRubyObject[] strings
        end local 0 // org.jruby.Ruby runtime
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    1     0  runtime  Lorg/jruby/Ruby;
            0    1     1  strings  [Lorg/jruby/runtime/builtin/IRubyObject;
    Exceptions:
      throws java.io.IOException
    MethodParameters:
         Name  Flags
      runtime  
      strings  

  private static java.lang.Process popenShared(org.jruby.Ruby, org.jruby.runtime.builtin.IRubyObject[], java.util.Map);
    descriptor: (Lorg/jruby/Ruby;[Lorg/jruby/runtime/builtin/IRubyObject;Ljava/util/Map;)Ljava/lang/Process;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=4, locals=3, args_size=3
        start local 0 // org.jruby.Ruby runtime
        start local 1 // org.jruby.runtime.builtin.IRubyObject[] strings
        start local 2 // java.util.Map env
         0: .line 792
            aload 0 /* runtime */
            aload 1 /* strings */
            aload 2 /* env */
            iconst_0
            invokestatic org.jruby.util.ShellLauncher.popenShared:(Lorg/jruby/Ruby;[Lorg/jruby/runtime/builtin/IRubyObject;Ljava/util/Map;Z)Ljava/lang/Process;
            areturn
        end local 2 // java.util.Map env
        end local 1 // org.jruby.runtime.builtin.IRubyObject[] strings
        end local 0 // org.jruby.Ruby runtime
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    1     0  runtime  Lorg/jruby/Ruby;
            0    1     1  strings  [Lorg/jruby/runtime/builtin/IRubyObject;
            0    1     2      env  Ljava/util/Map;
    Exceptions:
      throws java.io.IOException
    MethodParameters:
         Name  Flags
      runtime  
      strings  
      env      

  private static java.lang.Process popenShared(org.jruby.Ruby, org.jruby.runtime.builtin.IRubyObject[], java.util.Map, boolean);
    descriptor: (Lorg/jruby/Ruby;[Lorg/jruby/runtime/builtin/IRubyObject;Ljava/util/Map;Z)Ljava/lang/Process;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=5, locals=15, args_size=4
        start local 0 // org.jruby.Ruby runtime
        start local 1 // org.jruby.runtime.builtin.IRubyObject[] strings
        start local 2 // java.util.Map env
        start local 3 // boolean addShell
         0: .line 796
            aload 0 /* runtime */
            invokestatic org.jruby.util.ShellLauncher.getShell:(Lorg/jruby/Ruby;)Ljava/lang/String;
            astore 4 /* shell */
        start local 4 // java.lang.String shell
         1: .line 798
            new java.io.File
            dup
            aload 0 /* runtime */
            invokevirtual org.jruby.Ruby.getCurrentDirectory:()Ljava/lang/String;
            invokespecial java.io.File.<init>:(Ljava/lang/String;)V
            astore 6 /* pwd */
        start local 6 // java.io.File pwd
         2: .line 803
            aload 2 /* env */
            ifnonnull 6
            aload 1 /* strings */
            arraylength
            ifle 6
            aload 0 /* runtime */
            aload 1 /* strings */
            iconst_0
            aaload
            invokestatic org.jruby.util.TypeConverter.checkHashType:(Lorg/jruby/Ruby;Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/runtime/builtin/IRubyObject;
            dup
            astore 7 /* envHash */
        start local 7 // org.jruby.runtime.builtin.IRubyObject envHash
         3: invokeinterface org.jruby.runtime.builtin.IRubyObject.isNil:()Z
            ifne 6
         4: .line 804
            aload 1 /* strings */
            iconst_1
            aload 1 /* strings */
            arraylength
            invokestatic java.util.Arrays.copyOfRange:([Ljava/lang/Object;II)[Ljava/lang/Object;
            checkcast org.jruby.runtime.builtin.IRubyObject[]
            astore 1 /* strings */
         5: .line 805
            aload 7 /* envHash */
            checkcast java.util.Map
            astore 2 /* env */
        end local 7 // org.jruby.runtime.builtin.IRubyObject envHash
         6: .line 809
      StackMap locals: org.jruby.Ruby org.jruby.runtime.builtin.IRubyObject[] java.util.Map int java.lang.String top java.io.File
      StackMap stack:
            aload 1 /* strings */
            arraylength
            iconst_1
            if_icmple 11
            aload 0 /* runtime */
            aload 1 /* strings */
            aload 1 /* strings */
            arraylength
            iconst_1
            isub
            aaload
            invokestatic org.jruby.util.TypeConverter.checkHashType:(Lorg/jruby/Ruby;Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/runtime/builtin/IRubyObject;
            dup
            astore 7 /* envHash */
        start local 7 // org.jruby.runtime.builtin.IRubyObject envHash
         7: invokeinterface org.jruby.runtime.builtin.IRubyObject.isNil:()Z
            ifne 11
         8: .line 810
            aload 7 /* envHash */
            checkcast org.jruby.RubyHash
            invokevirtual org.jruby.RubyHash.isEmpty:()Z
            ifne 10
         9: .line 811
            aload 0 /* runtime */
            invokevirtual org.jruby.Ruby.getWarnings:()Lorg/jruby/common/RubyWarnings;
            ldc "popen3 does not support spawn options in JRuby 1.7"
            invokevirtual org.jruby.common.RubyWarnings.warn:(Ljava/lang/String;)V
        10: .line 813
      StackMap locals: org.jruby.runtime.builtin.IRubyObject
      StackMap stack:
            aload 1 /* strings */
            iconst_0
            aload 1 /* strings */
            arraylength
            iconst_1
            isub
            invokestatic java.util.Arrays.copyOfRange:([Ljava/lang/Object;II)[Ljava/lang/Object;
            checkcast org.jruby.runtime.builtin.IRubyObject[]
            astore 1 /* strings */
        end local 7 // org.jruby.runtime.builtin.IRubyObject envHash
        11: .line 816
      StackMap locals:
      StackMap stack:
            aload 0 /* runtime */
            invokevirtual org.jruby.Ruby.getCurrentContext:()Lorg/jruby/runtime/ThreadContext;
            aload 0 /* runtime */
            aload 1 /* strings */
            invokestatic org.jruby.util.ShellLauncher.parseCommandLine:(Lorg/jruby/runtime/ThreadContext;Lorg/jruby/Ruby;[Lorg/jruby/runtime/builtin/IRubyObject;)[Ljava/lang/String;
            astore 8 /* args */
        start local 8 // java.lang.String[] args
        12: .line 817
            new org.jruby.util.ShellLauncher$LaunchConfig
            dup
            aload 0 /* runtime */
            aload 1 /* strings */
            iconst_0
            invokespecial org.jruby.util.ShellLauncher$LaunchConfig.<init>:(Lorg/jruby/Ruby;[Lorg/jruby/runtime/builtin/IRubyObject;Z)V
            astore 9 /* lc */
        start local 9 // org.jruby.util.ShellLauncher$LaunchConfig lc
        13: .line 818
            getstatic jnr.posix.util.Platform.IS_WINDOWS:Z
            ifeq 14
            aload 9 /* lc */
            invokevirtual org.jruby.util.ShellLauncher$LaunchConfig.shouldRunInShell:()Z
            goto 15
      StackMap locals: org.jruby.Ruby org.jruby.runtime.builtin.IRubyObject[] java.util.Map int java.lang.String top java.io.File top java.lang.String[] org.jruby.util.ShellLauncher$LaunchConfig
      StackMap stack:
        14: iconst_0
      StackMap locals:
      StackMap stack: int
        15: istore 10 /* useShell */
        start local 10 // boolean useShell
        16: .line 819
            iload 3 /* addShell */
            ifeq 21
            aload 8 /* args */
            dup
            astore 14
            arraylength
            istore 13
            iconst_0
            istore 12
            goto 20
      StackMap locals: org.jruby.Ruby org.jruby.runtime.builtin.IRubyObject[] java.util.Map int java.lang.String top java.io.File top java.lang.String[] org.jruby.util.ShellLauncher$LaunchConfig int top int int java.lang.String[]
      StackMap stack:
        17: aload 14
            iload 12
            aaload
            astore 11 /* arg */
        start local 11 // java.lang.String arg
        18: iload 10 /* useShell */
            aload 11 /* arg */
            invokestatic org.jruby.util.ShellLauncher.shouldUseShell:(Ljava/lang/String;)Z
            ior
            istore 10 /* useShell */
        end local 11 // java.lang.String arg
        19: iinc 12 1
      StackMap locals:
      StackMap stack:
        20: iload 12
            iload 13
            if_icmplt 17
        21: .line 821
      StackMap locals: org.jruby.Ruby org.jruby.runtime.builtin.IRubyObject[] java.util.Map int java.lang.String top java.io.File top java.lang.String[] org.jruby.util.ShellLauncher$LaunchConfig int
      StackMap stack:
            aload 1 /* strings */
            arraylength
            iconst_1
            if_icmpne 33
        22: .line 822
            iload 10 /* useShell */
            ifeq 31
        23: .line 824
            iconst_3
            anewarray java.lang.String
            astore 11 /* argArray */
        start local 11 // java.lang.String[] argArray
        24: .line 825
            aload 11 /* argArray */
            iconst_0
            aload 4 /* shell */
            aastore
        25: .line 826
            aload 11 /* argArray */
            iconst_1
            aload 4 /* shell */
            ldc "sh"
            invokevirtual java.lang.String.endsWith:(Ljava/lang/String;)Z
            ifeq 26
            ldc "-c"
            goto 27
      StackMap locals: org.jruby.Ruby org.jruby.runtime.builtin.IRubyObject[] java.util.Map int java.lang.String top java.io.File top java.lang.String[] org.jruby.util.ShellLauncher$LaunchConfig int java.lang.String[]
      StackMap stack: java.lang.String[] int
        26: ldc "/c"
      StackMap locals: org.jruby.Ruby org.jruby.runtime.builtin.IRubyObject[] java.util.Map int java.lang.String top java.io.File top java.lang.String[] org.jruby.util.ShellLauncher$LaunchConfig int java.lang.String[]
      StackMap stack: java.lang.String[] int java.lang.String
        27: aastore
        28: .line 827
            aload 11 /* argArray */
            iconst_2
            aload 1 /* strings */
            iconst_0
            aaload
            invokeinterface org.jruby.runtime.builtin.IRubyObject.asJavaString:()Ljava/lang/String;
            aastore
        29: .line 828
            aload 0 /* runtime */
            aload 11 /* argArray */
            aload 0 /* runtime */
            aload 2 /* env */
            invokestatic org.jruby.util.ShellLauncher.getCurrentEnv:(Lorg/jruby/Ruby;Ljava/util/Map;)[Ljava/lang/String;
            aload 6 /* pwd */
            invokestatic org.jruby.util.ShellLauncher.buildProcess:(Lorg/jruby/Ruby;[Ljava/lang/String;[Ljava/lang/String;Ljava/io/File;)Ljava/lang/Process;
            astore 5 /* childProcess */
        end local 11 // java.lang.String[] argArray
        start local 5 // java.lang.Process childProcess
        30: .line 829
            goto 46
        end local 5 // java.lang.Process childProcess
        31: .line 830
      StackMap locals:
      StackMap stack:
            aload 0 /* runtime */
            aload 8 /* args */
            aload 0 /* runtime */
            aload 2 /* env */
            invokestatic org.jruby.util.ShellLauncher.getCurrentEnv:(Lorg/jruby/Ruby;Ljava/util/Map;)[Ljava/lang/String;
            aload 6 /* pwd */
            invokestatic org.jruby.util.ShellLauncher.buildProcess:(Lorg/jruby/Ruby;[Ljava/lang/String;[Ljava/lang/String;Ljava/io/File;)Ljava/lang/Process;
            astore 5 /* childProcess */
        start local 5 // java.lang.Process childProcess
        32: .line 832
            goto 46
        end local 5 // java.lang.Process childProcess
        33: .line 833
      StackMap locals:
      StackMap stack:
            iload 10 /* useShell */
            ifeq 42
        34: .line 834
            aload 8 /* args */
            arraylength
            iconst_2
            iadd
            anewarray java.lang.String
            astore 11 /* argArray */
        start local 11 // java.lang.String[] argArray
        35: .line 835
            aload 11 /* argArray */
            iconst_0
            aload 4 /* shell */
            aastore
        36: .line 836
            aload 11 /* argArray */
            iconst_1
            aload 4 /* shell */
            ldc "sh"
            invokevirtual java.lang.String.endsWith:(Ljava/lang/String;)Z
            ifeq 37
            ldc "-c"
            goto 38
      StackMap locals: org.jruby.Ruby org.jruby.runtime.builtin.IRubyObject[] java.util.Map int java.lang.String top java.io.File top java.lang.String[] org.jruby.util.ShellLauncher$LaunchConfig int java.lang.String[]
      StackMap stack: java.lang.String[] int
        37: ldc "/c"
      StackMap locals: org.jruby.Ruby org.jruby.runtime.builtin.IRubyObject[] java.util.Map int java.lang.String top java.io.File top java.lang.String[] org.jruby.util.ShellLauncher$LaunchConfig int java.lang.String[]
      StackMap stack: java.lang.String[] int java.lang.String
        38: aastore
        39: .line 837
            aload 8 /* args */
            iconst_0
            aload 11 /* argArray */
            iconst_2
            aload 8 /* args */
            arraylength
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
        40: .line 838
            aload 0 /* runtime */
            aload 11 /* argArray */
            aload 0 /* runtime */
            aload 2 /* env */
            invokestatic org.jruby.util.ShellLauncher.getCurrentEnv:(Lorg/jruby/Ruby;Ljava/util/Map;)[Ljava/lang/String;
            aload 6 /* pwd */
            invokestatic org.jruby.util.ShellLauncher.buildProcess:(Lorg/jruby/Ruby;[Ljava/lang/String;[Ljava/lang/String;Ljava/io/File;)Ljava/lang/Process;
            astore 5 /* childProcess */
        end local 11 // java.lang.String[] argArray
        start local 5 // java.lang.Process childProcess
        41: .line 839
            goto 46
        end local 5 // java.lang.Process childProcess
        42: .line 841
      StackMap locals:
      StackMap stack:
            aload 0 /* runtime */
            aload 8 /* args */
            aload 0 /* runtime */
            aload 2 /* env */
            invokestatic org.jruby.util.ShellLauncher.getCurrentEnv:(Lorg/jruby/Ruby;Ljava/util/Map;)[Ljava/lang/String;
            aload 6 /* pwd */
            invokestatic org.jruby.util.ShellLauncher.buildProcess:(Lorg/jruby/Ruby;[Ljava/lang/String;[Ljava/lang/String;Ljava/io/File;)Ljava/lang/Process;
            astore 5 /* childProcess */
        end local 10 // boolean useShell
        end local 9 // org.jruby.util.ShellLauncher$LaunchConfig lc
        end local 8 // java.lang.String[] args
        start local 5 // java.lang.Process childProcess
        43: .line 844
            goto 46
        end local 5 // java.lang.Process childProcess
      StackMap locals: org.jruby.Ruby org.jruby.runtime.builtin.IRubyObject[] java.util.Map int java.lang.String top java.io.File
      StackMap stack: java.lang.SecurityException
        44: astore 7 /* se */
        start local 7 // java.lang.SecurityException se
        45: .line 845
            aload 0 /* runtime */
            aload 7 /* se */
            invokevirtual java.lang.SecurityException.getLocalizedMessage:()Ljava/lang/String;
            invokevirtual org.jruby.Ruby.newSecurityError:(Ljava/lang/String;)Lorg/jruby/exceptions/RaiseException;
            athrow
        end local 7 // java.lang.SecurityException se
        start local 5 // java.lang.Process childProcess
        46: .line 848
      StackMap locals: org.jruby.Ruby org.jruby.runtime.builtin.IRubyObject[] java.util.Map int java.lang.String java.lang.Process java.io.File
      StackMap stack:
            aload 5 /* childProcess */
            areturn
        end local 6 // java.io.File pwd
        end local 5 // java.lang.Process childProcess
        end local 4 // java.lang.String shell
        end local 3 // boolean addShell
        end local 2 // java.util.Map env
        end local 1 // org.jruby.runtime.builtin.IRubyObject[] strings
        end local 0 // org.jruby.Ruby runtime
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0   47     0       runtime  Lorg/jruby/Ruby;
            0   47     1       strings  [Lorg/jruby/runtime/builtin/IRubyObject;
            0   47     2           env  Ljava/util/Map;
            0   47     3      addShell  Z
            1   47     4         shell  Ljava/lang/String;
           30   31     5  childProcess  Ljava/lang/Process;
           32   33     5  childProcess  Ljava/lang/Process;
           41   42     5  childProcess  Ljava/lang/Process;
           43   44     5  childProcess  Ljava/lang/Process;
           46   47     5  childProcess  Ljava/lang/Process;
            2   47     6           pwd  Ljava/io/File;
            3    6     7       envHash  Lorg/jruby/runtime/builtin/IRubyObject;
            7   11     7       envHash  Lorg/jruby/runtime/builtin/IRubyObject;
           12   43     8          args  [Ljava/lang/String;
           13   43     9            lc  Lorg/jruby/util/ShellLauncher$LaunchConfig;
           16   43    10      useShell  Z
           18   19    11           arg  Ljava/lang/String;
           24   30    11      argArray  [Ljava/lang/String;
           35   41    11      argArray  [Ljava/lang/String;
           45   46     7            se  Ljava/lang/SecurityException;
      Exception table:
        from    to  target  type
           2    43      44  Class java.lang.SecurityException
    Exceptions:
      throws java.io.IOException
    MethodParameters:
          Name  Flags
      runtime   
      strings   
      env       
      addShell  

  public static java.lang.Process run(org.jruby.Ruby, org.jruby.runtime.builtin.IRubyObject[], boolean);
    descriptor: (Lorg/jruby/Ruby;[Lorg/jruby/runtime/builtin/IRubyObject;Z)Ljava/lang/Process;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=4, locals=3, args_size=3
        start local 0 // org.jruby.Ruby runtime
        start local 1 // org.jruby.runtime.builtin.IRubyObject[] rawArgs
        start local 2 // boolean doExecutableSearch
         0: .line 1317
            aload 0 /* runtime */
            aload 1 /* rawArgs */
            iload 2 /* doExecutableSearch */
            iconst_0
            invokestatic org.jruby.util.ShellLauncher.run:(Lorg/jruby/Ruby;[Lorg/jruby/runtime/builtin/IRubyObject;ZZ)Ljava/lang/Process;
            areturn
        end local 2 // boolean doExecutableSearch
        end local 1 // org.jruby.runtime.builtin.IRubyObject[] rawArgs
        end local 0 // org.jruby.Ruby runtime
      LocalVariableTable:
        Start  End  Slot                Name  Signature
            0    1     0             runtime  Lorg/jruby/Ruby;
            0    1     1             rawArgs  [Lorg/jruby/runtime/builtin/IRubyObject;
            0    1     2  doExecutableSearch  Z
    Exceptions:
      throws java.io.IOException
    MethodParameters:
                    Name  Flags
      runtime             
      rawArgs             
      doExecutableSearch  

  private static boolean hasGlobCharacter(java.lang.String);
    descriptor: (Ljava/lang/String;)Z
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // java.lang.String word
         0: .line 1321
            aload 0 /* word */
            ldc "*"
            invokevirtual java.lang.String.contains:(Ljava/lang/CharSequence;)Z
            ifne 1
            aload 0 /* word */
            ldc "?"
            invokevirtual java.lang.String.contains:(Ljava/lang/CharSequence;)Z
            ifne 1
            aload 0 /* word */
            ldc "["
            invokevirtual java.lang.String.contains:(Ljava/lang/CharSequence;)Z
            ifne 1
            aload 0 /* word */
            ldc "{"
            invokevirtual java.lang.String.contains:(Ljava/lang/CharSequence;)Z
            ifne 1
            iconst_0
            ireturn
      StackMap locals:
      StackMap stack:
         1: iconst_1
            ireturn
        end local 0 // java.lang.String word
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  word  Ljava/lang/String;
    MethodParameters:
      Name  Flags
      word  

  private static java.lang.String[] expandGlobs(org.jruby.Ruby, java.lang.String[]);
    descriptor: (Lorg/jruby/Ruby;[Ljava/lang/String;)[Ljava/lang/String;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=6, locals=7, args_size=2
        start local 0 // org.jruby.Ruby runtime
        start local 1 // java.lang.String[] originalArgs
         0: .line 1325
            new java.util.ArrayList
            dup
            aload 1 /* originalArgs */
            arraylength
            invokespecial java.util.ArrayList.<init>:(I)V
            astore 2 /* expandedList */
        start local 2 // java.util.List expandedList
         1: .line 1326
            iconst_0
            istore 3 /* i */
        start local 3 // int i
         2: goto 14
         3: .line 1327
      StackMap locals: java.util.List int
      StackMap stack:
            aload 1 /* originalArgs */
            iload 3 /* i */
            aaload
            invokestatic org.jruby.util.ShellLauncher.hasGlobCharacter:(Ljava/lang/String;)Z
            ifeq 12
         4: .line 1329
            aload 0 /* runtime */
            aload 0 /* runtime */
            invokevirtual org.jruby.Ruby.getCurrentDirectory:()Ljava/lang/String;
         5: .line 1330
            new org.jruby.util.ByteList
            dup
            aload 1 /* originalArgs */
            iload 3 /* i */
            aaload
            invokevirtual java.lang.String.getBytes:()[B
            invokespecial org.jruby.util.ByteList.<init>:([B)V
            iconst_0
         6: .line 1329
            invokestatic org.jruby.util.Dir.push_glob:(Lorg/jruby/Ruby;Ljava/lang/String;Lorg/jruby/util/ByteList;I)Ljava/util/List;
            astore 4 /* globs */
        start local 4 // java.util.List globs
         7: .line 1332
            aload 4 /* globs */
            invokeinterface java.util.List.iterator:()Ljava/util/Iterator;
            astore 6
            goto 10
      StackMap locals: org.jruby.Ruby java.lang.String[] java.util.List int java.util.List top java.util.Iterator
      StackMap stack:
         8: aload 6
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast org.jruby.util.ByteList
            astore 5 /* glob */
        start local 5 // org.jruby.util.ByteList glob
         9: .line 1333
            aload 2 /* expandedList */
            aload 5 /* glob */
            invokevirtual org.jruby.util.ByteList.toString:()Ljava/lang/String;
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
        end local 5 // org.jruby.util.ByteList glob
        10: .line 1332
      StackMap locals:
      StackMap stack:
            aload 6
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 8
        end local 4 // java.util.List globs
        11: .line 1335
            goto 13
        12: .line 1336
      StackMap locals: org.jruby.Ruby java.lang.String[] java.util.List int
      StackMap stack:
            aload 2 /* expandedList */
            aload 1 /* originalArgs */
            iload 3 /* i */
            aaload
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
        13: .line 1326
      StackMap locals:
      StackMap stack:
            iinc 3 /* i */ 1
      StackMap locals:
      StackMap stack:
        14: iload 3 /* i */
            aload 1 /* originalArgs */
            arraylength
            if_icmplt 3
        end local 3 // int i
        15: .line 1340
            aload 2 /* expandedList */
            invokeinterface java.util.List.size:()I
            anewarray java.lang.String
            astore 3 /* args */
        start local 3 // java.lang.String[] args
        16: .line 1341
            aload 2 /* expandedList */
            aload 3 /* args */
            invokeinterface java.util.List.toArray:([Ljava/lang/Object;)[Ljava/lang/Object;
            pop
        17: .line 1343
            aload 3 /* args */
            areturn
        end local 3 // java.lang.String[] args
        end local 2 // java.util.List expandedList
        end local 1 // java.lang.String[] originalArgs
        end local 0 // org.jruby.Ruby runtime
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0   18     0       runtime  Lorg/jruby/Ruby;
            0   18     1  originalArgs  [Ljava/lang/String;
            1   18     2  expandedList  Ljava/util/List<Ljava/lang/String;>;
            2   15     3             i  I
            7   11     4         globs  Ljava/util/List<Lorg/jruby/util/ByteList;>;
            9   10     5          glob  Lorg/jruby/util/ByteList;
           16   18     3          args  [Ljava/lang/String;
    MethodParameters:
              Name  Flags
      runtime       
      originalArgs  

  public static java.lang.Process run(org.jruby.Ruby, org.jruby.runtime.builtin.IRubyObject[], boolean, boolean);
    descriptor: (Lorg/jruby/Ruby;[Lorg/jruby/runtime/builtin/IRubyObject;ZZ)Ljava/lang/Process;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=7, locals=9, args_size=4
        start local 0 // org.jruby.Ruby runtime
        start local 1 // org.jruby.runtime.builtin.IRubyObject[] rawArgs
        start local 2 // boolean doExecutableSearch
        start local 3 // boolean forceExternalProcess
         0: .line 1348
            aload 0 /* runtime */
            invokevirtual org.jruby.Ruby.getCurrentDirectory:()Ljava/lang/String;
            astore 5 /* virtualCWD */
        start local 5 // java.lang.String virtualCWD
         1: .line 1349
            new java.io.File
            dup
            aload 5 /* virtualCWD */
            invokespecial java.io.File.<init>:(Ljava/lang/String;)V
            astore 6 /* pwd */
        start local 6 // java.io.File pwd
         2: .line 1350
            new org.jruby.util.ShellLauncher$LaunchConfig
            dup
            aload 0 /* runtime */
            aload 1 /* rawArgs */
            iload 2 /* doExecutableSearch */
            invokespecial org.jruby.util.ShellLauncher$LaunchConfig.<init>:(Lorg/jruby/Ruby;[Lorg/jruby/runtime/builtin/IRubyObject;Z)V
            astore 7 /* cfg */
        start local 7 // org.jruby.util.ShellLauncher$LaunchConfig cfg
         3: .line 1353
            iload 3 /* forceExternalProcess */
            ifne 11
            aload 7 /* cfg */
            invokevirtual org.jruby.util.ShellLauncher$LaunchConfig.shouldRunInProcess:()Z
            ifeq 11
         4: .line 1354
            aload 0 /* runtime */
            ldc "Launching in-process"
            invokestatic org.jruby.util.ShellLauncher.log:(Lorg/jruby/Ruby;Ljava/lang/String;)V
         5: .line 1355
            new org.jruby.util.ShellLauncher$ScriptThreadProcess
            dup
            aload 0 /* runtime */
         6: .line 1356
            aload 0 /* runtime */
            aload 7 /* cfg */
            invokevirtual org.jruby.util.ShellLauncher$LaunchConfig.getExecArgs:()[Ljava/lang/String;
            invokestatic org.jruby.util.ShellLauncher.expandGlobs:(Lorg/jruby/Ruby;[Ljava/lang/String;)[Ljava/lang/String;
            aload 0 /* runtime */
            invokestatic org.jruby.util.ShellLauncher.getCurrentEnv:(Lorg/jruby/Ruby;)[Ljava/lang/String;
            aload 6 /* pwd */
         7: .line 1355
            invokespecial org.jruby.util.ShellLauncher$ScriptThreadProcess.<init>:(Lorg/jruby/Ruby;[Ljava/lang/String;[Ljava/lang/String;Ljava/io/File;)V
            astore 8 /* ipScript */
        start local 8 // org.jruby.util.ShellLauncher$ScriptThreadProcess ipScript
         8: .line 1357
            aload 8 /* ipScript */
            invokevirtual org.jruby.util.ShellLauncher$ScriptThreadProcess.start:()V
         9: .line 1358
            aload 8 /* ipScript */
        10: areturn
        end local 8 // org.jruby.util.ShellLauncher$ScriptThreadProcess ipScript
        11: .line 1360
      StackMap locals: org.jruby.Ruby org.jruby.runtime.builtin.IRubyObject[] int int top java.lang.String java.io.File org.jruby.util.ShellLauncher$LaunchConfig
      StackMap stack:
            aload 7 /* cfg */
            invokevirtual org.jruby.util.ShellLauncher$LaunchConfig.shouldRunInShell:()Z
            ifeq 15
        12: .line 1361
            aload 0 /* runtime */
            ldc "Launching with shell"
            invokestatic org.jruby.util.ShellLauncher.log:(Lorg/jruby/Ruby;Ljava/lang/String;)V
        13: .line 1364
            aload 7 /* cfg */
            invokevirtual org.jruby.util.ShellLauncher$LaunchConfig.verifyExecutableForShell:()V
        14: .line 1365
            goto 17
        15: .line 1366
      StackMap locals:
      StackMap stack:
            aload 0 /* runtime */
            ldc "Launching directly (no shell)"
            invokestatic org.jruby.util.ShellLauncher.log:(Lorg/jruby/Ruby;Ljava/lang/String;)V
        16: .line 1367
            aload 7 /* cfg */
            invokevirtual org.jruby.util.ShellLauncher$LaunchConfig.verifyExecutableForDirect:()V
        17: .line 1369
      StackMap locals:
      StackMap stack:
            aload 7 /* cfg */
            invokevirtual org.jruby.util.ShellLauncher$LaunchConfig.getExecArgs:()[Ljava/lang/String;
            astore 8 /* args */
        start local 8 // java.lang.String[] args
        18: .line 1370
            aload 5 /* virtualCWD */
            ldc "uri:classloader:"
            invokevirtual java.lang.String.startsWith:(Ljava/lang/String;)Z
            ifeq 24
        19: .line 1372
            new java.io.File
            dup
            ldc "user.dir"
            invokestatic java.lang.System.getProperty:(Ljava/lang/String;)Ljava/lang/String;
            invokespecial java.io.File.<init>:(Ljava/lang/String;)V
            astore 6 /* pwd */
        20: .line 1376
            aload 8 /* args */
            aload 8 /* args */
            arraylength
            iconst_1
            isub
            aaload
            ldc "org.jruby.Main"
            invokevirtual java.lang.String.contains:(Ljava/lang/CharSequence;)Z
            ifeq 24
        21: .line 1377
            aload 8 /* args */
            aload 8 /* args */
            arraylength
            iconst_1
            isub
            aload 8 /* args */
            aload 8 /* args */
            arraylength
            iconst_1
            isub
            aaload
            ldc "org.jruby.Main"
        22: .line 1378
            new java.lang.StringBuilder
            dup
            ldc "org.jruby.Main -C "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 5 /* virtualCWD */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
        23: .line 1377
            invokevirtual java.lang.String.replace:(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;
            aastore
        24: .line 1381
      StackMap locals: java.lang.String[]
      StackMap stack:
            aload 0 /* runtime */
            aload 8 /* args */
            aload 0 /* runtime */
            invokestatic org.jruby.util.ShellLauncher.getCurrentEnv:(Lorg/jruby/Ruby;)[Ljava/lang/String;
            aload 6 /* pwd */
            invokestatic org.jruby.util.ShellLauncher.buildProcess:(Lorg/jruby/Ruby;[Ljava/lang/String;[Ljava/lang/String;Ljava/io/File;)Ljava/lang/Process;
            astore 4 /* aProcess */
        end local 8 // java.lang.String[] args
        start local 4 // java.lang.Process aProcess
        25: .line 1383
            goto 28
        end local 4 // java.lang.Process aProcess
      StackMap locals: org.jruby.Ruby org.jruby.runtime.builtin.IRubyObject[] int int top java.lang.String java.io.File org.jruby.util.ShellLauncher$LaunchConfig
      StackMap stack: java.lang.SecurityException
        26: astore 8 /* se */
        start local 8 // java.lang.SecurityException se
        27: .line 1384
            aload 0 /* runtime */
            aload 8 /* se */
            invokevirtual java.lang.SecurityException.getLocalizedMessage:()Ljava/lang/String;
            invokevirtual org.jruby.Ruby.newSecurityError:(Ljava/lang/String;)Lorg/jruby/exceptions/RaiseException;
            athrow
        end local 8 // java.lang.SecurityException se
        start local 4 // java.lang.Process aProcess
        28: .line 1387
      StackMap locals: org.jruby.Ruby org.jruby.runtime.builtin.IRubyObject[] int int java.lang.Process java.lang.String java.io.File org.jruby.util.ShellLauncher$LaunchConfig
      StackMap stack:
            aload 4 /* aProcess */
            areturn
        end local 7 // org.jruby.util.ShellLauncher$LaunchConfig cfg
        end local 6 // java.io.File pwd
        end local 5 // java.lang.String virtualCWD
        end local 4 // java.lang.Process aProcess
        end local 3 // boolean forceExternalProcess
        end local 2 // boolean doExecutableSearch
        end local 1 // org.jruby.runtime.builtin.IRubyObject[] rawArgs
        end local 0 // org.jruby.Ruby runtime
      LocalVariableTable:
        Start  End  Slot                  Name  Signature
            0   29     0               runtime  Lorg/jruby/Ruby;
            0   29     1               rawArgs  [Lorg/jruby/runtime/builtin/IRubyObject;
            0   29     2    doExecutableSearch  Z
            0   29     3  forceExternalProcess  Z
           25   26     4              aProcess  Ljava/lang/Process;
           28   29     4              aProcess  Ljava/lang/Process;
            1   29     5            virtualCWD  Ljava/lang/String;
            2   29     6                   pwd  Ljava/io/File;
            3   29     7                   cfg  Lorg/jruby/util/ShellLauncher$LaunchConfig;
            8   11     8              ipScript  Lorg/jruby/util/ShellLauncher$ScriptThreadProcess;
           18   25     8                  args  [Ljava/lang/String;
           27   28     8                    se  Ljava/lang/SecurityException;
      Exception table:
        from    to  target  type
           3    10      26  Class java.lang.SecurityException
          11    25      26  Class java.lang.SecurityException
    Exceptions:
      throws java.io.IOException
    MethodParameters:
                      Name  Flags
      runtime               
      rawArgs               
      doExecutableSearch    
      forceExternalProcess  

  private static void handleStreams(org.jruby.Ruby, java.lang.Process, java.io.InputStream, java.io.OutputStream, java.io.OutputStream);
    descriptor: (Lorg/jruby/Ruby;Ljava/lang/Process;Ljava/io/InputStream;Ljava/io/OutputStream;Ljava/io/OutputStream;)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=8, locals=11, args_size=5
        start local 0 // org.jruby.Ruby runtime
        start local 1 // java.lang.Process p
        start local 2 // java.io.InputStream in
        start local 3 // java.io.OutputStream out
        start local 4 // java.io.OutputStream err
         0: .line 1527
            aload 1 /* p */
            invokevirtual java.lang.Process.getInputStream:()Ljava/io/InputStream;
            astore 5 /* pOut */
        start local 5 // java.io.InputStream pOut
         1: .line 1528
            aload 1 /* p */
            invokevirtual java.lang.Process.getErrorStream:()Ljava/io/InputStream;
            astore 6 /* pErr */
        start local 6 // java.io.InputStream pErr
         2: .line 1529
            aload 1 /* p */
            invokevirtual java.lang.Process.getOutputStream:()Ljava/io/OutputStream;
            astore 7 /* pIn */
        start local 7 // java.io.OutputStream pIn
         3: .line 1531
            new org.jruby.util.ShellLauncher$StreamPumper
            dup
            aload 0 /* runtime */
            aload 5 /* pOut */
            aload 3 /* out */
            iconst_0
            getstatic org.jruby.util.ShellLauncher$Pumper$Slave.IN:Lorg/jruby/util/ShellLauncher$Pumper$Slave;
            aload 1 /* p */
            invokespecial org.jruby.util.ShellLauncher$StreamPumper.<init>:(Lorg/jruby/Ruby;Ljava/io/InputStream;Ljava/io/OutputStream;ZLorg/jruby/util/ShellLauncher$Pumper$Slave;Ljava/lang/Object;)V
            astore 8 /* t1 */
        start local 8 // org.jruby.util.ShellLauncher$StreamPumper t1
         4: .line 1532
            new org.jruby.util.ShellLauncher$StreamPumper
            dup
            aload 0 /* runtime */
            aload 6 /* pErr */
            aload 4 /* err */
            iconst_0
            getstatic org.jruby.util.ShellLauncher$Pumper$Slave.IN:Lorg/jruby/util/ShellLauncher$Pumper$Slave;
            aload 1 /* p */
            invokespecial org.jruby.util.ShellLauncher$StreamPumper.<init>:(Lorg/jruby/Ruby;Ljava/io/InputStream;Ljava/io/OutputStream;ZLorg/jruby/util/ShellLauncher$Pumper$Slave;Ljava/lang/Object;)V
            astore 9 /* t2 */
        start local 9 // org.jruby.util.ShellLauncher$StreamPumper t2
         5: .line 1537
            new org.jruby.util.ShellLauncher$StreamPumper
            dup
            aload 0 /* runtime */
            aload 2 /* in */
            aload 7 /* pIn */
            iconst_1
            getstatic org.jruby.util.ShellLauncher$Pumper$Slave.OUT:Lorg/jruby/util/ShellLauncher$Pumper$Slave;
            aload 1 /* p */
            invokespecial org.jruby.util.ShellLauncher$StreamPumper.<init>:(Lorg/jruby/Ruby;Ljava/io/InputStream;Ljava/io/OutputStream;ZLorg/jruby/util/ShellLauncher$Pumper$Slave;Ljava/lang/Object;)V
            astore 10 /* t3 */
        start local 10 // org.jruby.util.ShellLauncher$StreamPumper t3
         6: .line 1539
            aload 8 /* t1 */
            invokevirtual org.jruby.util.ShellLauncher$StreamPumper.start:()V
         7: .line 1540
            aload 9 /* t2 */
            invokevirtual org.jruby.util.ShellLauncher$StreamPumper.start:()V
         8: .line 1541
            aload 10 /* t3 */
            invokevirtual org.jruby.util.ShellLauncher$StreamPumper.start:()V
         9: .line 1543
            aload 8 /* t1 */
            invokevirtual org.jruby.util.ShellLauncher$StreamPumper.join:()V
        10: goto 12
      StackMap locals: org.jruby.Ruby java.lang.Process java.io.InputStream java.io.OutputStream java.io.OutputStream java.io.InputStream java.io.InputStream java.io.OutputStream org.jruby.util.ShellLauncher$StreamPumper org.jruby.util.ShellLauncher$StreamPumper org.jruby.util.ShellLauncher$StreamPumper
      StackMap stack: java.lang.InterruptedException
        11: pop
        12: .line 1544
      StackMap locals:
      StackMap stack:
            aload 9 /* t2 */
            invokevirtual org.jruby.util.ShellLauncher$StreamPumper.join:()V
        13: goto 15
      StackMap locals:
      StackMap stack: java.lang.InterruptedException
        14: pop
        15: .line 1545
      StackMap locals:
      StackMap stack:
            aload 10 /* t3 */
            invokevirtual org.jruby.util.ShellLauncher$StreamPumper.quit:()V
        16: .line 1547
            aload 4 /* err */
            invokevirtual java.io.OutputStream.flush:()V
        17: goto 19
      StackMap locals:
      StackMap stack: java.io.IOException
        18: pop
        19: .line 1548
      StackMap locals:
      StackMap stack:
            aload 3 /* out */
            invokevirtual java.io.OutputStream.flush:()V
        20: goto 22
      StackMap locals:
      StackMap stack: java.io.IOException
        21: pop
        22: .line 1550
      StackMap locals:
      StackMap stack:
            aload 7 /* pIn */
            invokevirtual java.io.OutputStream.close:()V
        23: goto 25
      StackMap locals:
      StackMap stack: java.io.IOException
        24: pop
        25: .line 1551
      StackMap locals:
      StackMap stack:
            aload 5 /* pOut */
            invokevirtual java.io.InputStream.close:()V
        26: goto 28
      StackMap locals:
      StackMap stack: java.io.IOException
        27: pop
        28: .line 1552
      StackMap locals:
      StackMap stack:
            aload 6 /* pErr */
            invokevirtual java.io.InputStream.close:()V
        29: goto 31
      StackMap locals:
      StackMap stack: java.io.IOException
        30: pop
        31: .line 1560
      StackMap locals:
      StackMap stack:
            aload 8 /* t1 */
            invokevirtual org.jruby.util.ShellLauncher$StreamPumper.quit:()V
        32: .line 1561
            aload 9 /* t2 */
            invokevirtual org.jruby.util.ShellLauncher$StreamPumper.quit:()V
        33: .line 1562
            aload 10 /* t3 */
            invokevirtual org.jruby.util.ShellLauncher$StreamPumper.quit:()V
        34: .line 1563
            aload 8 /* t1 */
            invokevirtual org.jruby.util.ShellLauncher$StreamPumper.interrupt:()V
        35: .line 1564
            aload 9 /* t2 */
            invokevirtual org.jruby.util.ShellLauncher$StreamPumper.interrupt:()V
        36: .line 1565
            aload 10 /* t3 */
            invokevirtual org.jruby.util.ShellLauncher$StreamPumper.interrupt:()V
        37: .line 1566
            goto 39
      StackMap locals:
      StackMap stack: java.lang.SecurityException
        38: pop
        39: .line 1568
      StackMap locals:
      StackMap stack:
            aload 8 /* t1 */
            invokevirtual org.jruby.util.ShellLauncher$StreamPumper.join:()V
        40: goto 42
      StackMap locals:
      StackMap stack: java.lang.InterruptedException
        41: pop
        42: .line 1569
      StackMap locals:
      StackMap stack:
            aload 9 /* t2 */
            invokevirtual org.jruby.util.ShellLauncher$StreamPumper.join:()V
        43: goto 45
      StackMap locals:
      StackMap stack: java.lang.InterruptedException
        44: pop
        45: .line 1570
      StackMap locals:
      StackMap stack:
            aload 10 /* t3 */
            invokevirtual org.jruby.util.ShellLauncher$StreamPumper.join:()V
        46: goto 48
      StackMap locals:
      StackMap stack: java.lang.InterruptedException
        47: pop
        48: .line 1571
      StackMap locals:
      StackMap stack:
            return
        end local 10 // org.jruby.util.ShellLauncher$StreamPumper t3
        end local 9 // org.jruby.util.ShellLauncher$StreamPumper t2
        end local 8 // org.jruby.util.ShellLauncher$StreamPumper t1
        end local 7 // java.io.OutputStream pIn
        end local 6 // java.io.InputStream pErr
        end local 5 // java.io.InputStream pOut
        end local 4 // java.io.OutputStream err
        end local 3 // java.io.OutputStream out
        end local 2 // java.io.InputStream in
        end local 1 // java.lang.Process p
        end local 0 // org.jruby.Ruby runtime
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0   49     0  runtime  Lorg/jruby/Ruby;
            0   49     1        p  Ljava/lang/Process;
            0   49     2       in  Ljava/io/InputStream;
            0   49     3      out  Ljava/io/OutputStream;
            0   49     4      err  Ljava/io/OutputStream;
            1   49     5     pOut  Ljava/io/InputStream;
            2   49     6     pErr  Ljava/io/InputStream;
            3   49     7      pIn  Ljava/io/OutputStream;
            4   49     8       t1  Lorg/jruby/util/ShellLauncher$StreamPumper;
            5   49     9       t2  Lorg/jruby/util/ShellLauncher$StreamPumper;
            6   49    10       t3  Lorg/jruby/util/ShellLauncher$StreamPumper;
      Exception table:
        from    to  target  type
           9    10      11  Class java.lang.InterruptedException
          12    13      14  Class java.lang.InterruptedException
          16    17      18  Class java.io.IOException
          19    20      21  Class java.io.IOException
          22    23      24  Class java.io.IOException
          25    26      27  Class java.io.IOException
          28    29      30  Class java.io.IOException
          31    37      38  Class java.lang.SecurityException
          39    40      41  Class java.lang.InterruptedException
          42    43      44  Class java.lang.InterruptedException
          45    46      47  Class java.lang.InterruptedException
    Exceptions:
      throws java.io.IOException
    MethodParameters:
         Name  Flags
      runtime  
      p        
      in       
      out      
      err      

  private static void handleStreamsNonblocking(org.jruby.Ruby, java.lang.Process, java.io.OutputStream, java.io.OutputStream);
    descriptor: (Lorg/jruby/Ruby;Ljava/lang/Process;Ljava/io/OutputStream;Ljava/io/OutputStream;)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=8, locals=8, args_size=4
        start local 0 // org.jruby.Ruby runtime
        start local 1 // java.lang.Process p
        start local 2 // java.io.OutputStream out
        start local 3 // java.io.OutputStream err
         0: .line 1574
            aload 1 /* p */
            invokevirtual java.lang.Process.getInputStream:()Ljava/io/InputStream;
            astore 4 /* pOut */
        start local 4 // java.io.InputStream pOut
         1: .line 1575
            aload 1 /* p */
            invokevirtual java.lang.Process.getErrorStream:()Ljava/io/InputStream;
            astore 5 /* pErr */
        start local 5 // java.io.InputStream pErr
         2: .line 1577
            new org.jruby.util.ShellLauncher$StreamPumper
            dup
            aload 0 /* runtime */
            aload 4 /* pOut */
            aload 2 /* out */
            iconst_0
            getstatic org.jruby.util.ShellLauncher$Pumper$Slave.IN:Lorg/jruby/util/ShellLauncher$Pumper$Slave;
            aload 1 /* p */
            invokespecial org.jruby.util.ShellLauncher$StreamPumper.<init>:(Lorg/jruby/Ruby;Ljava/io/InputStream;Ljava/io/OutputStream;ZLorg/jruby/util/ShellLauncher$Pumper$Slave;Ljava/lang/Object;)V
            astore 6 /* t1 */
        start local 6 // org.jruby.util.ShellLauncher$StreamPumper t1
         3: .line 1578
            new org.jruby.util.ShellLauncher$StreamPumper
            dup
            aload 0 /* runtime */
            aload 5 /* pErr */
            aload 3 /* err */
            iconst_0
            getstatic org.jruby.util.ShellLauncher$Pumper$Slave.IN:Lorg/jruby/util/ShellLauncher$Pumper$Slave;
            aload 1 /* p */
            invokespecial org.jruby.util.ShellLauncher$StreamPumper.<init>:(Lorg/jruby/Ruby;Ljava/io/InputStream;Ljava/io/OutputStream;ZLorg/jruby/util/ShellLauncher$Pumper$Slave;Ljava/lang/Object;)V
            astore 7 /* t2 */
        start local 7 // org.jruby.util.ShellLauncher$StreamPumper t2
         4: .line 1580
            aload 6 /* t1 */
            invokevirtual org.jruby.util.ShellLauncher$StreamPumper.start:()V
         5: .line 1581
            aload 7 /* t2 */
            invokevirtual org.jruby.util.ShellLauncher$StreamPumper.start:()V
         6: .line 1582
            return
        end local 7 // org.jruby.util.ShellLauncher$StreamPumper t2
        end local 6 // org.jruby.util.ShellLauncher$StreamPumper t1
        end local 5 // java.io.InputStream pErr
        end local 4 // java.io.InputStream pOut
        end local 3 // java.io.OutputStream err
        end local 2 // java.io.OutputStream out
        end local 1 // java.lang.Process p
        end local 0 // org.jruby.Ruby runtime
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    7     0  runtime  Lorg/jruby/Ruby;
            0    7     1        p  Ljava/lang/Process;
            0    7     2      out  Ljava/io/OutputStream;
            0    7     3      err  Ljava/io/OutputStream;
            1    7     4     pOut  Ljava/io/InputStream;
            2    7     5     pErr  Ljava/io/InputStream;
            3    7     6       t1  Lorg/jruby/util/ShellLauncher$StreamPumper;
            4    7     7       t2  Lorg/jruby/util/ShellLauncher$StreamPumper;
    Exceptions:
      throws java.io.IOException
    MethodParameters:
         Name  Flags
      runtime  
      p        
      out      
      err      

  private static java.lang.String[] parseCommandLine(org.jruby.runtime.ThreadContext, org.jruby.Ruby, org.jruby.runtime.builtin.IRubyObject[]);
    descriptor: (Lorg/jruby/runtime/ThreadContext;Lorg/jruby/Ruby;[Lorg/jruby/runtime/builtin/IRubyObject;)[Ljava/lang/String;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=5, locals=7, args_size=3
        start local 0 // org.jruby.runtime.ThreadContext context
        start local 1 // org.jruby.Ruby runtime
        start local 2 // org.jruby.runtime.builtin.IRubyObject[] rawArgs
         0: .line 1587
            aload 2 /* rawArgs */
            arraylength
            iconst_1
            if_icmpne 20
         1: .line 1588
            aload 2 /* rawArgs */
            invokestatic org.jruby.util.ShellLauncher.hasLeadingArgvArray:([Lorg/jruby/runtime/builtin/IRubyObject;)Z
            ifeq 4
         2: .line 1590
            iconst_1
            anewarray java.lang.String
            dup
            iconst_0
            aload 2 /* rawArgs */
            iconst_0
            aaload
            checkcast org.jruby.RubyArray
            invokestatic org.jruby.util.ShellLauncher.getPathEntry:(Lorg/jruby/RubyArray;)Ljava/lang/String;
            aastore
            astore 3 /* args */
        start local 3 // java.lang.String[] args
         3: .line 1591
            goto 30
        end local 3 // java.lang.String[] args
         4: .line 1592
      StackMap locals:
      StackMap stack:
            aload 1 /* runtime */
            invokevirtual org.jruby.Ruby.getLoadService:()Lorg/jruby/runtime/load/LoadService;
            dup
            astore 4
            monitorenter
         5: .line 1593
            aload 1 /* runtime */
            invokevirtual org.jruby.Ruby.getLoadService:()Lorg/jruby/runtime/load/LoadService;
            ldc "jruby/path_helper"
            invokevirtual org.jruby.runtime.load.LoadService.require:(Ljava/lang/String;)Z
            pop
         6: .line 1592
            aload 4
            monitorexit
         7: goto 10
      StackMap locals: org.jruby.runtime.ThreadContext org.jruby.Ruby org.jruby.runtime.builtin.IRubyObject[] top org.jruby.runtime.load.LoadService
      StackMap stack: java.lang.Throwable
         8: aload 4
            monitorexit
         9: athrow
        10: .line 1595
      StackMap locals: org.jruby.runtime.ThreadContext org.jruby.Ruby org.jruby.runtime.builtin.IRubyObject[]
      StackMap stack:
            aload 1 /* runtime */
            ldc "JRuby::PathHelper"
            invokevirtual org.jruby.Ruby.getClassFromPath:(Ljava/lang/String;)Lorg/jruby/RubyModule;
            astore 4 /* pathHelper */
        start local 4 // org.jruby.RubyModule pathHelper
        11: .line 1597
            aload 0 /* context */
            aload 4 /* pathHelper */
            ldc "smart_split_command"
            aload 2 /* rawArgs */
        12: .line 1596
            invokestatic org.jruby.runtime.Helpers.invoke:(Lorg/jruby/runtime/ThreadContext;Lorg/jruby/runtime/builtin/IRubyObject;Ljava/lang/String;[Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/runtime/builtin/IRubyObject;
            checkcast org.jruby.RubyArray
            astore 5 /* parts */
        start local 5 // org.jruby.RubyArray parts
        13: .line 1598
            aload 5 /* parts */
            invokevirtual org.jruby.RubyArray.getLength:()I
            anewarray java.lang.String
            astore 3 /* args */
        start local 3 // java.lang.String[] args
        14: .line 1599
            iconst_0
            istore 6 /* i */
        start local 6 // int i
        15: goto 18
        16: .line 1600
      StackMap locals: org.jruby.runtime.ThreadContext org.jruby.Ruby org.jruby.runtime.builtin.IRubyObject[] java.lang.String[] org.jruby.RubyModule org.jruby.RubyArray int
      StackMap stack:
            aload 3 /* args */
            iload 6 /* i */
            aload 5 /* parts */
            iload 6 /* i */
            invokevirtual org.jruby.RubyArray.entry:(I)Lorg/jruby/runtime/builtin/IRubyObject;
            invokevirtual java.lang.Object.toString:()Ljava/lang/String;
            aastore
        17: .line 1599
            iinc 6 /* i */ 1
      StackMap locals:
      StackMap stack:
        18: iload 6 /* i */
            aload 5 /* parts */
            invokevirtual org.jruby.RubyArray.getLength:()I
            if_icmplt 16
        end local 6 // int i
        end local 5 // org.jruby.RubyArray parts
        end local 4 // org.jruby.RubyModule pathHelper
        19: .line 1603
            goto 30
        end local 3 // java.lang.String[] args
        20: .line 1604
      StackMap locals: org.jruby.runtime.ThreadContext org.jruby.Ruby org.jruby.runtime.builtin.IRubyObject[]
      StackMap stack:
            aload 2 /* rawArgs */
            arraylength
            anewarray java.lang.String
            astore 3 /* args */
        start local 3 // java.lang.String[] args
        21: .line 1605
            iconst_0
            istore 4 /* start */
        start local 4 // int start
        22: .line 1606
            aload 2 /* rawArgs */
            invokestatic org.jruby.util.ShellLauncher.hasLeadingArgvArray:([Lorg/jruby/runtime/builtin/IRubyObject;)Z
            ifeq 25
        23: .line 1607
            iconst_1
            istore 4 /* start */
        24: .line 1608
            aload 3 /* args */
            iconst_0
            aload 2 /* rawArgs */
            iconst_0
            aaload
            checkcast org.jruby.RubyArray
            invokestatic org.jruby.util.ShellLauncher.getPathEntry:(Lorg/jruby/RubyArray;)Ljava/lang/String;
            aastore
        25: .line 1610
      StackMap locals: java.lang.String[] int
      StackMap stack:
            iload 4 /* start */
            istore 5 /* i */
        start local 5 // int i
        26: goto 29
        27: .line 1611
      StackMap locals: int
      StackMap stack:
            aload 3 /* args */
            iload 5 /* i */
            aload 2 /* rawArgs */
            iload 5 /* i */
            aaload
            invokevirtual java.lang.Object.toString:()Ljava/lang/String;
            aastore
        28: .line 1610
            iinc 5 /* i */ 1
      StackMap locals:
      StackMap stack:
        29: iload 5 /* i */
            aload 2 /* rawArgs */
            arraylength
            if_icmplt 27
        end local 5 // int i
        end local 4 // int start
        30: .line 1614
      StackMap locals:
      StackMap stack:
            aload 3 /* args */
            areturn
        end local 3 // java.lang.String[] args
        end local 2 // org.jruby.runtime.builtin.IRubyObject[] rawArgs
        end local 1 // org.jruby.Ruby runtime
        end local 0 // org.jruby.runtime.ThreadContext context
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0   31     0     context  Lorg/jruby/runtime/ThreadContext;
            0   31     1     runtime  Lorg/jruby/Ruby;
            0   31     2     rawArgs  [Lorg/jruby/runtime/builtin/IRubyObject;
            3    4     3        args  [Ljava/lang/String;
           14   20     3        args  [Ljava/lang/String;
           21   31     3        args  [Ljava/lang/String;
           11   19     4  pathHelper  Lorg/jruby/RubyModule;
           13   19     5       parts  Lorg/jruby/RubyArray;
           15   19     6           i  I
           22   30     4       start  I
           26   30     5           i  I
      Exception table:
        from    to  target  type
           5     7       8  any
           8     9       8  any
    MethodParameters:
         Name  Flags
      context  
      runtime  
      rawArgs  

  private static boolean hasLeadingArgvArray(org.jruby.runtime.builtin.IRubyObject[]);
    descriptor: ([Lorg/jruby/runtime/builtin/IRubyObject;)Z
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // org.jruby.runtime.builtin.IRubyObject[] rawArgs
         0: .line 1625
            aload 0 /* rawArgs */
            arraylength
            iconst_1
            if_icmplt 4
         1: .line 1626
            aload 0 /* rawArgs */
            iconst_0
            aaload
            instanceof org.jruby.RubyArray
            ifeq 4
         2: .line 1627
            aload 0 /* rawArgs */
            iconst_0
            aaload
            checkcast org.jruby.RubyArray
            invokevirtual org.jruby.RubyArray.getLength:()I
            iconst_2
            if_icmpne 4
         3: .line 1625
            iconst_1
            ireturn
      StackMap locals:
      StackMap stack:
         4: iconst_0
            ireturn
        end local 0 // org.jruby.runtime.builtin.IRubyObject[] rawArgs
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    5     0  rawArgs  [Lorg/jruby/runtime/builtin/IRubyObject;
    MethodParameters:
         Name  Flags
      rawArgs  

  private static java.lang.String getPathEntry(org.jruby.RubyArray);
    descriptor: (Lorg/jruby/RubyArray;)Ljava/lang/String;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // org.jruby.RubyArray initArray
         0: .line 1631
            aload 0 /* initArray */
            iconst_0
            invokevirtual org.jruby.RubyArray.entry:(I)Lorg/jruby/runtime/builtin/IRubyObject;
            invokevirtual java.lang.Object.toString:()Ljava/lang/String;
            areturn
        end local 0 // org.jruby.RubyArray initArray
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    1     0  initArray  Lorg/jruby/RubyArray;
    MethodParameters:
           Name  Flags
      initArray  

  private static java.lang.String getShell(org.jruby.Ruby);
    descriptor: (Lorg/jruby/Ruby;)Ljava/lang/String;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.jruby.Ruby runtime
         0: .line 1635
            invokestatic org.jruby.ext.rbconfig.RbConfigLibrary.jrubyShell:()Ljava/lang/String;
            areturn
        end local 0 // org.jruby.Ruby runtime
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    1     0  runtime  Lorg/jruby/Ruby;
    MethodParameters:
         Name  Flags
      runtime  

  public static boolean shouldUseShell(java.lang.String);
    descriptor: (Ljava/lang/String;)Z
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=6, args_size=1
        start local 0 // java.lang.String command
         0: .line 1639
            iconst_0
            istore 1 /* useShell */
        start local 1 // boolean useShell
         1: .line 1640
            aload 0 /* command */
            invokevirtual java.lang.String.toCharArray:()[C
            dup
            astore 5
            arraylength
            istore 4
            iconst_0
            istore 3
            goto 6
      StackMap locals: java.lang.String int top int int char[]
      StackMap stack:
         2: aload 5
            iload 3
            caload
            istore 2 /* c */
        start local 2 // char c
         3: .line 1641
            iload 2 /* c */
            bipush 32
            if_icmpeq 5
            iload 2 /* c */
            invokestatic java.lang.Character.isLetter:(C)Z
            ifne 5
            ldc "*?{}[]<>()~&|\\$;'`\"\n"
            iload 2 /* c */
            invokevirtual java.lang.String.indexOf:(I)I
            iconst_m1
            if_icmpeq 5
         4: .line 1642
            iconst_1
            istore 1 /* useShell */
        end local 2 // char c
         5: .line 1640
      StackMap locals:
      StackMap stack:
            iinc 3 1
      StackMap locals:
      StackMap stack:
         6: iload 3
            iload 4
            if_icmplt 2
         7: .line 1645
            getstatic jnr.posix.util.Platform.IS_WINDOWS:Z
            ifeq 9
            aload 0 /* command */
            invokevirtual java.lang.String.length:()I
            iconst_1
            if_icmplt 9
            aload 0 /* command */
            iconst_0
            invokevirtual java.lang.String.charAt:(I)C
            bipush 64
            if_icmpne 9
         8: .line 1647
            iconst_1
            istore 1 /* useShell */
         9: .line 1649
      StackMap locals: java.lang.String int
      StackMap stack:
            iload 1 /* useShell */
            ireturn
        end local 1 // boolean useShell
        end local 0 // java.lang.String command
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0   10     0   command  Ljava/lang/String;
            1   10     1  useShell  Z
            3    5     2         c  C
    MethodParameters:
         Name  Flags
      command  

  static void log(org.jruby.Ruby, java.lang.String);
    descriptor: (Lorg/jruby/Ruby;Ljava/lang/String;)V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=4, locals=2, args_size=2
        start local 0 // org.jruby.Ruby runtime
        start local 1 // java.lang.String msg
         0: .line 1653
            getstatic org.jruby.RubyInstanceConfig.DEBUG_LAUNCHING:Z
            ifeq 2
         1: .line 1654
            aload 0 /* runtime */
            invokevirtual org.jruby.Ruby.getErr:()Ljava/io/PrintStream;
            new java.lang.StringBuilder
            dup
            ldc "ShellLauncher: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 1 /* msg */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokevirtual java.io.PrintStream.println:(Ljava/lang/String;)V
         2: .line 1656
      StackMap locals:
      StackMap stack:
            return
        end local 1 // java.lang.String msg
        end local 0 // org.jruby.Ruby runtime
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    3     0  runtime  Lorg/jruby/Ruby;
            0    3     1      msg  Ljava/lang/String;
    MethodParameters:
         Name  Flags
      runtime  
      msg      

  public static java.io.OutputStream unwrapBufferedStream(java.io.OutputStream);
    descriptor: (Ljava/io/OutputStream;)Ljava/io/OutputStream;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // java.io.OutputStream filteredStream
         0: .line 1660
            aload 0 /* filteredStream */
            invokestatic org.jruby.util.io.ChannelHelper.unwrapBufferedStream:(Ljava/io/OutputStream;)Ljava/io/OutputStream;
            areturn
        end local 0 // java.io.OutputStream filteredStream
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0    1     0  filteredStream  Ljava/io/OutputStream;
    RuntimeVisibleAnnotations: 
      java.lang.Deprecated()
    MethodParameters:
                Name  Flags
      filteredStream  

  public static java.io.InputStream unwrapBufferedStream(java.io.InputStream);
    descriptor: (Ljava/io/InputStream;)Ljava/io/InputStream;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // java.io.InputStream filteredStream
         0: .line 1665
            aload 0 /* filteredStream */
            invokestatic org.jruby.util.io.ChannelHelper.unwrapBufferedStream:(Ljava/io/InputStream;)Ljava/io/InputStream;
            areturn
        end local 0 // java.io.InputStream filteredStream
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0    1     0  filteredStream  Ljava/io/InputStream;
    RuntimeVisibleAnnotations: 
      java.lang.Deprecated()
    MethodParameters:
                Name  Flags
      filteredStream  

  public static java.io.OutputStream unwrapFilterOutputStream(java.io.OutputStream);
    descriptor: (Ljava/io/OutputStream;)Ljava/io/OutputStream;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // java.io.OutputStream filteredStream
         0: .line 1670
            aload 0 /* filteredStream */
            invokestatic org.jruby.util.io.ChannelHelper.unwrapFilterOutputStream:(Ljava/io/OutputStream;)Ljava/io/OutputStream;
            areturn
        end local 0 // java.io.OutputStream filteredStream
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0    1     0  filteredStream  Ljava/io/OutputStream;
    RuntimeVisibleAnnotations: 
      java.lang.Deprecated()
    MethodParameters:
                Name  Flags
      filteredStream  

  public static java.io.InputStream unwrapFilterInputStream(java.io.InputStream);
    descriptor: (Ljava/io/InputStream;)Ljava/io/InputStream;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // java.io.InputStream filteredStream
         0: .line 1675
            aload 0 /* filteredStream */
            invokestatic org.jruby.util.io.ChannelHelper.unwrapFilterInputStream:(Ljava/io/InputStream;)Ljava/io/InputStream;
            areturn
        end local 0 // java.io.InputStream filteredStream
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0    1     0  filteredStream  Ljava/io/InputStream;
    RuntimeVisibleAnnotations: 
      java.lang.Deprecated()
    MethodParameters:
                Name  Flags
      filteredStream  
}
SourceFile: "ShellLauncher.java"
NestMembers:
  org.jruby.util.ShellLauncher$1  org.jruby.util.ShellLauncher$2  org.jruby.util.ShellLauncher$3  org.jruby.util.ShellLauncher$4  org.jruby.util.ShellLauncher$ChannelPumper  org.jruby.util.ShellLauncher$LaunchConfig  org.jruby.util.ShellLauncher$POpenProcess  org.jruby.util.ShellLauncher$PidGetter  org.jruby.util.ShellLauncher$Pumper  org.jruby.util.ShellLauncher$Pumper$Slave  org.jruby.util.ShellLauncher$ScriptThreadProcess  org.jruby.util.ShellLauncher$StreamPumper
InnerClasses:
  public abstract Entry = java.util.Map$Entry of java.util.Map
  org.jruby.util.ShellLauncher$1
  org.jruby.util.ShellLauncher$2
  org.jruby.util.ShellLauncher$3
  org.jruby.util.ShellLauncher$4
  private ChannelPumper = org.jruby.util.ShellLauncher$ChannelPumper of org.jruby.util.ShellLauncher
  public LaunchConfig = org.jruby.util.ShellLauncher$LaunchConfig of org.jruby.util.ShellLauncher
  public POpenProcess = org.jruby.util.ShellLauncher$POpenProcess of org.jruby.util.ShellLauncher
  private abstract PidGetter = org.jruby.util.ShellLauncher$PidGetter of org.jruby.util.ShellLauncher
  private abstract Pumper = org.jruby.util.ShellLauncher$Pumper of org.jruby.util.ShellLauncher
  public final Slave = org.jruby.util.ShellLauncher$Pumper$Slave of org.jruby.util.ShellLauncher$Pumper
  private ScriptThreadProcess = org.jruby.util.ShellLauncher$ScriptThreadProcess of org.jruby.util.ShellLauncher
  private StreamPumper = org.jruby.util.ShellLauncher$StreamPumper of org.jruby.util.ShellLauncher