// Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package proxy

import (
	
	

	
)

// SOCKS5 returns a Dialer that makes SOCKSv5 connections to the given
// address with an optional username and password.
// See RFC 1928 and RFC 1929.
func (,  string,  *Auth,  Dialer) (Dialer, error) {
	 := socks.NewDialer(, )
	if  != nil {
		if ,  := .(ContextDialer);  {
			.ProxyDial = func( context.Context,  string,  string) (net.Conn, error) {
				return .DialContext(, , )
			}
		} else {
			.ProxyDial = func( context.Context,  string,  string) (net.Conn, error) {
				return dialContext(, , , )
			}
		}
	}
	if  != nil {
		 := socks.UsernamePassword{
			Username: .User,
			Password: .Password,
		}
		.AuthMethods = []socks.AuthMethod{
			socks.AuthMethodNotRequired,
			socks.AuthMethodUsernamePassword,
		}
		.Authenticate = .Authenticate
	}
	return , nil
}