public final class org.xnio.ChannelListeners
  minor version: 0
  major version: 59
  flags: flags: (0x0031) ACC_PUBLIC, ACC_FINAL, ACC_SUPER
  this_class: org.xnio.ChannelListeners
  super_class: java.lang.Object
{
  private static final org.xnio.ChannelListener<java.nio.channels.Channel> NULL_LISTENER;
    descriptor: Lorg/xnio/ChannelListener;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    Signature: Lorg/xnio/ChannelListener<Ljava/nio/channels/Channel;>;

  private static final org.xnio.ChannelListener$Setter<?> NULL_SETTER;
    descriptor: Lorg/xnio/ChannelListener$Setter;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    Signature: Lorg/xnio/ChannelListener$Setter<*>;

  private static org.xnio.ChannelListener<java.nio.channels.Channel> CLOSING_CHANNEL_LISTENER;
    descriptor: Lorg/xnio/ChannelListener;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Signature: Lorg/xnio/ChannelListener<Ljava/nio/channels/Channel;>;

  private static final org.xnio.ChannelExceptionHandler<java.nio.channels.Channel> CLOSING_HANDLER;
    descriptor: Lorg/xnio/ChannelExceptionHandler;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    Signature: Lorg/xnio/ChannelExceptionHandler<Ljava/nio/channels/Channel;>;

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=2, locals=0, args_size=0
         0: .line 52
            new org.xnio.ChannelListeners$1
            dup
            invokespecial org.xnio.ChannelListeners$1.<init>:()V
            putstatic org.xnio.ChannelListeners.NULL_LISTENER:Lorg/xnio/ChannelListener;
         1: .line 60
            new org.xnio.ChannelListeners$2
            dup
            invokespecial org.xnio.ChannelListeners$2.<init>:()V
            putstatic org.xnio.ChannelListeners.NULL_SETTER:Lorg/xnio/ChannelListener$Setter;
         2: .line 68
            new org.xnio.ChannelListeners$3
            dup
            invokespecial org.xnio.ChannelListeners$3.<init>:()V
            putstatic org.xnio.ChannelListeners.CLOSING_CHANNEL_LISTENER:Lorg/xnio/ChannelListener;
         3: .line 1119
            new org.xnio.ChannelListeners$4
            dup
            invokespecial org.xnio.ChannelListeners$4.<init>:()V
            putstatic org.xnio.ChannelListeners.CLOSING_HANDLER:Lorg/xnio/ChannelExceptionHandler;
         4: .line 1123
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  private void <init>();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.xnio.ChannelListeners this
         0: .line 78
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 79
            return
        end local 0 // org.xnio.ChannelListeners this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lorg/xnio/ChannelListeners;

  public static <T extends java.nio.channels.Channel> boolean invokeChannelListener(T, org.xnio.ChannelListener<? super T>);
    descriptor: (Ljava/nio/channels/Channel;Lorg/xnio/ChannelListener;)Z
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=4, locals=3, args_size=2
        start local 0 // java.nio.channels.Channel channel
        start local 1 // org.xnio.ChannelListener channelListener
         0: .line 90
            aload 1 /* channelListener */
            ifnull 7
         1: .line 91
            getstatic org.xnio._private.Messages.listenerMsg:Lorg/xnio/_private/Messages;
            ldc "Invoking listener %s on channel %s"
            aload 1 /* channelListener */
            aload 0 /* channel */
            invokeinterface org.xnio._private.Messages.tracef:(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
         2: .line 92
            aload 1 /* channelListener */
            aload 0 /* channel */
            invokeinterface org.xnio.ChannelListener.handleEvent:(Ljava/nio/channels/Channel;)V
         3: .line 93
            goto 7
      StackMap locals:
      StackMap stack: java.lang.Throwable
         4: astore 2 /* t */
        start local 2 // java.lang.Throwable t
         5: .line 94
            getstatic org.xnio._private.Messages.listenerMsg:Lorg/xnio/_private/Messages;
            aload 2 /* t */
            invokeinterface org.xnio._private.Messages.listenerException:(Ljava/lang/Throwable;)V
         6: .line 95
            iconst_0
            ireturn
        end local 2 // java.lang.Throwable t
         7: .line 97
      StackMap locals:
      StackMap stack:
            iconst_1
            ireturn
        end local 1 // org.xnio.ChannelListener channelListener
        end local 0 // java.nio.channels.Channel channel
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0    8     0          channel  TT;
            0    8     1  channelListener  Lorg/xnio/ChannelListener<-TT;>;
            5    7     2                t  Ljava/lang/Throwable;
      Exception table:
        from    to  target  type
           1     3       4  Class java.lang.Throwable
    Signature: <T::Ljava/nio/channels/Channel;>(TT;Lorg/xnio/ChannelListener<-TT;>;)Z
    MethodParameters:
                 Name  Flags
      channel          
      channelListener  

  public static <T extends java.nio.channels.Channel> void invokeChannelListener(java.util.concurrent.Executor, T, org.xnio.ChannelListener<? super T>);
    descriptor: (Ljava/util/concurrent/Executor;Ljava/nio/channels/Channel;Lorg/xnio/ChannelListener;)V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=3, args_size=3
        start local 0 // java.util.concurrent.Executor executor
        start local 1 // java.nio.channels.Channel channel
        start local 2 // org.xnio.ChannelListener channelListener
         0: .line 110
            aload 0 /* executor */
            aload 1 /* channel */
            aload 2 /* channelListener */
            invokestatic org.xnio.ChannelListeners.getChannelListenerTask:(Ljava/nio/channels/Channel;Lorg/xnio/ChannelListener;)Ljava/lang/Runnable;
            invokeinterface java.util.concurrent.Executor.execute:(Ljava/lang/Runnable;)V
         1: .line 111
            goto 4
      StackMap locals:
      StackMap stack: java.util.concurrent.RejectedExecutionException
         2: pop
         3: .line 112
            aload 1 /* channel */
            aload 2 /* channelListener */
            invokestatic org.xnio.ChannelListeners.invokeChannelListener:(Ljava/nio/channels/Channel;Lorg/xnio/ChannelListener;)Z
            pop
         4: .line 114
      StackMap locals:
      StackMap stack:
            return
        end local 2 // org.xnio.ChannelListener channelListener
        end local 1 // java.nio.channels.Channel channel
        end local 0 // java.util.concurrent.Executor executor
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0    5     0         executor  Ljava/util/concurrent/Executor;
            0    5     1          channel  TT;
            0    5     2  channelListener  Lorg/xnio/ChannelListener<-TT;>;
      Exception table:
        from    to  target  type
           0     1       2  Class java.util.concurrent.RejectedExecutionException
    Signature: <T::Ljava/nio/channels/Channel;>(Ljava/util/concurrent/Executor;TT;Lorg/xnio/ChannelListener<-TT;>;)V
    MethodParameters:
                 Name  Flags
      executor         
      channel          
      channelListener  

  public static <T extends java.nio.channels.Channel> void invokeChannelExceptionHandler(T, org.xnio.ChannelExceptionHandler<? super T>, java.io.IOException);
    descriptor: (Ljava/nio/channels/Channel;Lorg/xnio/ChannelExceptionHandler;Ljava/io/IOException;)V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=4, args_size=3
        start local 0 // java.nio.channels.Channel channel
        start local 1 // org.xnio.ChannelExceptionHandler exceptionHandler
        start local 2 // java.io.IOException exception
         0: .line 126
            aload 1 /* exceptionHandler */
            aload 0 /* channel */
            aload 2 /* exception */
            invokeinterface org.xnio.ChannelExceptionHandler.handleException:(Ljava/nio/channels/Channel;Ljava/io/IOException;)V
         1: .line 127
            goto 4
      StackMap locals:
      StackMap stack: java.lang.Throwable
         2: astore 3 /* t */
        start local 3 // java.lang.Throwable t
         3: .line 128
            getstatic org.xnio._private.Messages.listenerMsg:Lorg/xnio/_private/Messages;
            aload 3 /* t */
            invokeinterface org.xnio._private.Messages.exceptionHandlerException:(Ljava/lang/Throwable;)V
        end local 3 // java.lang.Throwable t
         4: .line 130
      StackMap locals:
      StackMap stack:
            return
        end local 2 // java.io.IOException exception
        end local 1 // org.xnio.ChannelExceptionHandler exceptionHandler
        end local 0 // java.nio.channels.Channel channel
      LocalVariableTable:
        Start  End  Slot              Name  Signature
            0    5     0           channel  TT;
            0    5     1  exceptionHandler  Lorg/xnio/ChannelExceptionHandler<-TT;>;
            0    5     2         exception  Ljava/io/IOException;
            3    4     3                 t  Ljava/lang/Throwable;
      Exception table:
        from    to  target  type
           0     1       2  Class java.lang.Throwable
    Signature: <T::Ljava/nio/channels/Channel;>(TT;Lorg/xnio/ChannelExceptionHandler<-TT;>;Ljava/io/IOException;)V
    MethodParameters:
                  Name  Flags
      channel           final
      exceptionHandler  final
      exception         final

  public static <T extends java.nio.channels.Channel> java.lang.Runnable getChannelListenerTask(T, org.xnio.ChannelListener<? super T>);
    descriptor: (Ljava/nio/channels/Channel;Lorg/xnio/ChannelListener;)Ljava/lang/Runnable;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=4, locals=2, args_size=2
        start local 0 // java.nio.channels.Channel channel
        start local 1 // org.xnio.ChannelListener channelListener
         0: .line 141
            new org.xnio.ChannelListeners$5
            dup
            aload 0 /* channel */
            aload 1 /* channelListener */
            invokespecial org.xnio.ChannelListeners$5.<init>:(Ljava/nio/channels/Channel;Lorg/xnio/ChannelListener;)V
            areturn
        end local 1 // org.xnio.ChannelListener channelListener
        end local 0 // java.nio.channels.Channel channel
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0    1     0          channel  TT;
            0    1     1  channelListener  Lorg/xnio/ChannelListener<-TT;>;
    Signature: <T::Ljava/nio/channels/Channel;>(TT;Lorg/xnio/ChannelListener<-TT;>;)Ljava/lang/Runnable;
    MethodParameters:
                 Name  Flags
      channel          final
      channelListener  final

  public static <T extends java.nio.channels.Channel> java.lang.Runnable getChannelListenerTask(T, org.xnio.ChannelListener$SimpleSetter<T>);
    descriptor: (Ljava/nio/channels/Channel;Lorg/xnio/ChannelListener$SimpleSetter;)Ljava/lang/Runnable;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=4, locals=2, args_size=2
        start local 0 // java.nio.channels.Channel channel
        start local 1 // org.xnio.ChannelListener$SimpleSetter setter
         0: .line 161
            new org.xnio.ChannelListeners$6
            dup
            aload 0 /* channel */
            aload 1 /* setter */
            invokespecial org.xnio.ChannelListeners$6.<init>:(Ljava/nio/channels/Channel;Lorg/xnio/ChannelListener$SimpleSetter;)V
            areturn
        end local 1 // org.xnio.ChannelListener$SimpleSetter setter
        end local 0 // java.nio.channels.Channel channel
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    1     0  channel  TT;
            0    1     1   setter  Lorg/xnio/ChannelListener$SimpleSetter<TT;>;
    Signature: <T::Ljava/nio/channels/Channel;>(TT;Lorg/xnio/ChannelListener$SimpleSetter<TT;>;)Ljava/lang/Runnable;
    MethodParameters:
         Name  Flags
      channel  final
      setter   final

  public static org.xnio.ChannelListener<java.nio.channels.Channel> closingChannelListener();
    descriptor: ()Lorg/xnio/ChannelListener;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 178
            getstatic org.xnio.ChannelListeners.CLOSING_CHANNEL_LISTENER:Lorg/xnio/ChannelListener;
            areturn
      LocalVariableTable:
        Start  End  Slot  Name  Signature
    Signature: ()Lorg/xnio/ChannelListener<Ljava/nio/channels/Channel;>;

  public static org.xnio.ChannelListener<java.nio.channels.Channel> closingChannelListener(java.io.Closeable);
    descriptor: (Ljava/io/Closeable;)Lorg/xnio/ChannelListener;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // java.io.Closeable resource
         0: .line 188
            new org.xnio.ChannelListeners$7
            dup
            aload 0 /* resource */
            invokespecial org.xnio.ChannelListeners$7.<init>:(Ljava/io/Closeable;)V
            areturn
        end local 0 // java.io.Closeable resource
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    1     0  resource  Ljava/io/Closeable;
    Signature: (Ljava/io/Closeable;)Lorg/xnio/ChannelListener<Ljava/nio/channels/Channel;>;
    MethodParameters:
          Name  Flags
      resource  final

  public static org.xnio.ChannelListener<java.nio.channels.Channel> closingChannelListener(java.io.Closeable[]);
    descriptor: ([Ljava/io/Closeable;)Lorg/xnio/ChannelListener;
    flags: (0x0089) ACC_PUBLIC, ACC_STATIC, ACC_VARARGS
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // java.io.Closeable[] resources
         0: .line 206
            new org.xnio.ChannelListeners$8
            dup
            aload 0 /* resources */
            invokespecial org.xnio.ChannelListeners$8.<init>:([Ljava/io/Closeable;)V
            areturn
        end local 0 // java.io.Closeable[] resources
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    1     0  resources  [Ljava/io/Closeable;
    Signature: ([Ljava/io/Closeable;)Lorg/xnio/ChannelListener<Ljava/nio/channels/Channel;>;
    MethodParameters:
           Name  Flags
      resources  final

  public static <T extends java.nio.channels.Channel> org.xnio.ChannelListener<T> closingChannelListener(org.xnio.ChannelListener<T>, java.io.Closeable);
    descriptor: (Lorg/xnio/ChannelListener;Ljava/io/Closeable;)Lorg/xnio/ChannelListener;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=4, locals=2, args_size=2
        start local 0 // org.xnio.ChannelListener delegate
        start local 1 // java.io.Closeable resource
         0: .line 225
            new org.xnio.ChannelListeners$9
            dup
            aload 1 /* resource */
            aload 0 /* delegate */
            invokespecial org.xnio.ChannelListeners$9.<init>:(Ljava/io/Closeable;Lorg/xnio/ChannelListener;)V
            areturn
        end local 1 // java.io.Closeable resource
        end local 0 // org.xnio.ChannelListener delegate
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    1     0  delegate  Lorg/xnio/ChannelListener<TT;>;
            0    1     1  resource  Ljava/io/Closeable;
    Signature: <T::Ljava/nio/channels/Channel;>(Lorg/xnio/ChannelListener<TT;>;Ljava/io/Closeable;)Lorg/xnio/ChannelListener<TT;>;
    MethodParameters:
          Name  Flags
      delegate  final
      resource  final

  public static <T extends java.nio.channels.Channel> org.xnio.ChannelListener<T> closingChannelListener(org.xnio.ChannelListener<T>, java.io.Closeable[]);
    descriptor: (Lorg/xnio/ChannelListener;[Ljava/io/Closeable;)Lorg/xnio/ChannelListener;
    flags: (0x0089) ACC_PUBLIC, ACC_STATIC, ACC_VARARGS
    Code:
      stack=4, locals=2, args_size=2
        start local 0 // org.xnio.ChannelListener delegate
        start local 1 // java.io.Closeable[] resources
         0: .line 245
            new org.xnio.ChannelListeners$10
            dup
            aload 1 /* resources */
            aload 0 /* delegate */
            invokespecial org.xnio.ChannelListeners$10.<init>:([Ljava/io/Closeable;Lorg/xnio/ChannelListener;)V
            areturn
        end local 1 // java.io.Closeable[] resources
        end local 0 // org.xnio.ChannelListener delegate
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    1     0   delegate  Lorg/xnio/ChannelListener<TT;>;
            0    1     1  resources  [Ljava/io/Closeable;
    Signature: <T::Ljava/nio/channels/Channel;>(Lorg/xnio/ChannelListener<TT;>;[Ljava/io/Closeable;)Lorg/xnio/ChannelListener<TT;>;
    MethodParameters:
           Name  Flags
      delegate   final
      resources  final

  public static org.xnio.ChannelListener<java.nio.channels.Channel> nullChannelListener();
    descriptor: ()Lorg/xnio/ChannelListener;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 263
            getstatic org.xnio.ChannelListeners.NULL_LISTENER:Lorg/xnio/ChannelListener;
            areturn
      LocalVariableTable:
        Start  End  Slot  Name  Signature
    Signature: ()Lorg/xnio/ChannelListener<Ljava/nio/channels/Channel;>;

  public static org.xnio.ChannelExceptionHandler<java.nio.channels.Channel> closingChannelExceptionHandler();
    descriptor: ()Lorg/xnio/ChannelExceptionHandler;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 272
            getstatic org.xnio.ChannelListeners.CLOSING_HANDLER:Lorg/xnio/ChannelExceptionHandler;
            areturn
      LocalVariableTable:
        Start  End  Slot  Name  Signature
    Signature: ()Lorg/xnio/ChannelExceptionHandler<Ljava/nio/channels/Channel;>;

  public static <C extends org.xnio.channels.ConnectedChannel> org.xnio.ChannelListener<org.xnio.channels.AcceptingChannel<C>> openListenerAdapter(org.xnio.ChannelListener<? super C>);
    descriptor: (Lorg/xnio/ChannelListener;)Lorg/xnio/ChannelListener;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // org.xnio.ChannelListener openListener
         0: .line 283
            aload 0 /* openListener */
            ifnonnull 2
         1: .line 284
            getstatic org.xnio._private.Messages.msg:Lorg/xnio/_private/Messages;
            ldc "openListener"
            invokeinterface org.xnio._private.Messages.nullParameter:(Ljava/lang/String;)Ljava/lang/IllegalArgumentException;
            athrow
         2: .line 286
      StackMap locals:
      StackMap stack:
            new org.xnio.ChannelListeners$11
            dup
            aload 0 /* openListener */
            invokespecial org.xnio.ChannelListeners$11.<init>:(Lorg/xnio/ChannelListener;)V
            areturn
        end local 0 // org.xnio.ChannelListener openListener
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0    3     0  openListener  Lorg/xnio/ChannelListener<-TC;>;
    Signature: <C::Lorg/xnio/channels/ConnectedChannel;>(Lorg/xnio/ChannelListener<-TC;>;)Lorg/xnio/ChannelListener<Lorg/xnio/channels/AcceptingChannel<TC;>;>;
    MethodParameters:
              Name  Flags
      openListener  final

  public static <T extends java.nio.channels.Channel, C> org.xnio.ChannelListener$Setter<T> getSetter(C, java.util.concurrent.atomic.AtomicReferenceFieldUpdater<C, org.xnio.ChannelListener>);
    descriptor: (Ljava/lang/Object;Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;)Lorg/xnio/ChannelListener$Setter;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=4, locals=2, args_size=2
        start local 0 // java.lang.Object channel
        start local 1 // java.util.concurrent.atomic.AtomicReferenceFieldUpdater updater
         0: .line 317
            new org.xnio.ChannelListeners$12
            dup
            aload 1 /* updater */
            aload 0 /* channel */
            invokespecial org.xnio.ChannelListeners$12.<init>:(Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;Ljava/lang/Object;)V
            areturn
        end local 1 // java.util.concurrent.atomic.AtomicReferenceFieldUpdater updater
        end local 0 // java.lang.Object channel
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    1     0  channel  TC;
            0    1     1  updater  Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater<TC;Lorg/xnio/ChannelListener;>;
    Signature: <T::Ljava/nio/channels/Channel;C:Ljava/lang/Object;>(TC;Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater<TC;Lorg/xnio/ChannelListener;>;)Lorg/xnio/ChannelListener$Setter<TT;>;
    RuntimeVisibleAnnotations: 
      java.lang.Deprecated()
    MethodParameters:
         Name  Flags
      channel  final
      updater  final

  public static <T extends java.nio.channels.Channel> org.xnio.ChannelListener$Setter<T> getSetter(java.util.concurrent.atomic.AtomicReference<org.xnio.ChannelListener<? super T>>);
    descriptor: (Ljava/util/concurrent/atomic/AtomicReference;)Lorg/xnio/ChannelListener$Setter;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // java.util.concurrent.atomic.AtomicReference atomicReference
         0: .line 337
            new org.xnio.ChannelListeners$13
            dup
            aload 0 /* atomicReference */
            invokespecial org.xnio.ChannelListeners$13.<init>:(Ljava/util/concurrent/atomic/AtomicReference;)V
            areturn
        end local 0 // java.util.concurrent.atomic.AtomicReference atomicReference
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0    1     0  atomicReference  Ljava/util/concurrent/atomic/AtomicReference<Lorg/xnio/ChannelListener<-TT;>;>;
    Signature: <T::Ljava/nio/channels/Channel;>(Ljava/util/concurrent/atomic/AtomicReference<Lorg/xnio/ChannelListener<-TT;>;>;)Lorg/xnio/ChannelListener$Setter<TT;>;
    MethodParameters:
                 Name  Flags
      atomicReference  final

  public static <T extends java.nio.channels.Channel> org.xnio.ChannelListener$Setter<T> getDelegatingSetter(org.xnio.ChannelListener$Setter<? extends java.nio.channels.Channel>, T);
    descriptor: (Lorg/xnio/ChannelListener$Setter;Ljava/nio/channels/Channel;)Lorg/xnio/ChannelListener$Setter;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=4, locals=2, args_size=2
        start local 0 // org.xnio.ChannelListener$Setter target
        start local 1 // java.nio.channels.Channel realChannel
         0: .line 357
            aload 0 /* target */
            ifnonnull 1
            aconst_null
            goto 2
      StackMap locals:
      StackMap stack:
         1: new org.xnio.ChannelListeners$DelegatingSetter
            dup
            aload 0 /* target */
            aload 1 /* realChannel */
            invokespecial org.xnio.ChannelListeners$DelegatingSetter.<init>:(Lorg/xnio/ChannelListener$Setter;Ljava/nio/channels/Channel;)V
      StackMap locals:
      StackMap stack: org.xnio.ChannelListeners$DelegatingSetter
         2: areturn
        end local 1 // java.nio.channels.Channel realChannel
        end local 0 // org.xnio.ChannelListener$Setter target
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    3     0       target  Lorg/xnio/ChannelListener$Setter<+Ljava/nio/channels/Channel;>;
            0    3     1  realChannel  TT;
    Signature: <T::Ljava/nio/channels/Channel;>(Lorg/xnio/ChannelListener$Setter<+Ljava/nio/channels/Channel;>;TT;)Lorg/xnio/ChannelListener$Setter<TT;>;
    MethodParameters:
             Name  Flags
      target       final
      realChannel  final

  public static <T extends java.nio.channels.Channel> org.xnio.ChannelListener$Setter<T> nullSetter();
    descriptor: ()Lorg/xnio/ChannelListener$Setter;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 368
            getstatic org.xnio.ChannelListeners.NULL_SETTER:Lorg/xnio/ChannelListener$Setter;
            areturn
      LocalVariableTable:
        Start  End  Slot  Name  Signature
    Signature: <T::Ljava/nio/channels/Channel;>()Lorg/xnio/ChannelListener$Setter<TT;>;

  public static <T extends java.nio.channels.Channel> org.xnio.ChannelListener<T> executorChannelListener(org.xnio.ChannelListener<T>, java.util.concurrent.Executor);
    descriptor: (Lorg/xnio/ChannelListener;Ljava/util/concurrent/Executor;)Lorg/xnio/ChannelListener;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=4, locals=2, args_size=2
        start local 0 // org.xnio.ChannelListener listener
        start local 1 // java.util.concurrent.Executor executor
         0: .line 381
            new org.xnio.ChannelListeners$14
            dup
            aload 1 /* executor */
            aload 0 /* listener */
            invokespecial org.xnio.ChannelListeners$14.<init>:(Ljava/util/concurrent/Executor;Lorg/xnio/ChannelListener;)V
            areturn
        end local 1 // java.util.concurrent.Executor executor
        end local 0 // org.xnio.ChannelListener listener
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    1     0  listener  Lorg/xnio/ChannelListener<TT;>;
            0    1     1  executor  Ljava/util/concurrent/Executor;
    Signature: <T::Ljava/nio/channels/Channel;>(Lorg/xnio/ChannelListener<TT;>;Ljava/util/concurrent/Executor;)Lorg/xnio/ChannelListener<TT;>;
    MethodParameters:
          Name  Flags
      listener  final
      executor  final

  public static <T extends org.xnio.channels.SuspendableWriteChannel> org.xnio.ChannelListener<T> flushingChannelListener(org.xnio.ChannelListener<? super T>, org.xnio.ChannelExceptionHandler<? super T>);
    descriptor: (Lorg/xnio/ChannelListener;Lorg/xnio/ChannelExceptionHandler;)Lorg/xnio/ChannelListener;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=4, locals=2, args_size=2
        start local 0 // org.xnio.ChannelListener delegate
        start local 1 // org.xnio.ChannelExceptionHandler exceptionHandler
         0: .line 409
            new org.xnio.ChannelListeners$15
            dup
            aload 1 /* exceptionHandler */
            aload 0 /* delegate */
            invokespecial org.xnio.ChannelListeners$15.<init>:(Lorg/xnio/ChannelExceptionHandler;Lorg/xnio/ChannelListener;)V
            areturn
        end local 1 // org.xnio.ChannelExceptionHandler exceptionHandler
        end local 0 // org.xnio.ChannelListener delegate
      LocalVariableTable:
        Start  End  Slot              Name  Signature
            0    1     0          delegate  Lorg/xnio/ChannelListener<-TT;>;
            0    1     1  exceptionHandler  Lorg/xnio/ChannelExceptionHandler<-TT;>;
    Signature: <T::Lorg/xnio/channels/SuspendableWriteChannel;>(Lorg/xnio/ChannelListener<-TT;>;Lorg/xnio/ChannelExceptionHandler<-TT;>;)Lorg/xnio/ChannelListener<TT;>;
    MethodParameters:
                  Name  Flags
      delegate          final
      exceptionHandler  final

  public static <T extends org.xnio.channels.SuspendableWriteChannel> org.xnio.ChannelListener<T> writeShutdownChannelListener(org.xnio.ChannelListener<? super T>, org.xnio.ChannelExceptionHandler<? super T>);
    descriptor: (Lorg/xnio/ChannelListener;Lorg/xnio/ChannelExceptionHandler;)Lorg/xnio/ChannelListener;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=5, locals=3, args_size=2
        start local 0 // org.xnio.ChannelListener delegate
        start local 1 // org.xnio.ChannelExceptionHandler exceptionHandler
         0: .line 445
            aload 0 /* delegate */
            aload 1 /* exceptionHandler */
            invokestatic org.xnio.ChannelListeners.flushingChannelListener:(Lorg/xnio/ChannelListener;Lorg/xnio/ChannelExceptionHandler;)Lorg/xnio/ChannelListener;
            astore 2 /* flushingListener */
        start local 2 // org.xnio.ChannelListener flushingListener
         1: .line 446
            new org.xnio.ChannelListeners$16
            dup
            aload 1 /* exceptionHandler */
            aload 2 /* flushingListener */
            aload 0 /* delegate */
            invokespecial org.xnio.ChannelListeners$16.<init>:(Lorg/xnio/ChannelExceptionHandler;Lorg/xnio/ChannelListener;Lorg/xnio/ChannelListener;)V
            areturn
        end local 2 // org.xnio.ChannelListener flushingListener
        end local 1 // org.xnio.ChannelExceptionHandler exceptionHandler
        end local 0 // org.xnio.ChannelListener delegate
      LocalVariableTable:
        Start  End  Slot              Name  Signature
            0    2     0          delegate  Lorg/xnio/ChannelListener<-TT;>;
            0    2     1  exceptionHandler  Lorg/xnio/ChannelExceptionHandler<-TT;>;
            1    2     2  flushingListener  Lorg/xnio/ChannelListener<TT;>;
    Signature: <T::Lorg/xnio/channels/SuspendableWriteChannel;>(Lorg/xnio/ChannelListener<-TT;>;Lorg/xnio/ChannelExceptionHandler<-TT;>;)Lorg/xnio/ChannelListener<TT;>;
    MethodParameters:
                  Name  Flags
      delegate          final
      exceptionHandler  final

  public static <T extends org.xnio.channels.StreamSinkChannel> org.xnio.ChannelListener<T> writingChannelListener(org.xnio.Pooled<java.nio.ByteBuffer>, org.xnio.ChannelListener<? super T>, org.xnio.ChannelExceptionHandler<? super T>);
    descriptor: (Lorg/xnio/Pooled;Lorg/xnio/ChannelListener;Lorg/xnio/ChannelExceptionHandler;)Lorg/xnio/ChannelListener;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=5, locals=3, args_size=3
        start local 0 // org.xnio.Pooled pooled
        start local 1 // org.xnio.ChannelListener delegate
        start local 2 // org.xnio.ChannelExceptionHandler exceptionHandler
         0: .line 476
            new org.xnio.ChannelListeners$17
            dup
            aload 0 /* pooled */
            aload 2 /* exceptionHandler */
            aload 1 /* delegate */
            invokespecial org.xnio.ChannelListeners$17.<init>:(Lorg/xnio/Pooled;Lorg/xnio/ChannelExceptionHandler;Lorg/xnio/ChannelListener;)V
            areturn
        end local 2 // org.xnio.ChannelExceptionHandler exceptionHandler
        end local 1 // org.xnio.ChannelListener delegate
        end local 0 // org.xnio.Pooled pooled
      LocalVariableTable:
        Start  End  Slot              Name  Signature
            0    1     0            pooled  Lorg/xnio/Pooled<Ljava/nio/ByteBuffer;>;
            0    1     1          delegate  Lorg/xnio/ChannelListener<-TT;>;
            0    1     2  exceptionHandler  Lorg/xnio/ChannelExceptionHandler<-TT;>;
    Signature: <T::Lorg/xnio/channels/StreamSinkChannel;>(Lorg/xnio/Pooled<Ljava/nio/ByteBuffer;>;Lorg/xnio/ChannelListener<-TT;>;Lorg/xnio/ChannelExceptionHandler<-TT;>;)Lorg/xnio/ChannelListener<TT;>;
    MethodParameters:
                  Name  Flags
      pooled            final
      delegate          final
      exceptionHandler  final

  public static <T extends org.xnio.channels.WritableMessageChannel> org.xnio.ChannelListener<T> sendingChannelListener(org.xnio.Pooled<java.nio.ByteBuffer>, org.xnio.ChannelListener<? super T>, org.xnio.ChannelExceptionHandler<? super T>);
    descriptor: (Lorg/xnio/Pooled;Lorg/xnio/ChannelListener;Lorg/xnio/ChannelExceptionHandler;)Lorg/xnio/ChannelListener;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=5, locals=3, args_size=3
        start local 0 // org.xnio.Pooled pooled
        start local 1 // org.xnio.ChannelListener delegate
        start local 2 // org.xnio.ChannelExceptionHandler exceptionHandler
         0: .line 524
            new org.xnio.ChannelListeners$18
            dup
            aload 0 /* pooled */
            aload 2 /* exceptionHandler */
            aload 1 /* delegate */
            invokespecial org.xnio.ChannelListeners$18.<init>:(Lorg/xnio/Pooled;Lorg/xnio/ChannelExceptionHandler;Lorg/xnio/ChannelListener;)V
            areturn
        end local 2 // org.xnio.ChannelExceptionHandler exceptionHandler
        end local 1 // org.xnio.ChannelListener delegate
        end local 0 // org.xnio.Pooled pooled
      LocalVariableTable:
        Start  End  Slot              Name  Signature
            0    1     0            pooled  Lorg/xnio/Pooled<Ljava/nio/ByteBuffer;>;
            0    1     1          delegate  Lorg/xnio/ChannelListener<-TT;>;
            0    1     2  exceptionHandler  Lorg/xnio/ChannelExceptionHandler<-TT;>;
    Signature: <T::Lorg/xnio/channels/WritableMessageChannel;>(Lorg/xnio/Pooled<Ljava/nio/ByteBuffer;>;Lorg/xnio/ChannelListener<-TT;>;Lorg/xnio/ChannelExceptionHandler<-TT;>;)Lorg/xnio/ChannelListener<TT;>;
    MethodParameters:
                  Name  Flags
      pooled            final
      delegate          final
      exceptionHandler  final

  public static <T extends org.xnio.channels.StreamSinkChannel> org.xnio.ChannelListener<T> fileSendingChannelListener(java.nio.channels.FileChannel, long, long, org.xnio.ChannelListener<? super T>, org.xnio.ChannelExceptionHandler<? super T>);
    descriptor: (Ljava/nio/channels/FileChannel;JJLorg/xnio/ChannelListener;Lorg/xnio/ChannelExceptionHandler;)Lorg/xnio/ChannelListener;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=9, locals=7, args_size=5
        start local 0 // java.nio.channels.FileChannel source
        start local 1 // long position
        start local 3 // long count
        start local 5 // org.xnio.ChannelListener delegate
        start local 6 // org.xnio.ChannelExceptionHandler exceptionHandler
         0: .line 566
            lload 3 /* count */
            lconst_0
            lcmp
            ifne 2
         1: .line 567
            aload 5 /* delegate */
            invokestatic org.xnio.ChannelListeners.delegatingChannelListener:(Lorg/xnio/ChannelListener;)Lorg/xnio/ChannelListener;
            areturn
         2: .line 569
      StackMap locals:
      StackMap stack:
            new org.xnio.ChannelListeners$19
            dup
            lload 1 /* position */
            lload 3 /* count */
            aload 0 /* source */
            aload 6 /* exceptionHandler */
            aload 5 /* delegate */
            invokespecial org.xnio.ChannelListeners$19.<init>:(JJLjava/nio/channels/FileChannel;Lorg/xnio/ChannelExceptionHandler;Lorg/xnio/ChannelListener;)V
            areturn
        end local 6 // org.xnio.ChannelExceptionHandler exceptionHandler
        end local 5 // org.xnio.ChannelListener delegate
        end local 3 // long count
        end local 1 // long position
        end local 0 // java.nio.channels.FileChannel source
      LocalVariableTable:
        Start  End  Slot              Name  Signature
            0    3     0            source  Ljava/nio/channels/FileChannel;
            0    3     1          position  J
            0    3     3             count  J
            0    3     5          delegate  Lorg/xnio/ChannelListener<-TT;>;
            0    3     6  exceptionHandler  Lorg/xnio/ChannelExceptionHandler<-TT;>;
    Signature: <T::Lorg/xnio/channels/StreamSinkChannel;>(Ljava/nio/channels/FileChannel;JJLorg/xnio/ChannelListener<-TT;>;Lorg/xnio/ChannelExceptionHandler<-TT;>;)Lorg/xnio/ChannelListener<TT;>;
    MethodParameters:
                  Name  Flags
      source            final
      position          final
      count             final
      delegate          final
      exceptionHandler  final

  public static <T extends org.xnio.channels.StreamSourceChannel> org.xnio.ChannelListener<T> fileReceivingChannelListener(java.nio.channels.FileChannel, long, long, org.xnio.ChannelListener<? super T>, org.xnio.ChannelExceptionHandler<? super T>);
    descriptor: (Ljava/nio/channels/FileChannel;JJLorg/xnio/ChannelListener;Lorg/xnio/ChannelExceptionHandler;)Lorg/xnio/ChannelListener;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=9, locals=7, args_size=5
        start local 0 // java.nio.channels.FileChannel target
        start local 1 // long position
        start local 3 // long count
        start local 5 // org.xnio.ChannelListener delegate
        start local 6 // org.xnio.ChannelExceptionHandler exceptionHandler
         0: .line 623
            lload 3 /* count */
            lconst_0
            lcmp
            ifne 2
         1: .line 624
            aload 5 /* delegate */
            invokestatic org.xnio.ChannelListeners.delegatingChannelListener:(Lorg/xnio/ChannelListener;)Lorg/xnio/ChannelListener;
            areturn
         2: .line 626
      StackMap locals:
      StackMap stack:
            new org.xnio.ChannelListeners$20
            dup
            lload 1 /* position */
            lload 3 /* count */
            aload 0 /* target */
            aload 6 /* exceptionHandler */
            aload 5 /* delegate */
            invokespecial org.xnio.ChannelListeners$20.<init>:(JJLjava/nio/channels/FileChannel;Lorg/xnio/ChannelExceptionHandler;Lorg/xnio/ChannelListener;)V
            areturn
        end local 6 // org.xnio.ChannelExceptionHandler exceptionHandler
        end local 5 // org.xnio.ChannelListener delegate
        end local 3 // long count
        end local 1 // long position
        end local 0 // java.nio.channels.FileChannel target
      LocalVariableTable:
        Start  End  Slot              Name  Signature
            0    3     0            target  Ljava/nio/channels/FileChannel;
            0    3     1          position  J
            0    3     3             count  J
            0    3     5          delegate  Lorg/xnio/ChannelListener<-TT;>;
            0    3     6  exceptionHandler  Lorg/xnio/ChannelExceptionHandler<-TT;>;
    Signature: <T::Lorg/xnio/channels/StreamSourceChannel;>(Ljava/nio/channels/FileChannel;JJLorg/xnio/ChannelListener<-TT;>;Lorg/xnio/ChannelExceptionHandler<-TT;>;)Lorg/xnio/ChannelListener<TT;>;
    MethodParameters:
                  Name  Flags
      target            final
      position          final
      count             final
      delegate          final
      exceptionHandler  final

  public static <T extends java.nio.channels.Channel> org.xnio.ChannelListener<T> delegatingChannelListener(org.xnio.ChannelListener<? super T>);
    descriptor: (Lorg/xnio/ChannelListener;)Lorg/xnio/ChannelListener;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // org.xnio.ChannelListener delegate
         0: .line 673
            new org.xnio.ChannelListeners$21
            dup
            aload 0 /* delegate */
            invokespecial org.xnio.ChannelListeners$21.<init>:(Lorg/xnio/ChannelListener;)V
            areturn
        end local 0 // org.xnio.ChannelListener delegate
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    1     0  delegate  Lorg/xnio/ChannelListener<-TT;>;
    Signature: <T::Ljava/nio/channels/Channel;>(Lorg/xnio/ChannelListener<-TT;>;)Lorg/xnio/ChannelListener<TT;>;
    MethodParameters:
          Name  Flags
      delegate  final

  public static <C extends java.nio.channels.Channel, T extends java.nio.channels.Channel> org.xnio.ChannelListener<C> delegatingChannelListener(T, org.xnio.ChannelListener$SimpleSetter<T>);
    descriptor: (Ljava/nio/channels/Channel;Lorg/xnio/ChannelListener$SimpleSetter;)Lorg/xnio/ChannelListener;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=4, locals=2, args_size=2
        start local 0 // java.nio.channels.Channel channel
        start local 1 // org.xnio.ChannelListener$SimpleSetter setter
         0: .line 694
            new org.xnio.ChannelListeners$SetterDelegatingListener
            dup
            aload 1 /* setter */
            aload 0 /* channel */
            invokespecial org.xnio.ChannelListeners$SetterDelegatingListener.<init>:(Lorg/xnio/ChannelListener$SimpleSetter;Ljava/nio/channels/Channel;)V
            areturn
        end local 1 // org.xnio.ChannelListener$SimpleSetter setter
        end local 0 // java.nio.channels.Channel channel
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    1     0  channel  TT;
            0    1     1   setter  Lorg/xnio/ChannelListener$SimpleSetter<TT;>;
    Signature: <C::Ljava/nio/channels/Channel;T::Ljava/nio/channels/Channel;>(TT;Lorg/xnio/ChannelListener$SimpleSetter<TT;>;)Lorg/xnio/ChannelListener<TC;>;
    MethodParameters:
         Name  Flags
      channel  final
      setter   final

  public static <T extends org.xnio.channels.SuspendableWriteChannel> org.xnio.ChannelListener<T> writeSuspendingChannelListener(org.xnio.ChannelListener<? super T>);
    descriptor: (Lorg/xnio/ChannelListener;)Lorg/xnio/ChannelListener;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // org.xnio.ChannelListener delegate
         0: .line 705
            new org.xnio.ChannelListeners$22
            dup
            aload 0 /* delegate */
            invokespecial org.xnio.ChannelListeners$22.<init>:(Lorg/xnio/ChannelListener;)V
            areturn
        end local 0 // org.xnio.ChannelListener delegate
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    1     0  delegate  Lorg/xnio/ChannelListener<-TT;>;
    Signature: <T::Lorg/xnio/channels/SuspendableWriteChannel;>(Lorg/xnio/ChannelListener<-TT;>;)Lorg/xnio/ChannelListener<TT;>;
    MethodParameters:
          Name  Flags
      delegate  final

  public static <T extends org.xnio.channels.SuspendableReadChannel> org.xnio.ChannelListener<T> readSuspendingChannelListener(org.xnio.ChannelListener<? super T>);
    descriptor: (Lorg/xnio/ChannelListener;)Lorg/xnio/ChannelListener;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // org.xnio.ChannelListener delegate
         0: .line 725
            new org.xnio.ChannelListeners$23
            dup
            aload 0 /* delegate */
            invokespecial org.xnio.ChannelListeners$23.<init>:(Lorg/xnio/ChannelListener;)V
            areturn
        end local 0 // org.xnio.ChannelListener delegate
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    1     0  delegate  Lorg/xnio/ChannelListener<-TT;>;
    Signature: <T::Lorg/xnio/channels/SuspendableReadChannel;>(Lorg/xnio/ChannelListener<-TT;>;)Lorg/xnio/ChannelListener<TT;>;
    MethodParameters:
          Name  Flags
      delegate  final

  public static <I extends org.xnio.channels.StreamSourceChannel, O extends org.xnio.channels.StreamSinkChannel> void initiateTransfer(I, O, org.xnio.Pool<java.nio.ByteBuffer>);
    descriptor: (Lorg/xnio/channels/StreamSourceChannel;Lorg/xnio/channels/StreamSinkChannel;Lorg/xnio/Pool;)V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=9, locals=3, args_size=3
        start local 0 // org.xnio.channels.StreamSourceChannel source
        start local 1 // org.xnio.channels.StreamSinkChannel sink
        start local 2 // org.xnio.Pool pool
         0: .line 937
            ldc 9223372036854775807
            aload 0 /* source */
            aload 1 /* sink */
            getstatic org.xnio.ChannelListeners.CLOSING_CHANNEL_LISTENER:Lorg/xnio/ChannelListener;
            getstatic org.xnio.ChannelListeners.CLOSING_CHANNEL_LISTENER:Lorg/xnio/ChannelListener;
            getstatic org.xnio.ChannelListeners.CLOSING_HANDLER:Lorg/xnio/ChannelExceptionHandler;
            getstatic org.xnio.ChannelListeners.CLOSING_HANDLER:Lorg/xnio/ChannelExceptionHandler;
            aload 2 /* pool */
            invokestatic org.xnio.ChannelListeners.initiateTransfer:(JLorg/xnio/channels/StreamSourceChannel;Lorg/xnio/channels/StreamSinkChannel;Lorg/xnio/ChannelListener;Lorg/xnio/ChannelListener;Lorg/xnio/ChannelExceptionHandler;Lorg/xnio/ChannelExceptionHandler;Lorg/xnio/Pool;)V
         1: .line 938
            return
        end local 2 // org.xnio.Pool pool
        end local 1 // org.xnio.channels.StreamSinkChannel sink
        end local 0 // org.xnio.channels.StreamSourceChannel source
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    2     0  source  TI;
            0    2     1    sink  TO;
            0    2     2    pool  Lorg/xnio/Pool<Ljava/nio/ByteBuffer;>;
    Signature: <I::Lorg/xnio/channels/StreamSourceChannel;O::Lorg/xnio/channels/StreamSinkChannel;>(TI;TO;Lorg/xnio/Pool<Ljava/nio/ByteBuffer;>;)V
    MethodParameters:
        Name  Flags
      source  final
      sink    final
      pool    

  public static <I extends org.xnio.channels.StreamSourceChannel, O extends org.xnio.channels.StreamSinkChannel> void initiateTransfer(long, I, O, org.xnio.ChannelListener<? super I>, org.xnio.ChannelListener<? super O>, org.xnio.ChannelExceptionHandler<? super I>, org.xnio.ChannelExceptionHandler<? super O>, org.xnio.Pool<java.nio.ByteBuffer>);
    descriptor: (JLorg/xnio/channels/StreamSourceChannel;Lorg/xnio/channels/StreamSinkChannel;Lorg/xnio/ChannelListener;Lorg/xnio/ChannelListener;Lorg/xnio/ChannelExceptionHandler;Lorg/xnio/ChannelExceptionHandler;Lorg/xnio/Pool;)V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=12, locals=17, args_size=8
        start local 0 // long count
        start local 2 // org.xnio.channels.StreamSourceChannel source
        start local 3 // org.xnio.channels.StreamSinkChannel sink
        start local 4 // org.xnio.ChannelListener sourceListener
        start local 5 // org.xnio.ChannelListener sinkListener
        start local 6 // org.xnio.ChannelExceptionHandler readExceptionHandler
        start local 7 // org.xnio.ChannelExceptionHandler writeExceptionHandler
        start local 8 // org.xnio.Pool pool
         0: .line 954
            aload 8 /* pool */
            ifnonnull 2
         1: .line 955
            getstatic org.xnio._private.Messages.msg:Lorg/xnio/_private/Messages;
            ldc "pool"
            invokeinterface org.xnio._private.Messages.nullParameter:(Ljava/lang/String;)Ljava/lang/IllegalArgumentException;
            athrow
         2: .line 957
      StackMap locals:
      StackMap stack:
            aload 8 /* pool */
            invokeinterface org.xnio.Pool.allocate:()Lorg/xnio/Pooled;
            astore 9 /* allocated */
        start local 9 // org.xnio.Pooled allocated
         3: .line 958
            iconst_1
            istore 10 /* free */
        start local 10 // boolean free
         4: .line 960
            aload 9 /* allocated */
            invokeinterface org.xnio.Pooled.getResource:()Ljava/lang/Object;
            checkcast java.nio.ByteBuffer
            astore 11 /* buffer */
        start local 11 // java.nio.ByteBuffer buffer
         5: .line 964
      StackMap locals: org.xnio.Pooled int java.nio.ByteBuffer
      StackMap stack:
            aload 2 /* source */
            lload 0 /* count */
            aload 11 /* buffer */
            aload 3 /* sink */
            invokeinterface org.xnio.channels.StreamSourceChannel.transferTo:(JLjava/nio/ByteBuffer;Lorg/xnio/channels/StreamSinkChannel;)J
            lstore 12 /* transferred */
        start local 12 // long transferred
         6: .line 965
            goto 11
        end local 12 // long transferred
      StackMap locals:
      StackMap stack: java.io.IOException
         7: astore 14 /* e */
        start local 14 // java.io.IOException e
         8: .line 966
            aload 2 /* source */
            aload 6 /* readExceptionHandler */
            aload 14 /* e */
            invokestatic org.xnio.ChannelListeners.invokeChannelExceptionHandler:(Ljava/nio/channels/Channel;Lorg/xnio/ChannelExceptionHandler;Ljava/io/IOException;)V
         9: .line 1045
            iload 10 /* free */
            ifeq 10
            aload 9 /* allocated */
            invokeinterface org.xnio.Pooled.free:()V
        10: .line 967
      StackMap locals: long org.xnio.channels.StreamSourceChannel org.xnio.channels.StreamSinkChannel org.xnio.ChannelListener org.xnio.ChannelListener org.xnio.ChannelExceptionHandler org.xnio.ChannelExceptionHandler org.xnio.Pool org.xnio.Pooled int java.nio.ByteBuffer top top java.io.IOException
      StackMap stack:
            return
        end local 14 // java.io.IOException e
        start local 12 // long transferred
        11: .line 969
      StackMap locals: long org.xnio.channels.StreamSourceChannel org.xnio.channels.StreamSinkChannel org.xnio.ChannelListener org.xnio.ChannelListener org.xnio.ChannelExceptionHandler org.xnio.ChannelExceptionHandler org.xnio.Pool org.xnio.Pooled int java.nio.ByteBuffer long
      StackMap stack:
            lload 12 /* transferred */
            lconst_0
            lcmp
            ifne 13
            aload 11 /* buffer */
            invokevirtual java.nio.ByteBuffer.hasRemaining:()Z
            ifne 13
        12: .line 970
            goto 65
        13: .line 972
      StackMap locals:
      StackMap stack:
            lload 12 /* transferred */
            ldc -1
            lcmp
            ifne 31
        14: .line 973
            lload 0 /* count */
            ldc 9223372036854775807
            lcmp
            ifne 26
        15: .line 974
            aload 2 /* source */
            aload 4 /* sourceListener */
            invokestatic org.xnio.channels.Channels.setReadListener:(Lorg/xnio/channels/SuspendableReadChannel;Lorg/xnio/ChannelListener;)V
        16: .line 975
            aload 4 /* sourceListener */
            ifnonnull 19
        17: .line 976
            aload 2 /* source */
            invokeinterface org.xnio.channels.StreamSourceChannel.suspendReads:()V
        18: .line 977
            goto 20
        19: .line 978
      StackMap locals:
      StackMap stack:
            aload 2 /* source */
            invokeinterface org.xnio.channels.StreamSourceChannel.wakeupReads:()V
        20: .line 981
      StackMap locals:
      StackMap stack:
            aload 3 /* sink */
            aload 5 /* sinkListener */
            invokestatic org.xnio.channels.Channels.setWriteListener:(Lorg/xnio/channels/SuspendableWriteChannel;Lorg/xnio/ChannelListener;)V
        21: .line 982
            aload 5 /* sinkListener */
            ifnonnull 24
        22: .line 983
            aload 3 /* sink */
            invokeinterface org.xnio.channels.StreamSinkChannel.suspendWrites:()V
        23: .line 984
            goto 29
        24: .line 985
      StackMap locals:
      StackMap stack:
            aload 3 /* sink */
            invokeinterface org.xnio.channels.StreamSinkChannel.wakeupWrites:()V
        25: .line 987
            goto 29
        26: .line 988
      StackMap locals:
      StackMap stack:
            aload 2 /* source */
            invokeinterface org.xnio.channels.StreamSourceChannel.suspendReads:()V
        27: .line 989
            aload 3 /* sink */
            invokeinterface org.xnio.channels.StreamSinkChannel.suspendWrites:()V
        28: .line 990
            aload 2 /* source */
            aload 6 /* readExceptionHandler */
            new java.io.EOFException
            dup
            invokespecial java.io.EOFException.<init>:()V
            invokestatic org.xnio.ChannelListeners.invokeChannelExceptionHandler:(Ljava/nio/channels/Channel;Lorg/xnio/ChannelExceptionHandler;Ljava/io/IOException;)V
        29: .line 1045
      StackMap locals:
      StackMap stack:
            iload 10 /* free */
            ifeq 30
            aload 9 /* allocated */
            invokeinterface org.xnio.Pooled.free:()V
        30: .line 992
      StackMap locals:
      StackMap stack:
            return
        31: .line 994
      StackMap locals:
      StackMap stack:
            lload 0 /* count */
            ldc 9223372036854775807
            lcmp
            ifeq 51
        32: .line 995
            lload 0 /* count */
            lload 12 /* transferred */
            lsub
            lstore 0 /* count */
        33: .line 997
            goto 51
        34: .line 1000
      StackMap locals:
      StackMap stack:
            aload 3 /* sink */
            aload 11 /* buffer */
            invokeinterface org.xnio.channels.StreamSinkChannel.write:(Ljava/nio/ByteBuffer;)I
            istore 14 /* res */
        start local 14 // int res
        35: .line 1001
            goto 40
        end local 14 // int res
      StackMap locals:
      StackMap stack: java.io.IOException
        36: astore 15 /* e */
        start local 15 // java.io.IOException e
        37: .line 1002
            aload 3 /* sink */
            aload 7 /* writeExceptionHandler */
            aload 15 /* e */
            invokestatic org.xnio.ChannelListeners.invokeChannelExceptionHandler:(Ljava/nio/channels/Channel;Lorg/xnio/ChannelExceptionHandler;Ljava/io/IOException;)V
        38: .line 1045
            iload 10 /* free */
            ifeq 39
            aload 9 /* allocated */
            invokeinterface org.xnio.Pooled.free:()V
        39: .line 1003
      StackMap locals: long org.xnio.channels.StreamSourceChannel org.xnio.channels.StreamSinkChannel org.xnio.ChannelListener org.xnio.ChannelListener org.xnio.ChannelExceptionHandler org.xnio.ChannelExceptionHandler org.xnio.Pool org.xnio.Pooled int java.nio.ByteBuffer long top java.io.IOException
      StackMap stack:
            return
        end local 15 // java.io.IOException e
        start local 14 // int res
        40: .line 1005
      StackMap locals: long org.xnio.channels.StreamSourceChannel org.xnio.channels.StreamSinkChannel org.xnio.ChannelListener org.xnio.ChannelListener org.xnio.ChannelExceptionHandler org.xnio.ChannelExceptionHandler org.xnio.Pool org.xnio.Pooled int java.nio.ByteBuffer long int
      StackMap stack:
            iload 14 /* res */
            ifne 49
        41: .line 1007
            new org.xnio.ChannelListeners$TransferListener
            dup
            lload 0 /* count */
            aload 9 /* allocated */
            aload 2 /* source */
            aload 3 /* sink */
            aload 4 /* sourceListener */
            aload 5 /* sinkListener */
            aload 7 /* writeExceptionHandler */
            aload 6 /* readExceptionHandler */
            iconst_1
            invokespecial org.xnio.ChannelListeners$TransferListener.<init>:(JLorg/xnio/Pooled;Lorg/xnio/channels/StreamSourceChannel;Lorg/xnio/channels/StreamSinkChannel;Lorg/xnio/ChannelListener;Lorg/xnio/ChannelListener;Lorg/xnio/ChannelExceptionHandler;Lorg/xnio/ChannelExceptionHandler;I)V
            astore 15 /* listener */
        start local 15 // org.xnio.ChannelListeners$TransferListener listener
        42: .line 1008
            aload 2 /* source */
            invokeinterface org.xnio.channels.StreamSourceChannel.suspendReads:()V
        43: .line 1009
            aload 2 /* source */
            invokeinterface org.xnio.channels.StreamSourceChannel.getReadSetter:()Lorg/xnio/ChannelListener$Setter;
            aload 15 /* listener */
            invokeinterface org.xnio.ChannelListener$Setter.set:(Lorg/xnio/ChannelListener;)V
        44: .line 1010
            aload 3 /* sink */
            invokeinterface org.xnio.channels.StreamSinkChannel.getWriteSetter:()Lorg/xnio/ChannelListener$Setter;
            aload 15 /* listener */
            invokeinterface org.xnio.ChannelListener$Setter.set:(Lorg/xnio/ChannelListener;)V
        45: .line 1011
            aload 3 /* sink */
            invokeinterface org.xnio.channels.StreamSinkChannel.resumeWrites:()V
        46: .line 1012
            iconst_0
            istore 10 /* free */
        47: .line 1045
            iload 10 /* free */
            ifeq 48
            aload 9 /* allocated */
            invokeinterface org.xnio.Pooled.free:()V
        48: .line 1013
      StackMap locals: org.xnio.ChannelListeners$TransferListener
      StackMap stack:
            return
        end local 15 // org.xnio.ChannelListeners$TransferListener listener
        49: .line 1014
      StackMap locals:
      StackMap stack:
            lload 0 /* count */
            ldc 9223372036854775807
            lcmp
            ifeq 51
        50: .line 1015
            lload 0 /* count */
            iload 14 /* res */
            i2l
            lsub
            lstore 0 /* count */
        end local 14 // int res
        51: .line 997
      StackMap locals:
      StackMap stack:
            aload 11 /* buffer */
            invokevirtual java.nio.ByteBuffer.hasRemaining:()Z
            ifne 34
        52: .line 1018
            lload 0 /* count */
            lconst_0
            lcmp
            ifne 5
        53: .line 1020
            aload 2 /* source */
            aload 4 /* sourceListener */
            invokestatic org.xnio.channels.Channels.setReadListener:(Lorg/xnio/channels/SuspendableReadChannel;Lorg/xnio/ChannelListener;)V
        54: .line 1021
            aload 4 /* sourceListener */
            ifnonnull 57
        55: .line 1022
            aload 2 /* source */
            invokeinterface org.xnio.channels.StreamSourceChannel.suspendReads:()V
        56: .line 1023
            goto 58
        57: .line 1024
      StackMap locals:
      StackMap stack:
            aload 2 /* source */
            invokeinterface org.xnio.channels.StreamSourceChannel.wakeupReads:()V
        58: .line 1027
      StackMap locals:
      StackMap stack:
            aload 3 /* sink */
            aload 5 /* sinkListener */
            invokestatic org.xnio.channels.Channels.setWriteListener:(Lorg/xnio/channels/SuspendableWriteChannel;Lorg/xnio/ChannelListener;)V
        59: .line 1028
            aload 5 /* sinkListener */
            ifnonnull 62
        60: .line 1029
            aload 3 /* sink */
            invokeinterface org.xnio.channels.StreamSinkChannel.suspendWrites:()V
        61: .line 1030
            goto 63
        62: .line 1031
      StackMap locals:
      StackMap stack:
            aload 3 /* sink */
            invokeinterface org.xnio.channels.StreamSinkChannel.wakeupWrites:()V
        63: .line 1045
      StackMap locals:
      StackMap stack:
            iload 10 /* free */
            ifeq 64
            aload 9 /* allocated */
            invokeinterface org.xnio.Pooled.free:()V
        64: .line 1033
      StackMap locals:
      StackMap stack:
            return
        65: .line 1037
      StackMap locals:
      StackMap stack:
            new org.xnio.ChannelListeners$TransferListener
            dup
            lload 0 /* count */
            aload 9 /* allocated */
            aload 2 /* source */
            aload 3 /* sink */
            aload 4 /* sourceListener */
            aload 5 /* sinkListener */
            aload 7 /* writeExceptionHandler */
            aload 6 /* readExceptionHandler */
            iconst_0
            invokespecial org.xnio.ChannelListeners$TransferListener.<init>:(JLorg/xnio/Pooled;Lorg/xnio/channels/StreamSourceChannel;Lorg/xnio/channels/StreamSinkChannel;Lorg/xnio/ChannelListener;Lorg/xnio/ChannelListener;Lorg/xnio/ChannelExceptionHandler;Lorg/xnio/ChannelExceptionHandler;I)V
            astore 14 /* listener */
        start local 14 // org.xnio.ChannelListeners$TransferListener listener
        66: .line 1038
            aload 3 /* sink */
            invokeinterface org.xnio.channels.StreamSinkChannel.suspendWrites:()V
        67: .line 1039
            aload 3 /* sink */
            invokeinterface org.xnio.channels.StreamSinkChannel.getWriteSetter:()Lorg/xnio/ChannelListener$Setter;
            aload 14 /* listener */
            invokeinterface org.xnio.ChannelListener$Setter.set:(Lorg/xnio/ChannelListener;)V
        68: .line 1040
            aload 2 /* source */
            invokeinterface org.xnio.channels.StreamSourceChannel.getReadSetter:()Lorg/xnio/ChannelListener$Setter;
            aload 14 /* listener */
            invokeinterface org.xnio.ChannelListener$Setter.set:(Lorg/xnio/ChannelListener;)V
        69: .line 1041
            aload 2 /* source */
            invokeinterface org.xnio.channels.StreamSourceChannel.resumeReads:()V
        70: .line 1042
            iconst_0
            istore 10 /* free */
        71: .line 1045
            iload 10 /* free */
            ifeq 72
            aload 9 /* allocated */
            invokeinterface org.xnio.Pooled.free:()V
        72: .line 1043
      StackMap locals: org.xnio.ChannelListeners$TransferListener
      StackMap stack:
            return
        end local 14 // org.xnio.ChannelListeners$TransferListener listener
        end local 12 // long transferred
        end local 11 // java.nio.ByteBuffer buffer
        73: .line 1044
      StackMap locals: long org.xnio.channels.StreamSourceChannel org.xnio.channels.StreamSinkChannel org.xnio.ChannelListener org.xnio.ChannelListener org.xnio.ChannelExceptionHandler org.xnio.ChannelExceptionHandler org.xnio.Pool org.xnio.Pooled int
      StackMap stack: java.lang.Throwable
            astore 16
        74: .line 1045
            iload 10 /* free */
            ifeq 75
            aload 9 /* allocated */
            invokeinterface org.xnio.Pooled.free:()V
        75: .line 1046
      StackMap locals: long org.xnio.channels.StreamSourceChannel org.xnio.channels.StreamSinkChannel org.xnio.ChannelListener org.xnio.ChannelListener org.xnio.ChannelExceptionHandler org.xnio.ChannelExceptionHandler org.xnio.Pool org.xnio.Pooled int top top top top top java.lang.Throwable
      StackMap stack:
            aload 16
            athrow
        end local 10 // boolean free
        end local 9 // org.xnio.Pooled allocated
        end local 8 // org.xnio.Pool pool
        end local 7 // org.xnio.ChannelExceptionHandler writeExceptionHandler
        end local 6 // org.xnio.ChannelExceptionHandler readExceptionHandler
        end local 5 // org.xnio.ChannelListener sinkListener
        end local 4 // org.xnio.ChannelListener sourceListener
        end local 3 // org.xnio.channels.StreamSinkChannel sink
        end local 2 // org.xnio.channels.StreamSourceChannel source
        end local 0 // long count
      LocalVariableTable:
        Start  End  Slot                   Name  Signature
            0   76     0                  count  J
            0   76     2                 source  TI;
            0   76     3                   sink  TO;
            0   76     4         sourceListener  Lorg/xnio/ChannelListener<-TI;>;
            0   76     5           sinkListener  Lorg/xnio/ChannelListener<-TO;>;
            0   76     6   readExceptionHandler  Lorg/xnio/ChannelExceptionHandler<-TI;>;
            0   76     7  writeExceptionHandler  Lorg/xnio/ChannelExceptionHandler<-TO;>;
            0   76     8                   pool  Lorg/xnio/Pool<Ljava/nio/ByteBuffer;>;
            3   76     9              allocated  Lorg/xnio/Pooled<Ljava/nio/ByteBuffer;>;
            4   76    10                   free  Z
            5   73    11                 buffer  Ljava/nio/ByteBuffer;
            6    7    12            transferred  J
           11   73    12            transferred  J
            8   11    14                      e  Ljava/io/IOException;
           35   36    14                    res  I
           40   51    14                    res  I
           37   40    15                      e  Ljava/io/IOException;
           42   49    15               listener  Lorg/xnio/ChannelListeners$TransferListener<TI;TO;>;
           66   73    14               listener  Lorg/xnio/ChannelListeners$TransferListener<TI;TO;>;
      Exception table:
        from    to  target  type
           5     6       7  Class java.io.IOException
          34    35      36  Class java.io.IOException
           4     9      73  any
          11    29      73  any
          31    38      73  any
          40    47      73  any
          49    63      73  any
          65    71      73  any
    Signature: <I::Lorg/xnio/channels/StreamSourceChannel;O::Lorg/xnio/channels/StreamSinkChannel;>(JTI;TO;Lorg/xnio/ChannelListener<-TI;>;Lorg/xnio/ChannelListener<-TO;>;Lorg/xnio/ChannelExceptionHandler<-TI;>;Lorg/xnio/ChannelExceptionHandler<-TO;>;Lorg/xnio/Pool<Ljava/nio/ByteBuffer;>;)V
    MethodParameters:
                       Name  Flags
      count                  
      source                 final
      sink                   final
      sourceListener         final
      sinkListener           final
      readExceptionHandler   final
      writeExceptionHandler  final
      pool                   

  public static <T extends org.xnio.channels.StreamSourceChannel> org.xnio.ChannelListener<T> drainListener(long, org.xnio.ChannelListener<? super T>, org.xnio.ChannelExceptionHandler<? super T>);
    descriptor: (JLorg/xnio/ChannelListener;Lorg/xnio/ChannelExceptionHandler;)Lorg/xnio/ChannelListener;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=6, locals=4, args_size=3
        start local 0 // long bytes
        start local 2 // org.xnio.ChannelListener finishListener
        start local 3 // org.xnio.ChannelExceptionHandler exceptionHandler
         0: .line 1060
            new org.xnio.ChannelListeners$DrainListener
            dup
            aload 2 /* finishListener */
            aload 3 /* exceptionHandler */
            lload 0 /* bytes */
            invokespecial org.xnio.ChannelListeners$DrainListener.<init>:(Lorg/xnio/ChannelListener;Lorg/xnio/ChannelExceptionHandler;J)V
            areturn
        end local 3 // org.xnio.ChannelExceptionHandler exceptionHandler
        end local 2 // org.xnio.ChannelListener finishListener
        end local 0 // long bytes
      LocalVariableTable:
        Start  End  Slot              Name  Signature
            0    1     0             bytes  J
            0    1     2    finishListener  Lorg/xnio/ChannelListener<-TT;>;
            0    1     3  exceptionHandler  Lorg/xnio/ChannelExceptionHandler<-TT;>;
    Signature: <T::Lorg/xnio/channels/StreamSourceChannel;>(JLorg/xnio/ChannelListener<-TT;>;Lorg/xnio/ChannelExceptionHandler<-TT;>;)Lorg/xnio/ChannelListener<TT;>;
    MethodParameters:
                  Name  Flags
      bytes             
      finishListener    
      exceptionHandler  
}
SourceFile: "ChannelListeners.java"
NestMembers:
  org.xnio.ChannelListeners$1  org.xnio.ChannelListeners$10  org.xnio.ChannelListeners$11  org.xnio.ChannelListeners$12  org.xnio.ChannelListeners$13  org.xnio.ChannelListeners$14  org.xnio.ChannelListeners$15  org.xnio.ChannelListeners$16  org.xnio.ChannelListeners$17  org.xnio.ChannelListeners$18  org.xnio.ChannelListeners$19  org.xnio.ChannelListeners$2  org.xnio.ChannelListeners$20  org.xnio.ChannelListeners$21  org.xnio.ChannelListeners$22  org.xnio.ChannelListeners$23  org.xnio.ChannelListeners$3  org.xnio.ChannelListeners$4  org.xnio.ChannelListeners$5  org.xnio.ChannelListeners$6  org.xnio.ChannelListeners$7  org.xnio.ChannelListeners$8  org.xnio.ChannelListeners$9  org.xnio.ChannelListeners$DelegatingChannelListener  org.xnio.ChannelListeners$DelegatingSetter  org.xnio.ChannelListeners$DrainListener  org.xnio.ChannelListeners$SetterDelegatingListener  org.xnio.ChannelListeners$TransferListener
InnerClasses:
  public abstract Setter = org.xnio.ChannelListener$Setter of org.xnio.ChannelListener
  public SimpleSetter = org.xnio.ChannelListener$SimpleSetter of org.xnio.ChannelListener
  org.xnio.ChannelListeners$1
  org.xnio.ChannelListeners$10
  org.xnio.ChannelListeners$11
  org.xnio.ChannelListeners$12
  org.xnio.ChannelListeners$13
  org.xnio.ChannelListeners$14
  org.xnio.ChannelListeners$15
  org.xnio.ChannelListeners$16
  org.xnio.ChannelListeners$17
  org.xnio.ChannelListeners$18
  org.xnio.ChannelListeners$19
  org.xnio.ChannelListeners$2
  org.xnio.ChannelListeners$20
  org.xnio.ChannelListeners$21
  org.xnio.ChannelListeners$22
  org.xnio.ChannelListeners$23
  org.xnio.ChannelListeners$3
  org.xnio.ChannelListeners$4
  org.xnio.ChannelListeners$5
  org.xnio.ChannelListeners$6
  org.xnio.ChannelListeners$7
  org.xnio.ChannelListeners$8
  org.xnio.ChannelListeners$9
  private DelegatingChannelListener = org.xnio.ChannelListeners$DelegatingChannelListener of org.xnio.ChannelListeners
  private DelegatingSetter = org.xnio.ChannelListeners$DelegatingSetter of org.xnio.ChannelListeners
  private DrainListener = org.xnio.ChannelListeners$DrainListener of org.xnio.ChannelListeners
  private SetterDelegatingListener = org.xnio.ChannelListeners$SetterDelegatingListener of org.xnio.ChannelListeners
  final TransferListener = org.xnio.ChannelListeners$TransferListener of org.xnio.ChannelListeners