siom79 / japicmp

Comparison of two versions of a jar archive
https://siom79.github.io/japicmp
Apache License 2.0
712 stars 107 forks source link

Invalid reporting of METHOD_REMOVED_IN_SUPERCLASS #253

Closed normanmaurer closed 4 years ago

normanmaurer commented 4 years ago

We use the japicmp maven plugin in netty to detect breaking changes which works great. Recently we found what I think is a false-positive.

The error shows up here:

https://github.com/netty/netty/pull/9827

It fails the build with:

[ERROR] Failed to execute goal com.github.siom79.japicmp:japicmp-maven-plugin:0.14.2:cmp (default-cli) on project netty-handler: There is at least one incompatibility: io.netty.handler.ssl.SniHandler:METHOD_REMOVED_IN_SUPERCLASS -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException

While it is true that some public methods were "removed" I think it should still not failed as these methods were just moved to the super-class of the super-class and so are still present.

siom79 commented 4 years ago

What is the output of japicmp in this case?

Looks like you have added the class SslClientHelloHandler between ByteToMessageDecoder and AbstractSniHandler, right?

normanmaurer commented 4 years ago

@siom79 yep I added a class in-between.

The output is:

Comparing source compatibility of /Users/norman/Documents/workspace/netty/handler/target/netty-handler-4.1.44.Final-SNAPSHOT.jar against /Users/norman/.m2/repository/io/netty/netty-handler/4.1.43.Final/netty-handler-4.1.43.Final.jar
WARNING: You have ignored certain classes, i.e. superclasses and interfaces that could not be found on the classpath are ignored. Hence changes caused by these superclasses and interfaces are not reflected in the output.
===  UNCHANGED CLASS: PUBLIC ABSTRACT io.netty.handler.address.DynamicAddressConnectHandler  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED INTERFACE: io.netty.channel.ChannelOutboundHandler
    ===  UNCHANGED INTERFACE: io.netty.channel.ChannelHandler
    ===  UNCHANGED CONSTRUCTOR: PUBLIC DynamicAddressConnectHandler()
    ===  UNCHANGED METHOD: PUBLIC FINAL void connect(io.netty.channel.ChannelHandlerContext, java.net.SocketAddress, java.net.SocketAddress, io.netty.channel.ChannelPromise)
    ===  UNCHANGED METHOD: PROTECTED java.net.SocketAddress localAddress(java.net.SocketAddress, java.net.SocketAddress)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PROTECTED java.net.SocketAddress remoteAddress(java.net.SocketAddress, java.net.SocketAddress)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
===  UNCHANGED CLASS: PUBLIC io.netty.handler.flow.FlowControlHandler  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED INTERFACE: io.netty.channel.ChannelOutboundHandler
    ===  UNCHANGED INTERFACE: io.netty.channel.ChannelInboundHandler
    ===  UNCHANGED INTERFACE: io.netty.channel.ChannelHandler
    ===  UNCHANGED CONSTRUCTOR: PUBLIC FlowControlHandler()
    ===  UNCHANGED CONSTRUCTOR: PUBLIC FlowControlHandler(boolean)
    ===  UNCHANGED METHOD: PUBLIC void channelInactive(io.netty.channel.ChannelHandlerContext)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC void channelRead(io.netty.channel.ChannelHandlerContext, java.lang.Object)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC void channelReadComplete(io.netty.channel.ChannelHandlerContext)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC void handlerAdded(io.netty.channel.ChannelHandlerContext)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC void read(io.netty.channel.ChannelHandlerContext)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
===  UNCHANGED CLASS: PUBLIC io.netty.handler.flush.FlushConsolidationHandler  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED INTERFACE: io.netty.channel.ChannelOutboundHandler
    ===  UNCHANGED INTERFACE: io.netty.channel.ChannelInboundHandler
    ===  UNCHANGED INTERFACE: io.netty.channel.ChannelHandler
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL int DEFAULT_EXPLICIT_FLUSH_AFTER_FLUSHES
    ===  UNCHANGED CONSTRUCTOR: PUBLIC FlushConsolidationHandler()
    ===  UNCHANGED CONSTRUCTOR: PUBLIC FlushConsolidationHandler(int, boolean)
    ===  UNCHANGED CONSTRUCTOR: PUBLIC FlushConsolidationHandler(int)
    ===  UNCHANGED METHOD: PUBLIC void channelRead(io.netty.channel.ChannelHandlerContext, java.lang.Object)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC void channelReadComplete(io.netty.channel.ChannelHandlerContext)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC void channelWritabilityChanged(io.netty.channel.ChannelHandlerContext)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC void close(io.netty.channel.ChannelHandlerContext, io.netty.channel.ChannelPromise)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC void disconnect(io.netty.channel.ChannelHandlerContext, io.netty.channel.ChannelPromise)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC void exceptionCaught(io.netty.channel.ChannelHandlerContext, java.lang.Throwable)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC void flush(io.netty.channel.ChannelHandlerContext)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC void handlerAdded(io.netty.channel.ChannelHandlerContext)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC void handlerRemoved(io.netty.channel.ChannelHandlerContext)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
===  UNCHANGED CLASS: PUBLIC ABSTRACT io.netty.handler.ipfilter.AbstractRemoteAddressFilter  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED INTERFACE: io.netty.channel.ChannelInboundHandler
    ===  UNCHANGED INTERFACE: io.netty.channel.ChannelHandler
    ===  UNCHANGED CONSTRUCTOR: PUBLIC AbstractRemoteAddressFilter()
    ===  UNCHANGED METHOD: PROTECTED ABSTRACT boolean accept(io.netty.channel.ChannelHandlerContext, java.net.SocketAddress)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PROTECTED void channelAccepted(io.netty.channel.ChannelHandlerContext, java.net.SocketAddress)
    ===  UNCHANGED METHOD: PUBLIC void channelActive(io.netty.channel.ChannelHandlerContext)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC void channelRegistered(io.netty.channel.ChannelHandlerContext)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PROTECTED io.netty.channel.ChannelFuture channelRejected(io.netty.channel.ChannelHandlerContext, java.net.SocketAddress)
===  UNCHANGED INTERFACE: PUBLIC ABSTRACT io.netty.handler.ipfilter.IpFilterRule  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED METHOD: PUBLIC ABSTRACT boolean matches(java.net.InetSocketAddress)
    ===  UNCHANGED METHOD: PUBLIC ABSTRACT io.netty.handler.ipfilter.IpFilterRuleType ruleType()
===  UNCHANGED ENUM: PUBLIC FINAL io.netty.handler.ipfilter.IpFilterRuleType  (compatible)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED INTERFACE: java.lang.Comparable
    ===  UNCHANGED INTERFACE: java.io.Serializable
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL io.netty.handler.ipfilter.IpFilterRuleType ACCEPT
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL io.netty.handler.ipfilter.IpFilterRuleType REJECT
    ===  UNCHANGED METHOD: PUBLIC STATIC io.netty.handler.ipfilter.IpFilterRuleType valueOf(java.lang.String)
    ===  UNCHANGED METHOD: PUBLIC STATIC io.netty.handler.ipfilter.IpFilterRuleType[] values()
===  UNCHANGED CLASS: PUBLIC FINAL io.netty.handler.ipfilter.IpSubnetFilterRule  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED INTERFACE: io.netty.handler.ipfilter.IpFilterRule
    ===  UNCHANGED CONSTRUCTOR: PUBLIC IpSubnetFilterRule(java.lang.String, int, io.netty.handler.ipfilter.IpFilterRuleType)
    ===  UNCHANGED CONSTRUCTOR: PUBLIC IpSubnetFilterRule(java.net.InetAddress, int, io.netty.handler.ipfilter.IpFilterRuleType)
    ===  UNCHANGED METHOD: PUBLIC boolean matches(java.net.InetSocketAddress)
    ===  UNCHANGED METHOD: PUBLIC io.netty.handler.ipfilter.IpFilterRuleType ruleType()
===  UNCHANGED CLASS: PUBLIC io.netty.handler.ipfilter.RuleBasedIpFilter  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED INTERFACE: io.netty.channel.ChannelInboundHandler
    ===  UNCHANGED INTERFACE: io.netty.channel.ChannelHandler
    ===  UNCHANGED CONSTRUCTOR: PUBLIC RuleBasedIpFilter(io.netty.handler.ipfilter.IpFilterRule[])
    ===  UNCHANGED METHOD: PROTECTED boolean accept(io.netty.channel.ChannelHandlerContext, java.net.InetSocketAddress)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED ANNOTATION: io.netty.channel.ChannelHandler$Sharable
===  UNCHANGED CLASS: PUBLIC io.netty.handler.ipfilter.UniqueIpFilter  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED INTERFACE: io.netty.channel.ChannelInboundHandler
    ===  UNCHANGED INTERFACE: io.netty.channel.ChannelHandler
    ===  UNCHANGED CONSTRUCTOR: PUBLIC UniqueIpFilter()
    ===  UNCHANGED METHOD: PROTECTED boolean accept(io.netty.channel.ChannelHandlerContext, java.net.InetSocketAddress)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED ANNOTATION: io.netty.channel.ChannelHandler$Sharable
===  UNCHANGED CLASS: PUBLIC io.netty.handler.logging.LoggingHandler  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED INTERFACE: io.netty.channel.ChannelOutboundHandler
    ===  UNCHANGED INTERFACE: io.netty.channel.ChannelInboundHandler
    ===  UNCHANGED INTERFACE: io.netty.channel.ChannelHandler
    ===  UNCHANGED FIELD: PROTECTED FINAL io.netty.util.internal.logging.InternalLogger logger
    ===  UNCHANGED FIELD: PROTECTED FINAL io.netty.util.internal.logging.InternalLogLevel internalLevel
    ===  UNCHANGED CONSTRUCTOR: PUBLIC LoggingHandler(java.lang.String, io.netty.handler.logging.LogLevel)
    ===  UNCHANGED CONSTRUCTOR: PUBLIC LoggingHandler()
    ===  UNCHANGED CONSTRUCTOR: PUBLIC LoggingHandler(java.lang.Class, io.netty.handler.logging.LogLevel)
    ===  UNCHANGED CONSTRUCTOR: PUBLIC LoggingHandler(java.lang.Class)
    ===  UNCHANGED CONSTRUCTOR: PUBLIC LoggingHandler(java.lang.String)
    ===  UNCHANGED CONSTRUCTOR: PUBLIC LoggingHandler(io.netty.handler.logging.LogLevel)
    ===  UNCHANGED METHOD: PUBLIC void bind(io.netty.channel.ChannelHandlerContext, java.net.SocketAddress, io.netty.channel.ChannelPromise)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC void channelActive(io.netty.channel.ChannelHandlerContext)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC void channelInactive(io.netty.channel.ChannelHandlerContext)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC void channelRead(io.netty.channel.ChannelHandlerContext, java.lang.Object)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC void channelReadComplete(io.netty.channel.ChannelHandlerContext)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC void channelRegistered(io.netty.channel.ChannelHandlerContext)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC void channelUnregistered(io.netty.channel.ChannelHandlerContext)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC void channelWritabilityChanged(io.netty.channel.ChannelHandlerContext)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC void close(io.netty.channel.ChannelHandlerContext, io.netty.channel.ChannelPromise)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC void connect(io.netty.channel.ChannelHandlerContext, java.net.SocketAddress, java.net.SocketAddress, io.netty.channel.ChannelPromise)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC void deregister(io.netty.channel.ChannelHandlerContext, io.netty.channel.ChannelPromise)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC void disconnect(io.netty.channel.ChannelHandlerContext, io.netty.channel.ChannelPromise)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC void exceptionCaught(io.netty.channel.ChannelHandlerContext, java.lang.Throwable)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC void flush(io.netty.channel.ChannelHandlerContext)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PROTECTED java.lang.String format(io.netty.channel.ChannelHandlerContext, java.lang.String)
    ===  UNCHANGED METHOD: PROTECTED java.lang.String format(io.netty.channel.ChannelHandlerContext, java.lang.String, java.lang.Object)
    ===  UNCHANGED METHOD: PROTECTED java.lang.String format(io.netty.channel.ChannelHandlerContext, java.lang.String, java.lang.Object, java.lang.Object)
    ===  UNCHANGED METHOD: PUBLIC io.netty.handler.logging.LogLevel level()
    ===  UNCHANGED METHOD: PUBLIC void userEventTriggered(io.netty.channel.ChannelHandlerContext, java.lang.Object)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC void write(io.netty.channel.ChannelHandlerContext, java.lang.Object, io.netty.channel.ChannelPromise)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED ANNOTATION: io.netty.channel.ChannelHandler$Sharable
===  UNCHANGED ENUM: PUBLIC FINAL io.netty.handler.logging.LogLevel  (compatible)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED INTERFACE: java.lang.Comparable
    ===  UNCHANGED INTERFACE: java.io.Serializable
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL io.netty.handler.logging.LogLevel TRACE
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL io.netty.handler.logging.LogLevel ERROR
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL io.netty.handler.logging.LogLevel INFO
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL io.netty.handler.logging.LogLevel DEBUG
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL io.netty.handler.logging.LogLevel WARN
    ===  UNCHANGED METHOD: PUBLIC io.netty.util.internal.logging.InternalLogLevel toInternalLevel()
    ===  UNCHANGED METHOD: PUBLIC STATIC io.netty.handler.logging.LogLevel valueOf(java.lang.String)
    ===  UNCHANGED METHOD: PUBLIC STATIC io.netty.handler.logging.LogLevel[] values()
***  MODIFIED CLASS: PUBLIC ABSTRACT io.netty.handler.ssl.AbstractSniHandler  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED INTERFACE: io.netty.channel.ChannelOutboundHandler
    ===  UNCHANGED INTERFACE: io.netty.channel.ChannelInboundHandler
    ===  UNCHANGED INTERFACE: io.netty.channel.ChannelHandler
    ===  UNCHANGED CONSTRUCTOR: PUBLIC AbstractSniHandler()
    ---  REMOVED METHOD: PUBLIC(-) void bind(io.netty.channel.ChannelHandlerContext, java.net.SocketAddress, io.netty.channel.ChannelPromise)
        ---  REMOVED EXCEPTION: java.lang.Exception
    ---  REMOVED METHOD: PUBLIC(-) void close(io.netty.channel.ChannelHandlerContext, io.netty.channel.ChannelPromise)
        ---  REMOVED EXCEPTION: java.lang.Exception
    ---  REMOVED METHOD: PUBLIC(-) void connect(io.netty.channel.ChannelHandlerContext, java.net.SocketAddress, java.net.SocketAddress, io.netty.channel.ChannelPromise)
        ---  REMOVED EXCEPTION: java.lang.Exception
    ---  REMOVED METHOD: PROTECTED(-) void decode(io.netty.channel.ChannelHandlerContext, io.netty.buffer.ByteBuf, java.util.List)
        ---  REMOVED EXCEPTION: java.lang.Exception
    ---  REMOVED METHOD: PUBLIC(-) void deregister(io.netty.channel.ChannelHandlerContext, io.netty.channel.ChannelPromise)
        ---  REMOVED EXCEPTION: java.lang.Exception
    ---  REMOVED METHOD: PUBLIC(-) void disconnect(io.netty.channel.ChannelHandlerContext, io.netty.channel.ChannelPromise)
        ---  REMOVED EXCEPTION: java.lang.Exception
    ---  REMOVED METHOD: PUBLIC(-) void flush(io.netty.channel.ChannelHandlerContext)
        ---  REMOVED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PROTECTED ABSTRACT io.netty.util.concurrent.Future lookup(io.netty.channel.ChannelHandlerContext, java.lang.String)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    +++  NEW METHOD: PROTECTED(+) io.netty.util.concurrent.Future lookup(io.netty.channel.ChannelHandlerContext, io.netty.buffer.ByteBuf)
        +++  NEW EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PROTECTED ABSTRACT void onLookupComplete(io.netty.channel.ChannelHandlerContext, java.lang.String, io.netty.util.concurrent.Future)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    +++  NEW METHOD: PROTECTED(+) void onLookupComplete(io.netty.channel.ChannelHandlerContext, io.netty.util.concurrent.Future)
        +++  NEW EXCEPTION: java.lang.Exception
    ---  REMOVED METHOD: PUBLIC(-) void read(io.netty.channel.ChannelHandlerContext)
        ---  REMOVED EXCEPTION: java.lang.Exception
    ---  REMOVED METHOD: PUBLIC(-) void write(io.netty.channel.ChannelHandlerContext, java.lang.Object, io.netty.channel.ChannelPromise)
        ---  REMOVED EXCEPTION: java.lang.Exception
===  UNCHANGED CLASS: PUBLIC FINAL io.netty.handler.ssl.ApplicationProtocolConfig  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL io.netty.handler.ssl.ApplicationProtocolConfig DISABLED
    ===  UNCHANGED CONSTRUCTOR: PUBLIC ApplicationProtocolConfig(io.netty.handler.ssl.ApplicationProtocolConfig$Protocol, io.netty.handler.ssl.ApplicationProtocolConfig$SelectorFailureBehavior, io.netty.handler.ssl.ApplicationProtocolConfig$SelectedListenerFailureBehavior, java.lang.String[])
    ===  UNCHANGED CONSTRUCTOR: PUBLIC ApplicationProtocolConfig(io.netty.handler.ssl.ApplicationProtocolConfig$Protocol, io.netty.handler.ssl.ApplicationProtocolConfig$SelectorFailureBehavior, io.netty.handler.ssl.ApplicationProtocolConfig$SelectedListenerFailureBehavior, java.lang.Iterable)
    ===  UNCHANGED METHOD: PUBLIC io.netty.handler.ssl.ApplicationProtocolConfig$Protocol protocol()
    ===  UNCHANGED METHOD: PUBLIC io.netty.handler.ssl.ApplicationProtocolConfig$SelectedListenerFailureBehavior selectedListenerFailureBehavior()
    ===  UNCHANGED METHOD: PUBLIC io.netty.handler.ssl.ApplicationProtocolConfig$SelectorFailureBehavior selectorFailureBehavior()
    ===  UNCHANGED METHOD: PUBLIC java.util.List supportedProtocols()
===  UNCHANGED ENUM: PUBLIC STATIC FINAL io.netty.handler.ssl.ApplicationProtocolConfig$Protocol  (compatible)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED INTERFACE: java.lang.Comparable
    ===  UNCHANGED INTERFACE: java.io.Serializable
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL io.netty.handler.ssl.ApplicationProtocolConfig$Protocol ALPN
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL io.netty.handler.ssl.ApplicationProtocolConfig$Protocol NPN_AND_ALPN
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL io.netty.handler.ssl.ApplicationProtocolConfig$Protocol NONE
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL io.netty.handler.ssl.ApplicationProtocolConfig$Protocol NPN
    ===  UNCHANGED METHOD: PUBLIC STATIC io.netty.handler.ssl.ApplicationProtocolConfig$Protocol valueOf(java.lang.String)
    ===  UNCHANGED METHOD: PUBLIC STATIC io.netty.handler.ssl.ApplicationProtocolConfig$Protocol[] values()
===  UNCHANGED ENUM: PUBLIC STATIC FINAL io.netty.handler.ssl.ApplicationProtocolConfig$SelectedListenerFailureBehavior  (compatible)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED INTERFACE: java.lang.Comparable
    ===  UNCHANGED INTERFACE: java.io.Serializable
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL io.netty.handler.ssl.ApplicationProtocolConfig$SelectedListenerFailureBehavior ACCEPT
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL io.netty.handler.ssl.ApplicationProtocolConfig$SelectedListenerFailureBehavior CHOOSE_MY_LAST_PROTOCOL
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL io.netty.handler.ssl.ApplicationProtocolConfig$SelectedListenerFailureBehavior FATAL_ALERT
    ===  UNCHANGED METHOD: PUBLIC STATIC io.netty.handler.ssl.ApplicationProtocolConfig$SelectedListenerFailureBehavior valueOf(java.lang.String)
    ===  UNCHANGED METHOD: PUBLIC STATIC io.netty.handler.ssl.ApplicationProtocolConfig$SelectedListenerFailureBehavior[] values()
===  UNCHANGED ENUM: PUBLIC STATIC FINAL io.netty.handler.ssl.ApplicationProtocolConfig$SelectorFailureBehavior  (compatible)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED INTERFACE: java.lang.Comparable
    ===  UNCHANGED INTERFACE: java.io.Serializable
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL io.netty.handler.ssl.ApplicationProtocolConfig$SelectorFailureBehavior CHOOSE_MY_LAST_PROTOCOL
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL io.netty.handler.ssl.ApplicationProtocolConfig$SelectorFailureBehavior NO_ADVERTISE
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL io.netty.handler.ssl.ApplicationProtocolConfig$SelectorFailureBehavior FATAL_ALERT
    ===  UNCHANGED METHOD: PUBLIC STATIC io.netty.handler.ssl.ApplicationProtocolConfig$SelectorFailureBehavior valueOf(java.lang.String)
    ===  UNCHANGED METHOD: PUBLIC STATIC io.netty.handler.ssl.ApplicationProtocolConfig$SelectorFailureBehavior[] values()
===  UNCHANGED CLASS: PUBLIC FINAL io.netty.handler.ssl.ApplicationProtocolNames  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL java.lang.String HTTP_1_1
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL java.lang.String SPDY_3_1
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL java.lang.String SPDY_2
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL java.lang.String SPDY_1
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL java.lang.String HTTP_2
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL java.lang.String SPDY_3
===  UNCHANGED CLASS: PUBLIC ABSTRACT io.netty.handler.ssl.ApplicationProtocolNegotiationHandler  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED INTERFACE: io.netty.channel.ChannelInboundHandler
    ===  UNCHANGED INTERFACE: io.netty.channel.ChannelHandler
    ===  UNCHANGED CONSTRUCTOR: PROTECTED ApplicationProtocolNegotiationHandler(java.lang.String)
    ===  UNCHANGED METHOD: PROTECTED ABSTRACT void configurePipeline(io.netty.channel.ChannelHandlerContext, java.lang.String)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC void exceptionCaught(io.netty.channel.ChannelHandlerContext, java.lang.Throwable)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PROTECTED void handshakeFailure(io.netty.channel.ChannelHandlerContext, java.lang.Throwable)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC void userEventTriggered(io.netty.channel.ChannelHandlerContext, java.lang.Object)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
===  UNCHANGED INTERFACE: PUBLIC ABSTRACT io.netty.handler.ssl.ApplicationProtocolNegotiator  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED METHOD: PUBLIC ABSTRACT java.util.List protocols()
===  UNCHANGED INTERFACE: PUBLIC ABSTRACT io.netty.handler.ssl.CipherSuiteFilter  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED METHOD: PUBLIC ABSTRACT java.lang.String[] filterCipherSuites(java.lang.Iterable, java.util.List, java.util.Set)
===  UNCHANGED ENUM: PUBLIC FINAL io.netty.handler.ssl.ClientAuth  (compatible)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED INTERFACE: java.lang.Comparable
    ===  UNCHANGED INTERFACE: java.io.Serializable
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL io.netty.handler.ssl.ClientAuth OPTIONAL
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL io.netty.handler.ssl.ClientAuth NONE
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL io.netty.handler.ssl.ClientAuth REQUIRE
    ===  UNCHANGED METHOD: PUBLIC STATIC io.netty.handler.ssl.ClientAuth valueOf(java.lang.String)
    ===  UNCHANGED METHOD: PUBLIC STATIC io.netty.handler.ssl.ClientAuth[] values()
===  UNCHANGED CLASS: PUBLIC ABSTRACT io.netty.handler.ssl.DelegatingSslContext  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED CONSTRUCTOR: PROTECTED DelegatingSslContext(io.netty.handler.ssl.SslContext)
    ===  UNCHANGED METHOD: PUBLIC FINAL io.netty.handler.ssl.ApplicationProtocolNegotiator applicationProtocolNegotiator()
    ===  UNCHANGED METHOD: PUBLIC FINAL java.util.List cipherSuites()
    ===  UNCHANGED METHOD: PROTECTED ABSTRACT void initEngine(javax.net.ssl.SSLEngine)
    ===  UNCHANGED METHOD: PROTECTED void initHandler(io.netty.handler.ssl.SslHandler)
    ===  UNCHANGED METHOD: PUBLIC FINAL boolean isClient()
    ===  UNCHANGED METHOD: PUBLIC FINAL javax.net.ssl.SSLEngine newEngine(io.netty.buffer.ByteBufAllocator)
    ===  UNCHANGED METHOD: PUBLIC FINAL javax.net.ssl.SSLEngine newEngine(io.netty.buffer.ByteBufAllocator, java.lang.String, int)
    ===  UNCHANGED METHOD: PROTECTED FINAL io.netty.handler.ssl.SslHandler newHandler(io.netty.buffer.ByteBufAllocator, boolean)
    ===  UNCHANGED METHOD: PROTECTED FINAL io.netty.handler.ssl.SslHandler newHandler(io.netty.buffer.ByteBufAllocator, java.lang.String, int, boolean)
    ===  UNCHANGED METHOD: PROTECTED io.netty.handler.ssl.SslHandler newHandler(io.netty.buffer.ByteBufAllocator, boolean, java.util.concurrent.Executor)
    ===  UNCHANGED METHOD: PROTECTED io.netty.handler.ssl.SslHandler newHandler(io.netty.buffer.ByteBufAllocator, java.lang.String, int, boolean, java.util.concurrent.Executor)
    ===  UNCHANGED METHOD: PUBLIC FINAL long sessionCacheSize()
    ===  UNCHANGED METHOD: PUBLIC FINAL javax.net.ssl.SSLSessionContext sessionContext()
    ===  UNCHANGED METHOD: PUBLIC FINAL long sessionTimeout()
===  UNCHANGED CLASS: PUBLIC FINAL io.netty.handler.ssl.IdentityCipherSuiteFilter  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED INTERFACE: io.netty.handler.ssl.CipherSuiteFilter
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL io.netty.handler.ssl.IdentityCipherSuiteFilter INSTANCE
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL io.netty.handler.ssl.IdentityCipherSuiteFilter INSTANCE_DEFAULTING_TO_SUPPORTED_CIPHERS
    ===  UNCHANGED METHOD: PUBLIC java.lang.String[] filterCipherSuites(java.lang.Iterable, java.util.List, java.util.Set)
===  UNCHANGED CLASS: PUBLIC FINAL io.netty.handler.ssl.JdkAlpnApplicationProtocolNegotiator  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED INTERFACE: io.netty.handler.ssl.ApplicationProtocolNegotiator
    ===  UNCHANGED INTERFACE: io.netty.handler.ssl.JdkApplicationProtocolNegotiator
    ===  UNCHANGED CONSTRUCTOR: PUBLIC JdkAlpnApplicationProtocolNegotiator(io.netty.handler.ssl.JdkApplicationProtocolNegotiator$ProtocolSelectorFactory, io.netty.handler.ssl.JdkApplicationProtocolNegotiator$ProtocolSelectionListenerFactory, java.lang.Iterable)
    ===  UNCHANGED CONSTRUCTOR: PUBLIC JdkAlpnApplicationProtocolNegotiator(boolean, boolean, java.lang.Iterable)
    ===  UNCHANGED CONSTRUCTOR: PUBLIC JdkAlpnApplicationProtocolNegotiator(boolean, boolean, java.lang.String[])
    ===  UNCHANGED CONSTRUCTOR: PUBLIC JdkAlpnApplicationProtocolNegotiator(java.lang.Iterable)
    ===  UNCHANGED CONSTRUCTOR: PUBLIC JdkAlpnApplicationProtocolNegotiator(boolean, java.lang.String[])
    ===  UNCHANGED CONSTRUCTOR: PUBLIC JdkAlpnApplicationProtocolNegotiator(io.netty.handler.ssl.JdkApplicationProtocolNegotiator$ProtocolSelectorFactory, io.netty.handler.ssl.JdkApplicationProtocolNegotiator$ProtocolSelectionListenerFactory, java.lang.String[])
    ===  UNCHANGED CONSTRUCTOR: PUBLIC JdkAlpnApplicationProtocolNegotiator(java.lang.String[])
    ===  UNCHANGED CONSTRUCTOR: PUBLIC JdkAlpnApplicationProtocolNegotiator(boolean, java.lang.Iterable)
    ===  UNCHANGED ANNOTATION: java.lang.Deprecated
===  UNCHANGED INTERFACE: PUBLIC ABSTRACT io.netty.handler.ssl.JdkApplicationProtocolNegotiator  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED INTERFACE: io.netty.handler.ssl.ApplicationProtocolNegotiator
    ===  UNCHANGED METHOD: PUBLIC ABSTRACT io.netty.handler.ssl.JdkApplicationProtocolNegotiator$ProtocolSelectionListenerFactory protocolListenerFactory()
    ===  UNCHANGED METHOD: PUBLIC ABSTRACT io.netty.handler.ssl.JdkApplicationProtocolNegotiator$ProtocolSelectorFactory protocolSelectorFactory()
    ===  UNCHANGED METHOD: PUBLIC ABSTRACT io.netty.handler.ssl.JdkApplicationProtocolNegotiator$SslEngineWrapperFactory wrapperFactory()
    ===  UNCHANGED ANNOTATION: java.lang.Deprecated
===  UNCHANGED CLASS: PUBLIC ABSTRACT STATIC io.netty.handler.ssl.JdkApplicationProtocolNegotiator$AllocatorAwareSslEngineWrapperFactory  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED INTERFACE: io.netty.handler.ssl.JdkApplicationProtocolNegotiator$SslEngineWrapperFactory
    ===  UNCHANGED CONSTRUCTOR: PUBLIC JdkApplicationProtocolNegotiator$AllocatorAwareSslEngineWrapperFactory()
    ===  UNCHANGED METHOD: PUBLIC FINAL javax.net.ssl.SSLEngine wrapSslEngine(javax.net.ssl.SSLEngine, io.netty.handler.ssl.JdkApplicationProtocolNegotiator, boolean)
===  UNCHANGED INTERFACE: PUBLIC ABSTRACT STATIC io.netty.handler.ssl.JdkApplicationProtocolNegotiator$ProtocolSelectionListener  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED METHOD: PUBLIC ABSTRACT void selected(java.lang.String)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC ABSTRACT void unsupported()
===  UNCHANGED INTERFACE: PUBLIC ABSTRACT STATIC io.netty.handler.ssl.JdkApplicationProtocolNegotiator$ProtocolSelectionListenerFactory  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED METHOD: PUBLIC ABSTRACT io.netty.handler.ssl.JdkApplicationProtocolNegotiator$ProtocolSelectionListener newListener(javax.net.ssl.SSLEngine, java.util.List)
===  UNCHANGED INTERFACE: PUBLIC ABSTRACT STATIC io.netty.handler.ssl.JdkApplicationProtocolNegotiator$ProtocolSelector  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED METHOD: PUBLIC ABSTRACT java.lang.String select(java.util.List)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC ABSTRACT void unsupported()
===  UNCHANGED INTERFACE: PUBLIC ABSTRACT STATIC io.netty.handler.ssl.JdkApplicationProtocolNegotiator$ProtocolSelectorFactory  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED METHOD: PUBLIC ABSTRACT io.netty.handler.ssl.JdkApplicationProtocolNegotiator$ProtocolSelector newSelector(javax.net.ssl.SSLEngine, java.util.Set)
===  UNCHANGED INTERFACE: PUBLIC ABSTRACT STATIC io.netty.handler.ssl.JdkApplicationProtocolNegotiator$SslEngineWrapperFactory  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED METHOD: PUBLIC ABSTRACT javax.net.ssl.SSLEngine wrapSslEngine(javax.net.ssl.SSLEngine, io.netty.handler.ssl.JdkApplicationProtocolNegotiator, boolean)
===  UNCHANGED CLASS: PUBLIC FINAL io.netty.handler.ssl.JdkNpnApplicationProtocolNegotiator  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED INTERFACE: io.netty.handler.ssl.ApplicationProtocolNegotiator
    ===  UNCHANGED INTERFACE: io.netty.handler.ssl.JdkApplicationProtocolNegotiator
    ===  UNCHANGED CONSTRUCTOR: PUBLIC JdkNpnApplicationProtocolNegotiator(boolean, boolean, java.lang.Iterable)
    ===  UNCHANGED CONSTRUCTOR: PUBLIC JdkNpnApplicationProtocolNegotiator(io.netty.handler.ssl.JdkApplicationProtocolNegotiator$ProtocolSelectorFactory, io.netty.handler.ssl.JdkApplicationProtocolNegotiator$ProtocolSelectionListenerFactory, java.lang.Iterable)
    ===  UNCHANGED CONSTRUCTOR: PUBLIC JdkNpnApplicationProtocolNegotiator(java.lang.String[])
    ===  UNCHANGED CONSTRUCTOR: PUBLIC JdkNpnApplicationProtocolNegotiator(boolean, boolean, java.lang.String[])
    ===  UNCHANGED CONSTRUCTOR: PUBLIC JdkNpnApplicationProtocolNegotiator(io.netty.handler.ssl.JdkApplicationProtocolNegotiator$ProtocolSelectorFactory, io.netty.handler.ssl.JdkApplicationProtocolNegotiator$ProtocolSelectionListenerFactory, java.lang.String[])
    ===  UNCHANGED CONSTRUCTOR: PUBLIC JdkNpnApplicationProtocolNegotiator(boolean, java.lang.Iterable)
    ===  UNCHANGED CONSTRUCTOR: PUBLIC JdkNpnApplicationProtocolNegotiator(boolean, java.lang.String[])
    ===  UNCHANGED CONSTRUCTOR: PUBLIC JdkNpnApplicationProtocolNegotiator(java.lang.Iterable)
    ===  UNCHANGED ANNOTATION: java.lang.Deprecated
===  UNCHANGED CLASS: PUBLIC FINAL io.netty.handler.ssl.JdkSslClientContext  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED CONSTRUCTOR: PUBLIC JdkSslClientContext(java.io.File, javax.net.ssl.TrustManagerFactory, java.lang.Iterable, java.lang.Iterable, long, long)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED CONSTRUCTOR: PUBLIC JdkSslClientContext(java.io.File, javax.net.ssl.TrustManagerFactory, java.io.File, java.io.File, java.lang.String, javax.net.ssl.KeyManagerFactory, java.lang.Iterable, io.netty.handler.ssl.CipherSuiteFilter, io.netty.handler.ssl.JdkApplicationProtocolNegotiator, long, long)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED CONSTRUCTOR: PUBLIC JdkSslClientContext(java.io.File, javax.net.ssl.TrustManagerFactory, java.lang.Iterable, io.netty.handler.ssl.CipherSuiteFilter, io.netty.handler.ssl.JdkApplicationProtocolNegotiator, long, long)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED CONSTRUCTOR: PUBLIC JdkSslClientContext(java.io.File)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED CONSTRUCTOR: PUBLIC JdkSslClientContext(java.io.File, javax.net.ssl.TrustManagerFactory, java.lang.Iterable, io.netty.handler.ssl.CipherSuiteFilter, io.netty.handler.ssl.ApplicationProtocolConfig, long, long)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED CONSTRUCTOR: PUBLIC JdkSslClientContext(java.io.File, javax.net.ssl.TrustManagerFactory, java.io.File, java.io.File, java.lang.String, javax.net.ssl.KeyManagerFactory, java.lang.Iterable, io.netty.handler.ssl.CipherSuiteFilter, io.netty.handler.ssl.ApplicationProtocolConfig, long, long)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED CONSTRUCTOR: PUBLIC JdkSslClientContext(javax.net.ssl.TrustManagerFactory)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED CONSTRUCTOR: PUBLIC JdkSslClientContext()
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED CONSTRUCTOR: PUBLIC JdkSslClientContext(java.io.File, javax.net.ssl.TrustManagerFactory)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED ANNOTATION: java.lang.Deprecated
===  UNCHANGED CLASS: PUBLIC io.netty.handler.ssl.JdkSslContext  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED CONSTRUCTOR: PUBLIC JdkSslContext(javax.net.ssl.SSLContext, boolean, io.netty.handler.ssl.ClientAuth)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
    ===  UNCHANGED CONSTRUCTOR: PUBLIC JdkSslContext(javax.net.ssl.SSLContext, boolean, java.lang.Iterable, io.netty.handler.ssl.CipherSuiteFilter, io.netty.handler.ssl.ApplicationProtocolConfig, io.netty.handler.ssl.ClientAuth)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
    ===  UNCHANGED CONSTRUCTOR: PUBLIC JdkSslContext(javax.net.ssl.SSLContext, boolean, java.lang.Iterable, io.netty.handler.ssl.CipherSuiteFilter, io.netty.handler.ssl.ApplicationProtocolConfig, io.netty.handler.ssl.ClientAuth, java.lang.String[], boolean)
    ===  UNCHANGED METHOD: PUBLIC FINAL io.netty.handler.ssl.JdkApplicationProtocolNegotiator applicationProtocolNegotiator()
    ===  UNCHANGED METHOD: PROTECTED STATIC javax.net.ssl.KeyManagerFactory buildKeyManagerFactory(java.io.File, java.io.File, java.lang.String, javax.net.ssl.KeyManagerFactory)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
        ===  UNCHANGED EXCEPTION: java.security.UnrecoverableKeyException
        ===  UNCHANGED EXCEPTION: java.security.KeyStoreException
        ===  UNCHANGED EXCEPTION: java.security.NoSuchAlgorithmException
        ===  UNCHANGED EXCEPTION: javax.crypto.NoSuchPaddingException
        ===  UNCHANGED EXCEPTION: java.security.spec.InvalidKeySpecException
        ===  UNCHANGED EXCEPTION: java.security.InvalidAlgorithmParameterException
        ===  UNCHANGED EXCEPTION: java.security.cert.CertificateException
        ===  UNCHANGED EXCEPTION: java.security.KeyException
        ===  UNCHANGED EXCEPTION: java.io.IOException
    ===  UNCHANGED METHOD: PROTECTED STATIC javax.net.ssl.KeyManagerFactory buildKeyManagerFactory(java.io.File, java.lang.String, java.io.File, java.lang.String, javax.net.ssl.KeyManagerFactory)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
        ===  UNCHANGED EXCEPTION: java.security.KeyStoreException
        ===  UNCHANGED EXCEPTION: java.security.NoSuchAlgorithmException
        ===  UNCHANGED EXCEPTION: javax.crypto.NoSuchPaddingException
        ===  UNCHANGED EXCEPTION: java.security.spec.InvalidKeySpecException
        ===  UNCHANGED EXCEPTION: java.security.InvalidAlgorithmParameterException
        ===  UNCHANGED EXCEPTION: java.io.IOException
        ===  UNCHANGED EXCEPTION: java.security.cert.CertificateException
        ===  UNCHANGED EXCEPTION: java.security.KeyException
        ===  UNCHANGED EXCEPTION: java.security.UnrecoverableKeyException
    ===  UNCHANGED METHOD: PUBLIC FINAL java.util.List cipherSuites()
    ===  UNCHANGED METHOD: PUBLIC FINAL javax.net.ssl.SSLContext context()
    ===  UNCHANGED METHOD: PUBLIC FINAL boolean isClient()
    ===  UNCHANGED METHOD: PUBLIC FINAL javax.net.ssl.SSLEngine newEngine(io.netty.buffer.ByteBufAllocator)
    ===  UNCHANGED METHOD: PUBLIC FINAL javax.net.ssl.SSLEngine newEngine(io.netty.buffer.ByteBufAllocator, java.lang.String, int)
    ===  UNCHANGED METHOD: PUBLIC FINAL long sessionCacheSize()
    ===  UNCHANGED METHOD: PUBLIC FINAL javax.net.ssl.SSLSessionContext sessionContext()
    ===  UNCHANGED METHOD: PUBLIC FINAL long sessionTimeout()
===  UNCHANGED CLASS: PUBLIC FINAL io.netty.handler.ssl.JdkSslServerContext  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED CONSTRUCTOR: PUBLIC JdkSslServerContext(java.io.File, java.io.File, java.lang.String, java.lang.Iterable, io.netty.handler.ssl.CipherSuiteFilter, io.netty.handler.ssl.ApplicationProtocolConfig, long, long)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED CONSTRUCTOR: PUBLIC JdkSslServerContext(java.io.File, javax.net.ssl.TrustManagerFactory, java.io.File, java.io.File, java.lang.String, javax.net.ssl.KeyManagerFactory, java.lang.Iterable, io.netty.handler.ssl.CipherSuiteFilter, io.netty.handler.ssl.JdkApplicationProtocolNegotiator, long, long)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED CONSTRUCTOR: PUBLIC JdkSslServerContext(java.io.File, javax.net.ssl.TrustManagerFactory, java.io.File, java.io.File, java.lang.String, javax.net.ssl.KeyManagerFactory, java.lang.Iterable, io.netty.handler.ssl.CipherSuiteFilter, io.netty.handler.ssl.ApplicationProtocolConfig, long, long)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED CONSTRUCTOR: PUBLIC JdkSslServerContext(java.io.File, java.io.File, java.lang.String)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED CONSTRUCTOR: PUBLIC JdkSslServerContext(java.io.File, java.io.File, java.lang.String, java.lang.Iterable, java.lang.Iterable, long, long)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED CONSTRUCTOR: PUBLIC JdkSslServerContext(java.io.File, java.io.File)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED CONSTRUCTOR: PUBLIC JdkSslServerContext(java.io.File, java.io.File, java.lang.String, java.lang.Iterable, io.netty.handler.ssl.CipherSuiteFilter, io.netty.handler.ssl.JdkApplicationProtocolNegotiator, long, long)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED ANNOTATION: java.lang.Deprecated
===  UNCHANGED CLASS: PUBLIC io.netty.handler.ssl.NotSslRecordException  (compatible)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED INTERFACE: java.io.Serializable
    ===  UNCHANGED CONSTRUCTOR: PUBLIC NotSslRecordException(java.lang.Throwable)
    ===  UNCHANGED CONSTRUCTOR: PUBLIC NotSslRecordException(java.lang.String)
    ===  UNCHANGED CONSTRUCTOR: PUBLIC NotSslRecordException()
    ===  UNCHANGED CONSTRUCTOR: PUBLIC NotSslRecordException(java.lang.String, java.lang.Throwable)
===  UNCHANGED CLASS: PUBLIC ABSTRACT io.netty.handler.ssl.ocsp.OcspClientHandler  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED INTERFACE: io.netty.channel.ChannelInboundHandler
    ===  UNCHANGED INTERFACE: io.netty.channel.ChannelHandler
    ===  UNCHANGED CONSTRUCTOR: PROTECTED OcspClientHandler(io.netty.handler.ssl.ReferenceCountedOpenSslEngine)
    ===  UNCHANGED METHOD: PUBLIC void userEventTriggered(io.netty.channel.ChannelHandlerContext, java.lang.Object)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PROTECTED ABSTRACT boolean verify(io.netty.channel.ChannelHandlerContext, io.netty.handler.ssl.ReferenceCountedOpenSslEngine)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
===  UNCHANGED CLASS: PUBLIC FINAL io.netty.handler.ssl.OpenSsl  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED METHOD: PUBLIC STATIC java.util.Set availableCipherSuites()
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
    ===  UNCHANGED METHOD: PUBLIC STATIC java.util.Set availableJavaCipherSuites()
    ===  UNCHANGED METHOD: PUBLIC STATIC java.util.Set availableOpenSslCipherSuites()
    ===  UNCHANGED METHOD: PUBLIC STATIC void ensureAvailability()
    ===  UNCHANGED METHOD: PUBLIC STATIC boolean isAlpnSupported()
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
    ===  UNCHANGED METHOD: PUBLIC STATIC boolean isAvailable()
    ===  UNCHANGED METHOD: PUBLIC STATIC boolean isCipherSuiteAvailable(java.lang.String)
    ===  UNCHANGED METHOD: PUBLIC STATIC boolean isOcspSupported()
    ===  UNCHANGED METHOD: PUBLIC STATIC boolean supportsHostnameValidation()
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
    ===  UNCHANGED METHOD: PUBLIC STATIC boolean supportsKeyManagerFactory()
    ===  UNCHANGED METHOD: PUBLIC STATIC java.lang.Throwable unavailabilityCause()
    ===  UNCHANGED METHOD: PUBLIC STATIC int version()
    ===  UNCHANGED METHOD: PUBLIC STATIC java.lang.String versionString()
===  UNCHANGED INTERFACE: PUBLIC ABSTRACT io.netty.handler.ssl.OpenSslApplicationProtocolNegotiator  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED INTERFACE: io.netty.handler.ssl.ApplicationProtocolNegotiator
    ===  UNCHANGED METHOD: PUBLIC ABSTRACT io.netty.handler.ssl.ApplicationProtocolConfig$Protocol protocol()
    ===  UNCHANGED METHOD: PUBLIC ABSTRACT io.netty.handler.ssl.ApplicationProtocolConfig$SelectedListenerFailureBehavior selectedListenerFailureBehavior()
    ===  UNCHANGED METHOD: PUBLIC ABSTRACT io.netty.handler.ssl.ApplicationProtocolConfig$SelectorFailureBehavior selectorFailureBehavior()
    ===  UNCHANGED ANNOTATION: java.lang.Deprecated
***  MODIFIED CLASS: PUBLIC FINAL io.netty.handler.ssl.OpenSslCachingX509KeyManagerFactory  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED CONSTRUCTOR: PUBLIC OpenSslCachingX509KeyManagerFactory(javax.net.ssl.KeyManagerFactory)
    +++  NEW CONSTRUCTOR: PUBLIC(+) OpenSslCachingX509KeyManagerFactory(javax.net.ssl.KeyManagerFactory, int)
===  UNCHANGED CLASS: PUBLIC FINAL io.netty.handler.ssl.OpenSslCertificateException  (compatible)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED INTERFACE: java.io.Serializable
    ===  UNCHANGED CONSTRUCTOR: PUBLIC OpenSslCertificateException(java.lang.String, int)
    ===  UNCHANGED CONSTRUCTOR: PUBLIC OpenSslCertificateException(java.lang.Throwable, int)
    ===  UNCHANGED CONSTRUCTOR: PUBLIC OpenSslCertificateException(java.lang.String, java.lang.Throwable, int)
    ===  UNCHANGED CONSTRUCTOR: PUBLIC OpenSslCertificateException(int)
    ===  UNCHANGED METHOD: PUBLIC int errorCode()
===  UNCHANGED CLASS: PUBLIC FINAL io.netty.handler.ssl.OpenSslClientContext  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED INTERFACE: io.netty.util.ReferenceCounted
    ===  UNCHANGED CONSTRUCTOR: PUBLIC OpenSslClientContext(java.io.File)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED CONSTRUCTOR: PUBLIC OpenSslClientContext(java.io.File, javax.net.ssl.TrustManagerFactory)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED CONSTRUCTOR: PUBLIC OpenSslClientContext()
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED CONSTRUCTOR: PUBLIC OpenSslClientContext(javax.net.ssl.TrustManagerFactory)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED CONSTRUCTOR: PUBLIC OpenSslClientContext(java.io.File, javax.net.ssl.TrustManagerFactory, java.lang.Iterable, io.netty.handler.ssl.ApplicationProtocolConfig, long, long)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED CONSTRUCTOR: PUBLIC OpenSslClientContext(java.io.File, javax.net.ssl.TrustManagerFactory, java.lang.Iterable, io.netty.handler.ssl.CipherSuiteFilter, io.netty.handler.ssl.ApplicationProtocolConfig, long, long)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED CONSTRUCTOR: PUBLIC OpenSslClientContext(java.io.File, javax.net.ssl.TrustManagerFactory, java.io.File, java.io.File, java.lang.String, javax.net.ssl.KeyManagerFactory, java.lang.Iterable, io.netty.handler.ssl.CipherSuiteFilter, io.netty.handler.ssl.ApplicationProtocolConfig, long, long)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED METHOD: PUBLIC io.netty.handler.ssl.OpenSslSessionContext sessionContext()
===  UNCHANGED CLASS: PUBLIC ABSTRACT io.netty.handler.ssl.OpenSslContext  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED INTERFACE: io.netty.util.ReferenceCounted
    ===  UNCHANGED METHOD: PROTECTED FINAL void finalize()
        ===  UNCHANGED EXCEPTION: java.lang.Throwable
===  UNCHANGED CLASS: PUBLIC FINAL io.netty.handler.ssl.OpenSslDefaultApplicationProtocolNegotiator  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED INTERFACE: io.netty.handler.ssl.ApplicationProtocolNegotiator
    ===  UNCHANGED INTERFACE: io.netty.handler.ssl.OpenSslApplicationProtocolNegotiator
    ===  UNCHANGED CONSTRUCTOR: PUBLIC OpenSslDefaultApplicationProtocolNegotiator(io.netty.handler.ssl.ApplicationProtocolConfig)
    ===  UNCHANGED METHOD: PUBLIC io.netty.handler.ssl.ApplicationProtocolConfig$Protocol protocol()
    ===  UNCHANGED METHOD: PUBLIC java.util.List protocols()
    ===  UNCHANGED METHOD: PUBLIC io.netty.handler.ssl.ApplicationProtocolConfig$SelectedListenerFailureBehavior selectedListenerFailureBehavior()
    ===  UNCHANGED METHOD: PUBLIC io.netty.handler.ssl.ApplicationProtocolConfig$SelectorFailureBehavior selectorFailureBehavior()
    ===  UNCHANGED ANNOTATION: java.lang.Deprecated
===  UNCHANGED CLASS: PUBLIC FINAL io.netty.handler.ssl.OpenSslEngine  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED INTERFACE: io.netty.handler.ssl.ApplicationProtocolAccessor
    ===  UNCHANGED INTERFACE: io.netty.util.ReferenceCounted
    ===  UNCHANGED METHOD: PROTECTED void finalize()
        ===  UNCHANGED EXCEPTION: java.lang.Throwable
===  UNCHANGED CLASS: PUBLIC FINAL io.netty.handler.ssl.OpenSslNpnApplicationProtocolNegotiator  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED INTERFACE: io.netty.handler.ssl.ApplicationProtocolNegotiator
    ===  UNCHANGED INTERFACE: io.netty.handler.ssl.OpenSslApplicationProtocolNegotiator
    ===  UNCHANGED CONSTRUCTOR: PUBLIC OpenSslNpnApplicationProtocolNegotiator(java.lang.String[])
    ===  UNCHANGED CONSTRUCTOR: PUBLIC OpenSslNpnApplicationProtocolNegotiator(java.lang.Iterable)
    ===  UNCHANGED METHOD: PUBLIC io.netty.handler.ssl.ApplicationProtocolConfig$Protocol protocol()
    ===  UNCHANGED METHOD: PUBLIC java.util.List protocols()
    ===  UNCHANGED METHOD: PUBLIC io.netty.handler.ssl.ApplicationProtocolConfig$SelectedListenerFailureBehavior selectedListenerFailureBehavior()
    ===  UNCHANGED METHOD: PUBLIC io.netty.handler.ssl.ApplicationProtocolConfig$SelectorFailureBehavior selectorFailureBehavior()
    ===  UNCHANGED ANNOTATION: java.lang.Deprecated
===  UNCHANGED INTERFACE: PUBLIC ABSTRACT io.netty.handler.ssl.OpenSslPrivateKeyMethod  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL int SSL_SIGN_ED25519
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL int SSL_SIGN_ECDSA_SECP256R1_SHA256
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL int SSL_SIGN_RSA_PKCS1_SHA1
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL int SSL_SIGN_RSA_PKCS1_SHA512
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL int SSL_SIGN_ECDSA_SECP521R1_SHA512
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL int SSL_SIGN_RSA_PSS_RSAE_SHA384
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL int SSL_SIGN_RSA_PKCS1_SHA384
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL int SSL_SIGN_RSA_PSS_RSAE_SHA256
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL int SSL_SIGN_RSA_PKCS1_SHA256
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL int SSL_SIGN_RSA_PSS_RSAE_SHA512
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL int SSL_SIGN_ECDSA_SHA1
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL int SSL_SIGN_RSA_PKCS1_MD5_SHA1
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL int SSL_SIGN_ECDSA_SECP384R1_SHA384
    ===  UNCHANGED METHOD: PUBLIC ABSTRACT byte[] decrypt(javax.net.ssl.SSLEngine, byte[])
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC ABSTRACT byte[] sign(javax.net.ssl.SSLEngine, int, byte[])
        ===  UNCHANGED EXCEPTION: java.lang.Exception
===  UNCHANGED CLASS: PUBLIC FINAL io.netty.handler.ssl.OpenSslServerContext  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED INTERFACE: io.netty.util.ReferenceCounted
    ===  UNCHANGED CONSTRUCTOR: PUBLIC OpenSslServerContext(java.io.File, javax.net.ssl.TrustManagerFactory, java.io.File, java.io.File, java.lang.String, javax.net.ssl.KeyManagerFactory, java.lang.Iterable, io.netty.handler.ssl.CipherSuiteFilter, io.netty.handler.ssl.ApplicationProtocolConfig, long, long)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED CONSTRUCTOR: PUBLIC OpenSslServerContext(java.io.File, java.io.File, java.lang.String, javax.net.ssl.TrustManagerFactory, java.lang.Iterable, io.netty.handler.ssl.ApplicationProtocolConfig, long, long)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED CONSTRUCTOR: PUBLIC OpenSslServerContext(java.io.File, java.io.File, java.lang.String, java.lang.Iterable, io.netty.handler.ssl.ApplicationProtocolConfig, long, long)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED CONSTRUCTOR: PUBLIC OpenSslServerContext(java.io.File, java.io.File, java.lang.String)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED CONSTRUCTOR: PUBLIC OpenSslServerContext(java.io.File, java.io.File)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED CONSTRUCTOR: PUBLIC OpenSslServerContext(java.io.File, java.io.File, java.lang.String, javax.net.ssl.TrustManagerFactory, java.lang.Iterable, io.netty.handler.ssl.CipherSuiteFilter, io.netty.handler.ssl.ApplicationProtocolConfig, long, long)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED CONSTRUCTOR: PUBLIC OpenSslServerContext(java.io.File, javax.net.ssl.TrustManagerFactory, java.io.File, java.io.File, java.lang.String, javax.net.ssl.KeyManagerFactory, java.lang.Iterable, io.netty.handler.ssl.CipherSuiteFilter, io.netty.handler.ssl.OpenSslApplicationProtocolNegotiator, long, long)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED CONSTRUCTOR: PUBLIC OpenSslServerContext(java.io.File, java.io.File, java.lang.String, javax.net.ssl.TrustManagerFactory, java.lang.Iterable, io.netty.handler.ssl.CipherSuiteFilter, io.netty.handler.ssl.OpenSslApplicationProtocolNegotiator, long, long)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED CONSTRUCTOR: PUBLIC OpenSslServerContext(java.io.File, java.io.File, java.lang.String, java.lang.Iterable, java.lang.Iterable, long, long)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED CONSTRUCTOR: PUBLIC OpenSslServerContext(java.io.File, java.io.File, java.lang.String, javax.net.ssl.TrustManagerFactory, java.lang.Iterable, io.netty.handler.ssl.OpenSslApplicationProtocolNegotiator, long, long)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED CONSTRUCTOR: PUBLIC OpenSslServerContext(java.io.File, java.io.File, java.lang.String, java.lang.Iterable, io.netty.handler.ssl.CipherSuiteFilter, io.netty.handler.ssl.ApplicationProtocolConfig, long, long)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED METHOD: PUBLIC io.netty.handler.ssl.OpenSslServerSessionContext sessionContext()
===  UNCHANGED CLASS: PUBLIC FINAL io.netty.handler.ssl.OpenSslServerSessionContext  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED INTERFACE: javax.net.ssl.SSLSessionContext
    ===  UNCHANGED METHOD: PUBLIC int getSessionCacheSize()
    ===  UNCHANGED METHOD: PUBLIC int getSessionTimeout()
    ===  UNCHANGED METHOD: PUBLIC boolean isSessionCacheEnabled()
    ===  UNCHANGED METHOD: PUBLIC void setSessionCacheEnabled(boolean)
    ===  UNCHANGED METHOD: PUBLIC void setSessionCacheSize(int)
    ===  UNCHANGED METHOD: PUBLIC boolean setSessionIdContext(byte[])
    ===  UNCHANGED METHOD: PUBLIC void setSessionTimeout(int)
===  UNCHANGED CLASS: PUBLIC ABSTRACT io.netty.handler.ssl.OpenSslSessionContext  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED INTERFACE: javax.net.ssl.SSLSessionContext
    ===  UNCHANGED METHOD: PUBLIC java.util.Enumeration getIds()
    ===  UNCHANGED METHOD: PUBLIC javax.net.ssl.SSLSession getSession(byte[])
    ===  UNCHANGED METHOD: PUBLIC ABSTRACT boolean isSessionCacheEnabled()
    ===  UNCHANGED METHOD: PUBLIC ABSTRACT void setSessionCacheEnabled(boolean)
    ===  UNCHANGED METHOD: PUBLIC void setTicketKeys(byte[])
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
    ===  UNCHANGED METHOD: PUBLIC void setTicketKeys(io.netty.handler.ssl.OpenSslSessionTicketKey[])
    ===  UNCHANGED METHOD: PUBLIC io.netty.handler.ssl.OpenSslSessionStats stats()
===  UNCHANGED CLASS: PUBLIC FINAL io.netty.handler.ssl.OpenSslSessionStats  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED METHOD: PUBLIC long accept()
    ===  UNCHANGED METHOD: PUBLIC long acceptGood()
    ===  UNCHANGED METHOD: PUBLIC long acceptRenegotiate()
    ===  UNCHANGED METHOD: PUBLIC long cacheFull()
    ===  UNCHANGED METHOD: PUBLIC long cbHits()
    ===  UNCHANGED METHOD: PUBLIC long connect()
    ===  UNCHANGED METHOD: PUBLIC long connectGood()
    ===  UNCHANGED METHOD: PUBLIC long connectRenegotiate()
    ===  UNCHANGED METHOD: PUBLIC long hits()
    ===  UNCHANGED METHOD: PUBLIC long misses()
    ===  UNCHANGED METHOD: PUBLIC long number()
    ===  UNCHANGED METHOD: PUBLIC long ticketKeyFail()
    ===  UNCHANGED METHOD: PUBLIC long ticketKeyNew()
    ===  UNCHANGED METHOD: PUBLIC long ticketKeyRenew()
    ===  UNCHANGED METHOD: PUBLIC long ticketKeyResume()
    ===  UNCHANGED METHOD: PUBLIC long timeouts()
===  UNCHANGED CLASS: PUBLIC FINAL io.netty.handler.ssl.OpenSslSessionTicketKey  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL int NAME_SIZE
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL int HMAC_KEY_SIZE
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL int TICKET_KEY_SIZE
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL int AES_KEY_SIZE
    ===  UNCHANGED CONSTRUCTOR: PUBLIC OpenSslSessionTicketKey(byte[], byte[], byte[])
    ===  UNCHANGED METHOD: PUBLIC byte[] aesKey()
    ===  UNCHANGED METHOD: PUBLIC byte[] hmacKey()
    ===  UNCHANGED METHOD: PUBLIC byte[] name()
===  UNCHANGED CLASS: PUBLIC FINAL io.netty.handler.ssl.OpenSslX509KeyManagerFactory  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED CONSTRUCTOR: PUBLIC OpenSslX509KeyManagerFactory(java.security.Provider)
    ===  UNCHANGED CONSTRUCTOR: PUBLIC OpenSslX509KeyManagerFactory()
    ===  UNCHANGED CONSTRUCTOR: PUBLIC OpenSslX509KeyManagerFactory(java.lang.String, java.security.Provider)
        ===  UNCHANGED EXCEPTION: java.security.NoSuchAlgorithmException
    ===  UNCHANGED METHOD: PUBLIC STATIC io.netty.handler.ssl.OpenSslX509KeyManagerFactory newEngineBased(java.io.File, java.lang.String)
        ===  UNCHANGED EXCEPTION: java.security.cert.CertificateException
        ===  UNCHANGED EXCEPTION: java.io.IOException
        ===  UNCHANGED EXCEPTION: java.security.KeyStoreException
        ===  UNCHANGED EXCEPTION: java.security.NoSuchAlgorithmException
        ===  UNCHANGED EXCEPTION: java.security.UnrecoverableKeyException
    ===  UNCHANGED METHOD: PUBLIC STATIC io.netty.handler.ssl.OpenSslX509KeyManagerFactory newEngineBased(java.security.cert.X509Certificate[], java.lang.String)
        ===  UNCHANGED EXCEPTION: java.security.cert.CertificateException
        ===  UNCHANGED EXCEPTION: java.io.IOException
        ===  UNCHANGED EXCEPTION: java.security.KeyStoreException
        ===  UNCHANGED EXCEPTION: java.security.NoSuchAlgorithmException
        ===  UNCHANGED EXCEPTION: java.security.UnrecoverableKeyException
    ===  UNCHANGED METHOD: PUBLIC STATIC io.netty.handler.ssl.OpenSslX509KeyManagerFactory newKeyless(java.io.File)
        ===  UNCHANGED EXCEPTION: java.security.cert.CertificateException
        ===  UNCHANGED EXCEPTION: java.io.IOException
        ===  UNCHANGED EXCEPTION: java.security.KeyStoreException
        ===  UNCHANGED EXCEPTION: java.security.NoSuchAlgorithmException
        ===  UNCHANGED EXCEPTION: java.security.UnrecoverableKeyException
    ===  UNCHANGED METHOD: PUBLIC STATIC io.netty.handler.ssl.OpenSslX509KeyManagerFactory newKeyless(java.io.InputStream)
        ===  UNCHANGED EXCEPTION: java.security.cert.CertificateException
        ===  UNCHANGED EXCEPTION: java.io.IOException
        ===  UNCHANGED EXCEPTION: java.security.KeyStoreException
        ===  UNCHANGED EXCEPTION: java.security.NoSuchAlgorithmException
        ===  UNCHANGED EXCEPTION: java.security.UnrecoverableKeyException
    ===  UNCHANGED METHOD: PUBLIC STATIC io.netty.handler.ssl.OpenSslX509KeyManagerFactory newKeyless(java.security.cert.X509Certificate[])
        ===  UNCHANGED EXCEPTION: java.security.cert.CertificateException
        ===  UNCHANGED EXCEPTION: java.io.IOException
        ===  UNCHANGED EXCEPTION: java.security.KeyStoreException
        ===  UNCHANGED EXCEPTION: java.security.NoSuchAlgorithmException
        ===  UNCHANGED EXCEPTION: java.security.UnrecoverableKeyException
===  UNCHANGED CLASS: PUBLIC io.netty.handler.ssl.OptionalSslHandler  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED INTERFACE: io.netty.channel.ChannelInboundHandler
    ===  UNCHANGED INTERFACE: io.netty.channel.ChannelHandler
    ===  UNCHANGED CONSTRUCTOR: PUBLIC OptionalSslHandler(io.netty.handler.ssl.SslContext)
    ===  UNCHANGED METHOD: PROTECTED void decode(io.netty.channel.ChannelHandlerContext, io.netty.buffer.ByteBuf, java.util.List)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PROTECTED io.netty.channel.ChannelHandler newNonSslHandler(io.netty.channel.ChannelHandlerContext)
    ===  UNCHANGED METHOD: PROTECTED java.lang.String newNonSslHandlerName()
    ===  UNCHANGED METHOD: PROTECTED io.netty.handler.ssl.SslHandler newSslHandler(io.netty.channel.ChannelHandlerContext, io.netty.handler.ssl.SslContext)
    ===  UNCHANGED METHOD: PROTECTED java.lang.String newSslHandlerName()
===  UNCHANGED CLASS: PUBLIC FINAL io.netty.handler.ssl.PemPrivateKey  (compatible)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED INTERFACE: java.security.Key
    ===  UNCHANGED INTERFACE: javax.security.auth.Destroyable
    ===  UNCHANGED INTERFACE: java.security.PrivateKey
    ===  UNCHANGED INTERFACE: io.netty.handler.ssl.PemEncoded
    ===  UNCHANGED INTERFACE: io.netty.util.ReferenceCounted
    ===  UNCHANGED INTERFACE: io.netty.buffer.ByteBufHolder
    ===  UNCHANGED INTERFACE: java.io.Serializable
    ===  UNCHANGED METHOD: PUBLIC io.netty.buffer.ByteBuf content()
    ===  UNCHANGED METHOD: PUBLIC io.netty.handler.ssl.PemPrivateKey copy()
    ===  UNCHANGED METHOD: PROTECTED void deallocate()
    ===  UNCHANGED METHOD: PUBLIC void destroy()
    ===  UNCHANGED METHOD: PUBLIC io.netty.handler.ssl.PemPrivateKey duplicate()
    ===  UNCHANGED METHOD: PUBLIC java.lang.String getAlgorithm()
    ===  UNCHANGED METHOD: PUBLIC byte[] getEncoded()
    ===  UNCHANGED METHOD: PUBLIC java.lang.String getFormat()
    ===  UNCHANGED METHOD: PUBLIC boolean isDestroyed()
    ===  UNCHANGED METHOD: PUBLIC boolean isSensitive()
    ===  UNCHANGED METHOD: PUBLIC io.netty.handler.ssl.PemPrivateKey replace(io.netty.buffer.ByteBuf)
    ===  UNCHANGED METHOD: PUBLIC io.netty.handler.ssl.PemPrivateKey retain()
    ===  UNCHANGED METHOD: PUBLIC io.netty.handler.ssl.PemPrivateKey retain(int)
    ===  UNCHANGED METHOD: PUBLIC io.netty.handler.ssl.PemPrivateKey retainedDuplicate()
    ===  UNCHANGED METHOD: PUBLIC io.netty.handler.ssl.PemPrivateKey touch()
    ===  UNCHANGED METHOD: PUBLIC io.netty.handler.ssl.PemPrivateKey touch(java.lang.Object)
    ===  UNCHANGED METHOD: PUBLIC STATIC io.netty.handler.ssl.PemPrivateKey valueOf(byte[])
    ===  UNCHANGED METHOD: PUBLIC STATIC io.netty.handler.ssl.PemPrivateKey valueOf(io.netty.buffer.ByteBuf)
===  UNCHANGED CLASS: PUBLIC FINAL io.netty.handler.ssl.PemX509Certificate  (compatible)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED INTERFACE: java.security.cert.X509Extension
    ===  UNCHANGED INTERFACE: io.netty.handler.ssl.PemEncoded
    ===  UNCHANGED INTERFACE: io.netty.util.ReferenceCounted
    ===  UNCHANGED INTERFACE: io.netty.buffer.ByteBufHolder
    ===  UNCHANGED INTERFACE: java.io.Serializable
    ===  UNCHANGED METHOD: PUBLIC void checkValidity()
    ===  UNCHANGED METHOD: PUBLIC void checkValidity(java.util.Date)
    ===  UNCHANGED METHOD: PUBLIC io.netty.buffer.ByteBuf content()
    ===  UNCHANGED METHOD: PUBLIC io.netty.handler.ssl.PemX509Certificate copy()
    ===  UNCHANGED METHOD: PUBLIC io.netty.handler.ssl.PemX509Certificate duplicate()
    ===  UNCHANGED METHOD: PUBLIC boolean equals(java.lang.Object)
    ===  UNCHANGED METHOD: PUBLIC int getBasicConstraints()
    ===  UNCHANGED METHOD: PUBLIC java.util.Set getCriticalExtensionOIDs()
    ===  UNCHANGED METHOD: PUBLIC byte[] getEncoded()
    ===  UNCHANGED METHOD: PUBLIC byte[] getExtensionValue(java.lang.String)
    ===  UNCHANGED METHOD: PUBLIC java.security.Principal getIssuerDN()
    ===  UNCHANGED METHOD: PUBLIC boolean[] getIssuerUniqueID()
    ===  UNCHANGED METHOD: PUBLIC boolean[] getKeyUsage()
    ===  UNCHANGED METHOD: PUBLIC java.util.Set getNonCriticalExtensionOIDs()
    ===  UNCHANGED METHOD: PUBLIC java.util.Date getNotAfter()
    ===  UNCHANGED METHOD: PUBLIC java.util.Date getNotBefore()
    ===  UNCHANGED METHOD: PUBLIC java.security.PublicKey getPublicKey()
    ===  UNCHANGED METHOD: PUBLIC java.math.BigInteger getSerialNumber()
    ===  UNCHANGED METHOD: PUBLIC java.lang.String getSigAlgName()
    ===  UNCHANGED METHOD: PUBLIC java.lang.String getSigAlgOID()
    ===  UNCHANGED METHOD: PUBLIC byte[] getSigAlgParams()
    ===  UNCHANGED METHOD: PUBLIC byte[] getSignature()
    ===  UNCHANGED METHOD: PUBLIC java.security.Principal getSubjectDN()
    ===  UNCHANGED METHOD: PUBLIC boolean[] getSubjectUniqueID()
    ===  UNCHANGED METHOD: PUBLIC byte[] getTBSCertificate()
    ===  UNCHANGED METHOD: PUBLIC int getVersion()
    ===  UNCHANGED METHOD: PUBLIC int hashCode()
    ===  UNCHANGED METHOD: PUBLIC boolean hasUnsupportedCriticalExtension()
    ===  UNCHANGED METHOD: PUBLIC boolean isSensitive()
    ===  UNCHANGED METHOD: PUBLIC int refCnt()
    ===  UNCHANGED METHOD: PUBLIC boolean release()
    ===  UNCHANGED METHOD: PUBLIC boolean release(int)
    ===  UNCHANGED METHOD: PUBLIC io.netty.handler.ssl.PemX509Certificate replace(io.netty.buffer.ByteBuf)
    ===  UNCHANGED METHOD: PUBLIC io.netty.handler.ssl.PemX509Certificate retain()
    ===  UNCHANGED METHOD: PUBLIC io.netty.handler.ssl.PemX509Certificate retain(int)
    ===  UNCHANGED METHOD: PUBLIC io.netty.handler.ssl.PemX509Certificate retainedDuplicate()
    ===  UNCHANGED METHOD: PUBLIC java.lang.String toString()
    ===  UNCHANGED METHOD: PUBLIC io.netty.handler.ssl.PemX509Certificate touch()
    ===  UNCHANGED METHOD: PUBLIC io.netty.handler.ssl.PemX509Certificate touch(java.lang.Object)
    ===  UNCHANGED METHOD: PUBLIC STATIC io.netty.handler.ssl.PemX509Certificate valueOf(byte[])
    ===  UNCHANGED METHOD: PUBLIC STATIC io.netty.handler.ssl.PemX509Certificate valueOf(io.netty.buffer.ByteBuf)
    ===  UNCHANGED METHOD: PUBLIC void verify(java.security.PublicKey)
    ===  UNCHANGED METHOD: PUBLIC void verify(java.security.PublicKey, java.lang.String)
===  UNCHANGED CLASS: PUBLIC FINAL io.netty.handler.ssl.ReferenceCountedOpenSslClientContext  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED INTERFACE: io.netty.util.ReferenceCounted
    ===  UNCHANGED METHOD: PUBLIC io.netty.handler.ssl.OpenSslSessionContext sessionContext()
===  UNCHANGED CLASS: PUBLIC ABSTRACT io.netty.handler.ssl.ReferenceCountedOpenSslContext  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED INTERFACE: io.netty.util.ReferenceCounted
    ===  UNCHANGED FIELD: PROTECTED long ctx
    ===  UNCHANGED FIELD: PROTECTED STATIC FINAL int VERIFY_DEPTH
    ===  UNCHANGED METHOD: PUBLIC io.netty.handler.ssl.ApplicationProtocolNegotiator applicationProtocolNegotiator()
    ===  UNCHANGED METHOD: PROTECTED STATIC java.security.cert.X509Certificate[] certificates(byte[])
    ===  UNCHANGED METHOD: PROTECTED STATIC javax.net.ssl.X509TrustManager chooseTrustManager(javax.net.ssl.TrustManager[])
    ===  UNCHANGED METHOD: PROTECTED STATIC javax.net.ssl.X509KeyManager chooseX509KeyManager(javax.net.ssl.KeyManager[])
    ===  UNCHANGED METHOD: PUBLIC FINAL java.util.List cipherSuites()
    ===  UNCHANGED METHOD: PUBLIC FINAL long context()
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
    ===  UNCHANGED METHOD: PUBLIC int getBioNonApplicationBufferSize()
    ===  UNCHANGED METHOD: PUBLIC boolean getRejectRemoteInitiatedRenegotiation()
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
    ===  UNCHANGED METHOD: PUBLIC FINAL boolean isClient()
    ===  UNCHANGED METHOD: PUBLIC FINAL javax.net.ssl.SSLEngine newEngine(io.netty.buffer.ByteBufAllocator, java.lang.String, int)
    ===  UNCHANGED METHOD: PUBLIC FINAL javax.net.ssl.SSLEngine newEngine(io.netty.buffer.ByteBufAllocator)
    ===  UNCHANGED METHOD: PROTECTED FINAL io.netty.handler.ssl.SslHandler newHandler(io.netty.buffer.ByteBufAllocator, boolean)
    ===  UNCHANGED METHOD: PROTECTED FINAL io.netty.handler.ssl.SslHandler newHandler(io.netty.buffer.ByteBufAllocator, java.lang.String, int, boolean)
    ===  UNCHANGED METHOD: PROTECTED io.netty.handler.ssl.SslHandler newHandler(io.netty.buffer.ByteBufAllocator, boolean, java.util.concurrent.Executor)
    ===  UNCHANGED METHOD: PROTECTED io.netty.handler.ssl.SslHandler newHandler(io.netty.buffer.ByteBufAllocator, java.lang.String, int, boolean, java.util.concurrent.Executor)
    ===  UNCHANGED METHOD: PUBLIC FINAL int refCnt()
    ===  UNCHANGED METHOD: PUBLIC FINAL boolean release()
    ===  UNCHANGED METHOD: PUBLIC FINAL boolean release(int)
    ===  UNCHANGED METHOD: PUBLIC FINAL io.netty.util.ReferenceCounted retain()
    ===  UNCHANGED METHOD: PUBLIC FINAL io.netty.util.ReferenceCounted retain(int)
    ===  UNCHANGED METHOD: PUBLIC FINAL long sessionCacheSize()
    ===  UNCHANGED METHOD: PUBLIC ABSTRACT io.netty.handler.ssl.OpenSslSessionContext sessionContext()
    ===  UNCHANGED METHOD: PUBLIC FINAL long sessionTimeout()
    ===  UNCHANGED METHOD: PUBLIC void setBioNonApplicationBufferSize(int)
    ===  UNCHANGED METHOD: PUBLIC FINAL void setPrivateKeyMethod(io.netty.handler.ssl.OpenSslPrivateKeyMethod)
    ===  UNCHANGED METHOD: PUBLIC void setRejectRemoteInitiatedRenegotiation(boolean)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
    ===  UNCHANGED METHOD: PUBLIC FINAL void setTicketKeys(byte[])
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
    ===  UNCHANGED METHOD: PUBLIC FINAL long sslCtxPointer()
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
    ===  UNCHANGED METHOD: PUBLIC FINAL io.netty.handler.ssl.OpenSslSessionStats stats()
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
    ===  UNCHANGED METHOD: PUBLIC FINAL io.netty.util.ReferenceCounted touch()
    ===  UNCHANGED METHOD: PUBLIC FINAL io.netty.util.ReferenceCounted touch(java.lang.Object)
===  UNCHANGED CLASS: PUBLIC io.netty.handler.ssl.ReferenceCountedOpenSslEngine  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED INTERFACE: io.netty.handler.ssl.ApplicationProtocolAccessor
    ===  UNCHANGED INTERFACE: io.netty.util.ReferenceCounted
    ===  UNCHANGED METHOD: PUBLIC FINAL void beginHandshake()
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED METHOD: PUBLIC FINAL void closeInbound()
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED METHOD: PUBLIC FINAL void closeOutbound()
    ===  UNCHANGED METHOD: PUBLIC FINAL java.lang.Runnable getDelegatedTask()
    ===  UNCHANGED METHOD: PUBLIC FINAL java.lang.String[] getEnabledCipherSuites()
    ===  UNCHANGED METHOD: PUBLIC FINAL java.lang.String[] getEnabledProtocols()
    ===  UNCHANGED METHOD: PUBLIC FINAL boolean getEnableSessionCreation()
    ===  UNCHANGED METHOD: PUBLIC FINAL javax.net.ssl.SSLSession getHandshakeSession()
    ===  UNCHANGED METHOD: PUBLIC FINAL javax.net.ssl.SSLEngineResult$HandshakeStatus getHandshakeStatus()
    ===  UNCHANGED METHOD: PUBLIC FINAL boolean getNeedClientAuth()
    ===  UNCHANGED METHOD: PUBLIC java.lang.String getNegotiatedApplicationProtocol()
    ===  UNCHANGED METHOD: PUBLIC byte[] getOcspResponse()
    ===  UNCHANGED METHOD: PUBLIC FINAL javax.net.ssl.SSLSession getSession()
    ===  UNCHANGED METHOD: PUBLIC FINAL javax.net.ssl.SSLParameters getSSLParameters()
    ===  UNCHANGED METHOD: PUBLIC FINAL java.lang.String[] getSupportedCipherSuites()
    ===  UNCHANGED METHOD: PUBLIC FINAL java.lang.String[] getSupportedProtocols()
    ===  UNCHANGED METHOD: PUBLIC FINAL boolean getUseClientMode()
    ===  UNCHANGED METHOD: PUBLIC FINAL boolean getWantClientAuth()
    ===  UNCHANGED METHOD: PUBLIC FINAL boolean isInboundDone()
    ===  UNCHANGED METHOD: PUBLIC FINAL boolean isOutboundDone()
    ===  UNCHANGED METHOD: PUBLIC FINAL int refCnt()
    ===  UNCHANGED METHOD: PUBLIC FINAL boolean release()
    ===  UNCHANGED METHOD: PUBLIC FINAL boolean release(int)
    ===  UNCHANGED METHOD: PUBLIC FINAL io.netty.util.ReferenceCounted retain()
    ===  UNCHANGED METHOD: PUBLIC FINAL io.netty.util.ReferenceCounted retain(int)
    ===  UNCHANGED METHOD: PUBLIC FINAL void setEnabledCipherSuites(java.lang.String[])
    ===  UNCHANGED METHOD: PUBLIC FINAL void setEnabledProtocols(java.lang.String[])
    ===  UNCHANGED METHOD: PUBLIC FINAL void setEnableSessionCreation(boolean)
    ===  UNCHANGED METHOD: PUBLIC FINAL void setNeedClientAuth(boolean)
    ===  UNCHANGED METHOD: PUBLIC void setOcspResponse(byte[])
    ===  UNCHANGED METHOD: PUBLIC FINAL void setSSLParameters(javax.net.ssl.SSLParameters)
    ===  UNCHANGED METHOD: PUBLIC FINAL void setUseClientMode(boolean)
    ===  UNCHANGED METHOD: PUBLIC FINAL void setVerify(int, int)
    ===  UNCHANGED METHOD: PUBLIC FINAL void setWantClientAuth(boolean)
    ===  UNCHANGED METHOD: PUBLIC FINAL void shutdown()
    ===  UNCHANGED METHOD: PUBLIC FINAL long sslPointer()
    ===  UNCHANGED METHOD: PUBLIC FINAL io.netty.util.ReferenceCounted touch()
    ===  UNCHANGED METHOD: PUBLIC FINAL io.netty.util.ReferenceCounted touch(java.lang.Object)
    ===  UNCHANGED METHOD: PUBLIC FINAL javax.net.ssl.SSLEngineResult unwrap(java.nio.ByteBuffer[], int, int, java.nio.ByteBuffer[], int, int)
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED METHOD: PUBLIC FINAL javax.net.ssl.SSLEngineResult unwrap(java.nio.ByteBuffer[], java.nio.ByteBuffer[])
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED METHOD: PUBLIC FINAL javax.net.ssl.SSLEngineResult unwrap(java.nio.ByteBuffer, java.nio.ByteBuffer[], int, int)
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED METHOD: PUBLIC FINAL javax.net.ssl.SSLEngineResult unwrap(java.nio.ByteBuffer, java.nio.ByteBuffer)
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED METHOD: PUBLIC FINAL javax.net.ssl.SSLEngineResult unwrap(java.nio.ByteBuffer, java.nio.ByteBuffer[])
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED METHOD: PUBLIC FINAL javax.net.ssl.SSLEngineResult wrap(java.nio.ByteBuffer[], int, int, java.nio.ByteBuffer)
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED METHOD: PUBLIC FINAL javax.net.ssl.SSLEngineResult wrap(java.nio.ByteBuffer, java.nio.ByteBuffer)
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
===  UNCHANGED CLASS: PUBLIC FINAL io.netty.handler.ssl.ReferenceCountedOpenSslServerContext  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED INTERFACE: io.netty.util.ReferenceCounted
    ===  UNCHANGED METHOD: PUBLIC io.netty.handler.ssl.OpenSslServerSessionContext sessionContext()
===  UNCHANGED CLASS: PUBLIC FINAL io.netty.handler.ssl.SniCompletionEvent  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED METHOD: PUBLIC java.lang.String hostname()
    ===  UNCHANGED METHOD: PUBLIC java.lang.String toString()
===! UNCHANGED CLASS: PUBLIC io.netty.handler.ssl.SniHandler  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED INTERFACE: io.netty.channel.ChannelOutboundHandler
    ===  UNCHANGED INTERFACE: io.netty.channel.ChannelInboundHandler
    ===  UNCHANGED INTERFACE: io.netty.channel.ChannelHandler
    ===  UNCHANGED FIELD: PROTECTED FINAL io.netty.util.AsyncMapping mapping
    ===  UNCHANGED CONSTRUCTOR: PUBLIC SniHandler(io.netty.util.DomainNameMapping)
    ===  UNCHANGED CONSTRUCTOR: PUBLIC SniHandler(io.netty.util.Mapping)
    ===  UNCHANGED CONSTRUCTOR: PUBLIC SniHandler(io.netty.util.AsyncMapping)
    ===  UNCHANGED METHOD: PUBLIC java.lang.String hostname()
    ===  UNCHANGED METHOD: PROTECTED io.netty.util.concurrent.Future lookup(io.netty.channel.ChannelHandlerContext, java.lang.String)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PROTECTED io.netty.handler.ssl.SslHandler newSslHandler(io.netty.handler.ssl.SslContext, io.netty.buffer.ByteBufAllocator)
    ===  UNCHANGED METHOD: PROTECTED FINAL void onLookupComplete(io.netty.channel.ChannelHandlerContext, java.lang.String, io.netty.util.concurrent.Future)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PROTECTED void replaceHandler(io.netty.channel.ChannelHandlerContext, java.lang.String, io.netty.handler.ssl.SslContext)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC io.netty.handler.ssl.SslContext sslContext()
+++  NEW CLASS: PUBLIC(+) ABSTRACT(+) io.netty.handler.ssl.SslClientHelloHandler  (not serializable)
    +++  CLASS FILE FORMAT VERSION: 50.0 <- n.a.
    +++  NEW INTERFACE: io.netty.channel.ChannelOutboundHandler
    +++  NEW INTERFACE: io.netty.channel.ChannelInboundHandler
    +++  NEW INTERFACE: io.netty.channel.ChannelHandler
    +++  NEW CONSTRUCTOR: PUBLIC(+) SslClientHelloHandler()
    +++  NEW METHOD: PUBLIC(+) void bind(io.netty.channel.ChannelHandlerContext, java.net.SocketAddress, io.netty.channel.ChannelPromise)
        +++  NEW EXCEPTION: java.lang.Exception
    +++  NEW METHOD: PUBLIC(+) void close(io.netty.channel.ChannelHandlerContext, io.netty.channel.ChannelPromise)
        +++  NEW EXCEPTION: java.lang.Exception
    +++  NEW METHOD: PUBLIC(+) void connect(io.netty.channel.ChannelHandlerContext, java.net.SocketAddress, java.net.SocketAddress, io.netty.channel.ChannelPromise)
        +++  NEW EXCEPTION: java.lang.Exception
    +++  NEW METHOD: PROTECTED(+) void decode(io.netty.channel.ChannelHandlerContext, io.netty.buffer.ByteBuf, java.util.List)
        +++  NEW EXCEPTION: java.lang.Exception
    +++  NEW METHOD: PUBLIC(+) void deregister(io.netty.channel.ChannelHandlerContext, io.netty.channel.ChannelPromise)
        +++  NEW EXCEPTION: java.lang.Exception
    +++  NEW METHOD: PUBLIC(+) void disconnect(io.netty.channel.ChannelHandlerContext, io.netty.channel.ChannelPromise)
        +++  NEW EXCEPTION: java.lang.Exception
    +++  NEW METHOD: PUBLIC(+) void flush(io.netty.channel.ChannelHandlerContext)
        +++  NEW EXCEPTION: java.lang.Exception
    +++  NEW METHOD: PROTECTED(+) void handlerRemoved0(io.netty.channel.ChannelHandlerContext)
        +++  NEW EXCEPTION: java.lang.Exception
    +++  NEW METHOD: PROTECTED(+) ABSTRACT(+) io.netty.util.concurrent.Future lookup(io.netty.channel.ChannelHandlerContext, io.netty.buffer.ByteBuf)
        +++  NEW EXCEPTION: java.lang.Exception
    +++  NEW METHOD: PROTECTED(+) ABSTRACT(+) void onLookupComplete(io.netty.channel.ChannelHandlerContext, io.netty.util.concurrent.Future)
        +++  NEW EXCEPTION: java.lang.Exception
    +++  NEW METHOD: PUBLIC(+) void read(io.netty.channel.ChannelHandlerContext)
        +++  NEW EXCEPTION: java.lang.Exception
    +++  NEW METHOD: PUBLIC(+) void write(io.netty.channel.ChannelHandlerContext, java.lang.Object, io.netty.channel.ChannelPromise)
        +++  NEW EXCEPTION: java.lang.Exception
===  UNCHANGED CLASS: PUBLIC FINAL io.netty.handler.ssl.SslCloseCompletionEvent  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL io.netty.handler.ssl.SslCloseCompletionEvent SUCCESS
    ===  UNCHANGED CONSTRUCTOR: PUBLIC SslCloseCompletionEvent(java.lang.Throwable)
===  UNCHANGED CLASS: PUBLIC ABSTRACT io.netty.handler.ssl.SslCompletionEvent  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED METHOD: PUBLIC FINAL java.lang.Throwable cause()
    ===  UNCHANGED METHOD: PUBLIC FINAL boolean isSuccess()
    ===  UNCHANGED METHOD: PUBLIC java.lang.String toString()
===  UNCHANGED CLASS: PUBLIC ABSTRACT io.netty.handler.ssl.SslContext  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED CONSTRUCTOR: PROTECTED SslContext()
    ===  UNCHANGED CONSTRUCTOR: PROTECTED SslContext(boolean)
    ===  UNCHANGED METHOD: PUBLIC ABSTRACT io.netty.handler.ssl.ApplicationProtocolNegotiator applicationProtocolNegotiator()
    ===  UNCHANGED METHOD: PUBLIC FINAL io.netty.util.AttributeMap attributes()
    ===  UNCHANGED METHOD: PROTECTED STATIC javax.net.ssl.TrustManagerFactory buildTrustManagerFactory(java.io.File, javax.net.ssl.TrustManagerFactory)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
        ===  UNCHANGED EXCEPTION: java.security.NoSuchAlgorithmException
        ===  UNCHANGED EXCEPTION: java.security.cert.CertificateException
        ===  UNCHANGED EXCEPTION: java.security.KeyStoreException
        ===  UNCHANGED EXCEPTION: java.io.IOException
    ===  UNCHANGED METHOD: PUBLIC ABSTRACT java.util.List cipherSuites()
    ===  UNCHANGED METHOD: PUBLIC STATIC io.netty.handler.ssl.SslProvider defaultClientProvider()
    ===  UNCHANGED METHOD: PUBLIC STATIC io.netty.handler.ssl.SslProvider defaultServerProvider()
    ===  UNCHANGED METHOD: PROTECTED STATIC java.security.spec.PKCS8EncodedKeySpec generateKeySpec(char[], byte[])
        ===  UNCHANGED EXCEPTION: java.io.IOException
        ===  UNCHANGED EXCEPTION: java.security.NoSuchAlgorithmException
        ===  UNCHANGED EXCEPTION: javax.crypto.NoSuchPaddingException
        ===  UNCHANGED EXCEPTION: java.security.spec.InvalidKeySpecException
        ===  UNCHANGED EXCEPTION: java.security.InvalidKeyException
        ===  UNCHANGED EXCEPTION: java.security.InvalidAlgorithmParameterException
    ===  UNCHANGED METHOD: PUBLIC ABSTRACT boolean isClient()
    ===  UNCHANGED METHOD: PUBLIC FINAL boolean isServer()
    ===  UNCHANGED METHOD: PUBLIC STATIC io.netty.handler.ssl.SslContext newClientContext()
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED METHOD: PUBLIC STATIC io.netty.handler.ssl.SslContext newClientContext(java.io.File)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED METHOD: PUBLIC STATIC io.netty.handler.ssl.SslContext newClientContext(javax.net.ssl.TrustManagerFactory)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED METHOD: PUBLIC STATIC io.netty.handler.ssl.SslContext newClientContext(java.io.File, javax.net.ssl.TrustManagerFactory)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED METHOD: PUBLIC STATIC io.netty.handler.ssl.SslContext newClientContext(java.io.File, javax.net.ssl.TrustManagerFactory, java.lang.Iterable, java.lang.Iterable, long, long)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED METHOD: PUBLIC STATIC io.netty.handler.ssl.SslContext newClientContext(java.io.File, javax.net.ssl.TrustManagerFactory, java.lang.Iterable, io.netty.handler.ssl.CipherSuiteFilter, io.netty.handler.ssl.ApplicationProtocolConfig, long, long)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED METHOD: PUBLIC STATIC io.netty.handler.ssl.SslContext newClientContext(io.netty.handler.ssl.SslProvider)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED METHOD: PUBLIC STATIC io.netty.handler.ssl.SslContext newClientContext(io.netty.handler.ssl.SslProvider, java.io.File)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED METHOD: PUBLIC STATIC io.netty.handler.ssl.SslContext newClientContext(io.netty.handler.ssl.SslProvider, javax.net.ssl.TrustManagerFactory)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED METHOD: PUBLIC STATIC io.netty.handler.ssl.SslContext newClientContext(io.netty.handler.ssl.SslProvider, java.io.File, javax.net.ssl.TrustManagerFactory)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED METHOD: PUBLIC STATIC io.netty.handler.ssl.SslContext newClientContext(io.netty.handler.ssl.SslProvider, java.io.File, javax.net.ssl.TrustManagerFactory, java.lang.Iterable, java.lang.Iterable, long, long)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED METHOD: PUBLIC STATIC io.netty.handler.ssl.SslContext newClientContext(io.netty.handler.ssl.SslProvider, java.io.File, javax.net.ssl.TrustManagerFactory, java.lang.Iterable, io.netty.handler.ssl.CipherSuiteFilter, io.netty.handler.ssl.ApplicationProtocolConfig, long, long)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED METHOD: PUBLIC STATIC io.netty.handler.ssl.SslContext newClientContext(io.netty.handler.ssl.SslProvider, java.io.File, javax.net.ssl.TrustManagerFactory, java.io.File, java.io.File, java.lang.String, javax.net.ssl.KeyManagerFactory, java.lang.Iterable, io.netty.handler.ssl.CipherSuiteFilter, io.netty.handler.ssl.ApplicationProtocolConfig, long, long)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED METHOD: PUBLIC ABSTRACT javax.net.ssl.SSLEngine newEngine(io.netty.buffer.ByteBufAllocator)
    ===  UNCHANGED METHOD: PUBLIC ABSTRACT javax.net.ssl.SSLEngine newEngine(io.netty.buffer.ByteBufAllocator, java.lang.String, int)
    ===  UNCHANGED METHOD: PUBLIC FINAL io.netty.handler.ssl.SslHandler newHandler(io.netty.buffer.ByteBufAllocator)
    ===  UNCHANGED METHOD: PROTECTED io.netty.handler.ssl.SslHandler newHandler(io.netty.buffer.ByteBufAllocator, boolean)
    ===  UNCHANGED METHOD: PUBLIC io.netty.handler.ssl.SslHandler newHandler(io.netty.buffer.ByteBufAllocator, java.util.concurrent.Executor)
    ===  UNCHANGED METHOD: PROTECTED io.netty.handler.ssl.SslHandler newHandler(io.netty.buffer.ByteBufAllocator, boolean, java.util.concurrent.Executor)
    ===  UNCHANGED METHOD: PUBLIC FINAL io.netty.handler.ssl.SslHandler newHandler(io.netty.buffer.ByteBufAllocator, java.lang.String, int)
    ===  UNCHANGED METHOD: PROTECTED io.netty.handler.ssl.SslHandler newHandler(io.netty.buffer.ByteBufAllocator, java.lang.String, int, boolean)
    ===  UNCHANGED METHOD: PUBLIC io.netty.handler.ssl.SslHandler newHandler(io.netty.buffer.ByteBufAllocator, java.lang.String, int, java.util.concurrent.Executor)
    ===  UNCHANGED METHOD: PROTECTED io.netty.handler.ssl.SslHandler newHandler(io.netty.buffer.ByteBufAllocator, java.lang.String, int, boolean, java.util.concurrent.Executor)
    ===  UNCHANGED METHOD: PUBLIC STATIC io.netty.handler.ssl.SslContext newServerContext(java.io.File, java.io.File)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED METHOD: PUBLIC STATIC io.netty.handler.ssl.SslContext newServerContext(java.io.File, java.io.File, java.lang.String)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED METHOD: PUBLIC STATIC io.netty.handler.ssl.SslContext newServerContext(java.io.File, java.io.File, java.lang.String, java.lang.Iterable, java.lang.Iterable, long, long)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED METHOD: PUBLIC STATIC io.netty.handler.ssl.SslContext newServerContext(java.io.File, java.io.File, java.lang.String, java.lang.Iterable, io.netty.handler.ssl.CipherSuiteFilter, io.netty.handler.ssl.ApplicationProtocolConfig, long, long)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED METHOD: PUBLIC STATIC io.netty.handler.ssl.SslContext newServerContext(io.netty.handler.ssl.SslProvider, java.io.File, java.io.File)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED METHOD: PUBLIC STATIC io.netty.handler.ssl.SslContext newServerContext(io.netty.handler.ssl.SslProvider, java.io.File, java.io.File, java.lang.String)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED METHOD: PUBLIC STATIC io.netty.handler.ssl.SslContext newServerContext(io.netty.handler.ssl.SslProvider, java.io.File, java.io.File, java.lang.String, java.lang.Iterable, java.lang.Iterable, long, long)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED METHOD: PUBLIC STATIC io.netty.handler.ssl.SslContext newServerContext(io.netty.handler.ssl.SslProvider, java.io.File, java.io.File, java.lang.String, javax.net.ssl.TrustManagerFactory, java.lang.Iterable, java.lang.Iterable, long, long)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED METHOD: PUBLIC STATIC io.netty.handler.ssl.SslContext newServerContext(io.netty.handler.ssl.SslProvider, java.io.File, java.io.File, java.lang.String, java.lang.Iterable, io.netty.handler.ssl.CipherSuiteFilter, io.netty.handler.ssl.ApplicationProtocolConfig, long, long)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED METHOD: PUBLIC STATIC io.netty.handler.ssl.SslContext newServerContext(io.netty.handler.ssl.SslProvider, java.io.File, javax.net.ssl.TrustManagerFactory, java.io.File, java.io.File, java.lang.String, javax.net.ssl.KeyManagerFactory, java.lang.Iterable, io.netty.handler.ssl.CipherSuiteFilter, io.netty.handler.ssl.ApplicationProtocolConfig, long, long)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED METHOD: PUBLIC FINAL java.util.List nextProtocols()
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
    ===  UNCHANGED METHOD: PUBLIC ABSTRACT long sessionCacheSize()
    ===  UNCHANGED METHOD: PUBLIC ABSTRACT javax.net.ssl.SSLSessionContext sessionContext()
    ===  UNCHANGED METHOD: PUBLIC ABSTRACT long sessionTimeout()
***  MODIFIED CLASS: PUBLIC FINAL io.netty.handler.ssl.SslContextBuilder  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED METHOD: PUBLIC io.netty.handler.ssl.SslContextBuilder applicationProtocolConfig(io.netty.handler.ssl.ApplicationProtocolConfig)
    ===  UNCHANGED METHOD: PUBLIC io.netty.handler.ssl.SslContext build()
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED METHOD: PUBLIC io.netty.handler.ssl.SslContextBuilder ciphers(java.lang.Iterable)
    ===  UNCHANGED METHOD: PUBLIC io.netty.handler.ssl.SslContextBuilder ciphers(java.lang.Iterable, io.netty.handler.ssl.CipherSuiteFilter)
    ===  UNCHANGED METHOD: PUBLIC io.netty.handler.ssl.SslContextBuilder clientAuth(io.netty.handler.ssl.ClientAuth)
    ===  UNCHANGED METHOD: PUBLIC io.netty.handler.ssl.SslContextBuilder enableOcsp(boolean)
    ===  UNCHANGED METHOD: PUBLIC STATIC io.netty.handler.ssl.SslContextBuilder forClient()
    ===  UNCHANGED METHOD: PUBLIC STATIC io.netty.handler.ssl.SslContextBuilder forServer(java.io.File, java.io.File)
    ===  UNCHANGED METHOD: PUBLIC STATIC io.netty.handler.ssl.SslContextBuilder forServer(java.io.InputStream, java.io.InputStream)
    ===  UNCHANGED METHOD: PUBLIC STATIC io.netty.handler.ssl.SslContextBuilder forServer(java.security.PrivateKey, java.security.cert.X509Certificate[])
    ===  UNCHANGED METHOD: PUBLIC STATIC io.netty.handler.ssl.SslContextBuilder forServer(java.io.File, java.io.File, java.lang.String)
    ===  UNCHANGED METHOD: PUBLIC STATIC io.netty.handler.ssl.SslContextBuilder forServer(java.io.InputStream, java.io.InputStream, java.lang.String)
    ===  UNCHANGED METHOD: PUBLIC STATIC io.netty.handler.ssl.SslContextBuilder forServer(java.security.PrivateKey, java.lang.String, java.security.cert.X509Certificate[])
    ===  UNCHANGED METHOD: PUBLIC STATIC io.netty.handler.ssl.SslContextBuilder forServer(javax.net.ssl.KeyManagerFactory)
    +++  NEW METHOD: PUBLIC(+) STATIC(+) io.netty.handler.ssl.SslContextBuilder forServer(java.security.PrivateKey, java.lang.Iterable)
    +++  NEW METHOD: PUBLIC(+) STATIC(+) io.netty.handler.ssl.SslContextBuilder forServer(java.security.PrivateKey, java.lang.String, java.lang.Iterable)
    +++  NEW METHOD: PUBLIC(+) STATIC(+) io.netty.handler.ssl.SslContextBuilder forServer(javax.net.ssl.KeyManager)
    ===  UNCHANGED METHOD: PUBLIC io.netty.handler.ssl.SslContextBuilder keyManager(java.io.File, java.io.File)
    ===  UNCHANGED METHOD: PUBLIC io.netty.handler.ssl.SslContextBuilder keyManager(java.io.InputStream, java.io.InputStream)
    ===  UNCHANGED METHOD: PUBLIC io.netty.handler.ssl.SslContextBuilder keyManager(java.security.PrivateKey, java.security.cert.X509Certificate[])
    ===  UNCHANGED METHOD: PUBLIC io.netty.handler.ssl.SslContextBuilder keyManager(java.io.File, java.io.File, java.lang.String)
    ===  UNCHANGED METHOD: PUBLIC io.netty.handler.ssl.SslContextBuilder keyManager(java.io.InputStream, java.io.InputStream, java.lang.String)
    ===  UNCHANGED METHOD: PUBLIC io.netty.handler.ssl.SslContextBuilder keyManager(java.security.PrivateKey, java.lang.String, java.security.cert.X509Certificate[])
    ===  UNCHANGED METHOD: PUBLIC io.netty.handler.ssl.SslContextBuilder keyManager(javax.net.ssl.KeyManagerFactory)
    +++  NEW METHOD: PUBLIC(+) io.netty.handler.ssl.SslContextBuilder keyManager(java.security.PrivateKey, java.lang.Iterable)
    +++  NEW METHOD: PUBLIC(+) io.netty.handler.ssl.SslContextBuilder keyManager(java.security.PrivateKey, java.lang.String, java.lang.Iterable)
    +++  NEW METHOD: PUBLIC(+) io.netty.handler.ssl.SslContextBuilder keyManager(javax.net.ssl.KeyManager)
    ===  UNCHANGED METHOD: PUBLIC io.netty.handler.ssl.SslContextBuilder keyStoreType(java.lang.String)
    ===  UNCHANGED METHOD: PUBLIC io.netty.handler.ssl.SslContextBuilder protocols(java.lang.String[])
    +++  NEW METHOD: PUBLIC(+) io.netty.handler.ssl.SslContextBuilder protocols(java.lang.Iterable)
    ===  UNCHANGED METHOD: PUBLIC io.netty.handler.ssl.SslContextBuilder sessionCacheSize(long)
    ===  UNCHANGED METHOD: PUBLIC io.netty.handler.ssl.SslContextBuilder sessionTimeout(long)
    ===  UNCHANGED METHOD: PUBLIC io.netty.handler.ssl.SslContextBuilder sslContextProvider(java.security.Provider)
    ===  UNCHANGED METHOD: PUBLIC io.netty.handler.ssl.SslContextBuilder sslProvider(io.netty.handler.ssl.SslProvider)
    ===  UNCHANGED METHOD: PUBLIC io.netty.handler.ssl.SslContextBuilder startTls(boolean)
    ===  UNCHANGED METHOD: PUBLIC io.netty.handler.ssl.SslContextBuilder trustManager(java.io.File)
    ===  UNCHANGED METHOD: PUBLIC io.netty.handler.ssl.SslContextBuilder trustManager(java.io.InputStream)
    ===  UNCHANGED METHOD: PUBLIC io.netty.handler.ssl.SslContextBuilder trustManager(java.security.cert.X509Certificate[])
    ===  UNCHANGED METHOD: PUBLIC io.netty.handler.ssl.SslContextBuilder trustManager(javax.net.ssl.TrustManagerFactory)
    +++  NEW METHOD: PUBLIC(+) io.netty.handler.ssl.SslContextBuilder trustManager(java.lang.Iterable)
    +++  NEW METHOD: PUBLIC(+) io.netty.handler.ssl.SslContextBuilder trustManager(javax.net.ssl.TrustManager)
===  UNCHANGED CLASS: PUBLIC io.netty.handler.ssl.SslHandler  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED INTERFACE: io.netty.channel.ChannelOutboundHandler
    ===  UNCHANGED INTERFACE: io.netty.channel.ChannelInboundHandler
    ===  UNCHANGED INTERFACE: io.netty.channel.ChannelHandler
    ===  UNCHANGED CONSTRUCTOR: PUBLIC SslHandler(javax.net.ssl.SSLEngine)
    ===  UNCHANGED CONSTRUCTOR: PUBLIC SslHandler(javax.net.ssl.SSLEngine, boolean, java.util.concurrent.Executor)
    ===  UNCHANGED CONSTRUCTOR: PUBLIC SslHandler(javax.net.ssl.SSLEngine, boolean)
    ===  UNCHANGED CONSTRUCTOR: PUBLIC SslHandler(javax.net.ssl.SSLEngine, java.util.concurrent.Executor)
    ===  UNCHANGED METHOD: PUBLIC java.lang.String applicationProtocol()
    ===  UNCHANGED METHOD: PUBLIC void bind(io.netty.channel.ChannelHandlerContext, java.net.SocketAddress, io.netty.channel.ChannelPromise)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC void channelActive(io.netty.channel.ChannelHandlerContext)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC void channelInactive(io.netty.channel.ChannelHandlerContext)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC void channelReadComplete(io.netty.channel.ChannelHandlerContext)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC io.netty.channel.ChannelFuture close()
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
    ===  UNCHANGED METHOD: PUBLIC io.netty.channel.ChannelFuture close(io.netty.channel.ChannelPromise)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
    ===  UNCHANGED METHOD: PUBLIC void close(io.netty.channel.ChannelHandlerContext, io.netty.channel.ChannelPromise)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC io.netty.channel.ChannelFuture closeOutbound()
    ===  UNCHANGED METHOD: PUBLIC io.netty.channel.ChannelFuture closeOutbound(io.netty.channel.ChannelPromise)
    ===  UNCHANGED METHOD: PUBLIC void connect(io.netty.channel.ChannelHandlerContext, java.net.SocketAddress, java.net.SocketAddress, io.netty.channel.ChannelPromise)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PROTECTED void decode(io.netty.channel.ChannelHandlerContext, io.netty.buffer.ByteBuf, java.util.List)
        ===  UNCHANGED EXCEPTION: javax.net.ssl.SSLException
    ===  UNCHANGED METHOD: PUBLIC void deregister(io.netty.channel.ChannelHandlerContext, io.netty.channel.ChannelPromise)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC void disconnect(io.netty.channel.ChannelHandlerContext, io.netty.channel.ChannelPromise)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC javax.net.ssl.SSLEngine engine()
    ===  UNCHANGED METHOD: PUBLIC void exceptionCaught(io.netty.channel.ChannelHandlerContext, java.lang.Throwable)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC void flush(io.netty.channel.ChannelHandlerContext)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC FINAL long getCloseNotifyFlushTimeoutMillis()
    ===  UNCHANGED METHOD: PUBLIC FINAL long getCloseNotifyReadTimeoutMillis()
    ===  UNCHANGED METHOD: PUBLIC long getCloseNotifyTimeoutMillis()
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
    ===  UNCHANGED METHOD: PUBLIC long getHandshakeTimeoutMillis()
    ===  UNCHANGED METHOD: PUBLIC void handlerAdded(io.netty.channel.ChannelHandlerContext)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC void handlerRemoved0(io.netty.channel.ChannelHandlerContext)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC io.netty.util.concurrent.Future handshakeFuture()
    ===  UNCHANGED METHOD: PUBLIC STATIC boolean isEncrypted(io.netty.buffer.ByteBuf)
    ===  UNCHANGED METHOD: PUBLIC void read(io.netty.channel.ChannelHandlerContext)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC io.netty.util.concurrent.Future renegotiate()
    ===  UNCHANGED METHOD: PUBLIC io.netty.util.concurrent.Future renegotiate(io.netty.util.concurrent.Promise)
    ===  UNCHANGED METHOD: PUBLIC FINAL void setCloseNotifyFlushTimeout(long, java.util.concurrent.TimeUnit)
    ===  UNCHANGED METHOD: PUBLIC FINAL void setCloseNotifyFlushTimeoutMillis(long)
    ===  UNCHANGED METHOD: PUBLIC FINAL void setCloseNotifyReadTimeout(long, java.util.concurrent.TimeUnit)
    ===  UNCHANGED METHOD: PUBLIC FINAL void setCloseNotifyReadTimeoutMillis(long)
    ===  UNCHANGED METHOD: PUBLIC void setCloseNotifyTimeout(long, java.util.concurrent.TimeUnit)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
    ===  UNCHANGED METHOD: PUBLIC void setCloseNotifyTimeoutMillis(long)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
    ===  UNCHANGED METHOD: PUBLIC void setHandshakeTimeout(long, java.util.concurrent.TimeUnit)
    ===  UNCHANGED METHOD: PUBLIC void setHandshakeTimeoutMillis(long)
    ===  UNCHANGED METHOD: PUBLIC FINAL void setWrapDataSize(int)
    ===  UNCHANGED METHOD: PUBLIC io.netty.util.concurrent.Future sslCloseFuture()
    ===  UNCHANGED METHOD: PUBLIC void write(io.netty.channel.ChannelHandlerContext, java.lang.Object, io.netty.channel.ChannelPromise)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
===  UNCHANGED CLASS: PUBLIC FINAL io.netty.handler.ssl.SslHandshakeCompletionEvent  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL io.netty.handler.ssl.SslHandshakeCompletionEvent SUCCESS
    ===  UNCHANGED CONSTRUCTOR: PUBLIC SslHandshakeCompletionEvent(java.lang.Throwable)
===  UNCHANGED CLASS: PUBLIC ABSTRACT io.netty.handler.ssl.SslMasterKeyHandler  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED INTERFACE: io.netty.channel.ChannelInboundHandler
    ===  UNCHANGED INTERFACE: io.netty.channel.ChannelHandler
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL java.lang.String SYSTEM_PROP_KEY
    ===  UNCHANGED CONSTRUCTOR: PROTECTED SslMasterKeyHandler()
    ===  UNCHANGED METHOD: PROTECTED ABSTRACT void accept(javax.crypto.SecretKey, javax.net.ssl.SSLSession)
    ===  UNCHANGED METHOD: PUBLIC STATIC void ensureSunSslEngineAvailability()
    ===  UNCHANGED METHOD: PUBLIC STATIC boolean isSunSslEngineAvailable()
    ===  UNCHANGED METHOD: PUBLIC STATIC io.netty.handler.ssl.SslMasterKeyHandler newWireSharkSslMasterKeyHandler()
    ===  UNCHANGED METHOD: PUBLIC STATIC java.lang.Throwable sunSslEngineUnavailabilityCause()
    ===  UNCHANGED METHOD: PUBLIC FINAL void userEventTriggered(io.netty.channel.ChannelHandlerContext, java.lang.Object)
===  UNCHANGED ENUM: PUBLIC FINAL io.netty.handler.ssl.SslProvider  (compatible)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED INTERFACE: java.lang.Comparable
    ===  UNCHANGED INTERFACE: java.io.Serializable
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL io.netty.handler.ssl.SslProvider JDK
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL io.netty.handler.ssl.SslProvider OPENSSL
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL io.netty.handler.ssl.SslProvider OPENSSL_REFCNT
    ===  UNCHANGED METHOD: PUBLIC STATIC boolean isAlpnSupported(io.netty.handler.ssl.SslProvider)
    ===  UNCHANGED METHOD: PUBLIC STATIC io.netty.handler.ssl.SslProvider valueOf(java.lang.String)
    ===  UNCHANGED METHOD: PUBLIC STATIC io.netty.handler.ssl.SslProvider[] values()
===  UNCHANGED CLASS: PUBLIC FINAL io.netty.handler.ssl.SupportedCipherSuiteFilter  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED INTERFACE: io.netty.handler.ssl.CipherSuiteFilter
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL io.netty.handler.ssl.SupportedCipherSuiteFilter INSTANCE
    ===  UNCHANGED METHOD: PUBLIC java.lang.String[] filterCipherSuites(java.lang.Iterable, java.util.List, java.util.Set)
===  UNCHANGED CLASS: PUBLIC FINAL io.netty.handler.ssl.util.FingerprintTrustManagerFactory  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED CONSTRUCTOR: PUBLIC FingerprintTrustManagerFactory(java.lang.Iterable)
    ===  UNCHANGED CONSTRUCTOR: PUBLIC FingerprintTrustManagerFactory(java.lang.String[])
    ===  UNCHANGED CONSTRUCTOR: PUBLIC FingerprintTrustManagerFactory(byte[])
    ===  UNCHANGED METHOD: PROTECTED javax.net.ssl.TrustManager[] engineGetTrustManagers()
    ===  UNCHANGED METHOD: PROTECTED void engineInit(java.security.KeyStore)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PROTECTED void engineInit(javax.net.ssl.ManagerFactoryParameters)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
===  UNCHANGED CLASS: PUBLIC FINAL io.netty.handler.ssl.util.InsecureTrustManagerFactory  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL javax.net.ssl.TrustManagerFactory INSTANCE
    ===  UNCHANGED METHOD: PROTECTED javax.net.ssl.TrustManager[] engineGetTrustManagers()
    ===  UNCHANGED METHOD: PROTECTED void engineInit(java.security.KeyStore)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PROTECTED void engineInit(javax.net.ssl.ManagerFactoryParameters)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
===  UNCHANGED CLASS: PUBLIC FINAL io.netty.handler.ssl.util.SelfSignedCertificate  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED CONSTRUCTOR: PUBLIC SelfSignedCertificate(java.lang.String, java.security.SecureRandom, int)
        ===  UNCHANGED EXCEPTION: java.security.cert.CertificateException
    ===  UNCHANGED CONSTRUCTOR: PUBLIC SelfSignedCertificate(java.lang.String)
        ===  UNCHANGED EXCEPTION: java.security.cert.CertificateException
    ===  UNCHANGED CONSTRUCTOR: PUBLIC SelfSignedCertificate(java.lang.String, java.util.Date, java.util.Date)
        ===  UNCHANGED EXCEPTION: java.security.cert.CertificateException
    ===  UNCHANGED CONSTRUCTOR: PUBLIC SelfSignedCertificate()
        ===  UNCHANGED EXCEPTION: java.security.cert.CertificateException
    ===  UNCHANGED CONSTRUCTOR: PUBLIC SelfSignedCertificate(java.util.Date, java.util.Date)
        ===  UNCHANGED EXCEPTION: java.security.cert.CertificateException
    ===  UNCHANGED CONSTRUCTOR: PUBLIC SelfSignedCertificate(java.lang.String, java.security.SecureRandom, int, java.util.Date, java.util.Date)
        ===  UNCHANGED EXCEPTION: java.security.cert.CertificateException
    ===  UNCHANGED METHOD: PUBLIC java.security.cert.X509Certificate cert()
    ===  UNCHANGED METHOD: PUBLIC java.io.File certificate()
    ===  UNCHANGED METHOD: PUBLIC void delete()
    ===  UNCHANGED METHOD: PUBLIC java.security.PrivateKey key()
    ===  UNCHANGED METHOD: PUBLIC java.io.File privateKey()
+++  NEW CLASS: PUBLIC(+) ABSTRACT(+) io.netty.handler.ssl.util.SimpleKeyManagerFactory  (not serializable)
    +++  CLASS FILE FORMAT VERSION: 50.0 <- n.a.
    +++  NEW CONSTRUCTOR: PROTECTED(+) SimpleKeyManagerFactory(java.lang.String)
    +++  NEW CONSTRUCTOR: PROTECTED(+) SimpleKeyManagerFactory()
    +++  NEW METHOD: PROTECTED(+) ABSTRACT(+) javax.net.ssl.KeyManager[] engineGetKeyManagers()
    +++  NEW METHOD: PROTECTED(+) ABSTRACT(+) void engineInit(java.security.KeyStore, char[])
        +++  NEW EXCEPTION: java.lang.Exception
    +++  NEW METHOD: PROTECTED(+) ABSTRACT(+) void engineInit(javax.net.ssl.ManagerFactoryParameters)
        +++  NEW EXCEPTION: java.lang.Exception
===  UNCHANGED CLASS: PUBLIC ABSTRACT io.netty.handler.ssl.util.SimpleTrustManagerFactory  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED CONSTRUCTOR: PROTECTED SimpleTrustManagerFactory()
    ===  UNCHANGED CONSTRUCTOR: PROTECTED SimpleTrustManagerFactory(java.lang.String)
    ===  UNCHANGED METHOD: PROTECTED ABSTRACT javax.net.ssl.TrustManager[] engineGetTrustManagers()
    ===  UNCHANGED METHOD: PROTECTED ABSTRACT void engineInit(java.security.KeyStore)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PROTECTED ABSTRACT void engineInit(javax.net.ssl.ManagerFactoryParameters)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
===  UNCHANGED CLASS: PUBLIC io.netty.handler.stream.ChunkedFile  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED INTERFACE: io.netty.handler.stream.ChunkedInput
    ===  UNCHANGED CONSTRUCTOR: PUBLIC ChunkedFile(java.io.File, int)
        ===  UNCHANGED EXCEPTION: java.io.IOException
    ===  UNCHANGED CONSTRUCTOR: PUBLIC ChunkedFile(java.io.RandomAccessFile, int)
        ===  UNCHANGED EXCEPTION: java.io.IOException
    ===  UNCHANGED CONSTRUCTOR: PUBLIC ChunkedFile(java.io.RandomAccessFile)
        ===  UNCHANGED EXCEPTION: java.io.IOException
    ===  UNCHANGED CONSTRUCTOR: PUBLIC ChunkedFile(java.io.File)
        ===  UNCHANGED EXCEPTION: java.io.IOException
    ===  UNCHANGED CONSTRUCTOR: PUBLIC ChunkedFile(java.io.RandomAccessFile, long, long, int)
        ===  UNCHANGED EXCEPTION: java.io.IOException
    ===  UNCHANGED METHOD: PUBLIC void close()
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC long currentOffset()
    ===  UNCHANGED METHOD: PUBLIC long endOffset()
    ===  UNCHANGED METHOD: PUBLIC boolean isEndOfInput()
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC long length()
    ===  UNCHANGED METHOD: PUBLIC long progress()
    ===  UNCHANGED METHOD: PUBLIC io.netty.buffer.ByteBuf readChunk(io.netty.channel.ChannelHandlerContext)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC io.netty.buffer.ByteBuf readChunk(io.netty.buffer.ByteBufAllocator)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC long startOffset()
===  UNCHANGED INTERFACE: PUBLIC ABSTRACT io.netty.handler.stream.ChunkedInput  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED METHOD: PUBLIC ABSTRACT void close()
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC ABSTRACT boolean isEndOfInput()
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC ABSTRACT long length()
    ===  UNCHANGED METHOD: PUBLIC ABSTRACT long progress()
    ===  UNCHANGED METHOD: PUBLIC ABSTRACT java.lang.Object readChunk(io.netty.channel.ChannelHandlerContext)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC ABSTRACT java.lang.Object readChunk(io.netty.buffer.ByteBufAllocator)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
===  UNCHANGED CLASS: PUBLIC io.netty.handler.stream.ChunkedNioFile  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED INTERFACE: io.netty.handler.stream.ChunkedInput
    ===  UNCHANGED CONSTRUCTOR: PUBLIC ChunkedNioFile(java.nio.channels.FileChannel, int)
        ===  UNCHANGED EXCEPTION: java.io.IOException
    ===  UNCHANGED CONSTRUCTOR: PUBLIC ChunkedNioFile(java.nio.channels.FileChannel)
        ===  UNCHANGED EXCEPTION: java.io.IOException
    ===  UNCHANGED CONSTRUCTOR: PUBLIC ChunkedNioFile(java.io.File, int)
        ===  UNCHANGED EXCEPTION: java.io.IOException
    ===  UNCHANGED CONSTRUCTOR: PUBLIC ChunkedNioFile(java.io.File)
        ===  UNCHANGED EXCEPTION: java.io.IOException
    ===  UNCHANGED CONSTRUCTOR: PUBLIC ChunkedNioFile(java.nio.channels.FileChannel, long, long, int)
        ===  UNCHANGED EXCEPTION: java.io.IOException
    ===  UNCHANGED METHOD: PUBLIC void close()
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC long currentOffset()
    ===  UNCHANGED METHOD: PUBLIC long endOffset()
    ===  UNCHANGED METHOD: PUBLIC boolean isEndOfInput()
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC long length()
    ===  UNCHANGED METHOD: PUBLIC long progress()
    ===  UNCHANGED METHOD: PUBLIC io.netty.buffer.ByteBuf readChunk(io.netty.channel.ChannelHandlerContext)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC io.netty.buffer.ByteBuf readChunk(io.netty.buffer.ByteBufAllocator)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC long startOffset()
===  UNCHANGED CLASS: PUBLIC io.netty.handler.stream.ChunkedNioStream  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED INTERFACE: io.netty.handler.stream.ChunkedInput
    ===  UNCHANGED CONSTRUCTOR: PUBLIC ChunkedNioStream(java.nio.channels.ReadableByteChannel, int)
    ===  UNCHANGED CONSTRUCTOR: PUBLIC ChunkedNioStream(java.nio.channels.ReadableByteChannel)
    ===  UNCHANGED METHOD: PUBLIC void close()
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC boolean isEndOfInput()
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC long length()
    ===  UNCHANGED METHOD: PUBLIC long progress()
    ===  UNCHANGED METHOD: PUBLIC io.netty.buffer.ByteBuf readChunk(io.netty.channel.ChannelHandlerContext)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC io.netty.buffer.ByteBuf readChunk(io.netty.buffer.ByteBufAllocator)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC long transferredBytes()
===  UNCHANGED CLASS: PUBLIC io.netty.handler.stream.ChunkedStream  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED INTERFACE: io.netty.handler.stream.ChunkedInput
    ===  UNCHANGED CONSTRUCTOR: PUBLIC ChunkedStream(java.io.InputStream)
    ===  UNCHANGED CONSTRUCTOR: PUBLIC ChunkedStream(java.io.InputStream, int)
    ===  UNCHANGED METHOD: PUBLIC void close()
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC boolean isEndOfInput()
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC long length()
    ===  UNCHANGED METHOD: PUBLIC long progress()
    ===  UNCHANGED METHOD: PUBLIC io.netty.buffer.ByteBuf readChunk(io.netty.channel.ChannelHandlerContext)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC io.netty.buffer.ByteBuf readChunk(io.netty.buffer.ByteBufAllocator)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC long transferredBytes()
===  UNCHANGED CLASS: PUBLIC io.netty.handler.stream.ChunkedWriteHandler  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED INTERFACE: io.netty.channel.ChannelOutboundHandler
    ===  UNCHANGED INTERFACE: io.netty.channel.ChannelInboundHandler
    ===  UNCHANGED INTERFACE: io.netty.channel.ChannelHandler
    ===  UNCHANGED CONSTRUCTOR: PUBLIC ChunkedWriteHandler()
    ===  UNCHANGED CONSTRUCTOR: PUBLIC ChunkedWriteHandler(int)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
    ===  UNCHANGED METHOD: PUBLIC void channelInactive(io.netty.channel.ChannelHandlerContext)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC void channelWritabilityChanged(io.netty.channel.ChannelHandlerContext)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC void flush(io.netty.channel.ChannelHandlerContext)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC void handlerAdded(io.netty.channel.ChannelHandlerContext)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC void resumeTransfer()
    ===  UNCHANGED METHOD: PUBLIC void write(io.netty.channel.ChannelHandlerContext, java.lang.Object, io.netty.channel.ChannelPromise)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
===  UNCHANGED ENUM: PUBLIC FINAL io.netty.handler.timeout.IdleState  (compatible)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED INTERFACE: java.lang.Comparable
    ===  UNCHANGED INTERFACE: java.io.Serializable
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL io.netty.handler.timeout.IdleState ALL_IDLE
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL io.netty.handler.timeout.IdleState READER_IDLE
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL io.netty.handler.timeout.IdleState WRITER_IDLE
    ===  UNCHANGED METHOD: PUBLIC STATIC io.netty.handler.timeout.IdleState valueOf(java.lang.String)
    ===  UNCHANGED METHOD: PUBLIC STATIC io.netty.handler.timeout.IdleState[] values()
===  UNCHANGED CLASS: PUBLIC io.netty.handler.timeout.IdleStateEvent  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL io.netty.handler.timeout.IdleStateEvent WRITER_IDLE_STATE_EVENT
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL io.netty.handler.timeout.IdleStateEvent FIRST_WRITER_IDLE_STATE_EVENT
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL io.netty.handler.timeout.IdleStateEvent ALL_IDLE_STATE_EVENT
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL io.netty.handler.timeout.IdleStateEvent READER_IDLE_STATE_EVENT
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL io.netty.handler.timeout.IdleStateEvent FIRST_READER_IDLE_STATE_EVENT
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL io.netty.handler.timeout.IdleStateEvent FIRST_ALL_IDLE_STATE_EVENT
    ===  UNCHANGED CONSTRUCTOR: PROTECTED IdleStateEvent(io.netty.handler.timeout.IdleState, boolean)
    ===  UNCHANGED METHOD: PUBLIC boolean isFirst()
    ===  UNCHANGED METHOD: PUBLIC io.netty.handler.timeout.IdleState state()
    ===  UNCHANGED METHOD: PUBLIC java.lang.String toString()
===  UNCHANGED CLASS: PUBLIC io.netty.handler.timeout.IdleStateHandler  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED INTERFACE: io.netty.channel.ChannelOutboundHandler
    ===  UNCHANGED INTERFACE: io.netty.channel.ChannelInboundHandler
    ===  UNCHANGED INTERFACE: io.netty.channel.ChannelHandler
    ===  UNCHANGED CONSTRUCTOR: PUBLIC IdleStateHandler(long, long, long, java.util.concurrent.TimeUnit)
    ===  UNCHANGED CONSTRUCTOR: PUBLIC IdleStateHandler(boolean, long, long, long, java.util.concurrent.TimeUnit)
    ===  UNCHANGED CONSTRUCTOR: PUBLIC IdleStateHandler(int, int, int)
    ===  UNCHANGED METHOD: PUBLIC void channelActive(io.netty.channel.ChannelHandlerContext)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PROTECTED void channelIdle(io.netty.channel.ChannelHandlerContext, io.netty.handler.timeout.IdleStateEvent)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC void channelInactive(io.netty.channel.ChannelHandlerContext)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC void channelRead(io.netty.channel.ChannelHandlerContext, java.lang.Object)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC void channelReadComplete(io.netty.channel.ChannelHandlerContext)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC void channelRegistered(io.netty.channel.ChannelHandlerContext)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC long getAllIdleTimeInMillis()
    ===  UNCHANGED METHOD: PUBLIC long getReaderIdleTimeInMillis()
    ===  UNCHANGED METHOD: PUBLIC long getWriterIdleTimeInMillis()
    ===  UNCHANGED METHOD: PUBLIC void handlerAdded(io.netty.channel.ChannelHandlerContext)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC void handlerRemoved(io.netty.channel.ChannelHandlerContext)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PROTECTED io.netty.handler.timeout.IdleStateEvent newIdleStateEvent(io.netty.handler.timeout.IdleState, boolean)
    ===  UNCHANGED METHOD: PUBLIC void write(io.netty.channel.ChannelHandlerContext, java.lang.Object, io.netty.channel.ChannelPromise)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
===  UNCHANGED CLASS: PUBLIC FINAL io.netty.handler.timeout.ReadTimeoutException  (compatible)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED INTERFACE: java.io.Serializable
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL io.netty.handler.timeout.ReadTimeoutException INSTANCE
===  UNCHANGED CLASS: PUBLIC io.netty.handler.timeout.ReadTimeoutHandler  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED INTERFACE: io.netty.channel.ChannelOutboundHandler
    ===  UNCHANGED INTERFACE: io.netty.channel.ChannelInboundHandler
    ===  UNCHANGED INTERFACE: io.netty.channel.ChannelHandler
    ===  UNCHANGED CONSTRUCTOR: PUBLIC ReadTimeoutHandler(int)
    ===  UNCHANGED CONSTRUCTOR: PUBLIC ReadTimeoutHandler(long, java.util.concurrent.TimeUnit)
    ===  UNCHANGED METHOD: PROTECTED FINAL void channelIdle(io.netty.channel.ChannelHandlerContext, io.netty.handler.timeout.IdleStateEvent)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PROTECTED void readTimedOut(io.netty.channel.ChannelHandlerContext)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
===  UNCHANGED CLASS: PUBLIC io.netty.handler.timeout.TimeoutException  (compatible)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED INTERFACE: java.io.Serializable
    ===  UNCHANGED METHOD: PUBLIC java.lang.Throwable fillInStackTrace()
===  UNCHANGED CLASS: PUBLIC FINAL io.netty.handler.timeout.WriteTimeoutException  (compatible)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED INTERFACE: java.io.Serializable
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL io.netty.handler.timeout.WriteTimeoutException INSTANCE
===  UNCHANGED CLASS: PUBLIC io.netty.handler.timeout.WriteTimeoutHandler  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED INTERFACE: io.netty.channel.ChannelOutboundHandler
    ===  UNCHANGED INTERFACE: io.netty.channel.ChannelHandler
    ===  UNCHANGED CONSTRUCTOR: PUBLIC WriteTimeoutHandler(int)
    ===  UNCHANGED CONSTRUCTOR: PUBLIC WriteTimeoutHandler(long, java.util.concurrent.TimeUnit)
    ===  UNCHANGED METHOD: PUBLIC void handlerRemoved(io.netty.channel.ChannelHandlerContext)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC void write(io.netty.channel.ChannelHandlerContext, java.lang.Object, io.netty.channel.ChannelPromise)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PROTECTED void writeTimedOut(io.netty.channel.ChannelHandlerContext)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
===  UNCHANGED CLASS: PUBLIC ABSTRACT io.netty.handler.traffic.AbstractTrafficShapingHandler  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED INTERFACE: io.netty.channel.ChannelOutboundHandler
    ===  UNCHANGED INTERFACE: io.netty.channel.ChannelInboundHandler
    ===  UNCHANGED INTERFACE: io.netty.channel.ChannelHandler
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL long DEFAULT_CHECK_INTERVAL
    ===  UNCHANGED FIELD: PUBLIC STATIC FINAL long DEFAULT_MAX_TIME
    ===  UNCHANGED FIELD: PROTECTED long maxTime
    ===  UNCHANGED FIELD: PROTECTED long checkInterval
    ===  UNCHANGED FIELD: PROTECTED io.netty.handler.traffic.TrafficCounter trafficCounter
    ===  UNCHANGED CONSTRUCTOR: PROTECTED AbstractTrafficShapingHandler(long, long, long)
    ===  UNCHANGED CONSTRUCTOR: PROTECTED AbstractTrafficShapingHandler(long, long, long, long)
    ===  UNCHANGED CONSTRUCTOR: PROTECTED AbstractTrafficShapingHandler(long, long)
    ===  UNCHANGED CONSTRUCTOR: PROTECTED AbstractTrafficShapingHandler()
    ===  UNCHANGED CONSTRUCTOR: PROTECTED AbstractTrafficShapingHandler(long)
    ===  UNCHANGED METHOD: PROTECTED long calculateSize(java.lang.Object)
    ===  UNCHANGED METHOD: PUBLIC void channelRead(io.netty.channel.ChannelHandlerContext, java.lang.Object)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC void channelRegistered(io.netty.channel.ChannelHandlerContext)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC void configure(long, long, long)
    ===  UNCHANGED METHOD: PUBLIC void configure(long, long)
    ===  UNCHANGED METHOD: PUBLIC void configure(long)
    ===  UNCHANGED METHOD: PROTECTED void doAccounting(io.netty.handler.traffic.TrafficCounter)
    ===  UNCHANGED METHOD: PUBLIC long getCheckInterval()
    ===  UNCHANGED METHOD: PUBLIC long getMaxTimeWait()
    ===  UNCHANGED METHOD: PUBLIC long getMaxWriteDelay()
    ===  UNCHANGED METHOD: PUBLIC long getMaxWriteSize()
    ===  UNCHANGED METHOD: PUBLIC long getReadLimit()
    ===  UNCHANGED METHOD: PUBLIC long getWriteLimit()
    ===  UNCHANGED METHOD: PROTECTED STATIC boolean isHandlerActive(io.netty.channel.ChannelHandlerContext)
    ===  UNCHANGED METHOD: PUBLIC void read(io.netty.channel.ChannelHandlerContext)
    ===  UNCHANGED METHOD: PUBLIC void setCheckInterval(long)
    ===  UNCHANGED METHOD: PUBLIC void setMaxTimeWait(long)
    ===  UNCHANGED METHOD: PUBLIC void setMaxWriteDelay(long)
    ===  UNCHANGED METHOD: PUBLIC void setMaxWriteSize(long)
    ===  UNCHANGED METHOD: PUBLIC void setReadLimit(long)
    ===  UNCHANGED METHOD: PUBLIC void setWriteLimit(long)
    ===  UNCHANGED METHOD: PROTECTED void submitWrite(io.netty.channel.ChannelHandlerContext, java.lang.Object, long, io.netty.channel.ChannelPromise)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
    ===  UNCHANGED METHOD: PUBLIC java.lang.String toString()
    ===  UNCHANGED METHOD: PUBLIC io.netty.handler.traffic.TrafficCounter trafficCounter()
    ===  UNCHANGED METHOD: PROTECTED int userDefinedWritabilityIndex()
    ===  UNCHANGED METHOD: PUBLIC void write(io.netty.channel.ChannelHandlerContext, java.lang.Object, io.netty.channel.ChannelPromise)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
===  UNCHANGED CLASS: PUBLIC io.netty.handler.traffic.ChannelTrafficShapingHandler  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED INTERFACE: io.netty.channel.ChannelOutboundHandler
    ===  UNCHANGED INTERFACE: io.netty.channel.ChannelInboundHandler
    ===  UNCHANGED INTERFACE: io.netty.channel.ChannelHandler
    ===  UNCHANGED CONSTRUCTOR: PUBLIC ChannelTrafficShapingHandler(long, long)
    ===  UNCHANGED CONSTRUCTOR: PUBLIC ChannelTrafficShapingHandler(long, long, long)
    ===  UNCHANGED CONSTRUCTOR: PUBLIC ChannelTrafficShapingHandler(long, long, long, long)
    ===  UNCHANGED CONSTRUCTOR: PUBLIC ChannelTrafficShapingHandler(long)
    ===  UNCHANGED METHOD: PUBLIC void handlerAdded(io.netty.channel.ChannelHandlerContext)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC void handlerRemoved(io.netty.channel.ChannelHandlerContext)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC long queueSize()
===  UNCHANGED CLASS: PUBLIC io.netty.handler.traffic.GlobalChannelTrafficCounter  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED CONSTRUCTOR: PUBLIC GlobalChannelTrafficCounter(io.netty.handler.traffic.GlobalChannelTrafficShapingHandler, java.util.concurrent.ScheduledExecutorService, java.lang.String, long)
    ===  UNCHANGED METHOD: PUBLIC void resetCumulativeTime()
    ===  UNCHANGED METHOD: PUBLIC void start()
    ===  UNCHANGED METHOD: PUBLIC void stop()
===  UNCHANGED CLASS: PUBLIC io.netty.handler.traffic.GlobalChannelTrafficShapingHandler  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED INTERFACE: io.netty.channel.ChannelOutboundHandler
    ===  UNCHANGED INTERFACE: io.netty.channel.ChannelInboundHandler
    ===  UNCHANGED INTERFACE: io.netty.channel.ChannelHandler
    ===  UNCHANGED CONSTRUCTOR: PUBLIC GlobalChannelTrafficShapingHandler(java.util.concurrent.ScheduledExecutorService)
    ===  UNCHANGED CONSTRUCTOR: PUBLIC GlobalChannelTrafficShapingHandler(java.util.concurrent.ScheduledExecutorService, long, long, long, long)
    ===  UNCHANGED CONSTRUCTOR: PUBLIC GlobalChannelTrafficShapingHandler(java.util.concurrent.ScheduledExecutorService, long, long, long, long, long, long)
    ===  UNCHANGED CONSTRUCTOR: PUBLIC GlobalChannelTrafficShapingHandler(java.util.concurrent.ScheduledExecutorService, long)
    ===  UNCHANGED CONSTRUCTOR: PUBLIC GlobalChannelTrafficShapingHandler(java.util.concurrent.ScheduledExecutorService, long, long, long, long, long)
    ===  UNCHANGED METHOD: PUBLIC float accelerationFactor()
    ===  UNCHANGED METHOD: PUBLIC void channelRead(io.netty.channel.ChannelHandlerContext, java.lang.Object)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC java.util.Collection channelTrafficCounters()
    ===  UNCHANGED METHOD: PROTECTED long checkWaitReadTime(io.netty.channel.ChannelHandlerContext, long, long)
    ===  UNCHANGED METHOD: PUBLIC void configureChannel(long, long)
    ===  UNCHANGED METHOD: PROTECTED void doAccounting(io.netty.handler.traffic.TrafficCounter)
    ===  UNCHANGED METHOD: PUBLIC long getMaxGlobalWriteSize()
    ===  UNCHANGED METHOD: PUBLIC long getReadChannelLimit()
    ===  UNCHANGED METHOD: PUBLIC long getWriteChannelLimit()
    ===  UNCHANGED METHOD: PUBLIC void handlerAdded(io.netty.channel.ChannelHandlerContext)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC void handlerRemoved(io.netty.channel.ChannelHandlerContext)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PROTECTED void informReadOperation(io.netty.channel.ChannelHandlerContext, long)
    ===  UNCHANGED METHOD: PUBLIC float maxDeviation()
    ===  UNCHANGED METHOD: PROTECTED long maximumCumulativeReadBytes()
    ===  UNCHANGED METHOD: PROTECTED long maximumCumulativeWrittenBytes()
    ===  UNCHANGED METHOD: PUBLIC long queuesSize()
    ===  UNCHANGED METHOD: PUBLIC FINAL void release()
    ===  UNCHANGED METHOD: PUBLIC void setMaxDeviation(float, float, float)
    ===  UNCHANGED METHOD: PUBLIC void setMaxGlobalWriteSize(long)
    ===  UNCHANGED METHOD: PUBLIC void setReadChannelLimit(long)
    ===  UNCHANGED METHOD: PUBLIC void setWriteChannelLimit(long)
    ===  UNCHANGED METHOD: PUBLIC float slowDownFactor()
    ===  UNCHANGED METHOD: PROTECTED void submitWrite(io.netty.channel.ChannelHandlerContext, java.lang.Object, long, long, long, io.netty.channel.ChannelPromise)
    ===  UNCHANGED METHOD: PUBLIC java.lang.String toString()
    ===  UNCHANGED METHOD: PROTECTED int userDefinedWritabilityIndex()
    ===  UNCHANGED METHOD: PUBLIC void write(io.netty.channel.ChannelHandlerContext, java.lang.Object, io.netty.channel.ChannelPromise)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED ANNOTATION: io.netty.channel.ChannelHandler$Sharable
===  UNCHANGED CLASS: PUBLIC io.netty.handler.traffic.GlobalTrafficShapingHandler  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED INTERFACE: io.netty.channel.ChannelOutboundHandler
    ===  UNCHANGED INTERFACE: io.netty.channel.ChannelInboundHandler
    ===  UNCHANGED INTERFACE: io.netty.channel.ChannelHandler
    ===  UNCHANGED CONSTRUCTOR: PUBLIC GlobalTrafficShapingHandler(java.util.concurrent.ScheduledExecutorService, long, long, long)
    ===  UNCHANGED CONSTRUCTOR: PUBLIC GlobalTrafficShapingHandler(java.util.concurrent.ScheduledExecutorService, long, long, long, long)
    ===  UNCHANGED CONSTRUCTOR: PUBLIC GlobalTrafficShapingHandler(java.util.concurrent.ScheduledExecutorService, long)
    ===  UNCHANGED CONSTRUCTOR: PUBLIC GlobalTrafficShapingHandler(io.netty.util.concurrent.EventExecutor)
    ===  UNCHANGED CONSTRUCTOR: PUBLIC GlobalTrafficShapingHandler(java.util.concurrent.ScheduledExecutorService, long, long)
    ===  UNCHANGED METHOD: PUBLIC long getMaxGlobalWriteSize()
    ===  UNCHANGED METHOD: PUBLIC void handlerAdded(io.netty.channel.ChannelHandlerContext)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC void handlerRemoved(io.netty.channel.ChannelHandlerContext)
        ===  UNCHANGED EXCEPTION: java.lang.Exception
    ===  UNCHANGED METHOD: PUBLIC long queuesSize()
    ===  UNCHANGED METHOD: PUBLIC FINAL void release()
    ===  UNCHANGED METHOD: PUBLIC void setMaxGlobalWriteSize(long)
    ===  UNCHANGED METHOD: PROTECTED int userDefinedWritabilityIndex()
    ===  UNCHANGED ANNOTATION: io.netty.channel.ChannelHandler$Sharable
===  UNCHANGED CLASS: PUBLIC io.netty.handler.traffic.TrafficCounter  (not serializable)
    ===  CLASS FILE FORMAT VERSION: 50.0 <- 50.0
    ===  UNCHANGED CONSTRUCTOR: PUBLIC TrafficCounter(java.util.concurrent.ScheduledExecutorService, java.lang.String, long)
    ===  UNCHANGED CONSTRUCTOR: PUBLIC TrafficCounter(io.netty.handler.traffic.AbstractTrafficShapingHandler, java.util.concurrent.ScheduledExecutorService, java.lang.String, long)
    ===  UNCHANGED METHOD: PUBLIC long checkInterval()
    ===  UNCHANGED METHOD: PUBLIC void configure(long)
    ===  UNCHANGED METHOD: PUBLIC long cumulativeReadBytes()
    ===  UNCHANGED METHOD: PUBLIC long cumulativeWrittenBytes()
    ===  UNCHANGED METHOD: PUBLIC long currentReadBytes()
    ===  UNCHANGED METHOD: PUBLIC long currentWrittenBytes()
    ===  UNCHANGED METHOD: PUBLIC long getRealWriteThroughput()
    ===  UNCHANGED METHOD: PUBLIC java.util.concurrent.atomic.AtomicLong getRealWrittenBytes()
    ===  UNCHANGED METHOD: PUBLIC long lastCumulativeTime()
    ===  UNCHANGED METHOD: PUBLIC long lastReadBytes()
    ===  UNCHANGED METHOD: PUBLIC long lastReadThroughput()
    ===  UNCHANGED METHOD: PUBLIC long lastTime()
    ===  UNCHANGED METHOD: PUBLIC long lastWriteThroughput()
    ===  UNCHANGED METHOD: PUBLIC long lastWrittenBytes()
    ===  UNCHANGED METHOD: PUBLIC STATIC long milliSecondFromNano()
    ===  UNCHANGED METHOD: PUBLIC java.lang.String name()
    ===  UNCHANGED METHOD: PUBLIC long readTimeToWait(long, long, long)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
    ===  UNCHANGED METHOD: PUBLIC long readTimeToWait(long, long, long, long)
    ===  UNCHANGED METHOD: PUBLIC void resetCumulativeTime()
    ===  UNCHANGED METHOD: PUBLIC void start()
    ===  UNCHANGED METHOD: PUBLIC void stop()
    ===  UNCHANGED METHOD: PUBLIC java.lang.String toString()
    ===  UNCHANGED METHOD: PUBLIC long writeTimeToWait(long, long, long)
        ===  UNCHANGED ANNOTATION: java.lang.Deprecated
    ===  UNCHANGED METHOD: PUBLIC long writeTimeToWait(long, long, long, long)
lasselindqvist commented 4 years ago

I think the problem lies in that forAllSuperclasses(jApiClass, classMap, new ArrayList<Integer>(), new OnSuperclassCallback<Integer>() { (https://github.com/siom79/japicmp/blob/d3547f07e3453c627577dea9555d2684ad49c22f/japicmp/src/main/java/japicmp/compat/CompatibilityChanges.java#L579)

does not wait for until adding the warning with removedAndNotOverriddenMethods.add(jApiMethod); (https://github.com/siom79/japicmp/blob/d3547f07e3453c627577dea9555d2684ad49c22f/japicmp/src/main/java/japicmp/compat/CompatibilityChanges.java#L602)

CompatibilityChangesTest.testMethodMovedToSuperClass only tests moving the method up one class?

normanmaurer commented 4 years ago

@siom79 anything else I should provide ?

siom79 commented 4 years ago

@normanmaurer Thanks for posting the output. Looks like the class io.netty.handler.ssl.SniHandler caused the compatibility change, as it is a subclass of io.netty.handler.ssl.AbstractSniHandler.

It turned out that if a method was moved from a superclass (like io.netty.handler.ssl.AbstractSniHandler) to another superclass higher in the hierarchy, METHOD_REMOVED_IN_SUPERCLASS was reported, which was incorrect. Fixed it with the commit above.

siom79 commented 4 years ago

Released with 0.14.3.