
// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*-

#ifndef __gnu_javax_net_ssl_provider_AbstractHandshake$1__
#define __gnu_javax_net_ssl_provider_AbstractHandshake$1__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace gnu
  {
    namespace javax
    {
      namespace net
      {
        namespace ssl
        {
          namespace provider
          {
              class AbstractHandshake$1;
              class AbstractHandshake$CertVerifier;
          }
        }
      }
    }
  }
}

class gnu::javax::net::ssl::provider::AbstractHandshake$1 : public ::java::lang::Object
{

public: // actually package-private
  AbstractHandshake$1(::gnu::javax::net::ssl::provider::AbstractHandshake$CertVerifier *);
public:
  ::java::lang::ClassLoader * AbstractHandshake$1$run();
  ::java::lang::Object * run();
public: // actually package-private
  ::gnu::javax::net::ssl::provider::AbstractHandshake$CertVerifier * __attribute__((aligned(__alignof__( ::java::lang::Object)))) this$1;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_javax_net_ssl_provider_AbstractHandshake$1__
