!}vH@      !"#$%&'()*+,-./0123456789:;<=>??Hack into the internals of OpenSSL to add missing functionality(c) Eric Mertens, 2016ISCemertens@gmail.comNone @hookupdAdd hostname checking to the certificate verification step. Partial wildcards matching is disabled.Ahookupparam hookupname hookupnamelen hookup1 success, 0 failure Bhookupparam hookupflags Chookupctx @hookup hostname D@&SOCKS5 network protocol implementation(c) Eric Mertens, 2018ISCemertens@gmail.comNonegEhookup;Server message used to indicate result of client's request.FhookupIClient message used to request a network operation from the SOCKS server.Ghookup?Initial SOCKS sent by server with chosen authentication method.HhookupJInitial SOCKS sent by client with proposed list of authentication methods.Ihookup%proposed methods (maximum length 255)Jhookup2Network host identified by address or domain name.KhookupIPv4 host addressLhookupIPv6 host addressMhookup Domain name (maximum length 255)NhookupNetwork host and port numberhookupSOCKS command reply codesOhookup/Tags used in the protocol messages for encoded J valuesPhookupSOCKS client commandsQhookupSOCKS authentication methodsRhookup Transform a S into a strict TUhookupBuild a list of buildable things prefixing the length of the list as a single byte. The list must not be longer than 255 elements.VhookupxParse a list of parsable things where the length of the list is encoded as a single byte before the items to be parsed.Whookup Match a 16-bit, big-endian word.0EXYZF[\]G^_H`IJKLMNa PbcdQefghijklmnop2Network connections generalized over TLS and SOCKS(c) Eric Mertens, 2016ISCemertens@gmail.comNonet0-hookupA connection to a network service along with its read buffer used for line-oriented protocols. The connection could be a plain network connection, SOCKS connected, or TLS.hookup3Type for errors that can be thrown by this package.hookupFailure during  getAddrInfo resolving remote hosthookupFailure during / to remote hosthookupFailure during 3hookupIncomplete line during 3hookup4Socks command rejected by server by given reply codehookup,Socks authentication method was not acceptedhookup3Socks server sent an invalid message or no message.hookup+Domain name was too long for SOCKS protocolhookupcTLS connection parameters. These parameters are passed to OpenSSL when making a secure connection.hookupPath to client certificatehookupPath to client private keyhookupPrivate key decryption password hookupPath to CA certificate bundle!hookup OpenSSL cipher suite name (e.g. "HIGH")"hookup#Disables certificate checking when q#hookupSOCKS connection parameters%hookupSOCKS server host&hookupSOCKS server port'hookupParameters for /.Common defaults for fields:  defaultFamily, .When a #Q is provided the connection will be established using a SOCKS (version 5) proxy.When a Z is provided the connection negotiate TLS at connect time in order to protect the stream.lThe binding hostname can be used to force the connect to use a particular interface or IP protocol version.)hookupDestination host*hookupDestination TCP port+hookupOptional SOCKS parameters,hookupOptional TLS parameters-hookupSource address to bind.hookupMDefault values for TLS that use no client certificates, use system CA root, "HIGH", cipher suite, and which validate hostnames.rhookupPOpen a socket using the given parameters either directly or via a SOCKS server.shookuppWhen no bind address is specified return the full list of destination addresses with no bind address specified.When bind addresses are specified return a subset of the destination list matched up with the first address from the bind list that has the correct address family.thookupDAlternate list of addresses between IPv6 and other (IPv4) addresses.uhookupDCreate a socket and connect to the service identified by the given v! and return the connected socket.whookup A version of x that doesn't bother binding on the wildcard address. The effect of binding on a wildcard address in this library is to pick an address family. Because of the matching done earlier this is unnecessary for client connections and causes a local port to be unnecessarily fixed early.yhookupOpen a z using the parameters from an v/hookupJOpen network connection to TCP service specified by the given parameters.-The resulting connection MUST be closed with 1 to avoid leaking resources.Throws {, , |, 0hookup Create a new  using an already connected socket. This will attempt to start TLS if configured but will ignore any SOCKS server settings as it is assumed that the socket is already actively connected to the intended service.Throws |1hookupClose network connection.2hookupReceive the next chunk from the stream. This operation will first return the buffer if it contains a non-empty chunk. Otherwise it will request up to the requested number of bytes from the stream.Throws: {, }, |3hookup2Receive a line from the network connection. Both "\r\n" and "\n" are recognized. Returning ~< means that the peer has closed its half of the connection. Unterminated lines will raise a x exception. This can happen if the peer transmits some data and closes its end without transmitting a line terminator.Throws: }, |, , {4hookupPush a T onto the buffer so that it will be the first bytes to be read on the next receive operation. This could perhaps be useful for putting the unused portion of a 2" back into the buffer for future 3 or 2 operations.hookupRemove the trailing '\\r' if one is found.5hookupSend bytes on the network connection. This ensures the whole chunk is transmitted, which might take multiple underlying sends.Throws: {, |hookupInitiate a TLS session on the given socket destined for the given hostname. When successful an active TLS connection is returned with certificate verification successful when requested. This function requires that the TLSParams component of ' is set.6hookup#Get peer certificate if one exists.7hookup#Get peer certificate if one exists.>hookup" implemented for prettier messages hookupdestination hookupdestination port hookupsource hookupconnected socket hookupcandidate AddrInfos hookupconnected socket hookuppotential errors remaining hookuperrors gathered so far hookupparameters hookupsocket creation action hookupopen network handle /hookupparameters hookupopen connection 0hookupparameters hookupconnected socket hookupopen connection 1hookupopen connection 2hookupopen connection hookupmaximum underlying recv size hookupnext chunk from stream 3hookupopen connection hookupmaximum line length hookupnext line or end-of-stream 4hookupconnection hookupnew head of buffer 5hookupopen connection hookupchunk hookupconnection params hookuphostname hookupsocket creation action hookup$(client certificate, connected TLS) hookup insecure >  !"#$%&'()*+,-./0123456789:;<=G/012354'()*+,-#$%& !".  7689:;<=       !"#$%&&'())*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVTWXYZ[F\]G^_H`IOabcdefghijklmnopqrstuvwxyzw{|}~!hookup-0.4-FokMMvahUGV3sYu6wPRwTqHookupHookup.OpenSSL Hookup.Socks5*HsOpenSSL-0.11.4.18-4DL5j0QWGrLIL8The3Nbg0 OpenSSL.PEMPwTTY PwCallbackPwBSPwStrPwNonePemPasswordSupply CommandReplyAddrNotSupportedCmdNotSupported TTLExpiredConnectionRefusedHostUnreachableNetUnreachable NotAllowedGeneralFailure Succeeded ConnectionConnectionFailureHostnameResolutionFailure LineTooLong LineTruncated SocksErrorSocksAuthenticationErrorSocksProtocolErrorSocksBadDomainName TlsParamstpClientCertificatetpClientPrivateKeytpClientPrivateKeyPasswordtpServerCertificate tpCipherSuite tpInsecure SocksParamsspHostspPortConnectionParamscpHostcpPortcpSockscpTlscpBinddefaultTlsParamsconnectconnectWithSocketcloserecvrecvLineputBufsendgetPeerCertificategetClientCertificategetPeerCertFingerprintSha1getPeerCertFingerprintSha256getPeerCertFingerprintSha512getPeerPubkeyFingerprintSha1getPeerPubkeyFingerprintSha256getPeerPubkeyFingerprintSha512$fExceptionConnectionFailure$fShowConnectionFailureinstallVerificationx509VerifyParamSet1Hostx509VerifyParamSetHostflags sslGet0Param getPubKeyDerResponseRequest ServerHello ClientHello cHelloMethodsHostIPv4IPv6 DomainNameAddressHostTagCommand AuthMethod runBuilderbytestring-0.10.8.2 Data.ByteString.Builder.InternalBuilderData.ByteString.Internal ByteString buildListOf parseListOf parseWord16BErspReply rspAddress reqCommand reqAddress sHelloMethodConnectBind UdpAssociateAuthNoAuthenticationRequired AuthGssApiAuthUsernamePasswordAuthNoAcceptableMethodsbuildClientHelloparseClientHellobuildServerHelloparseServerHello buildRequest parseRequest buildResponse parseResponseghc-prim GHC.TypesTrue openSocketmatchBindAddrsinterleaveAddressFamiliesconnectToAddrInfo&network-3.1.1.1-Izwsyk64OoDBVuRysfRa9DNetwork.Socket.InfoAddrInfobind'Network.Socket.SockAddrbindsocket' NetworkHandlebaseGHC.IO.ExceptionIOErrorOpenSSL.Session ProtocolErrorConnectionAbruptlyTerminated GHC.MaybeNothingcleanEndstartTlsGHC.Exception.TypedisplayException openSocket'attemptgatheropenNetworkHandleverificationMode