diff --git a/Lib/easy_install.py b/Lib/easy_install.py
index b8b8412..d87e984 100644
--- a/Lib/easy_install.py
+++ b/Lib/easy_install.py
@@ -3,4 +3,3 @@
 if __name__ == '__main__':
     from setuptools.command.easy_install import main
     main()
-
diff --git a/Lib/pkg_resources.py b/Lib/pkg_resources.py
index 9db11d8..db6cc90 100644
--- a/Lib/pkg_resources.py
+++ b/Lib/pkg_resources.py
@@ -58,7 +58,7 @@
     # Exceptions
     'ResolutionError','VersionConflict','DistributionNotFound','UnknownExtra',
     'ExtractionError',
-    
+
     # Parsing functions and string utilities
     'parse_requirements', 'parse_version', 'safe_name', 'safe_version',
     'get_platform', 'compatible_platforms', 'yield_lines', 'split_sections',
@@ -823,7 +823,7 @@
 
         old_exc = sys.exc_info()[1]
         cache_path = self.extraction_path or get_default_cache()
-        
+
         err = ExtractionError("""Can't extract file(s) to egg cache
 
 The following error occurred while trying to extract file(s) to the Python egg
@@ -878,7 +878,7 @@
             ensure_directory(target_path)
         except:
             self.extraction_error()
-           
+
         self.cached_files[target_path] = 1
         return target_path
 
@@ -1264,11 +1264,11 @@
 
             try:
                 rename(tmpnam, real_path)
-                
-            except os.error:               
+
+            except os.error:
                 if os.path.isfile(real_path):
                     stat = os.stat(real_path)
-                    
+
                     if stat.st_size==size and stat.st_mtime==timestamp:
                         # size and stamp match, somebody did it just ahead of
                         # us, so we're done
@@ -2375,4 +2375,3 @@
 # calling ``require()``) will get activated as well.
 add_activation_listener(lambda dist: dist.activate())
 working_set.entries=[]; map(working_set.add_entry,sys.path) # match order
-
diff --git a/Lib/pkgutil.py b/Lib/pkgutil.py
index 24de5d1..7316892 100644
--- a/Lib/pkgutil.py
+++ b/Lib/pkgutil.py
@@ -44,7 +44,7 @@
                 class cls(cls,object): pass
                 mro = cls.__mro__[1:]
             except TypeError:
-                mro = object,   # must be an ExtensionClass or some such  :(               
+                mro = object,   # must be an ExtensionClass or some such  :(
         for t in mro:
             if t in registry:
                 return registry[t](*args,**kw)
@@ -64,7 +64,7 @@
     wrapper.__dict__ = func.__dict__
     wrapper.__doc__ = func.__doc__
     wrapper.register = register
-    return wrapper        
+    return wrapper
 
 
 def walk_packages(path=None, prefix='', onerror=None):
@@ -160,7 +160,7 @@
             modname = inspect.getmodulename(fn)
             if modname=='__init__' or modname in yielded:
                 continue
-            
+
             path = os.path.join(self.path, fn)
             ispkg = False
 
@@ -276,7 +276,7 @@
 try:
     import zipimport
     from zipimport import zipimporter
-    
+
     def iter_zipimport_modules(importer, prefix=''):
         dirlist = zipimport._zip_directory_cache[importer.archive].keys()
         dirlist.sort()
diff --git a/Lib/setuptools/__init__.py b/Lib/setuptools/__init__.py
index 57e364e..3921ce2 100644
--- a/Lib/setuptools/__init__.py
+++ b/Lib/setuptools/__init__.py
@@ -40,7 +40,7 @@
     return out
 
 setup = distutils.core.setup
-    
+
 _Command = _get_unpatched(_Command)
 
 class Command(_Command):
@@ -53,7 +53,7 @@
         _Command.__init__(self,dist)
         for k,v in kw.items():
             setattr(self,k,v)
-            
+
     def reinitialize_command(self, command, reinit_subcommands=0, **kw):
         cmd = _Command.reinitialize_command(self, command, reinit_subcommands)
         for k,v in kw.items():
@@ -62,21 +62,3 @@
 
 import distutils.core
 distutils.core.Command = Command    # we can't patch distutils.cmd, alas
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Lib/setuptools/archive_util.py b/Lib/setuptools/archive_util.py
index 511f05a..dd9c684 100755
--- a/Lib/setuptools/archive_util.py
+++ b/Lib/setuptools/archive_util.py
@@ -14,7 +14,7 @@
     """Couldn't recognize the archive type"""
 
 def default_filter(src,dst):
-    """The default progress/filter callback; returns True for all files"""   
+    """The default progress/filter callback; returns True for all files"""
     return dst
 
 
@@ -184,7 +184,7 @@
                 name = member.name
                 # don't extract absolute paths or ones with .. in them
                 if not name.startswith('/') and '..' not in name:
-                    dst = os.path.join(extract_dir, *name.split('/'))                
+                    dst = os.path.join(extract_dir, *name.split('/'))
                     dst = progress_filter(name, dst)
                     if dst:
                         if dst.endswith(os.sep):
@@ -198,8 +198,3 @@
 
 
 extraction_drivers = unpack_directory, unpack_zipfile, unpack_tarfile
-
-
-
-
-
diff --git a/Lib/setuptools/command/__init__.py b/Lib/setuptools/command/__init__.py
index 03bb9dd..bff53e7 100644
--- a/Lib/setuptools/command/__init__.py
+++ b/Lib/setuptools/command/__init__.py
@@ -8,7 +8,7 @@
 if sys.version>='2.5':
     # In Python 2.5 and above, distutils includes its own upload command
     __all__.remove('upload')
-    
+
 
 from distutils.command.bdist import bdist
 
diff --git a/Lib/setuptools/command/alias.py b/Lib/setuptools/command/alias.py
index f5368b2..1df474a 100755
--- a/Lib/setuptools/command/alias.py
+++ b/Lib/setuptools/command/alias.py
@@ -11,17 +11,17 @@
         if c in arg: return repr(arg)
     if arg.split()<>[arg]:
         return repr(arg)
-    return arg        
+    return arg
 
 
 class alias(option_base):
     """Define a shortcut that invokes one or more commands"""
-    
+
     description = "define a shortcut to invoke one or more commands"
     command_consumes_arguments = True
 
     user_options = [
-        ('remove',   'r', 'remove (unset) the alias'), 
+        ('remove',   'r', 'remove (unset) the alias'),
     ] + option_base.user_options
 
     boolean_options = option_base.boolean_options + ['remove']
@@ -77,6 +77,3 @@
     else:
         source = '--filename=%r' % source
     return source+name+' '+command
-            
-
-
diff --git a/Lib/setuptools/command/bdist_egg.py b/Lib/setuptools/command/bdist_egg.py
index 74f2d42..617d88d 100644
--- a/Lib/setuptools/command/bdist_egg.py
+++ b/Lib/setuptools/command/bdist_egg.py
@@ -233,7 +233,7 @@
 
         if self.exclude_source_files:
             self.zap_pyfiles()
-        
+
         # Make the archive
         make_zipfile(self.egg_output, archive_root, verbose=self.verbose,
                           dry_run=self.dry_run)
@@ -262,7 +262,7 @@
 
     def make_init_files(self):
         """Create missing package __init__ files"""
-        init_files = []       
+        init_files = []
         for base,dirs,files in walk_egg(self.bdist_dir):
             if base==self.bdist_dir:
                 # don't put an __init__ in the root
@@ -276,7 +276,7 @@
                             filename = os.path.join(base,'__init__.py')
                             if not self.dry_run:
                                 f = open(filename,'w'); f.write(NS_PKG_STUB)
-                                f.close()    
+                                f.close()
                             init_files.append(filename)
                     break
             else:
@@ -329,7 +329,7 @@
 def walk_egg(egg_dir):
     """Walk an unpacked egg's contents, skipping the metadata directory"""
     walker = os.walk(egg_dir)
-    base,dirs,files = walker.next()       
+    base,dirs,files = walker.next()
     if 'EGG-INFO' in dirs:
         dirs.remove('EGG-INFO')
     yield base,dirs,files
@@ -447,5 +447,3 @@
         os.path.walk(base_dir, visit, None)
 
     return zip_filename
-
-
diff --git a/Lib/setuptools/command/bdist_rpm.py b/Lib/setuptools/command/bdist_rpm.py
index 1a0b048..00e07ac 100755
--- a/Lib/setuptools/command/bdist_rpm.py
+++ b/Lib/setuptools/command/bdist_rpm.py
@@ -35,34 +35,3 @@
         ]
         spec.insert(spec.index(line24)+1, "%define unmangled_version "+version)
         return spec
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Lib/setuptools/command/build_ext.py b/Lib/setuptools/command/build_ext.py
index a4b9047..f8551fb 100644
--- a/Lib/setuptools/command/build_ext.py
+++ b/Lib/setuptools/command/build_ext.py
@@ -283,5 +283,3 @@
         self.create_static_lib(
             objects, basename, output_dir, debug, target_lang
         )
-
-
diff --git a/Lib/setuptools/command/build_py.py b/Lib/setuptools/command/build_py.py
index d820710..77a9b23 100644
--- a/Lib/setuptools/command/build_py.py
+++ b/Lib/setuptools/command/build_py.py
@@ -93,7 +93,7 @@
         ei_cmd = self.get_finalized_command('egg_info')
         for path in ei_cmd.filelist.files:
             if path.endswith('.py'):
-                continue            
+                continue
             d,f = os.path.split(assert_relative(path))
             prev = None
             while d and d!=prev and d not in src_dirs:
@@ -142,7 +142,7 @@
 
         f = open(init_py,'rU')
         if 'declare_namespace' not in f.read():
-            from distutils.errors import DistutilsError       
+            from distutils.errors import DistutilsError
             raise DistutilsError(
               "Namespace package problem: %s is a namespace package, but its\n"
               "__init__.py does not call declare_namespace()! Please fix it.\n"
@@ -167,7 +167,7 @@
         globs = (self.exclude_package_data.get('', [])
                  + self.exclude_package_data.get(package, []))
         bad = []
-        for pattern in globs:           
+        for pattern in globs:
             bad.extend(
                 fnmatch.filter(
                     files, os.path.join(src_dir, convert_path(pattern))
@@ -190,16 +190,3 @@
 setup.py directory, *never* absolute paths.
 """ % path
     )
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Lib/setuptools/command/develop.py b/Lib/setuptools/command/develop.py
index f38506b..7ab5b23 100755
--- a/Lib/setuptools/command/develop.py
+++ b/Lib/setuptools/command/develop.py
@@ -46,7 +46,7 @@
             "Please rename %r to %r before using 'develop'"
             % (ei.egg_info, ei.broken_egg_info)
             )
-        self.args = [ei.egg_name]       
+        self.args = [ei.egg_name]
         easy_install.finalize_options(self)
         self.egg_link = os.path.join(self.install_dir, ei.egg_name+'.egg-link')
         self.egg_base = ei.egg_base
@@ -104,7 +104,7 @@
         # create wrapper scripts in the script dir, pointing to dist.scripts
 
         # new-style...
-        self.install_wrapper_scripts(dist)  
+        self.install_wrapper_scripts(dist)
 
         # ...and old-style
         for script_name in self.distribution.scripts or []:
@@ -114,10 +114,3 @@
             script_text = f.read()
             f.close()
             self.install_script(dist, script_name, script_text, script_path)
-
-
-
-
-
-
-
diff --git a/Lib/setuptools/command/easy_install.py b/Lib/setuptools/command/easy_install.py
index adb99b6..3ddcec4 100755
--- a/Lib/setuptools/command/easy_install.py
+++ b/Lib/setuptools/command/easy_install.py
@@ -1357,7 +1357,7 @@
         """Write changed .pth file back to disk"""
         if not self.dirty:
             return
-            
+
         data = '\n'.join(map(self.make_relative,self.paths))
         if data:
             log.debug("Saving %s", self.filename)
@@ -1434,7 +1434,7 @@
                 del zdc[p]
                 return
 
-    
+
 def get_script_args(dist, executable=sys_executable):
     """Yield write_script() argument tuples for a distribution's entrypoints"""
     spec = str(dist.as_requirement())
@@ -1553,8 +1553,3 @@
             distclass=DistributionWithoutHelpCommands, **kw
         )
     )
-
-
-
-
-
diff --git a/Lib/setuptools/command/egg_info.py b/Lib/setuptools/command/egg_info.py
index d9fcd3f..b68fb39 100755
--- a/Lib/setuptools/command/egg_info.py
+++ b/Lib/setuptools/command/egg_info.py
@@ -363,7 +363,3 @@
             if match:
                 return int(match.group(1))
     return 0
-
-
-
-
diff --git a/Lib/setuptools/command/install.py b/Lib/setuptools/command/install.py
index 7221b17..bfb9af5 100644
--- a/Lib/setuptools/command/install.py
+++ b/Lib/setuptools/command/install.py
@@ -60,7 +60,7 @@
         caller = sys._getframe(2)
         caller_module = caller.f_globals.get('__name__','')
         caller_name = caller.f_code.co_name
-        
+
         if caller_module != 'distutils.dist' or caller_name!='run_commands':
             # We weren't called from the command line or setup(), so we
             # should run in backward-compatibility mode to support bdist_*
@@ -68,7 +68,7 @@
             _install.run(self)
         else:
             self.do_egg_install()
-            
+
 
 
 
@@ -99,25 +99,3 @@
         cmd.args = args
         cmd.run()
         setuptools.bootstrap_install_from = None
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Lib/setuptools/command/install_egg_info.py b/Lib/setuptools/command/install_egg_info.py
index 4c79f41..193e91a 100755
--- a/Lib/setuptools/command/install_egg_info.py
+++ b/Lib/setuptools/command/install_egg_info.py
@@ -22,7 +22,7 @@
             None, None, ei_cmd.egg_name, ei_cmd.egg_version
         ).egg_name()+'.egg-info'
         self.source = ei_cmd.egg_info
-        self.target = os.path.join(self.install_dir, basename) 
+        self.target = os.path.join(self.install_dir, basename)
         self.outputs = [self.target]
 
     def run(self):
@@ -43,7 +43,7 @@
         return self.outputs
 
     def copytree(self):
-        # Copy the .egg-info tree to site-packages       
+        # Copy the .egg-info tree to site-packages
         def skimmer(src,dst):
             # filter out source-control directories; note that 'src' is always
             # a '/'-separated path, regardless of platform.  'dst' is a
@@ -78,5 +78,4 @@
                     "(p not in mp) and mp.append(p)\n"
                     % locals()
                 )
-            f.close()            
-
+            f.close()
diff --git a/Lib/setuptools/command/install_lib.py b/Lib/setuptools/command/install_lib.py
index 82afa14..96c8dfe 100644
--- a/Lib/setuptools/command/install_lib.py
+++ b/Lib/setuptools/command/install_lib.py
@@ -74,9 +74,3 @@
         if exclude:
             return [f for f in outputs if f not in exclude]
         return outputs
-
-
-
-
-
-
diff --git a/Lib/setuptools/command/install_scripts.py b/Lib/setuptools/command/install_scripts.py
index fc156dc..69558bf 100755
--- a/Lib/setuptools/command/install_scripts.py
+++ b/Lib/setuptools/command/install_scripts.py
@@ -11,7 +11,7 @@
     def initialize_options(self):
         _install_scripts.initialize_options(self)
         self.no_ep = False
-   
+
     def run(self):
         self.run_command("egg_info")
         if self.distribution.scripts:
@@ -20,9 +20,9 @@
             self.outfiles = []
         if self.no_ep:
             # don't install entry point scripts into .egg file!
-            return  
+            return
 
-        ei_cmd = self.get_finalized_command("egg_info")       
+        ei_cmd = self.get_finalized_command("egg_info")
         dist = Distribution(
             ei_cmd.egg_base, PathMetadata(ei_cmd.egg_base, ei_cmd.egg_info),
             ei_cmd.egg_name, ei_cmd.egg_version,
@@ -54,29 +54,3 @@
                 os.chmod(target,0755)
             except (AttributeError, os.error):
                 pass
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Lib/setuptools/command/rotate.py b/Lib/setuptools/command/rotate.py
index 11b6eae..8aab312 100755
--- a/Lib/setuptools/command/rotate.py
+++ b/Lib/setuptools/command/rotate.py
@@ -28,7 +28,7 @@
                 "(e.g. '.zip' or '.egg')"
             )
         if self.keep is None:
-            raise DistutilsOptionError("Must specify number of files to keep")           
+            raise DistutilsOptionError("Must specify number of files to keep")
         try:
             self.keep = int(self.keep)
         except ValueError:
@@ -55,28 +55,3 @@
                 log.info("Deleting %s", f)
                 if not self.dry_run:
                     os.unlink(f)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Lib/setuptools/command/saveopts.py b/Lib/setuptools/command/saveopts.py
index 1180a44..9c58d72 100755
--- a/Lib/setuptools/command/saveopts.py
+++ b/Lib/setuptools/command/saveopts.py
@@ -22,4 +22,3 @@
                     settings.setdefault(cmd,{})[opt] = val
 
         edit_config(self.filename, settings, self.dry_run)
-
diff --git a/Lib/setuptools/command/sdist.py b/Lib/setuptools/command/sdist.py
index 6026a7c..829cd3c 100755
--- a/Lib/setuptools/command/sdist.py
+++ b/Lib/setuptools/command/sdist.py
@@ -144,7 +144,7 @@
         self.filelist.append(os.path.join(ei_cmd.egg_info,'SOURCES.txt'))
 
         self.check_metadata()
-        self.make_distribution()        
+        self.make_distribution()
 
         dist_files = getattr(self.distribution,'dist_files',[])
         for file in self.archive_files:
@@ -161,4 +161,3 @@
             # dying and thus masking the real error
             sys.exc_info()[2].tb_next.tb_frame.f_locals['template'].close()
             raise
-
diff --git a/Lib/setuptools/command/setopt.py b/Lib/setuptools/command/setopt.py
index dbf3a94..e0c1058 100755
--- a/Lib/setuptools/command/setopt.py
+++ b/Lib/setuptools/command/setopt.py
@@ -82,7 +82,7 @@
 
 class option_base(Command):
     """Abstract base class for commands that mess with config files"""
-    
+
     user_options = [
         ('global-config', 'g',
                  "save options to the site-wide distutils.cfg file"),
@@ -94,7 +94,7 @@
 
     boolean_options = [
         'global-config', 'user-config',
-    ]    
+    ]
 
     def initialize_options(self):
         self.global_config = None
@@ -116,7 +116,7 @@
                 "Must specify only one configuration file option",
                 filenames
             )
-        self.filename, = filenames    
+        self.filename, = filenames
 
 
 
@@ -130,7 +130,7 @@
         ('command=', 'c', 'command to set an option for'),
         ('option=',  'o',  'option to set'),
         ('set-value=',   's', 'value of the option'),
-        ('remove',   'r', 'remove (unset) the value'), 
+        ('remove',   'r', 'remove (unset) the value'),
     ] + option_base.user_options
 
     boolean_options = option_base.boolean_options + ['remove']
@@ -156,9 +156,3 @@
             },
             self.dry_run
         )
-
-
-
-
-
-
diff --git a/Lib/setuptools/command/test.py b/Lib/setuptools/command/test.py
index 83589fa..01fca35 100644
--- a/Lib/setuptools/command/test.py
+++ b/Lib/setuptools/command/test.py
@@ -88,7 +88,7 @@
         self.reinitialize_command('build_ext', inplace=1)
         self.run_command('build_ext')
 
-        if self.distribution.tests_require:            
+        if self.distribution.tests_require:
             self.distribution.fetch_build_eggs(self.distribution.tests_require)
 
         if self.test_suite:
@@ -117,7 +117,3 @@
             None, None, [unittest.__file__]+self.test_args,
             testLoader = loader_class()
         )
-
-
-
-
diff --git a/Lib/setuptools/depends.py b/Lib/setuptools/depends.py
index 20e5cec..68d8194 100644
--- a/Lib/setuptools/depends.py
+++ b/Lib/setuptools/depends.py
@@ -237,10 +237,3 @@
             return const
         else:
             const = default
-
-
-
-
-
-
-
diff --git a/Lib/setuptools/dist.py b/Lib/setuptools/dist.py
index 8cdcc26..f0417c1 100644
--- a/Lib/setuptools/dist.py
+++ b/Lib/setuptools/dist.py
@@ -796,25 +796,3 @@
                     " doesn't contain any packages or modules under %s"
                     % (self.description, item, item)
                 )
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Lib/setuptools/extension.py b/Lib/setuptools/extension.py
index 2bef84e..cfcf55b 100644
--- a/Lib/setuptools/extension.py
+++ b/Lib/setuptools/extension.py
@@ -14,7 +14,7 @@
     """Extension that uses '.c' files in place of '.pyx' files"""
 
     if not have_pyrex:
-        # convert .pyx extensions to .c 
+        # convert .pyx extensions to .c
         def __init__(self,*args,**kw):
             _Extension.__init__(self,*args,**kw)
             sources = []
@@ -33,4 +33,3 @@
 distutils.extension.Extension = Extension
 if 'distutils.command.build_ext' in sys.modules:
     sys.modules['distutils.command.build_ext'].Extension = Extension
-
diff --git a/Lib/setuptools/package_index.py b/Lib/setuptools/package_index.py
index 3d66a7c..107e222 100755
--- a/Lib/setuptools/package_index.py
+++ b/Lib/setuptools/package_index.py
@@ -260,7 +260,7 @@
 
     def find_packages(self, requirement):
         self.scan_url(self.index_url + requirement.unsafe_name+'/')
-        
+
         if not self.package_pages.get(requirement.key):
             # Fall back to safe version of the name
             self.scan_url(self.index_url + requirement.project_name+'/')
@@ -489,7 +489,7 @@
                 "Can't process plain .py files without an '#egg=name-version'"
                 " suffix to enable automatic setup script generation."
             )
-        
+
     dl_blocksize = 8192
     def _download_to(self, url, filename):
         self.url_ok(url,True)   # raises error if not allowed
@@ -672,26 +672,3 @@
             # DNS-bl0ck1n9 f1r3w4llz sUx0rs!
             _sf_mirrors[:] = ['dl.sourceforge.net']
     return random.choice(_sf_mirrors)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Lib/setuptools/sandbox.py b/Lib/setuptools/sandbox.py
index dbc24ed..606944b 100755
--- a/Lib/setuptools/sandbox.py
+++ b/Lib/setuptools/sandbox.py
@@ -201,5 +201,3 @@
 support alternate installation locations even if you run its setup
 script by hand.  Please inform the package's author and the EasyInstall
 maintainers to find out if a fix or workaround is available.""" % self.args
-
-
diff --git a/Lib/setuptools/site-patch.py b/Lib/setuptools/site-patch.py
index 80e084b..b1b27b9 100755
--- a/Lib/setuptools/site-patch.py
+++ b/Lib/setuptools/site-patch.py
@@ -1,5 +1,5 @@
 def __boot():
-    import sys, imp, os, os.path   
+    import sys, imp, os, os.path
     PYTHONPATH = os.environ.get('PYTHONPATH')
     if PYTHONPATH is None or (sys.platform=='win32' and not PYTHONPATH):
         PYTHONPATH = []
@@ -48,7 +48,7 @@
         addsitedir(item)
 
     sys.__egginsert += oldpos           # restore effective old position
-    
+
     d,nd = makepath(stdpath[0])
     insert_at = None
     new_path = []
@@ -66,17 +66,9 @@
             # new path after the insert point, back-insert it
             new_path.insert(insert_at, item)
             insert_at += 1
-            
+
     sys.path[:] = new_path
 
-if __name__=='site':    
+if __name__=='site':
     __boot()
     del __boot
-    
-
-
-
-
-
-
-
diff --git a/Lib/setuptools/tests/__init__.py b/Lib/setuptools/tests/__init__.py
index 9705bb5..8a767dc 100644
--- a/Lib/setuptools/tests/__init__.py
+++ b/Lib/setuptools/tests/__init__.py
@@ -362,8 +362,3 @@
         ts5 = makeSetup().get_command_obj('test')
         ts5.ensure_finalized()
         self.assertEqual(ts5.test_suite, None)
-
-
-
-
-
diff --git a/Lib/setuptools/tests/test_resources.py b/Lib/setuptools/tests/test_resources.py
index b4dbfdb..f32c72e 100644
--- a/Lib/setuptools/tests/test_resources.py
+++ b/Lib/setuptools/tests/test_resources.py
@@ -143,7 +143,7 @@
         self.assertRaises(VersionConflict, ws.resolve,
             parse_requirements("Foo==0.9"), ad)
         ws = WorkingSet([]) # reset
-        
+
         # Request an extra that causes an unresolved dependency for "Baz"
         self.assertRaises(
             DistributionNotFound, ws.resolve,parse_requirements("Foo[bar]"), ad
@@ -161,7 +161,7 @@
         self.assertRaises( VersionConflict,
             ws.resolve, parse_requirements("Foo==1.2\nFoo!=1.2"), ad
         )
-        
+
     def testDistroDependsOptions(self):
         d = self.distRequires("""
             Twisted>=1.5
@@ -481,12 +481,3 @@
         for p,v1 in enumerate(torture):
             for v2 in torture[p+1:]:
                 c(v2,v1)
-
-
-
-
-
-
-
-
-
