Clean up tools: remove "world" and "framer", move single SSL script to scripts/.
diff --git a/Tools/framer/README.txt b/Tools/framer/README.txt
deleted file mode 100644
index 4a93a4d..0000000
--- a/Tools/framer/README.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-framer is a tool to generate boilerplate code for C extension types.
-
-The boilerplate is generated from a specification object written in
-Python.  The specification uses the class statement to describe the
-extension module and any extension types it contains.  From the
-specification, framer can generate all the boilerplate C code,
-including function definitions, argument handling code, and type
-objects.
diff --git a/Tools/framer/TODO.txt b/Tools/framer/TODO.txt
deleted file mode 100644
index 8586c8e..0000000
--- a/Tools/framer/TODO.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-Add spec for getsets.
-Generate a distutils setup script.
-Handle operator overloading.
-Generate traverse and clear methods for GC.
-Handle mapping, sequence, buffer protocols.
-Finish the todo list.
diff --git a/Tools/framer/example.py b/Tools/framer/example.py
deleted file mode 100644
index 8a267e9..0000000
--- a/Tools/framer/example.py
+++ /dev/null
@@ -1,126 +0,0 @@
-"""Generate the skeleton for cStringIO as an example of framer."""
-
-from framer.bases import Module, Type
-from framer.member import member
-
-class cStringIO(Module):
-    """A simple fast partial StringIO replacement.
-
-    This module provides a simple useful replacement for the StringIO
-    module that is written in C.  It does not provide the full
-    generality of StringIO, but it provides enough for most
-    applications and is especially useful in conjunction with the
-    pickle module.
-
-    Usage:
-
-    from io import StringIO
-
-    an_output_stream = StringIO()
-    an_output_stream.write(some_stuff)
-    ...
-    value = an_output_stream.getvalue()
-
-    an_input_stream = StringIO(a_string)
-    spam = an_input_stream.readline()
-    spam = an_input_stream.read(5)
-    an_input_stream.seek(0)             # OK, start over
-    spam = an_input_stream.read()       # and read it all
-    """
-
-    __file__ = "cStringIO.c"
-
-    def StringIO(o):
-        """Return a StringIO-like stream for reading or writing"""
-    StringIO.pyarg = "|O"
-
-    class InputType(Type):
-        "Simple type for treating strings as input file streams"
-
-        abbrev = "input"
-
-        struct = """\
-        typedef struct {
-                PyObject_HEAD
-                char *buf;
-                int pos;
-                int size;
-                PyObject *pbuf;
-        } InputObject;
-        """
-
-        def flush(self):
-            """Does nothing"""
-
-        def getvalue(self):
-            """Get the string value.
-
-            If use_pos is specified and is a true value, then the
-            string returned will include only the text up to the
-            current file position.
-            """
-
-        def isatty(self):
-            """Always returns False"""
-
-        def read(self, s):
-            """Return s characters or the rest of the string."""
-        read.pyarg = "|i"
-
-        def readline(self):
-            """Read one line."""
-
-        def readlines(self, hint):
-            """Read all lines."""
-        readlines.pyarg = "|i"
-
-        def reset(self):
-            """Reset the file position to the beginning."""
-
-        def tell(self):
-            """Get the current position."""
-
-        def truncate(self, pos):
-            """Truncate the file at the current position."""
-        truncate.pyarg = "|i"
-
-        def seek(self, position, mode=0):
-            """Set the current position.
-
-            The optional mode argument can be 0 for absolute, 1 for relative,
-            and 2 for relative to EOF.  The default is absolute.
-            """
-        seek.pyarg = "i|i"
-
-        def close(self):
-            pass
-
-    class OutputType(InputType):
-        "Simple type for output strings."
-
-        abbrev = "output"
-
-        struct = """\
-        typedef struct {
-                PyObject_HEAD
-                char *buf;
-                int pos;
-                int size;
-                int softspace;
-        } OutputObject;
-        """
-
-        softspace = member()
-
-        def close(self):
-            """Explicitly release resources."""
-
-        def write(self, s):
-            """Write a string to the file."""
-            # XXX Hack: writing None resets the buffer
-
-        def writelines(self, lines):
-            """Write each string in lines."""
-
-
-cStringIO.gen()
diff --git a/Tools/framer/framer/__init__.py b/Tools/framer/framer/__init__.py
deleted file mode 100644
index d8f9058..0000000
--- a/Tools/framer/framer/__init__.py
+++ /dev/null
@@ -1,6 +0,0 @@
-"""A tool to generate basic framework for C extension types.
-
-The basic ideas is the same as modulator, but the code generates code
-using many of the new features introduced in Python 2.2.  It also
-takes a more declarative approach to generating code.
-"""
diff --git a/Tools/framer/framer/bases.py b/Tools/framer/framer/bases.py
deleted file mode 100644
index d19b5c9..0000000
--- a/Tools/framer/framer/bases.py
+++ /dev/null
@@ -1,215 +0,0 @@
-"""Provides the Module and Type base classes that user code inherits from."""
-
-__all__ = ["Module", "Type", "member"]
-
-from framer import struct, template
-from framer.function import Function, Method
-from framer.member import member
-from framer.slots import *
-from framer.util import cstring, unindent
-
-from types import FunctionType
-
-# The Module and Type classes are implemented using metaclasses,
-# because most of the methods are class methods.  It is easier to use
-# metaclasses than the cumbersome classmethod() builtin.  They have
-# class methods because they are exposed to user code as base classes.
-
-class BaseMetaclass(type):
-    """Shared infrastructure for generating modules and types."""
-
-    # just methoddef so far
-
-    def dump_methoddef(self, f, functions, vars):
-        def p(templ, vars=vars): # helper function to generate output
-            print(templ % vars, file=f)
-
-        if not functions:
-            return
-        p(template.methoddef_start)
-        for name, func in sorted(functions.items()):
-            if func.__doc__:
-                p(template.methoddef_def_doc, func.vars)
-            else:
-                p(template.methoddef_def, func.vars)
-        p(template.methoddef_end)
-
-class ModuleMetaclass(BaseMetaclass):
-    """Provides methods for Module class."""
-
-    def gen(self):
-        self.analyze()
-        self.initvars()
-        f = open(self.__filename, "w")
-        self.dump(f)
-        f.close()
-
-    def analyze(self):
-        self.name = getattr(self, "abbrev", self.__name__)
-        self.__functions = {}
-        self.__types = {}
-        self.__members = False
-
-        for name, obj in self.__dict__.items():
-            if isinstance(obj, FunctionType):
-                self.__functions[name] = Function(obj, self)
-            elif isinstance(obj, TypeMetaclass):
-                obj._TypeMetaclass__module = self.name
-                obj.analyze()
-                self.__types[name] = obj
-                if obj.has_members():
-                    self.__members = True
-
-    def initvars(self):
-        v = self.__vars = {}
-        filename = getattr(self, "__file__", None)
-        if filename is None:
-            filename = self.__name__ + "module.c"
-        self.__filename = v["FileName"] = filename
-        name = v["ModuleName"] = self.__name__
-        v["MethodDefName"] = "%s_methods" % name
-        v["ModuleDocstring"] = cstring(unindent(self.__doc__))
-
-    def dump(self, f):
-        def p(templ, vars=self.__vars): # helper function to generate output
-            print(templ % vars, file=f)
-
-        p(template.module_start)
-        if self.__members:
-            p(template.member_include)
-        print(file=f)
-
-        if self.__doc__:
-            p(template.module_doc)
-
-        for name, type in sorted(self.__types.items()):
-            type.dump(f)
-
-        for name, func  in sorted(self.__functions.items()):
-            func.dump(f)
-
-        self.dump_methoddef(f, self.__functions, self.__vars)
-
-        p(template.module_init_start)
-        for name, type in sorted(self.__types.items()):
-            type.dump_init(f)
-
-        p("}")
-
-class Module(metaclass=ModuleMetaclass):
-    pass
-
-class TypeMetaclass(BaseMetaclass):
-
-    def dump(self, f):
-        self.initvars()
-
-        # defined after initvars() so that __vars is defined
-        def p(templ, vars=self.__vars):
-            print(templ % vars, file=f)
-
-        if self.struct is not None:
-            print(unindent(self.struct, False), file=f)
-
-        if self.__doc__:
-            p(template.docstring)
-
-        for name, func in sorted(self.__methods.items()):
-            func.dump(f)
-
-        self.dump_methoddef(f, self.__methods, self.__vars)
-        self.dump_memberdef(f)
-        self.dump_slots(f)
-
-    def has_members(self):
-        if self.__members:
-            return True
-        else:
-            return False
-
-    def analyze(self):
-        # called by ModuleMetaclass analyze()
-        self.name = getattr(self, "abbrev", self.__name__)
-        src = getattr(self, "struct", None)
-        if src is not None:
-            self.__struct = struct.parse(src)
-        else:
-            self.__struct = None
-        self.__methods = {}
-        self.__members = {}
-        for cls in self.__mro__:
-            for k, v in cls.__dict__.items():
-                if isinstance(v, FunctionType):
-                    self.__methods[k] = Method(v, self)
-                if isinstance(v, member):
-                    self.__members[k] = v
-                    assert self.__struct is not None
-                    v.register(k, self.__struct)
-        self.analyze_slots()
-
-    def analyze_slots(self):
-        self.__slots = {}
-        for s in Slots:
-            if s.special is not None:
-                meth = self.__methods.get(s.special)
-                if meth is not None:
-                    self.__slots[s] = meth
-        self.__slots[TP_NAME] = '"%s.%s"' % (self.__module, self.__name__)
-        if self.__doc__:
-            self.__slots[TP_DOC] = "%s_doc" % self.name
-        if self.__struct is not None:
-            self.__slots[TP_BASICSIZE] = "sizeof(%s)" % self.__struct.name
-            self.__slots[TP_DEALLOC] = "%s_dealloc" % self.name
-        if self.__methods:
-            self.__slots[TP_METHODS] = "%s_methods" % self.name
-        if self.__members:
-            self.__slots[TP_MEMBERS] = "%s_members" % self.name
-
-    def initvars(self):
-        v = self.__vars = {}
-        v["TypeName"] = self.__name__
-        v["CTypeName"] = "Py%s_Type" % self.__name__
-        v["MethodDefName"] = self.__slots[TP_METHODS]
-        if self.__doc__:
-            v["DocstringVar"] = self.__slots[TP_DOC]
-            v["Docstring"] = cstring(unindent(self.__doc__))
-        if self.__struct is not None:
-            v["StructName"] = self.__struct.name
-        if self.__members:
-            v["MemberDefName"] = self.__slots[TP_MEMBERS]
-
-    def dump_memberdef(self, f):
-        def p(templ, vars=self.__vars):
-            print(templ % vars, file=f)
-
-        if not self.__members:
-            return
-        p(template.memberdef_start)
-        for name, slot in sorted(self.__members.items()):
-            slot.dump(f)
-        p(template.memberdef_end)
-
-    def dump_slots(self, f):
-        def p(templ, vars=self.__vars):
-            print(templ % vars, file=f)
-
-        if self.struct:
-            p(template.dealloc_func, {"name" : self.__slots[TP_DEALLOC]})
-
-        p(template.type_struct_start)
-        for s in Slots[:-5]: # XXX
-            val = self.__slots.get(s, s.default)
-            ntabs = 4 - (4 + len(val)) // 8
-            line = "        %s,%s/* %s */" % (val, "\t" * ntabs, s.name)
-            print(line, file=f)
-        p(template.type_struct_end)
-
-    def dump_init(self, f):
-        def p(templ):
-            print(templ % self.__vars, file=f)
-
-        p(template.type_init_type)
-        p(template.module_add_type)
-
-class Type(metaclass=TypeMetaclass):
-    pass
diff --git a/Tools/framer/framer/function.py b/Tools/framer/framer/function.py
deleted file mode 100644
index f95ea20..0000000
--- a/Tools/framer/framer/function.py
+++ /dev/null
@@ -1,173 +0,0 @@
-"""Functions."""
-
-from framer import template
-from framer.util import cstring, unindent
-
-METH_O = "METH_O"
-METH_NOARGS = "METH_NOARGS"
-METH_VARARGS = "METH_VARARGS"
-
-def parsefmt(fmt):
-    for c in fmt:
-        if c == '|':
-            continue
-        yield c
-
-class Argument:
-
-    def __init__(self, name):
-        self.name = name
-        self.ctype = "PyObject *"
-        self.default = None
-
-    def __str__(self):
-        return "%s%s" % (self.ctype, self.name)
-
-    def setfmt(self, code):
-        self.ctype = self._codes[code]
-        if self.ctype[-1] != "*":
-            self.ctype += " "
-
-    _codes = {"O": "PyObject *",
-              "i": "int",
-              }
-
-    def decl(self):
-        if self.default is None:
-            return str(self) + ";"
-        else:
-            return "%s = %s;" % (self, self.default)
-
-class _ArgumentList(object):
-
-    # these instance variables should be initialized by subclasses
-    ml_meth = None
-    fmt = None
-
-    def __init__(self, args):
-        self.args = list(map(Argument, args))
-
-    def __len__(self):
-        return len(self.args)
-
-    def __getitem__(self, i):
-        return self.args[i]
-
-    def dump_decls(self, f):
-        pass
-
-class NoArgs(_ArgumentList):
-
-    def __init__(self, args):
-        assert len(args) == 0
-        super(NoArgs, self).__init__(args)
-        self.ml_meth = METH_NOARGS
-
-    def c_args(self):
-        return "PyObject *self"
-
-class OneArg(_ArgumentList):
-
-    def __init__(self, args):
-        assert len(args) == 1
-        super(OneArg, self).__init__(args)
-        self.ml_meth = METH_O
-
-    def c_args(self):
-        return "PyObject *self, %s" % self.args[0]
-
-class VarArgs(_ArgumentList):
-
-    def __init__(self, args, fmt=None):
-        super(VarArgs, self).__init__(args)
-        self.ml_meth = METH_VARARGS
-        if fmt is not None:
-            self.fmt = fmt
-            i = 0
-            for code in parsefmt(fmt):
-                self.args[i].setfmt(code)
-                i += 1
-
-    def c_args(self):
-        return "PyObject *self, PyObject *args"
-
-    def targets(self):
-        return ", ".join(["&%s" % a.name for a in self.args])
-
-    def dump_decls(self, f):
-        for a in self.args:
-            print("        %s" % a.decl(), file=f)
-
-def ArgumentList(func, method):
-    code = func.__code__
-    args = code.co_varnames[:code.co_argcount]
-    if method:
-        args = args[1:]
-    pyarg = getattr(func, "pyarg", None)
-    if pyarg is not None:
-        args = VarArgs(args, pyarg)
-        if func.__defaults__:
-            L = list(func.__defaults__)
-            ndefault = len(L)
-            i = len(args) - ndefault
-            while L:
-                args[i].default = L.pop(0)
-        return args
-    else:
-        if len(args) == 0:
-            return NoArgs(args)
-        elif len(args) == 1:
-            return OneArg(args)
-        else:
-            return VarArgs(args)
-
-class Function:
-
-    method = False
-
-    def __init__(self, func, parent):
-        self._func = func
-        self._parent = parent
-        self.analyze()
-        self.initvars()
-
-    def dump(self, f):
-        def p(templ, vars=None): # helper function to generate output
-            if vars is None:
-                vars = self.vars
-            print(templ % vars, file=f)
-
-        if self.__doc__:
-            p(template.docstring)
-
-        d = {"name" : self.vars["CName"],
-             "args" : self.args.c_args(),
-             }
-        p(template.funcdef_start, d)
-
-        self.args.dump_decls(f)
-
-        if self.args.ml_meth == METH_VARARGS:
-            p(template.varargs)
-
-        p(template.funcdef_end)
-
-    def analyze(self):
-        self.__doc__ = self._func.__doc__
-        self.args = ArgumentList(self._func, self.method)
-
-    def initvars(self):
-        v = self.vars = {}
-        v["PythonName"] = self._func.__name__
-        s = v["CName"] = "%s_%s" % (self._parent.name, self._func.__name__)
-        v["DocstringVar"] = s + "_doc"
-        v["MethType"] = self.args.ml_meth
-        if self.__doc__:
-            v["Docstring"] = cstring(unindent(self.__doc__))
-        if self.args.fmt is not None:
-            v["ArgParse"] = self.args.fmt
-            v["ArgTargets"] = self.args.targets()
-
-class Method(Function):
-
-    method = True
diff --git a/Tools/framer/framer/member.py b/Tools/framer/framer/member.py
deleted file mode 100644
index 4838c1f..0000000
--- a/Tools/framer/framer/member.py
+++ /dev/null
@@ -1,73 +0,0 @@
-from framer import template
-from framer.util import cstring, unindent
-
-T_SHORT = "T_SHORT"
-T_INT = "T_INT"
-T_LONG = "T_LONG"
-T_FLOAT = "T_FLOAT"
-T_DOUBLE = "T_DOUBLE"
-T_STRING = "T_STRING"
-T_OBJECT = "T_OBJECT"
-T_CHAR = "T_CHAR"
-T_BYTE = "T_BYTE"
-T_UBYTE = "T_UBYTE"
-T_UINT = "T_UINT"
-T_ULONG = "T_ULONG"
-T_STRING_INPLACE = "T_STRING_INPLACE"
-T_OBJECT_EX = "T_OBJECT_EX"
-
-RO = READONLY = "READONLY"
-READ_RESTRICTED = "READ_RESTRICTED"
-WRITE_RESTRICTED = "WRITE_RESTRICTED"
-RESTRICT = "RESTRICTED"
-
-c2t = {"int" : T_INT,
-       "unsigned int" : T_UINT,
-       "long" : T_LONG,
-       "unsigned long" : T_LONG,
-       "float" : T_FLOAT,
-       "double" : T_DOUBLE,
-       "char *" : T_CHAR,
-       "PyObject *" : T_OBJECT,
-       }
-
-class member(object):
-
-    def __init__(self, cname=None, type=None, flags=None, doc=None):
-        self.type = type
-        self.flags = flags
-        self.cname = cname
-        self.doc = doc
-        self.name = None
-        self.struct = None
-
-    def register(self, name, struct):
-        self.name = name
-        self.struct = struct
-        self.initvars()
-
-    def initvars(self):
-        v = self.vars = {}
-        v["PythonName"] = self.name
-        if self.cname is not None:
-            v["CName"] = self.cname
-        else:
-            v["CName"] = self.name
-        v["Flags"] = self.flags or "0"
-        v["Type"] = self.get_type()
-        if self.doc is not None:
-            v["Docstring"] = cstring(unindent(self.doc))
-        v["StructName"] = self.struct.name
-
-    def get_type(self):
-        """Deduce type code from struct specification if not defined"""
-        if self.type is not None:
-            return self.type
-        ctype = self.struct.get_type(self.name)
-        return c2t[ctype]
-
-    def dump(self, f):
-        if self.doc is None:
-            print(template.memberdef_def % self.vars, file=f)
-        else:
-            print(template.memberdef_def_doc % self.vars, file=f)
diff --git a/Tools/framer/framer/slots.py b/Tools/framer/framer/slots.py
deleted file mode 100644
index 0f6e6fe..0000000
--- a/Tools/framer/framer/slots.py
+++ /dev/null
@@ -1,64 +0,0 @@
-"""Descriptions of all the slots in Python's type objects."""
-
-class Slot(object):
-    def __init__(self, name, cast=None, special=None, default="0"):
-        self.name = name
-        self.cast = cast
-        self.special = special
-        self.default = default
-
-Slots = (Slot("ob_size"),
-         Slot("tp_name"),
-         Slot("tp_basicsize"),
-         Slot("tp_itemsize"),
-         Slot("tp_dealloc", "destructor"),
-         Slot("tp_print", "printfunc"),
-         Slot("tp_getattr", "getattrfunc"),
-         Slot("tp_setattr", "setattrfunc"),
-         Slot("tp_reserved", "void*"),
-         Slot("tp_repr", "reprfunc", "__repr__"),
-         Slot("tp_as_number"),
-         Slot("tp_as_sequence"),
-         Slot("tp_as_mapping"),
-         Slot("tp_hash", "hashfunc", "__hash__"),
-         Slot("tp_call", "ternaryfunc", "__call__"),
-         Slot("tp_str", "reprfunc", "__str__"),
-         Slot("tp_getattro", "getattrofunc", "__getattr__", # XXX
-              "PyObject_GenericGetAttr"),
-         Slot("tp_setattro", "setattrofunc", "__setattr__"),
-         Slot("tp_as_buffer"),
-         Slot("tp_flags", default="Py_TPFLAGS_DEFAULT"),
-         Slot("tp_doc"),
-         Slot("tp_traverse", "traverseprox"),
-         Slot("tp_clear", "inquiry"),
-         Slot("tp_richcompare", "richcmpfunc"),
-         Slot("tp_weaklistoffset"),
-         Slot("tp_iter", "getiterfunc", "__iter__"),
-         Slot("tp_iternext", "iternextfunc", "__next__"), # XXX
-         Slot("tp_methods"),
-         Slot("tp_members"),
-         Slot("tp_getset"),
-         Slot("tp_base"),
-         Slot("tp_dict"),
-         Slot("tp_descr_get", "descrgetfunc"),
-         Slot("tp_descr_set", "descrsetfunc"),
-         Slot("tp_dictoffset"),
-         Slot("tp_init", "initproc", "__init__"),
-         Slot("tp_alloc", "allocfunc"),
-         Slot("tp_new", "newfunc"),
-         Slot("tp_free", "freefunc"),
-         Slot("tp_is_gc", "inquiry"),
-         Slot("tp_bases"),
-         Slot("tp_mro"),
-         Slot("tp_cache"),
-         Slot("tp_subclasses"),
-         Slot("tp_weaklist"),
-         )
-
-# give some slots symbolic names
-TP_NAME = Slots[1]
-TP_BASICSIZE = Slots[2]
-TP_DEALLOC = Slots[4]
-TP_DOC = Slots[20]
-TP_METHODS = Slots[27]
-TP_MEMBERS = Slots[28]
diff --git a/Tools/framer/framer/struct.py b/Tools/framer/framer/struct.py
deleted file mode 100644
index 8fc2aec..0000000
--- a/Tools/framer/framer/struct.py
+++ /dev/null
@@ -1,52 +0,0 @@
-"""Rudimentary parser for C struct definitions."""
-
-import re
-
-PyObject_HEAD = "PyObject_HEAD"
-PyObject_VAR_HEAD = "PyObject_VAR_HEAD"
-
-rx_name = re.compile("} (\w+);")
-
-class Struct:
-    def __init__(self, name, head, members):
-        self.name = name
-        self.head = head
-        self.members = members
-
-    def get_type(self, name):
-        for _name, type in self.members:
-            if name == _name:
-                return type
-        raise ValueError("no member named %s" % name)
-
-def parse(s):
-    """Parse a C struct definition.
-
-    The parser is very restricted in what it will accept.
-    """
-
-    lines = [_f for _f in s.split("\n") if _f] # get non-empty lines
-    assert lines[0].strip() == "typedef struct {"
-    pyhead = lines[1].strip()
-    assert (pyhead.startswith("PyObject") and
-            pyhead.endswith("HEAD"))
-    members = []
-    for line in lines[2:]:
-        line = line.strip()
-        if line.startswith("}"):
-            break
-
-        assert line.endswith(";")
-        line = line[:-1]
-        words = line.split()
-        name = words[-1]
-        type = " ".join(words[:-1])
-        if name[0] == "*":
-            name = name[1:]
-            type += " *"
-        members.append((name, type))
-    name = None
-    mo = rx_name.search(line)
-    assert mo is not None
-    name = mo.group(1)
-    return Struct(name, pyhead, members)
diff --git a/Tools/framer/framer/structparse.py b/Tools/framer/framer/structparse.py
deleted file mode 100644
index cf4224b..0000000
--- a/Tools/framer/framer/structparse.py
+++ /dev/null
@@ -1,46 +0,0 @@
-"""Rudimentary parser for C struct definitions."""
-
-import re
-
-PyObject_HEAD = "PyObject_HEAD"
-PyObject_VAR_HEAD = "PyObject_VAR_HEAD"
-
-rx_name = re.compile("} (\w+);")
-
-class Struct:
-    def __init__(self, name, head, members):
-        self.name = name
-        self.head = head
-        self.members = members
-
-def parse(s):
-    """Parse a C struct definition.
-
-    The parser is very restricted in what it will accept.
-    """
-
-    lines = [_f for _f in s.split("\n") if _f] # get non-empty lines
-    assert lines[0].strip() == "typedef struct {"
-    pyhead = lines[1].strip()
-    assert (pyhead.startswith("PyObject") and
-            pyhead.endswith("HEAD"))
-    members = []
-    for line in lines[2:]:
-        line = line.strip()
-        if line.startswith("}"):
-            break
-
-        assert line.endswith(";")
-        line = line[:-1]
-        words = line.split()
-        name = words[-1]
-        type = " ".join(words[:-1])
-        if name[0] == "*":
-            name = name[1:]
-            type += " *"
-        members.append((name, type))
-    name = None
-    mo = rx_name.search(line)
-    assert mo is not None
-    name = mo.group(1)
-    return Struct(name, pyhead, members)
diff --git a/Tools/framer/framer/template.py b/Tools/framer/framer/template.py
deleted file mode 100644
index e596c1f..0000000
--- a/Tools/framer/framer/template.py
+++ /dev/null
@@ -1,102 +0,0 @@
-"""framer's C code templates.
-
-Templates use the following variables:
-
-FileName: name of the file that contains the C source code
-ModuleName: name of the module, as in "import ModuleName"
-ModuleDocstring: C string containing the module doc string
-"""
-
-module_start = '#include "Python.h"'
-member_include = '#include "structmember.h"'
-
-module_doc = """\
-PyDoc_STRVAR(%(ModuleName)s_doc,
-%(ModuleDocstring)s);
-"""
-
-methoddef_start = """\
-static struct PyMethodDef %(MethodDefName)s[] = {"""
-
-methoddef_def = """\
-        {"%(PythonName)s", (PyCFunction)%(CName)s, %(MethType)s},"""
-
-methoddef_def_doc = """\
-        {"%(PythonName)s", (PyCFunction)%(CName)s, %(MethType)s,
-         %(DocstringVar)s},"""
-
-methoddef_end = """\
-        {NULL, NULL}
-};
-"""
-
-memberdef_start = """\
-#define OFF(X) offsetof(%(StructName)s, X)
-
-static struct PyMemberDef %(MemberDefName)s[] = {"""
-
-memberdef_def_doc = """\
-        {"%(PythonName)s", %(Type)s, OFF(%(CName)s), %(Flags)s,
-         %(Docstring)s},"""
-
-memberdef_def = """\
-        {"%(PythonName)s", %(Type)s, OFF(%(CName)s), %(Flags)s},"""
-
-memberdef_end = """\
-        {NULL}
-};
-
-#undef OFF
-"""
-
-dealloc_func = """static void
-%(name)s(PyObject *ob)
-{
-}
-"""
-
-docstring = """\
-PyDoc_STRVAR(%(DocstringVar)s,
-%(Docstring)s);
-"""
-
-funcdef_start = """\
-static PyObject *
-%(name)s(%(args)s)
-{"""
-
-funcdef_end = """\
-}
-"""
-
-varargs = """\
-        if (!PyArg_ParseTuple(args, \"%(ArgParse)s:%(PythonName)s\",
-                              %(ArgTargets)s))
-                return NULL;"""
-
-module_init_start = """\
-PyMODINIT_FUNC
-PyInit_%(ModuleName)s(void)
-{
-        PyObject *mod;
-
-        mod = Py_InitModule3("%(ModuleName)s", %(MethodDefName)s,
-                             %(ModuleName)s_doc);
-        if (mod == NULL)
-                return;
-"""
-
-type_init_type = "        %(CTypeName)s.ob_type = &PyType_Type;"
-module_add_type = """\
-        if (!PyObject_SetAttrString(mod, "%(TypeName)s",
-                                    (PyObject *)&%(CTypeName)s))
-                return;
-"""
-
-type_struct_start = """\
-static PyTypeObject %(CTypeName)s = {
-        PyObject_HEAD_INIT(0)"""
-
-type_struct_end = """\
-};
-"""
diff --git a/Tools/framer/framer/util.py b/Tools/framer/framer/util.py
deleted file mode 100644
index 73f3309..0000000
--- a/Tools/framer/framer/util.py
+++ /dev/null
@@ -1,35 +0,0 @@
-def cstring(s, width=70):
-    """Return C string representation of a Python string.
-
-    width specifies the maximum width of any line of the C string.
-    """
-    L = []
-    for l in s.split("\n"):
-        if len(l) < width:
-            L.append(r'"%s\n"' % l)
-
-    return "\n".join(L)
-
-def unindent(s, skipfirst=True):
-    """Return an unindented version of a docstring.
-
-    Removes indentation on lines following the first one, using the
-    leading whitespace of the first indented line that is not blank
-    to determine the indentation.
-    """
-
-    lines = s.split("\n")
-    if skipfirst:
-        first = lines.pop(0)
-        L = [first]
-    else:
-        L = []
-    indent = None
-    for l in lines:
-        ls = l.strip()
-        if ls:
-            indent = len(l) - len(ls)
-            break
-    L += [l[indent:] for l in lines]
-
-    return "\n".join(L)
diff --git a/Tools/ssl/get-remote-certificate.py b/Tools/scripts/get-remote-certificate.py
similarity index 100%
rename from Tools/ssl/get-remote-certificate.py
rename to Tools/scripts/get-remote-certificate.py
diff --git a/Tools/world/README b/Tools/world/README
deleted file mode 100644
index f7bb610..0000000
--- a/Tools/world/README
+++ /dev/null
@@ -1,85 +0,0 @@
-world -- Print mappings between country names and DNS country codes.
-
-Contact: Barry Warsaw
-Email:   bwarsaw@python.org
-
-This script will take a list of Internet addresses and print out where in the
-world those addresses originate from, based on the top-level domain country
-code found in the address.  Addresses can be in any of the following forms:
-
-    xx                -- just the country code or top-level domain identifier
-    host.domain.xx    -- any Internet host or network name
-    somebody@where.xx -- an Internet email address
-
-If no match is found, the address is interpreted as a regular expression [*]
-and a reverse lookup is attempted.  This script will search the country names
-and print a list of matching entries.  You can force reverse mappings with the
-`-r' flag (see below).
-
-For example:
-
-    %% world tz us
-    tz originated from Tanzania, United Republic of
-    us originated from United States
-
-    %% world united
-    united matches 6 countries:
-        ae: United Arab Emirates
-        uk: United Kingdom (common practice)
-        um: United States Minor Outlying Islands
-        us: United States
-        tz: Tanzania, United Republic of
-        gb: United Kingdom
-
-
- [*] Note that regular expressions must conform to Python 1.5's re.py module
- syntax.  The comparison is done with the search() method.
-
-Country codes are maintained by the RIPE Network Coordination Centre,
-in coordination with the ISO 3166 Maintenance Agency at DIN Berlin.  The
-authoritative source of counry code mappings is:
-
-    <url:ftp://info.ripe.net/iso3166-countrycodes>
-
-The latest known change to this information was:
-
-    Thu Aug  7 17:59:51 MET DST 1997
-
-This script also knows about non-geographic top-level domains.
-
-Usage: world [-d] [-p file] [-o] [-h] addr [addr ...]
-
-    --dump
-    -d
-        Print mapping of all top-level domains.
-
-    --parse file
-    -p file
-        Parse an iso3166-countrycodes file extracting the two letter country
-        code followed by the country name.  Note that the three letter country
-        codes and numbers, which are also provided in the standard format
-        file, are ignored.
-
-    --outputdict
-    -o
-        When used in conjunction with the `-p' option, output is in the form
-        of a Python dictionary, and country names are normalized
-        w.r.t. capitalization.  This makes it appropriate for cutting and
-        pasting back into this file.
-
-    --reverse
-    -r
-        Force reverse lookup.  In this mode the address can be any Python
-        regular expression; this is matched against all country names and a
-        list of matching mappings is printed.  In normal mode (e.g. without
-        this flag), reverse lookup is performed on addresses if no matching
-        country code is found.
-
-    -h
-    --help
-        Print this message.
-
-
-Local Variables:
-indent-tabs-mode: nil
-End:
diff --git a/Tools/world/world b/Tools/world/world
deleted file mode 100755
index 16452f3..0000000
--- a/Tools/world/world
+++ /dev/null
@@ -1,568 +0,0 @@
-#! /usr/bin/env python
-
-"""world -- Print mappings between country names and DNS country codes.
-
-Contact: Barry Warsaw
-Email:   barry@python.org
-Version: %(__version__)s
-
-This script will take a list of Internet addresses and print out where in the
-world those addresses originate from, based on the top-level domain country
-code found in the address.  Addresses can be in any of the following forms:
-
-    xx                -- just the country code or top-level domain identifier
-    host.domain.xx    -- any Internet host or network name
-    somebody@where.xx -- an Internet email address
-
-If no match is found, the address is interpreted as a regular expression and a
-reverse lookup is attempted.  This script will search the country names and
-print a list of matching entries.  You can force reverse mappings with the
-`-r' flag (see below).
-
-For example:
-
-    %% world tz us
-    tz originated from Tanzania, United Republic of
-    us originated from United States
-
-    %% world united
-    united matches 6 countries:
-        ae: United Arab Emirates
-        uk: United Kingdom (common practice)
-        um: United States Minor Outlying Islands
-        us: United States
-        tz: Tanzania, United Republic of
-        gb: United Kingdom
-
-Country codes are maintained by the RIPE Network Coordination Centre,
-in coordination with the ISO 3166 Maintenance Agency at DIN Berlin.  The
-authoritative source of country code mappings is:
-
-    <url:ftp://ftp.ripe.net/iso3166-countrycodes.txt>
-
-The latest known change to this information was:
-
-    Monday, 10 October 2006, 17:59:51 UTC 2006
-
-This script also knows about non-geographic top-level domains, and the
-additional ccTLDs reserved by IANA.
-
-Usage: %(PROGRAM)s [-d] [-p file] [-o] [-h] addr [addr ...]
-
-    --dump
-    -d
-        Print mapping of all top-level domains.
-
-    --parse file
-    -p file
-        Parse an iso3166-countrycodes file extracting the two letter country
-        code followed by the country name.  Note that the three letter country
-        codes and numbers, which are also provided in the standard format
-        file, are ignored.
-
-    --outputdict
-    -o
-        When used in conjunction with the `-p' option, output is in the form
-        of a Python dictionary, and country names are normalized
-        w.r.t. capitalization.  This makes it appropriate for cutting and
-        pasting back into this file.  Output is always to standard out.
-
-    --reverse
-    -r
-        Force reverse lookup.  In this mode the address can be any Python
-        regular expression; this is matched against all country names and a
-        list of matching mappings is printed.  In normal mode (e.g. without
-        this flag), reverse lookup is performed on addresses if no matching
-        country code is found.
-
-    -h
-    --help
-        Print this message.
-"""
-__version__ = '$Revision$'
-
-
-import sys
-import getopt
-import re
-
-PROGRAM = sys.argv[0]
-
-
-
-def usage(code, msg=''):
-    print(__doc__ % globals())
-    if msg:
-        print(msg)
-    sys.exit(code)
-
-
-
-def resolve(rawaddr):
-    parts = rawaddr.split('.')
-    if not len(parts):
-        # no top level domain found, bounce it to the next step
-        return rawaddr
-    addr = parts[-1]
-    if addr in nameorgs:
-        print(rawaddr, 'is in the', nameorgs[addr], 'top level domain')
-        return None
-    elif addr in countries:
-        print(rawaddr, 'originated from', countries[addr])
-        return None
-    else:
-        # Not resolved, bounce it to the next step
-        return rawaddr
-
-
-
-def reverse(regexp):
-    matches = []
-    cre = re.compile(regexp, re.IGNORECASE)
-    for code, country in all.items():
-        mo = cre.search(country)
-        if mo:
-            matches.append(code)
-    # print results
-    if not matches:
-        # not resolved, bounce it to the next step
-        return regexp
-    if len(matches) == 1:
-        code = matches[0]
-        print(regexp, "matches code `%s', %s" % (code, all[code]))
-    else:
-        print(regexp, 'matches %d countries:' % len(matches))
-        for code in matches:
-            print("    %s: %s" % (code, all[code]))
-    return None
-
-
-
-def parse(file, normalize):
-    try:
-        fp = open(file)
-    except IOError as err:
-        errno, msg = err.args
-        print(msg, ':', file)
-        return
-
-    cre = re.compile('(.*?)[ \t]+([A-Z]{2})[ \t]+[A-Z]{3}[ \t]+[0-9]{3}')
-    scanning = 0
-
-    if normalize:
-        print('countries = {')
-
-    while 1:
-        line = fp.readline()
-        if line == '':
-            break                       # EOF
-        if scanning:
-            mo = cre.match(line)
-            if not mo:
-                line = line.strip()
-                if not line:
-                    continue
-                elif line[0] == '-':
-                    break
-                else:
-                    print('Could not parse line:', line)
-                    continue
-            country, code = mo.group(1, 2)
-            if normalize:
-                words = country.split()
-                for i in range(len(words)):
-                    w = words[i]
-                    # XXX special cases
-                    if w in ('AND', 'OF', 'OF)', 'name:', 'METROPOLITAN'):
-                        words[i] = w.lower()
-                    elif w == 'THE' and i != 1:
-                        words[i] = w.lower()
-                    elif len(w) > 3 and w[1] == "'":
-                        words[i] = w[0:3].upper() + w[3:].lower()
-                    elif w in ('(U.S.)', 'U.S.'):
-                        pass
-                    elif w[0] == '(' and w != '(local':
-                        words[i] = '(' + w[1:].capitalize()
-                    elif w.find('-') != -1:
-                        words[i] = '-'.join(
-                            [s.capitalize() for s in w.split('-')])
-                    else:
-                        words[i] = w.capitalize()
-                code = code.lower()
-                country = ' '.join(words)
-                print('    "%s": "%s",' % (code, country))
-            else:
-                print(code, country)
-
-        elif line[0] == '-':
-            scanning = 1
-
-    if normalize:
-        print('    }')
-
-
-def main():
-    help = 0
-    status = 0
-    dump = 0
-    parsefile = None
-    normalize = 0
-    forcerev = 0
-
-    try:
-        opts, args = getopt.getopt(
-            sys.argv[1:],
-            'p:rohd',
-            ['parse=', 'reverse', 'outputdict', 'help', 'dump'])
-    except getopt.error as msg:
-        usage(1, msg)
-
-    for opt, arg in opts:
-        if opt in ('-h', '--help'):
-            help = 1
-        elif opt in ('-d', '--dump'):
-            dump = 1
-        elif opt in ('-p', '--parse'):
-            parsefile = arg
-        elif opt in ('-o', '--outputdict'):
-            normalize = 1
-        elif opt in ('-r', '--reverse'):
-            forcerev = 1
-
-    if help:
-        usage(status)
-
-    if dump:
-        print('Official country coded domains:')
-        codes = sorted(countries)
-        for code in codes:
-            print('      %2s:' % code, countries[code])
-
-        print('\nOther top-level domains:')
-        codes = sorted(nameorgs)
-        for code in codes:
-            print('  %6s:' % code, nameorgs[code])
-    elif parsefile:
-        parse(parsefile, normalize)
-    else:
-        if not forcerev:
-            args = filter(None, map(resolve, args))
-        args = filter(None, map(reverse, args))
-        for arg in args:
-            print('Where in the world is %s?' % arg)
-
-
-
-# The mappings
-nameorgs = {
-    # New top level domains as described by ICANN
-    # http://www.icann.org/tlds/
-    "aero": "air-transport industry",
-    "asia": "from Asia/for Asia",
-    "arpa": "Arpanet",
-    "biz": "business",
-    "cat": "Catalan community",
-    "com": "commercial",
-    "coop": "cooperatives",
-    "edu": "educational",
-    "gov": "government",
-    "info": "unrestricted `info'",
-    "int": "international",
-    "jobs": "employment-related",
-    "mil": "military",
-    "mobi": "mobile specific",
-    "museum": "museums",
-    "name": "`name' (for registration by individuals)",
-    "net": "networking",
-    "org": "non-commercial",
-    "pro": "professionals",
-    "tel": "business telecommunications",
-    "travel": "travel and tourism",
-    # These additional ccTLDs are included here even though they are not part
-    # of ISO 3166.  IANA has a decoding table listing all reserved ccTLDs:
-    #
-    # http://www.iso.org/iso/iso-3166-1_decoding_table
-    #
-    # Note that `uk' is the common practice country code for the United
-    # Kingdom.  AFAICT, the official `gb' code is routinely ignored!
-    #
-    # <D.M.Pick@qmw.ac.uk> tells me that `uk' was long in use before ISO3166
-    # was adopted for top-level DNS zone names (although in the reverse order
-    # like uk.ac.qmw) and was carried forward (with the reversal) to avoid a
-    # large-scale renaming process as the UK switched from their old `Coloured
-    # Book' protocols over X.25 to Internet protocols over IP.
-    #
-    # See <url:ftp://ftp.ripe.net/ripe/docs/ripe-159.txt>
-    #
-    # Also, `su', while obsolete is still in limited use.
-    "ac": "Ascension Island",
-    "cp": "Clipperton Island",
-    "dg": "Diego Garcia",
-    "ea": "Ceuta, Melilla",
-    "eu": "European Union",
-    "fx": "Metropolitan France",
-    "ic": "Canary Islands",
-    "ta": "Tristan da Cunha",
-    "uk": "United Kingdom (common practice)",
-    "su": "Soviet Union (still in limited use)",
-    }
-
-
-
-countries = {
-    "af": "Afghanistan",
-    "ax": "Aland Islands",
-    "al": "Albania",
-    "dz": "Algeria",
-    "as": "American Samoa",
-    "ad": "Andorra",
-    "ao": "Angola",
-    "ai": "Anguilla",
-    "aq": "Antarctica",
-    "ag": "Antigua and Barbuda",
-    "ar": "Argentina",
-    "am": "Armenia",
-    "aw": "Aruba",
-    "au": "Australia",
-    "at": "Austria",
-    "az": "Azerbaijan",
-    "bs": "Bahamas",
-    "bh": "Bahrain",
-    "bd": "Bangladesh",
-    "bb": "Barbados",
-    "by": "Belarus",
-    "be": "Belgium",
-    "bz": "Belize",
-    "bj": "Benin",
-    "bm": "Bermuda",
-    "bt": "Bhutan",
-    "bo": "Bolivia",
-    "ba": "Bosnia and Herzegovina",
-    "bw": "Botswana",
-    "bv": "Bouvet Island",
-    "br": "Brazil",
-    "io": "British Indian Ocean Territory",
-    "bn": "Brunei Darussalam",
-    "bg": "Bulgaria",
-    "bf": "Burkina Faso",
-    "bi": "Burundi",
-    "kh": "Cambodia",
-    "cm": "Cameroon",
-    "ca": "Canada",
-    "cv": "Cape Verde",
-    "ky": "Cayman Islands",
-    "cf": "Central African Republic",
-    "td": "Chad",
-    "cl": "Chile",
-    "cn": "China",
-    "cx": "Christmas Island",
-    "cc": "Cocos (Keeling) Islands",
-    "co": "Colombia",
-    "km": "Comoros",
-    "cg": "Congo",
-    "cd": "Congo, The Democratic Republic of the",
-    "ck": "Cook Islands",
-    "cr": "Costa Rica",
-    "ci": "Cote D'Ivoire",
-    "hr": "Croatia",
-    "cu": "Cuba",
-    "cy": "Cyprus",
-    "cz": "Czech Republic",
-    "dk": "Denmark",
-    "dj": "Djibouti",
-    "dm": "Dominica",
-    "do": "Dominican Republic",
-    "ec": "Ecuador",
-    "eg": "Egypt",
-    "sv": "El Salvador",
-    "gq": "Equatorial Guinea",
-    "er": "Eritrea",
-    "ee": "Estonia",
-    "et": "Ethiopia",
-    "fk": "Falkland Islands (Malvinas)",
-    "fo": "Faroe Islands",
-    "fj": "Fiji",
-    "fi": "Finland",
-    "fr": "France",
-    "gf": "French Guiana",
-    "pf": "French Polynesia",
-    "tf": "French Southern Territories",
-    "ga": "Gabon",
-    "gm": "Gambia",
-    "ge": "Georgia",
-    "de": "Germany",
-    "gh": "Ghana",
-    "gi": "Gibraltar",
-    "gr": "Greece",
-    "gl": "Greenland",
-    "gd": "Grenada",
-    "gp": "Guadeloupe",
-    "gu": "Guam",
-    "gt": "Guatemala",
-    "gg": "Guernsey",
-    "gn": "Guinea",
-    "gw": "Guinea-Bissau",
-    "gy": "Guyana",
-    "ht": "Haiti",
-    "hm": "Heard Island and Mcdonald Islands",
-    "va": "Holy See (Vatican City State)",
-    "hn": "Honduras",
-    "hk": "Hong Kong",
-    "hu": "Hungary",
-    "is": "Iceland",
-    "in": "India",
-    "id": "Indonesia",
-    "ir": "Iran (Islamic Republic of)",
-    "iq": "Iraq",
-    "ie": "Ireland",
-    "im": "Isle of Man",
-    "il": "Israel",
-    "it": "Italy",
-    "jm": "Jamaica",
-    "jp": "Japan",
-    "je": "Jersey",
-    "jo": "Jordan",
-    "kz": "Kazakhstan",
-    "ke": "Kenya",
-    "ki": "Kiribati",
-    "kp": "Korea, Democratic People's Republic of",
-    "kr": "Korea, Republic of",
-    "kw": "Kuwait",
-    "kg": "Kyrgyzstan",
-    "la": "Lao People's Democratic Republic",
-    "lv": "Latvia",
-    "lb": "Lebanon",
-    "ls": "Lesotho",
-    "lr": "Liberia",
-    "ly": "Libyan Arab Jamahiriya",
-    "li": "Liechtenstein",
-    "lt": "Lithuania",
-    "lu": "Luxembourg",
-    "mo": "Macao",
-    "mk": "Macedonia, The Former Yugoslav Republic of",
-    "mg": "Madagascar",
-    "mw": "Malawi",
-    "my": "Malaysia",
-    "mv": "Maldives",
-    "ml": "Mali",
-    "mt": "Malta",
-    "mh": "Marshall Islands",
-    "mq": "Martinique",
-    "mr": "Mauritania",
-    "mu": "Mauritius",
-    "yt": "Mayotte",
-    "mx": "Mexico",
-    "fm": "Micronesia, Federated States of",
-    "md": "Moldova, Republic of",
-    "mc": "Monaco",
-    "mn": "Mongolia",
-    "me": "Montenegro",
-    "ms": "Montserrat",
-    "ma": "Morocco",
-    "mz": "Mozambique",
-    "mm": "Myanmar",
-    "na": "Namibia",
-    "nr": "Nauru",
-    "np": "Nepal",
-    "nl": "Netherlands",
-    "an": "Netherlands Antilles",
-    "nc": "New Caledonia",
-    "nz": "New Zealand",
-    "ni": "Nicaragua",
-    "ne": "Niger",
-    "ng": "Nigeria",
-    "nu": "Niue",
-    "nf": "Norfolk Island",
-    "mp": "Northern Mariana Islands",
-    "no": "Norway",
-    "om": "Oman",
-    "pk": "Pakistan",
-    "pw": "Palau",
-    "ps": "Palestinian Territory, Occupied",
-    "pa": "Panama",
-    "pg": "Papua New Guinea",
-    "py": "Paraguay",
-    "pe": "Peru",
-    "ph": "Philippines",
-    "pn": "Pitcairn",
-    "pl": "Poland",
-    "pt": "Portugal",
-    "pr": "Puerto Rico",
-    "qa": "Qatar",
-    "re": "Reunion",
-    "ro": "Romania",
-    "ru": "Russian Federation",
-    "rw": "Rwanda",
-    "sh": "Saint Helena",
-    "kn": "Saint Kitts and Nevis",
-    "lc": "Saint Lucia",
-    "pm": "Saint Pierre and Miquelon",
-    "vc": "Saint Vincent and the Grenadines",
-    "ws": "Samoa",
-    "sm": "San Marino",
-    "st": "Sao Tome and Principe",
-    "sa": "Saudi Arabia",
-    "sn": "Senegal",
-    "rs": "Serbia",
-    "sc": "Seychelles",
-    "sl": "Sierra Leone",
-    "sg": "Singapore",
-    "sk": "Slovakia",
-    "si": "Slovenia",
-    "sb": "Solomon Islands",
-    "so": "Somalia",
-    "za": "South Africa",
-    "gs": "South Georgia and the South Sandwich Islands",
-    "es": "Spain",
-    "lk": "Sri Lanka",
-    "sd": "Sudan",
-    "sr": "Suriname",
-    "sj": "Svalbard and Jan Mayen",
-    "sh": "St. Helena",
-    "pm": "St. Pierre and Miquelon",
-    "sz": "Swaziland",
-    "se": "Sweden",
-    "ch": "Switzerland",
-    "sy": "Syrian Arab Republic",
-    "tw": "Taiwan, Province of China",
-    "tj": "Tajikistan",
-    "tz": "Tanzania, United Republic of",
-    "th": "Thailand",
-    "tl": "Timor-Leste",
-    "tg": "Togo",
-    "tk": "Tokelau",
-    "to": "Tonga",
-    "tt": "Trinidad and Tobago",
-    "tn": "Tunisia",
-    "tr": "Turkey",
-    "tm": "Turkmenistan",
-    "tc": "Turks and Caicos Islands",
-    "tv": "Tuvalu",
-    "ug": "Uganda",
-    "ua": "Ukraine",
-    "ae": "United Arab Emirates",
-    "gb": "United Kingdom",
-    "us": "United States",
-    "um": "United States Minor Outlying Islands",
-    "uy": "Uruguay",
-    "uz": "Uzbekistan",
-    "vu": "Vanuatu",
-    "va": "Vatican City State (Holy See)",
-    "ve": "Venezuela",
-    "vn": "Viet Nam",
-    "vg": "Virgin Islands (British)",
-    "vi": "Virgin Islands (U.S.)",
-    "wf": "Wallis and Futuna",
-    "eh": "Western Sahara",
-    "ye": "Yemen",
-    "yu": "Yugoslavia",
-    "zm": "Zambia",
-    "zw": "Zimbabwe",
-    }
-
-all = nameorgs.copy()
-all.update(countries)
-
-
-if __name__ == '__main__':
-    main()