diff --git a/Grammar/Grammar b/Grammar/Grammar
index 95151eb..04ed68f 100644
--- a/Grammar/Grammar
+++ b/Grammar/Grammar
@@ -21,13 +21,20 @@
 
 decorator: '@' dotted_name [ '(' [arglist] ')' ] NEWLINE
 decorators: decorator+
-funcdef: [decorators] 'def' NAME parameters ':' suite
-parameters: '(' [varargslist] ')'
-varargslist: ((fpdef ['=' test] ',')*
-              ('*' [NAME] (',' NAME ['=' test])*  [',' '**' NAME] | '**' NAME) |
-              fpdef ['=' test] (',' fpdef ['=' test])* [','])
-fpdef: NAME | '(' fplist ')'
-fplist: fpdef (',' fpdef)* [',']
+funcdef: [decorators] 'def' NAME parameters ['->' test] ':' suite
+parameters: '(' [typedargslist] ')'
+typedargslist: ((tfpdef ['=' test] ',')*
+                ('*' [tname] (',' tname ['=' test])* [',' '**' tname] | '**' tname)
+                | tfpdef ['=' test] (',' tfpdef ['=' test])* [','])
+tname: NAME [':' test]
+tfpdef: tname | '(' tfplist ')'
+tfplist: tfpdef (',' tfpdef)* [',']
+varargslist: ((vfpdef ['=' test] ',')*
+              ('*' [vname] (',' vname ['=' test])*  [',' '**' vname] | '**' vname)
+              | vfpdef ['=' test] (',' vfpdef ['=' test])* [','])
+vname: NAME
+vfpdef: vname | '(' vfplist ')'
+vfplist: vfpdef (',' vfpdef)* [',']
 
 stmt: simple_stmt | compound_stmt
 simple_stmt: small_stmt (';' small_stmt)* [';'] NEWLINE
diff --git a/Include/Python-ast.h b/Include/Python-ast.h
index 3073347..a159edb 100644
--- a/Include/Python-ast.h
+++ b/Include/Python-ast.h
@@ -30,6 +30,8 @@
 
 typedef struct _arguments *arguments_ty;
 
+typedef struct _arg *arg_ty;
+
 typedef struct _keyword *keyword_ty;
 
 typedef struct _alias *alias_ty;
@@ -74,6 +76,7 @@
                         arguments_ty args;
                         asdl_seq *body;
                         asdl_seq *decorators;
+                        expr_ty returns;
                 } FunctionDef;
                 
                 struct {
@@ -328,12 +331,30 @@
 struct _arguments {
         asdl_seq *args;
         identifier vararg;
+        expr_ty varargannotation;
         asdl_seq *kwonlyargs;
         identifier kwarg;
+        expr_ty kwargannotation;
         asdl_seq *defaults;
         asdl_seq *kw_defaults;
 };
 
+enum _arg_kind {SimpleArg_kind=1, NestedArgs_kind=2};
+struct _arg {
+        enum _arg_kind kind;
+        union {
+                struct {
+                        identifier arg;
+                        expr_ty annotation;
+                } SimpleArg;
+                
+                struct {
+                        asdl_seq *args;
+                } NestedArgs;
+                
+        } v;
+};
+
 struct _keyword {
         identifier arg;
         expr_ty value;
@@ -350,8 +371,8 @@
 mod_ty Expression(expr_ty body, PyArena *arena);
 mod_ty Suite(asdl_seq * body, PyArena *arena);
 stmt_ty FunctionDef(identifier name, arguments_ty args, asdl_seq * body,
-                    asdl_seq * decorators, int lineno, int col_offset, PyArena
-                    *arena);
+                    asdl_seq * decorators, expr_ty returns, int lineno, int
+                    col_offset, PyArena *arena);
 stmt_ty ClassDef(identifier name, asdl_seq * bases, asdl_seq * body, int
                  lineno, int col_offset, PyArena *arena);
 stmt_ty Return(expr_ty value, int lineno, int col_offset, PyArena *arena);
@@ -429,9 +450,12 @@
                                PyArena *arena);
 excepthandler_ty excepthandler(expr_ty type, expr_ty name, asdl_seq * body, int
                                lineno, int col_offset, PyArena *arena);
-arguments_ty arguments(asdl_seq * args, identifier vararg, asdl_seq *
-                       kwonlyargs, identifier kwarg, asdl_seq * defaults,
+arguments_ty arguments(asdl_seq * args, identifier vararg, expr_ty
+                       varargannotation, asdl_seq * kwonlyargs, identifier
+                       kwarg, expr_ty kwargannotation, asdl_seq * defaults,
                        asdl_seq * kw_defaults, PyArena *arena);
+arg_ty SimpleArg(identifier arg, expr_ty annotation, PyArena *arena);
+arg_ty NestedArgs(asdl_seq * args, PyArena *arena);
 keyword_ty keyword(identifier arg, expr_ty value, PyArena *arena);
 alias_ty alias(identifier name, identifier asname, PyArena *arena);
 
diff --git a/Include/funcobject.h b/Include/funcobject.h
index 7acbe6e..5739dd6 100644
--- a/Include/funcobject.h
+++ b/Include/funcobject.h
@@ -30,6 +30,7 @@
     PyObject *func_dict;	/* The __dict__ attribute, a dict or NULL */
     PyObject *func_weakreflist;	/* List of weak references */
     PyObject *func_module;	/* The __module__ attribute, can be anything */
+    PyObject *func_annotations;	/* Annotations, a dict or NULL */
 
     /* Invariant:
      *     func_closure contains the bindings for func_code->co_freevars, so
@@ -52,6 +53,8 @@
 PyAPI_FUNC(int) PyFunction_SetKwDefaults(PyObject *, PyObject *);
 PyAPI_FUNC(PyObject *) PyFunction_GetClosure(PyObject *);
 PyAPI_FUNC(int) PyFunction_SetClosure(PyObject *, PyObject *);
+PyAPI_FUNC(PyObject *) PyFunction_GetAnnotations(PyObject *);
+PyAPI_FUNC(int) PyFunction_SetAnnotations(PyObject *, PyObject *);
 
 /* Macros for direct access to these values. Type checks are *not*
    done, so use with care. */
@@ -67,6 +70,8 @@
 	(((PyFunctionObject *)func) -> func_kwdefaults)
 #define PyFunction_GET_CLOSURE(func) \
 	(((PyFunctionObject *)func) -> func_closure)
+#define PyFunction_GET_ANNOTATIONS(func) \
+	(((PyFunctionObject *)func) -> func_annotations)
 
 /* The classmethod and staticmethod types lives here, too */
 PyAPI_DATA(PyTypeObject) PyClassMethod_Type;
diff --git a/Include/graminit.h b/Include/graminit.h
index 61c0814..5174e58 100644
--- a/Include/graminit.h
+++ b/Include/graminit.h
@@ -5,79 +5,84 @@
 #define decorators 260
 #define funcdef 261
 #define parameters 262
-#define varargslist 263
-#define fpdef 264
-#define fplist 265
-#define stmt 266
-#define simple_stmt 267
-#define small_stmt 268
-#define expr_stmt 269
-#define augassign 270
-#define print_stmt 271
-#define del_stmt 272
-#define pass_stmt 273
-#define flow_stmt 274
-#define break_stmt 275
-#define continue_stmt 276
-#define return_stmt 277
-#define yield_stmt 278
-#define raise_stmt 279
-#define import_stmt 280
-#define import_name 281
-#define import_from 282
-#define import_as_name 283
-#define dotted_as_name 284
-#define import_as_names 285
-#define dotted_as_names 286
-#define dotted_name 287
-#define global_stmt 288
-#define assert_stmt 289
-#define compound_stmt 290
-#define if_stmt 291
-#define while_stmt 292
-#define for_stmt 293
-#define try_stmt 294
-#define with_stmt 295
-#define with_var 296
-#define except_clause 297
-#define suite 298
-#define testlist_safe 299
-#define old_test 300
-#define old_lambdef 301
-#define test 302
-#define or_test 303
-#define and_test 304
-#define not_test 305
-#define comparison 306
-#define comp_op 307
-#define expr 308
-#define xor_expr 309
-#define and_expr 310
-#define shift_expr 311
-#define arith_expr 312
-#define term 313
-#define factor 314
-#define power 315
-#define atom 316
-#define listmaker 317
-#define testlist_gexp 318
-#define lambdef 319
-#define trailer 320
-#define subscriptlist 321
-#define subscript 322
-#define sliceop 323
-#define exprlist 324
-#define testlist 325
-#define dictsetmaker 326
-#define classdef 327
-#define arglist 328
-#define argument 329
-#define list_iter 330
-#define list_for 331
-#define list_if 332
-#define gen_iter 333
-#define gen_for 334
-#define gen_if 335
-#define testlist1 336
-#define encoding_decl 337
-#define yield_expr 338
+#define typedargslist 263
+#define tname 264
+#define tfpdef 265
+#define tfplist 266
+#define varargslist 267
+#define vname 268
+#define vfpdef 269
+#define vfplist 270
+#define stmt 271
+#define simple_stmt 272
+#define small_stmt 273
+#define expr_stmt 274
+#define augassign 275
+#define print_stmt 276
+#define del_stmt 277
+#define pass_stmt 278
+#define flow_stmt 279
+#define break_stmt 280
+#define continue_stmt 281
+#define return_stmt 282
+#define yield_stmt 283
+#define raise_stmt 284
+#define import_stmt 285
+#define import_name 286
+#define import_from 287
+#define import_as_name 288
+#define dotted_as_name 289
+#define import_as_names 290
+#define dotted_as_names 291
+#define dotted_name 292
+#define global_stmt 293
+#define assert_stmt 294
+#define compound_stmt 295
+#define if_stmt 296
+#define while_stmt 297
+#define for_stmt 298
+#define try_stmt 299
+#define with_stmt 300
+#define with_var 301
+#define except_clause 302
+#define suite 303
+#define testlist_safe 304
+#define old_test 305
+#define old_lambdef 306
+#define test 307
+#define or_test 308
+#define and_test 309
+#define not_test 310
+#define comparison 311
+#define comp_op 312
+#define expr 313
+#define xor_expr 314
+#define and_expr 315
+#define shift_expr 316
+#define arith_expr 317
+#define term 318
+#define factor 319
+#define power 320
+#define atom 321
+#define listmaker 322
+#define testlist_gexp 323
+#define lambdef 324
+#define trailer 325
+#define subscriptlist 326
+#define subscript 327
+#define sliceop 328
+#define exprlist 329
+#define testlist 330
+#define dictsetmaker 331
+#define classdef 332
+#define arglist 333
+#define argument 334
+#define list_iter 335
+#define list_for 336
+#define list_if 337
+#define gen_iter 338
+#define gen_for 339
+#define gen_if 340
+#define testlist1 341
+#define encoding_decl 342
+#define yield_expr 343
diff --git a/Include/token.h b/Include/token.h
index 5aedb69..cdbc965 100644
--- a/Include/token.h
+++ b/Include/token.h
@@ -58,10 +58,11 @@
 #define DOUBLESLASH	48
 #define DOUBLESLASHEQUAL 49
 #define AT              50	
+#define RARROW          51
 /* Don't forget to update the table _PyParser_TokenNames in tokenizer.c! */
-#define OP		51
-#define ERRORTOKEN	52
-#define N_TOKENS	53
+#define OP		52
+#define ERRORTOKEN	53
+#define N_TOKENS	54
 
 /* Special definitions for cooperation with parser */
 
diff --git a/Lib/compiler/ast.py b/Lib/compiler/ast.py
index d21905f..ac48710 100644
--- a/Lib/compiler/ast.py
+++ b/Lib/compiler/ast.py
@@ -33,7 +33,10 @@
         pass # implemented by subclasses
 
 class EmptyNode(Node):
-    pass
+    def getChildNodes(self):
+        return ()
+    def getChildren(self):
+        return ()
 
 class Expression(Node):
     # Expression is an artificial node class to support "eval"
@@ -487,12 +490,13 @@
         return "From(%s, %s, %s)" % (repr(self.modname), repr(self.names), repr(self.level))
 
 class Function(Node):
-    def __init__(self, decorators, name, argnames, defaults, kwonlyargs, flags, doc, code, lineno=None):
+    def __init__(self, decorators, name, arguments, defaults, kwonlyargs, returns, flags, doc, code, lineno=None):
         self.decorators = decorators
         self.name = name
-        self.argnames = argnames
+        self.arguments = arguments
         self.defaults = defaults
         self.kwonlyargs = kwonlyargs
+        self.returns = returns
         self.flags = flags
         self.doc = doc
         self.code = code
@@ -508,9 +512,10 @@
         children = []
         children.append(self.decorators)
         children.append(self.name)
-        children.append(self.argnames)
+        children.extend(flatten(self.arguments))
         children.extend(flatten(self.defaults))
-        children.append(self.kwonlyargs)
+        children.extend(flatten(self.kwonlyargs))
+        children.append(self.returns)
         children.append(self.flags)
         children.append(self.doc)
         children.append(self.code)
@@ -520,18 +525,22 @@
         nodelist = []
         if self.decorators is not None:
             nodelist.append(self.decorators)
+        nodelist.extend(flatten_nodes(self.arguments))
         nodelist.extend(flatten_nodes(self.defaults))
+        nodelist.extend(flatten_nodes(self.kwonlyargs))
+        if self.returns is not None:
+            nodelist.append(self.returns)
         nodelist.append(self.code)
         return tuple(nodelist)
 
     def __repr__(self):
-        return "Function(%s, %s, %s, %s, %s, %s, %s, %s)" % (repr(self.decorators), repr(self.name), repr(self.argnames), repr(self.defaults), repr(self.kwonlyargs), repr(self.flags), repr(self.doc), repr(self.code))
+        return "Function(%s, %s, %s, %s, %s, %s, %s, %s, %s)" % (repr(self.decorators), repr(self.name), repr(self.arguments), repr(self.defaults), repr(self.kwonlyargs), repr(self.returns), repr(self.flags), repr(self.doc), repr(self.code))
 
 class GenExpr(Node):
     def __init__(self, code, lineno=None):
         self.code = code
         self.lineno = lineno
-        self.argnames = ['.0']
+        self.arguments = [SimpleArg('.0', None)]
         self.varargs = self.kwargs = None
         self.kwonlyargs = ()
 
@@ -715,9 +724,24 @@
     def __repr__(self):
         return "Keyword(%s, %s)" % (repr(self.name), repr(self.expr))
 
+class Kwarg(Node):
+    def __init__(self, arg, expr, lineno=None):
+        self.arg = arg
+        self.expr = expr
+        self.lineno = lineno
+
+    def getChildren(self):
+        return self.arg, self.expr
+
+    def getChildNodes(self):
+        return self.arg, self.expr
+
+    def __repr__(self):
+        return "Kwarg(%s, %s)" % (repr(self.arg), repr(self.expr))
+
 class Lambda(Node):
-    def __init__(self, argnames, defaults, kwonlyargs, flags, code, lineno=None):
-        self.argnames = argnames
+    def __init__(self, arguments, defaults, kwonlyargs, flags, code, lineno=None):
+        self.arguments = arguments
         self.defaults = defaults
         self.kwonlyargs = kwonlyargs
         self.flags = flags
@@ -728,25 +752,28 @@
             self.varargs = 1
         if flags & CO_VARKEYWORDS:
             self.kwargs = 1
+        self.returns = None
 
 
     def getChildren(self):
         children = []
-        children.append(self.argnames)
+        children.extend(flatten(self.arguments))
         children.extend(flatten(self.defaults))
-        children.append(self.kwonlyargs)
+        children.extend(flatten(self.kwonlyargs))
         children.append(self.flags)
         children.append(self.code)
         return tuple(children)
 
     def getChildNodes(self):
         nodelist = []
+        nodelist.extend(flatten_nodes(self.arguments))
         nodelist.extend(flatten_nodes(self.defaults))
+        nodelist.extend(flatten_nodes(self.kwonlyargs))
         nodelist.append(self.code)
         return tuple(nodelist)
 
     def __repr__(self):
-        return "Lambda(%s, %s, %s, %s, %s)" % (repr(self.argnames), repr(self.defaults), repr(self.kwonlyargs), repr(self.flags), repr(self.code))
+        return "Lambda(%s, %s, %s, %s, %s)" % (repr(self.arguments), repr(self.defaults), repr(self.kwonlyargs), repr(self.flags), repr(self.code))
 
 class LeftShift(Node):
     def __init__(self, (left, right), lineno=None):
@@ -897,6 +924,22 @@
     def __repr__(self):
         return "Name(%s)" % (repr(self.name),)
 
+class NestedArgs(Node):
+    def __init__(self, args, lineno=None):
+        self.args = args
+        self.lineno = lineno
+
+    def getChildren(self):
+        return tuple(flatten(self.args))
+
+    def getChildNodes(self):
+        nodelist = []
+        nodelist.extend(flatten_nodes(self.args))
+        return tuple(nodelist)
+
+    def __repr__(self):
+        return "NestedArgs(%s)" % (repr(self.args),)
+
 class Not(Node):
     def __init__(self, expr, lineno=None):
         self.expr = expr
@@ -1071,6 +1114,27 @@
     def __repr__(self):
         return "Set(%s)" % (repr(self.items),)
 
+class SimpleArg(Node):
+    def __init__(self, name, annotation, lineno=None):
+        self.name = name
+        self.annotation = annotation
+        self.lineno = lineno
+
+    def getChildren(self):
+        children = []
+        children.append(self.name)
+        children.append(self.annotation)
+        return tuple(children)
+
+    def getChildNodes(self):
+        nodelist = []
+        if self.annotation is not None:
+            nodelist.append(self.annotation)
+        return tuple(nodelist)
+
+    def __repr__(self):
+        return "SimpleArg(%s, %s)" % (repr(self.name), repr(self.annotation))
+
 class Slice(Node):
     def __init__(self, expr, flags, lower, upper, lineno=None):
         self.expr = expr
diff --git a/Lib/compiler/pyassem.py b/Lib/compiler/pyassem.py
index 7f44d46..86e2c49 100644
--- a/Lib/compiler/pyassem.py
+++ b/Lib/compiler/pyassem.py
@@ -314,7 +314,7 @@
     super_init = FlowGraph.__init__
 
     def __init__(self, name, filename,
-                 args=(), kwonlyargs={}, optimized=0, klass=None):
+                 args=(), kwonlyargs=(), optimized=0, klass=None):
         self.super_init()
         self.name = name
         self.filename = filename
@@ -338,24 +338,40 @@
         # The offsets used by LOAD_CLOSURE/LOAD_DEREF refer to both
         # kinds of variables.
         self.closure = []
-        self.varnames = list(args) or []
-        for i in range(len(self.varnames)):
+        # The varnames list needs to be computed after flags have been set
+        self.varnames = []
+        self.stage = RAW
+
+    def computeVarnames(self):
+        # self.args is positional, vararg, kwarg, kwonly, unpacked. This
+        # order is due to the visit order in symbol module and could change.
+        # argcount is # len(self.args) - len(unpacked). We want
+        # self.varnames to be positional, kwonly, vararg, kwarg, unpacked
+        # and argcount to be len(positional).
+
+        # determine starting index of unpacked, kwonly, vararg
+        u = self.argcount    # starting index of unpacked
+        k = u - len(self.kwonlyargs)  # starting index of kwonly
+        v = k - self.checkFlag(CO_VARARGS) - self.checkFlag(CO_VARKEYWORDS)
+
+        vars = list(self.args)
+        self.varnames = vars[:v] + vars[k:u] + vars[v:k] + vars[u:]
+        self.argcount = v
+
+        # replace TupleArgs with calculated var name
+        for i in range(self.argcount):
             var = self.varnames[i]
             if isinstance(var, TupleArg):
                 self.varnames[i] = var.getName()
-        self.stage = RAW
 
     def setDocstring(self, doc):
         self.docstring = doc
 
     def setFlag(self, flag):
         self.flags = self.flags | flag
-        if flag == CO_VARARGS:
-            self.argcount = self.argcount - 1
 
     def checkFlag(self, flag):
-        if self.flags & flag:
-            return 1
+        return (self.flags & flag) == flag
 
     def setFreeVars(self, names):
         self.freevars = list(names)
@@ -366,6 +382,7 @@
     def getCode(self):
         """Get a Python code object"""
         assert self.stage == RAW
+        self.computeVarnames()
         self.computeStackDepth()
         self.flattenGraph()
         assert self.stage == FLAT
@@ -575,6 +592,12 @@
                     lnotab.nextLine(oparg)
                     continue
                 hi, lo = twobyte(oparg)
+
+                extended, hi = twobyte(hi)
+                if extended:
+                  ehi, elo = twobyte(extended)
+                  lnotab.addCode(self.opnum['EXTENDED_ARG'], elo, ehi)
+
                 try:
                     lnotab.addCode(self.opnum[opname], lo, hi)
                 except ValueError:
@@ -595,8 +618,6 @@
         else:
             nlocals = len(self.varnames)
         argcount = self.argcount
-        if self.flags & CO_VARKEYWORDS:
-            argcount = argcount - 1
         kwonlyargcount = len(self.kwonlyargs)
         return new.code(argcount, kwonlyargcount,
                         nlocals, self.stacksize, self.flags,
@@ -809,7 +830,8 @@
         return self.CALL_FUNCTION(argc)-2
     def MAKE_FUNCTION(self, argc):
         hi, lo = divmod(argc, 256)
-        return -(lo + hi * 2)
+        ehi, hi = divmod(hi, 256)
+        return -(lo + hi * 2 + ehi)
     def MAKE_CLOSURE(self, argc):
         # XXX need to account for free variables too!
         return -argc
diff --git a/Lib/compiler/pycodegen.py b/Lib/compiler/pycodegen.py
index 353c2c9..325ca06 100644
--- a/Lib/compiler/pycodegen.py
+++ b/Lib/compiler/pycodegen.py
@@ -378,18 +378,57 @@
         walk(node.code, gen)
         gen.finish()
         self.set_lineno(node)
+        num_kwargs = 0
         for keyword in node.kwonlyargs:
             default = keyword.expr
             if isinstance(default, ast.EmptyNode):
                 continue
-            self.emit('LOAD_CONST', keyword.name)
+            self.emit('LOAD_CONST', keyword.arg.name)
             self.visit(default)
+            num_kwargs += 1
         for default in node.defaults:
             self.visit(default)
-        self._makeClosure(gen, len(node.defaults))
+
+        num_annotations = self._visit_annotations(node)
+
+        oparg = len(node.defaults)
+        oparg |= num_kwargs << 8
+        oparg |= num_annotations << 16
+
+        self._makeClosure(gen, oparg)
         for i in range(ndecorators):
             self.emit('CALL_FUNCTION', 1)
 
+    def _visit_annotations(self, node):
+        # emit code, return num_annotations
+        annotations = []
+        annotations.extend(self._visit_argument_annotations(node.arguments))
+        annotations.extend(self._visit_kwarg_annotations(node.kwonlyargs))
+        if node.returns:
+            self.visit(node.returns)
+            annotations.append('return')
+        if not annotations:
+            return 0
+        self.emit('LOAD_CONST', tuple(annotations))
+        return len(annotations) + 1
+
+    def _visit_argument_annotations(self, arguments):
+        for arg in arguments:
+            if isinstance(arg, ast.SimpleArg):
+                if arg.annotation:
+                    self.visit(arg.annotation)
+                    yield arg.name
+            else:
+                for name in self._visit_argument_annotations(arg.args):
+                    yield name
+
+    def _visit_kwarg_annotations(self, kwargs):
+        for kwarg in kwargs:
+            arg = kwarg.arg
+            if arg.annotation:
+                self.visit(arg.annotation)
+                yield arg.name
+
     def visitClass(self, node):
         gen = self.ClassGen(node, self.scopes,
                             self.get_module())
@@ -1323,7 +1362,7 @@
         else:
             name = func.name
 
-        args, hasTupleArg = generateArgList(func.argnames)
+        args, hasTupleArg = generateArgList(func.arguments)
         kwonlyargs = generateKwonlyArgList(func.kwonlyargs)
         self.graph = pyassem.PyFlowGraph(name, func.filename, args,
                                          kwonlyargs=kwonlyargs,
@@ -1334,7 +1373,7 @@
         if not isLambda and func.doc:
             self.setDocstring(func.doc)
 
-        lnf = walk(func.code, self.NameFinder(args), verbose=0)
+        lnf = walk(func.code, self.NameFinder(args+kwonlyargs), verbose=0)
         self.locals.push(lnf.getLocals())
         if func.varargs:
             self.graph.setFlag(CO_VARARGS)
@@ -1342,7 +1381,7 @@
             self.graph.setFlag(CO_VARKEYWORDS)
         self.set_lineno(func)
         if hasTupleArg:
-            self.generateArgUnpack(func.argnames)
+            self.generateArgUnpack(func.arguments)
 
     def get_module(self):
         return self.module
@@ -1356,9 +1395,9 @@
     def generateArgUnpack(self, args):
         for i in range(len(args)):
             arg = args[i]
-            if isinstance(arg, tuple):
+            if isinstance(arg, ast.NestedArgs):
                 self.emit('LOAD_FAST', '.%d' % (i * 2))
-                self.unpackSequence(arg)
+                self.unpackSequence(tuple(_nested_names(arg)))
 
     def unpackSequence(self, tup):
         if VERSION > 1:
@@ -1452,21 +1491,29 @@
     count = 0
     for i in range(len(arglist)):
         elt = arglist[i]
-        if isinstance(elt, str):
-            args.append(elt)
-        elif isinstance(elt, tuple):
-            args.append(TupleArg(i * 2, elt))
-            extra.extend(misc.flatten(elt))
+        if isinstance(elt, ast.SimpleArg):
+            args.append(elt.name)
+        elif isinstance(elt, ast.NestedArgs):
+            t = tuple(_nested_names(elt))
+            args.append(TupleArg(i * 2, t))
+            extra.extend(misc.flatten(t))
             count = count + 1
         else:
             raise ValueError, "unexpect argument type:", elt
     return args + extra, count
 
+def _nested_names(elt):
+  for arg in elt.args:
+    if isinstance(arg, ast.SimpleArg):
+      yield arg.name
+    elif isinstance(arg, ast.NestedArgs):
+      yield tuple(_nested_names(arg))
+
 def generateKwonlyArgList(keywordOnlyArgs):
-    kwonlyargs = {}
+    kwonlyargs = []
     for elt in keywordOnlyArgs:
-        assert isinstance(elt, ast.Keyword)
-        kwonlyargs[elt.name] = elt.expr
+        assert isinstance(elt, ast.Kwarg)
+        kwonlyargs.append(elt.arg.name)
     return kwonlyargs
     
 def findOp(node):
diff --git a/Lib/compiler/symbols.py b/Lib/compiler/symbols.py
index 7ddf42c..3585efc 100644
--- a/Lib/compiler/symbols.py
+++ b/Lib/compiler/symbols.py
@@ -233,7 +233,12 @@
         if parent.nested or isinstance(parent, FunctionScope):
             scope.nested = 1
         self.scopes[node] = scope
-        self._do_args(scope, node.argnames)
+
+        args = node.arguments
+        for kwonly in node.kwonlyargs:
+            args.append(kwonly.arg)
+        self._do_arguments(scope, args)
+
         self.visit(node.code, scope)
         self.handle_free_vars(scope, parent)
 
@@ -275,16 +280,18 @@
         if parent.nested or isinstance(parent, FunctionScope):
             scope.nested = 1
         self.scopes[node] = scope
-        self._do_args(scope, node.argnames)
+        self._do_arguments(scope, node.arguments)
         self.visit(node.code, scope)
         self.handle_free_vars(scope, parent)
 
-    def _do_args(self, scope, args):
-        for name in args:
-            if type(name) == types.TupleType:
-                self._do_args(scope, name)
+    def _do_arguments(self, scope, arguments):
+        for node in arguments:
+            if isinstance(node, ast.SimpleArg):
+                scope.add_param(node.name)
+                if node.annotation:
+                    self.visit(node.annotation, scope)
             else:
-                scope.add_param(name)
+                self._do_arguments(scope, node.args)
 
     def handle_free_vars(self, scope, parent):
         parent.add_child(scope)
diff --git a/Lib/compiler/transformer.py b/Lib/compiler/transformer.py
index dc88222..4a8e623 100644
--- a/Lib/compiler/transformer.py
+++ b/Lib/compiler/transformer.py
@@ -234,25 +234,24 @@
         return Decorators(items)
 
     def funcdef(self, nodelist):
-        #                    -6   -5    -4         -3  -2    -1
-        # funcdef: [decorators] 'def' NAME parameters ':' suite
-        # parameters: '(' [varargslist] ')'
-
-        if len(nodelist) == 6:
-            assert nodelist[0][0] == symbol.decorators
+        #                         0    1    2                4         -1
+        # funcdef: [decorators] 'def' NAME parameters ['->' test] ':' suite
+        # parameters: '(' [typedargslist] ')'
+        if nodelist[0][0] == symbol.decorators:
             decorators = self.decorators(nodelist[0][1:])
+            nodelist = nodelist[1:]
         else:
-            assert len(nodelist) == 5
             decorators = None
+        assert len(nodelist) in (5, 7)
 
-        lineno = nodelist[-4][2]
-        name = nodelist[-4][1]
-        args = nodelist[-3][2]
+        lineno = nodelist[0][2]
+        name = nodelist[1][1]
+        args = nodelist[2][2]
 
-        if args[0] == symbol.varargslist:
-            names, defaults, kwonlyargs, flags = self.com_arglist(args[1:])
+        if args[0] == symbol.varargslist or args[0] == symbol.typedargslist:
+            arguments, defaults, kwonly, flags = self.com_arglist(args[1:])
         else:
-            names = defaults = kwonlyargs = ()
+            arguments = defaults = kwonly = ()
             flags = 0
         doc = self.get_docstring(nodelist[-1])
 
@@ -263,22 +262,28 @@
             assert isinstance(code, Stmt)
             assert isinstance(code.nodes[0], Discard)
             del code.nodes[0]
-        return Function(decorators, name, names, defaults,
-                        kwonlyargs, flags, doc, code, lineno=lineno)
+
+        if len(nodelist) == 7:
+            returns = self.com_node(nodelist[4])
+        else:
+            returns = None
+
+        return Function(decorators, name, arguments, defaults,
+                        kwonly, returns, flags, doc, code, lineno=lineno)
 
     def lambdef(self, nodelist):
         # lambdef: 'lambda' [varargslist] ':' test
         if nodelist[2][0] == symbol.varargslist:
-            names, defaults, kwonlyargs, flags = \
+            arguments, defaults, kwonlyargs, flags = \
                                 self.com_arglist(nodelist[2][1:])
         else:
-            names = defaults = kwonlyargs = ()
+            arguments = defaults = kwonlyargs = ()
             flags = 0
 
         # code for lambda
         code = self.com_node(nodelist[-1])
 
-        return Lambda(names, defaults, kwonlyargs,
+        return Lambda(arguments, defaults, kwonlyargs,
                       flags, code, lineno=nodelist[1][2])
     old_lambdef = lambdef
 
@@ -324,10 +329,25 @@
     def varargslist(self, nodelist):
         raise WalkerError
 
-    def fpdef(self, nodelist):
+    def vfpdef(self, nodelist):
         raise WalkerError
 
-    def fplist(self, nodelist):
+    def vfplist(self, nodelist):
+        raise WalkerError
+
+    def vname(self, nodelist):
+        raise WalkerError
+
+    def typedargslist(self, nodelist):
+        raise WalkerError
+
+    def tfpdef(self, nodelist):
+        raise WalkerError
+
+    def tfplist(self, nodelist):
+        raise WalkerError
+
+    def tname(self, nodelist):
         raise WalkerError
 
     def dotted_name(self, nodelist):
@@ -786,9 +806,10 @@
         return Discard(Const(None))
 
     def keywordonlyargs(self, nodelist):
-        # (',' NAME ['=' test])*
+        # (',' tname ['=' test])*
         #      ^^^
         # ------+
+        # tname and vname are handled.
         kwonlyargs = []
         i = 0
         while i < len(nodelist):
@@ -802,10 +823,25 @@
                 i += 2
             if node[0] == token.DOUBLESTAR:
                 return kwonlyargs, i
-            elif node[0] == token.NAME:
-                kwonlyargs.append(Keyword(node[1], default, lineno=node[2]))
+            elif node[0] in (symbol.vname, symbol.tname):
+                lineno = extractLineNo(node)
+                kwarg = Kwarg(self._simplearg(node), default, lineno=lineno)
+                kwonlyargs.append(kwarg)
                 i += 2
         return kwonlyargs, i
+
+    def _simplearg(self, node):
+        # tname: NAME [':' test]
+        # vname: NAME
+        assert node[0] == symbol.vname or node[0] == symbol.tname
+        name = node[1][1]
+        lineno = node[1][2]
+        assert isinstance(name, str)
+        if len(node) > 2:
+            annotation = self.com_node(node[3])
+        else:
+            annotation = None
+        return SimpleArg(name, annotation, lineno)
         
     def com_arglist(self, nodelist):
         # varargslist:
@@ -814,7 +850,7 @@
         #      | fpdef ['=' test] (',' fpdef ['=' test])* [',']
         # fpdef: NAME | '(' fplist ')'
         # fplist: fpdef (',' fpdef)* [',']
-        names = []
+        arguments = []
         kwonlyargs = []
         defaults = []
         flags = 0
@@ -825,14 +861,15 @@
             if node[0] == token.STAR or node[0] == token.DOUBLESTAR:
                 if node[0] == token.STAR:
                     node = nodelist[i+1]
-                    if node[0] == token.NAME: # vararg
-                        names.append(node[1])
+                    if node[0] in (symbol.tname, symbol.vname): # vararg
+                        arguments.append(self._simplearg(node))
                         flags = flags | CO_VARARGS
                         i = i + 3
                     else: # no vararg
                         assert node[0] == token.COMMA
                         i += 2
-                    if i < len(nodelist) and nodelist[i][0] == token.NAME:
+                    if i < len(nodelist) and \
+                       nodelist[i][0] in (symbol.tname, symbol.vname):
                         kwonlyargs, skip = self.keywordonlyargs(nodelist[i:])
                         i += skip
 
@@ -843,13 +880,13 @@
                         node = nodelist[i+1]
                     else:
                         raise ValueError, "unexpected token: %s" % t
-                    names.append(node[1])
+                    arguments.append(self._simplearg(node))
                     flags = flags | CO_VARKEYWORDS
 
                 break
 
-            # fpdef: NAME | '(' fplist ')'
-            names.append(self.com_fpdef(node))
+            # tfpdef: tname | '(' tfplist ')'
+            arguments.append(self.com_tfpdef(node))
 
             i = i + 1
             if i < len(nodelist) and nodelist[i][0] == token.EQUAL:
@@ -863,21 +900,24 @@
             # skip the comma
             i = i + 1
 
-        return names, defaults, kwonlyargs, flags
+        return arguments, defaults, kwonlyargs, flags
 
-    def com_fpdef(self, node):
-        # fpdef: NAME | '(' fplist ')'
+    def com_tfpdef(self, node):
+        # tfpdef: tname | '(' tfplist ')'
+        # def f((x)): -- x is not nested
+        while node[1][0] == token.LPAR and len(node[2]) == 2:
+            node = node[2][1]
         if node[1][0] == token.LPAR:
-            return self.com_fplist(node[2])
-        return node[1][1]
+            return NestedArgs(self.com_tfplist(node[2]))
+        return self._simplearg(node[1])
 
-    def com_fplist(self, node):
-        # fplist: fpdef (',' fpdef)* [',']
+    def com_tfplist(self, node):
+        # tfplist: tfpdef (',' tfpdef)* [',']
         if len(node) == 2:
-            return self.com_fpdef(node[1])
+            return self.com_tfpdef(node[1]),
         list = []
         for i in range(1, len(node), 2):
-            list.append(self.com_fpdef(node[i]))
+            list.append(self.com_tfpdef(node[i]))
         return tuple(list)
 
     def com_dotted_name(self, node):
diff --git a/Lib/symbol.py b/Lib/symbol.py
index a7f7a85..658974c 100755
--- a/Lib/symbol.py
+++ b/Lib/symbol.py
@@ -17,82 +17,87 @@
 decorators = 260
 funcdef = 261
 parameters = 262
-varargslist = 263
-fpdef = 264
-fplist = 265
-stmt = 266
-simple_stmt = 267
-small_stmt = 268
-expr_stmt = 269
-augassign = 270
-print_stmt = 271
-del_stmt = 272
-pass_stmt = 273
-flow_stmt = 274
-break_stmt = 275
-continue_stmt = 276
-return_stmt = 277
-yield_stmt = 278
-raise_stmt = 279
-import_stmt = 280
-import_name = 281
-import_from = 282
-import_as_name = 283
-dotted_as_name = 284
-import_as_names = 285
-dotted_as_names = 286
-dotted_name = 287
-global_stmt = 288
-assert_stmt = 289
-compound_stmt = 290
-if_stmt = 291
-while_stmt = 292
-for_stmt = 293
-try_stmt = 294
-with_stmt = 295
-with_var = 296
-except_clause = 297
-suite = 298
-testlist_safe = 299
-old_test = 300
-old_lambdef = 301
-test = 302
-or_test = 303
-and_test = 304
-not_test = 305
-comparison = 306
-comp_op = 307
-expr = 308
-xor_expr = 309
-and_expr = 310
-shift_expr = 311
-arith_expr = 312
-term = 313
-factor = 314
-power = 315
-atom = 316
-listmaker = 317
-testlist_gexp = 318
-lambdef = 319
-trailer = 320
-subscriptlist = 321
-subscript = 322
-sliceop = 323
-exprlist = 324
-testlist = 325
-dictsetmaker = 326
-classdef = 327
-arglist = 328
-argument = 329
-list_iter = 330
-list_for = 331
-list_if = 332
-gen_iter = 333
-gen_for = 334
-gen_if = 335
-testlist1 = 336
-encoding_decl = 337
-yield_expr = 338
+typedargslist = 263
+tname = 264
+tfpdef = 265
+tfplist = 266
+varargslist = 267
+vname = 268
+vfpdef = 269
+vfplist = 270
+stmt = 271
+simple_stmt = 272
+small_stmt = 273
+expr_stmt = 274
+augassign = 275
+print_stmt = 276
+del_stmt = 277
+pass_stmt = 278
+flow_stmt = 279
+break_stmt = 280
+continue_stmt = 281
+return_stmt = 282
+yield_stmt = 283
+raise_stmt = 284
+import_stmt = 285
+import_name = 286
+import_from = 287
+import_as_name = 288
+dotted_as_name = 289
+import_as_names = 290
+dotted_as_names = 291
+dotted_name = 292
+global_stmt = 293
+assert_stmt = 294
+compound_stmt = 295
+if_stmt = 296
+while_stmt = 297
+for_stmt = 298
+try_stmt = 299
+with_stmt = 300
+with_var = 301
+except_clause = 302
+suite = 303
+testlist_safe = 304
+old_test = 305
+old_lambdef = 306
+test = 307
+or_test = 308
+and_test = 309
+not_test = 310
+comparison = 311
+comp_op = 312
+expr = 313
+xor_expr = 314
+and_expr = 315
+shift_expr = 316
+arith_expr = 317
+term = 318
+factor = 319
+power = 320
+atom = 321
+listmaker = 322
+testlist_gexp = 323
+lambdef = 324
+trailer = 325
+subscriptlist = 326
+subscript = 327
+sliceop = 328
+exprlist = 329
+testlist = 330
+dictsetmaker = 331
+classdef = 332
+arglist = 333
+argument = 334
+list_iter = 335
+list_for = 336
+list_if = 337
+gen_iter = 338
+gen_for = 339
+gen_if = 340
+testlist1 = 341
+encoding_decl = 342
+yield_expr = 343
 #--end constants--
 
 sym_name = {}
diff --git a/Lib/test/output/test_tokenize b/Lib/test/output/test_tokenize
index 4a3d58c..a46824d 100644
--- a/Lib/test/output/test_tokenize
+++ b/Lib/test/output/test_tokenize
@@ -682,4 +682,20 @@
 177,11-177,15:	NAME	'pass'
 177,15-177,16:	NEWLINE	'\n'
 178,0-178,1:	NL	'\n'
-179,0-179,0:	ENDMARKER	''
+179,0-179,1:	OP	'@'
+179,1-179,13:	NAME	'staticmethod'
+179,13-179,14:	NEWLINE	'\n'
+180,0-180,3:	NAME	'def'
+180,4-180,7:	NAME	'foo'
+180,7-180,8:	OP	'('
+180,8-180,9:	NAME	'x'
+180,9-180,10:	OP	':'
+180,10-180,11:	NUMBER	'1'
+180,11-180,12:	OP	')'
+180,12-180,14:	OP	'->'
+180,14-180,15:	NUMBER	'1'
+180,15-180,16:	OP	':'
+180,17-180,21:	NAME	'pass'
+180,21-180,22:	NEWLINE	'\n'
+181,0-181,1:	NL	'\n'
+182,0-182,0:	ENDMARKER	''
diff --git a/Lib/test/test_ast.py b/Lib/test/test_ast.py
index 11623ec..914f1d9 100644
--- a/Lib/test/test_ast.py
+++ b/Lib/test/test_ast.py
@@ -151,9 +151,9 @@
 
 #### EVERYTHING BELOW IS GENERATED #####
 exec_results = [
-('Module', [('FunctionDef', (1, 0), 'f', ('arguments', [], None, [], None, [], []), [('Pass', (1, 9))], [])]),
+('Module', [('FunctionDef', (1, 0), 'f', ('arguments', [], None, None, [], None, None, [], []), [('Pass', (1, 9))], [], None)]),
 ('Module', [('ClassDef', (1, 0), 'C', [], [('Pass', (1, 8))])]),
-('Module', [('FunctionDef', (1, 0), 'f', ('arguments', [], None, [], None, [], []), [('Return', (1, 8), ('Num', (1, 15), 1))], [])]),
+('Module', [('FunctionDef', (1, 0), 'f', ('arguments', [], None, None, [], None, None, [], []), [('Return', (1, 8), ('Num', (1, 15), 1))], [], None)]),
 ('Module', [('Delete', (1, 0), [('Name', (1, 4), 'v', ('Del',))])]),
 ('Module', [('Assign', (1, 0), [('Name', (1, 0), 'v', ('Store',))], ('Num', (1, 4), 1))]),
 ('Module', [('AugAssign', (1, 0), ('Name', (1, 0), 'v', ('Store',)), ('Add',), ('Num', (1, 5), 1))]),
@@ -180,13 +180,13 @@
 ('Expression', ('BoolOp', (1, 0), ('And',), [('Name', (1, 0), 'a', ('Load',)), ('Name', (1, 6), 'b', ('Load',))])),
 ('Expression', ('BinOp', (1, 0), ('Name', (1, 0), 'a', ('Load',)), ('Add',), ('Name', (1, 4), 'b', ('Load',)))),
 ('Expression', ('UnaryOp', (1, 0), ('Not',), ('Name', (1, 4), 'v', ('Load',)))),
-('Expression', ('Lambda', (1, 0), ('arguments', [], None, [], None, [], []), ('Name', (1, 7), 'None', ('Load',)))),
+('Expression', ('Lambda', (1, 0), ('arguments', [], None, None, [], None, None, [], []), ('Name', (1, 7), 'None', ('Load',)))),
 ('Expression', ('Dict', (1, 0), [('Num', (1, 2), 1)], [('Num', (1, 4), 2)])),
 ('Expression', ('ListComp', (1, 1), ('Name', (1, 1), 'a', ('Load',)), [('comprehension', ('Name', (1, 7), 'b', ('Store',)), ('Name', (1, 12), 'c', ('Load',)), [('Name', (1, 17), 'd', ('Load',))])])),
 ('Expression', ('GeneratorExp', (1, 1), ('Name', (1, 1), 'a', ('Load',)), [('comprehension', ('Name', (1, 7), 'b', ('Store',)), ('Name', (1, 12), 'c', ('Load',)), [('Name', (1, 17), 'd', ('Load',))])])),
 ('Expression', ('Compare', (1, 0), ('Num', (1, 0), 1), [('Lt',), ('Lt',)], [('Num', (1, 4), 2), ('Num', (1, 8), 3)])),
 ('Expression', ('Call', (1, 0), ('Name', (1, 0), 'f', ('Load',)), [('Num', (1, 2), 1), ('Num', (1, 4), 2)], [('keyword', 'c', ('Num', (1, 8), 3))], ('Name', (1, 11), 'd', ('Load',)), ('Name', (1, 15), 'e', ('Load',)))),
-('Expression', ('Num', (1, 0), 10L)),
+('Expression', ('Num', (1, 0), 10)),
 ('Expression', ('Str', (1, 0), 'string')),
 ('Expression', ('Attribute', (1, 0), ('Name', (1, 0), 'a', ('Load',)), 'b', ('Load',))),
 ('Expression', ('Subscript', (1, 0), ('Name', (1, 0), 'a', ('Load',)), ('Slice', ('Name', (1, 2), 'b', ('Load',)), ('Name', (1, 4), 'c', ('Load',)), None), ('Load',))),
diff --git a/Lib/test/test_compiler.py b/Lib/test/test_compiler.py
index 783a34c..2ecd093 100644
--- a/Lib/test/test_compiler.py
+++ b/Lib/test/test_compiler.py
@@ -115,6 +115,24 @@
         dct = {}
         exec(c, dct)
         self.assertEquals(dct.get('result'), 3)
+        c = compiler.compile('def g(a):\n'
+                             '    def f(): return a + 2\n'
+                             '    return f()\n'
+                             'result = g(1)',
+                             '<string>',
+                             'exec')
+        dct = {}
+        exec(c, dct)
+        self.assertEquals(dct.get('result'), 3)
+        c = compiler.compile('def g((a, b)):\n'
+                             '    def f(): return a + b\n'
+                             '    return f()\n'
+                             'result = g((1, 2))',
+                             '<string>',
+                             'exec')
+        dct = {}
+        exec(c, dct)
+        self.assertEquals(dct.get('result'), 3)
 
     def testGenExp(self):
         c = compiler.compile('list((i,j) for i in range(3) if i < 3'
@@ -123,6 +141,22 @@
                              'eval')
         self.assertEquals(eval(c), [(0, 3), (1, 3), (2, 3)])
 
+    def testFuncAnnotations(self):
+        testdata = [
+            ('def f(a: 1): pass', {'a': 1}),
+            ('''def f(a, (b:1, c:2, d), e:3=4, f=5,
+                    *g:6, h:7, i=8, j:9=10, **k:11) -> 12: pass
+             ''', {'b': 1, 'c': 2, 'e': 3, 'g': 6, 'h': 7, 'j': 9,
+                   'k': 11, 'return': 12}),
+        ]
+        for sourcecode, expected in testdata:
+            # avoid IndentationError: unexpected indent from trailing lines
+            sourcecode = sourcecode.rstrip()+'\n'
+            c = compiler.compile(sourcecode, '<string>', 'exec')
+            dct = {}
+            exec(c, dct)
+            self.assertEquals(dct['f'].func_annotations, expected)
+
 
 NOLINENO = (compiler.ast.Module, compiler.ast.Stmt, compiler.ast.Discard)
 
@@ -167,10 +201,11 @@
 
 ###############################################################################
 
-def test_main():
+def test_main(all=False):
     global TEST_ALL
-    TEST_ALL = test.test_support.is_resource_enabled("compiler")
+    TEST_ALL = all or test.test_support.is_resource_enabled("compiler")
     test.test_support.run_unittest(CompilerTest)
 
 if __name__ == "__main__":
-    test_main()
+    import sys
+    test_main('all' in sys.argv)
diff --git a/Lib/test/test_grammar.py b/Lib/test/test_grammar.py
index f4a0478..34c550e 100644
--- a/Lib/test/test_grammar.py
+++ b/Lib/test/test_grammar.py
@@ -138,16 +138,22 @@
         x = eval('1, 0 or 1')
 
     def testFuncdef(self):
-        ### 'def' NAME parameters ':' suite
-        ### parameters: '(' [varargslist] ')'
-        ### varargslist: (fpdef ['=' test] ',')*
-        ###           ('*' (NAME|',' fpdef ['=' test]) [',' ('**'|'*' '*') NAME]
-        ###            | ('**'|'*' '*') NAME)
-        ###            | fpdef ['=' test] (',' fpdef ['=' test])* [',']
-        ### fpdef: NAME | '(' fplist ')'
-        ### fplist: fpdef (',' fpdef)* [',']
-        ### arglist: (argument ',')* (argument | *' test [',' '**' test] | '**' test)
-        ### argument: [test '='] test   # Really [keyword '='] test
+        ### [decorators] 'def' NAME parameters ['->' test] ':' suite
+        ### decorator: '@' dotted_name [ '(' [arglist] ')' ] NEWLINE
+        ### decorators: decorator+
+        ### parameters: '(' [typedargslist] ')'
+        ### typedargslist: ((tfpdef ['=' test] ',')*
+        ###                ('*' [tname] (',' tname ['=' test])* [',' '**' tname] | '**' tname)
+        ###                | tfpdef ['=' test] (',' tfpdef ['=' test])* [','])
+        ### tname: NAME [':' test]
+        ### tfpdef: tname | '(' tfplist ')'
+        ### tfplist: tfpdef (',' tfpdef)* [',']
+        ### varargslist: ((vfpdef ['=' test] ',')*
+        ###              ('*' [vname] (',' vname ['=' test])*  [',' '**' vname] | '**' vname)
+        ###              | vfpdef ['=' test] (',' vfpdef ['=' test])* [','])
+        ### vname: NAME
+        ### vfpdef: vname | '(' vfplist ')'
+        ### vfplist: vfpdef (',' vfpdef)* [',']
         def f1(): pass
         f1()
         f1(*())
@@ -294,6 +300,28 @@
         pos2key2dict(1,2,k2=100,tokwarg1=100,tokwarg2=200)
         pos2key2dict(1,2,tokwarg1=100,tokwarg2=200, k2=100)
 
+        # argument annotation tests
+        def f(x) -> list: pass
+        self.assertEquals(f.func_annotations, {'return': list})
+        def f(x:int): pass
+        self.assertEquals(f.func_annotations, {'x': int})
+        def f(*x:str): pass
+        self.assertEquals(f.func_annotations, {'x': str})
+        def f(**x:float): pass
+        self.assertEquals(f.func_annotations, {'x': float})
+        def f(x, y:1+2): pass
+        self.assertEquals(f.func_annotations, {'y': 3})
+        def f(a, (b:1, c:2, d)): pass
+        self.assertEquals(f.func_annotations, {'b': 1, 'c': 2})
+        def f(a, (b:1, c:2, d), e:3=4, f=5, *g:6): pass
+        self.assertEquals(f.func_annotations,
+                          {'b': 1, 'c': 2, 'e': 3, 'g': 6})
+        def f(a, (b:1, c:2, d), e:3=4, f=5, *g:6, h:7, i=8, j:9=10,
+              **k:11) -> 12: pass
+        self.assertEquals(f.func_annotations,
+                          {'b': 1, 'c': 2, 'e': 3, 'g': 6, 'h': 7, 'j': 9,
+                           'k': 11, 'return': 12})
+
     def testLambdef(self):
         ### lambdef: 'lambda' [varargslist] ':' test
         l1 = lambda : 0
diff --git a/Lib/test/test_tokenize.py b/Lib/test/test_tokenize.py
index be6c18d..de6e888 100644
--- a/Lib/test/test_tokenize.py
+++ b/Lib/test/test_tokenize.py
@@ -219,5 +219,15 @@
     if verbose:
         print 'finished'
 
+def test_rarrow():
+    """
+    This function exists solely to test the tokenization of the RARROW
+    operator.
+
+    >>> tokenize(iter(['->']).next)   #doctest: +NORMALIZE_WHITESPACE
+    1,0-1,2:\tOP\t'->'
+    2,0-2,0:\tENDMARKER\t''
+    """
+
 if __name__ == "__main__":
     test_main()
diff --git a/Lib/test/tokenize_tests.txt b/Lib/test/tokenize_tests.txt
index 1facfc1..b1aa020 100644
--- a/Lib/test/tokenize_tests.txt
+++ b/Lib/test/tokenize_tests.txt
@@ -176,3 +176,6 @@
 @staticmethod
 def foo(): pass
 
+@staticmethod
+def foo(x:1)->1: pass
+
diff --git a/Lib/token.py b/Lib/token.py
index 5f8d53a..2770cfd 100755
--- a/Lib/token.py
+++ b/Lib/token.py
@@ -60,9 +60,10 @@
 DOUBLESLASH = 48
 DOUBLESLASHEQUAL = 49
 AT = 50
-OP = 51
-ERRORTOKEN = 52
-N_TOKENS = 53
+RARROW = 51
+OP = 52
+ERRORTOKEN = 53
+N_TOKENS = 54
 NT_OFFSET = 256
 #--end constants--
 
diff --git a/Lib/tokenize.py b/Lib/tokenize.py
index 1253822..152bfdb 100644
--- a/Lib/tokenize.py
+++ b/Lib/tokenize.py
@@ -78,7 +78,7 @@
 # longest operators first (e.g., if = came before ==, == would get
 # recognized as two instances of =).
 Operator = group(r"\*\*=?", r">>=?", r"<<=?", r"!=",
-                 r"//=?",
+                 r"//=?", r"->",
                  r"[+\-*/%&|^=<>]=?",
                  r"~")
 
diff --git a/Misc/NEWS b/Misc/NEWS
index 4963dcd..e442df8 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -36,6 +36,8 @@
 Core and Builtins
 -----------------
 
+- Added function annotations per PEP 3107.
+
 - Moved intern() to sys.intern().
 
 - exec is now a function.
diff --git a/Modules/parsermodule.c b/Modules/parsermodule.c
index 78180b0..d474a9a 100644
--- a/Modules/parsermodule.c
+++ b/Modules/parsermodule.c
@@ -854,7 +854,7 @@
 VALIDATER(class);               VALIDATER(node);
 VALIDATER(parameters);          VALIDATER(suite);
 VALIDATER(testlist);            VALIDATER(varargslist);
-VALIDATER(fpdef);               VALIDATER(fplist);
+VALIDATER(vfpdef);              VALIDATER(vfplist);
 VALIDATER(stmt);                VALIDATER(simple_stmt);
 VALIDATER(expr_stmt);           VALIDATER(power);
 VALIDATER(print_stmt);          VALIDATER(del_stmt);
@@ -863,7 +863,7 @@
 VALIDATER(import_name);         VALIDATER(import_from);
 VALIDATER(global_stmt);         VALIDATER(list_if);
 VALIDATER(assert_stmt);         VALIDATER(list_for);
-VALIDATER(compound_stmt);
+VALIDATER(compound_stmt);       VALIDATER(vname);
 VALIDATER(while);               VALIDATER(for);
 VALIDATER(try);                 VALIDATER(except_clause);
 VALIDATER(test);                VALIDATER(and_test);
@@ -1120,7 +1120,32 @@
 }
 
 
-/* '*' [NAME] (',' NAME ['=' test])* [',' '**' NAME] | '**' NAME
+/* validate either vname or tname.
+ * vname: NAME
+ * tname: NAME [':' test]
+ */
+static int
+validate_vname(node *tree)
+{
+    int nch = NCH(tree);
+    if (TYPE(tree) == vname) {
+        return nch == 1 && validate_name(CHILD(tree, 0), NULL);
+    }
+    else if (TYPE(tree) == tname) {
+        if (nch == 1) {
+            return validate_name(CHILD(tree, 0), NULL);
+        }
+        else if (nch == 3) {
+            return validate_name(CHILD(tree, 0), NULL) &&
+                   validate_colon(CHILD(tree, 1)) &&
+                   validate_test(CHILD(tree, 2));
+        }
+    }
+    return 0;
+}
+
+/* '*' vname (',' vname ['=' test])* [',' '**' vname] | '**' vname
+ * ..or tname in place of vname. vname: NAME; tname: NAME [':' test]
  */
 static int
 validate_varargslist_trailer(node *tree, int start)
@@ -1136,26 +1161,27 @@
     sym = TYPE(CHILD(tree, start));
     if (sym == STAR) {
         /*
-         * '*' [NAME] (',' NAME ['=' test])* [',' '**' NAME] | '**' NAME
+         * '*' vname (',' vname ['=' test])* [',' '**' vname] | '**' vname
          */
         if (nch-start == 2)
-            res = validate_name(CHILD(tree, start+1), NULL);
+            res = validate_vname(CHILD(tree, start+1));
         else if (nch-start == 5 && TYPE(CHILD(tree, start+2)) == COMMA)
-            res = (validate_name(CHILD(tree, start+1), NULL)
+            res = (validate_vname(CHILD(tree, start+1))
                    && validate_comma(CHILD(tree, start+2))
                    && validate_doublestar(CHILD(tree, start+3))
-                   && validate_name(CHILD(tree, start+4), NULL));
+                   && validate_vname(CHILD(tree, start+4)));
         else {
-            /* skip over [NAME] (',' NAME ['=' test])*  */
+            /* skip over vname (',' vname ['=' test])*  */
             i = start + 1;
-	    if (TYPE(CHILD(tree, i)) == NAME) { /* skip over [NAME] */
+	    if (TYPE(CHILD(tree, i)) == vname ||
+	        TYPE(CHILD(tree, i)) == tname) { /* skip over vname or tname */
 		i += 1;
 	    }
-            while (res && i+1 < nch) { /* validate  (',' NAME ['=' test])* */
+            while (res && i+1 < nch) { /* validate  (',' vname ['=' test])* */
                 res = validate_comma(CHILD(tree, i));
                 if (TYPE(CHILD(tree, i+1)) == DOUBLESTAR) 
                     break;
-                res = res && validate_name(CHILD(tree, i+1), NULL);
+                res = res && validate_vname(CHILD(tree, i+1));
                 if (res && i+2 < nch && TYPE(CHILD(tree, i+2)) == EQUAL) {
                     res = res && (i+3 < nch) 
                           && validate_test(CHILD(tree, i+3));
@@ -1165,9 +1191,9 @@
                     i += 2;
                 }
             }
-            /* [',' '**' NAME] */
+            /* [',' '**' vname] */
             if (res && i+1 < nch && TYPE(CHILD(tree, i+1)) == DOUBLESTAR) {
-                res = validate_name(CHILD(tree, i+2), NULL);
+                res = validate_vname(CHILD(tree, i+2));
             }
         }
     }
@@ -1176,7 +1202,7 @@
          *  '**' NAME
          */
         if (nch-start == 2)
-            res = validate_name(CHILD(tree, start+1), NULL);
+            res = validate_vname(CHILD(tree, start+1));
     }
     if (!res)
         err_string("illegal variable argument trailer for varargslist");
@@ -1184,21 +1210,34 @@
 }
 
 
-/*  validate_varargslist()
+/* validate_varargslist()
  *
- *  varargslist:
- *      (fpdef ['=' test] ',')*
- *      ('*' [NAME] (',' NAME ['=' test])* [',' '**' NAME] | '**' NAME)
- *      | fpdef ['=' test] (',' fpdef ['=' test])* [',']
+ * Validate typedargslist or varargslist.
+ *
+ * typedargslist: ((tfpdef ['=' test] ',')*
+ *                 ('*' [tname] (',' tname ['=' test])* [',' '**' tname] |
+ *                  '**' tname)
+ *                 | tfpdef ['=' test] (',' tfpdef ['=' test])* [','])
+ * tname: NAME [':' test]
+ * tfpdef: tname | '(' tfplist ')'
+ * tfplist: tfpdef (',' tfpdef)* [',']
+ * varargslist: ((vfpdef ['=' test] ',')*
+ *               ('*' [vname] (',' vname ['=' test])*  [',' '**' vname] |
+ *                '**' vname)
+ *               | vfpdef ['=' test] (',' vfpdef ['=' test])* [','])
+ * vname: NAME
+ * vfpdef: vname | '(' vfplist ')'
+ * vfplist: vfpdef (',' vfpdef)* [',']
  *
  */
 static int
 validate_varargslist(node *tree)
 {
     int nch = NCH(tree);
-    int res = validate_ntype(tree, varargslist) && (nch != 0);
+    int res = (TYPE(tree) == varargslist ||
+               TYPE(tree) == typedargslist) &&
+              (nch != 0);
     int sym;
-
     if (!res)
         return 0;
     if (nch < 1) {
@@ -1211,19 +1250,19 @@
          *    '*' [NAME] (',' NAME ['=' test])* [',' '**' NAME] | '**' NAME
          */
         res = validate_varargslist_trailer(tree, 0);
-    else if (sym == fpdef) {
+    else if (sym == vfpdef || sym == tfpdef) {
         int i = 0;
 
         sym = TYPE(CHILD(tree, nch-1));
-        if (sym == NAME) {
+        if (sym == vname || sym == tname) {
             /*
-             *   (fpdef ['=' test] ',')+
-             *       ('*' NAME [',' '**' NAME]
-             *     | '**' NAME)
+             *   (vfpdef ['=' test] ',')+
+             *       ('*' vname [',' '**' vname]
+             *     | '**' vname)
              */
-            /* skip over (fpdef ['=' test] ',')+ */
+            /* skip over (vfpdef ['=' test] ',')+ */
             while (res && (i+2 <= nch)) {
-                res = validate_fpdef(CHILD(tree, i));
+                res = validate_vfpdef(CHILD(tree, i));
                 ++i;
                 if (res && TYPE(CHILD(tree, i)) == EQUAL && (i+2 <= nch)) {
                     res = (validate_equal(CHILD(tree, i))
@@ -1248,7 +1287,7 @@
         }
         else {
             /*
-             *  fpdef ['=' test] (',' fpdef ['=' test])* [',']
+             *  vfpdef ['=' test] (',' vfpdef ['=' test])* [',']
              */
             /* strip trailing comma node */
             if (sym == COMMA) {
@@ -1258,9 +1297,9 @@
                 --nch;
             }
             /*
-             *  fpdef ['=' test] (',' fpdef ['=' test])*
+             *  vfpdef ['=' test] (',' vfpdef ['=' test])*
              */
-            res = validate_fpdef(CHILD(tree, 0));
+            res = validate_vfpdef(CHILD(tree, 0));
             ++i;
             if (res && (i+2 <= nch) && TYPE(CHILD(tree, i)) == EQUAL) {
                 res = (validate_equal(CHILD(tree, i))
@@ -1268,12 +1307,12 @@
                 i += 2;
             }
             /*
-             *  ... (',' fpdef ['=' test])*
+             *  ... (',' vfpdef ['=' test])*
              *  i ---^^^
              */
             while (res && (nch - i) >= 2) {
                 res = (validate_comma(CHILD(tree, i))
-                       && validate_fpdef(CHILD(tree, i+1)));
+                       && validate_vfpdef(CHILD(tree, i+1)));
                 i += 2;
                 if (res && (nch - i) >= 2 && TYPE(CHILD(tree, i)) == EQUAL) {
                     res = (validate_equal(CHILD(tree, i))
@@ -1405,24 +1444,32 @@
     return res;
 }
 
-/*  validate_fpdef()
+/* validate_vfpdef()
  *
- *  fpdef:
- *      NAME
- *    | '(' fplist ')'
+ * Validate vfpdef or tfpdef.
+ *
+ * vname: NAME
+ * vfpdef: vname | '(' vfplist ')'
+ * vfplist: vfpdef (',' vfpdef)* [',']
+ *
+ * tname: NAME [':' test]
+ * tfpdef: tname | '(' tfplist ')'
+ * tfplist: tfpdef (',' tfpdef)* [',']
+ *
  */
 static int
-validate_fpdef(node *tree)
+validate_vfpdef(node *tree)
 {
     int nch = NCH(tree);
-    int res = validate_ntype(tree, fpdef);
+    int typ = TYPE(tree);
+    int res = typ == vfpdef || typ == tfpdef;
 
     if (res) {
         if (nch == 1)
-            res = validate_ntype(CHILD(tree, 0), NAME);
+            res = validate_vname(CHILD(tree, 0));
         else if (nch == 3)
             res = (validate_lparen(CHILD(tree, 0))
-                   && validate_fplist(CHILD(tree, 1))
+                   && validate_vfplist(CHILD(tree, 1))
                    && validate_rparen(CHILD(tree, 2)));
         else
             res = validate_numnodes(tree, 1, "fpdef");
@@ -1432,10 +1479,10 @@
 
 
 static int
-validate_fplist(node *tree)
+validate_vfplist(node *tree)
 {
-    return (validate_repeating_list(tree, fplist,
-                                    validate_fpdef, "fplist"));
+    return (validate_repeating_list(tree, vfplist,
+                                    validate_vfpdef, "vfplist"));
 }
 
 
diff --git a/Objects/funcobject.c b/Objects/funcobject.c
index 06a4fe9..63bdc21 100644
--- a/Objects/funcobject.c
+++ b/Objects/funcobject.c
@@ -38,6 +38,7 @@
 		op->func_doc = doc;
 		op->func_dict = NULL;
 		op->func_module = NULL;
+		op->func_annotations = NULL;
 
 		/* __module__: If module name is in globals, use it.
 		   Otherwise, use None.
@@ -187,6 +188,38 @@
 	return 0;
 }
 
+PyObject *
+PyFunction_GetAnnotations(PyObject *op)
+{
+	if (!PyFunction_Check(op)) {
+		PyErr_BadInternalCall();
+		return NULL;
+	}
+	return ((PyFunctionObject *) op) -> func_annotations;
+}
+
+int
+PyFunction_SetAnnotations(PyObject *op, PyObject *annotations)
+{
+	if (!PyFunction_Check(op)) {
+		PyErr_BadInternalCall();
+		return -1;
+	}
+	if (annotations == Py_None)
+		annotations = NULL;
+	else if (annotations && PyDict_Check(annotations)) {
+		Py_INCREF(annotations);
+	}
+	else {
+		PyErr_SetString(PyExc_SystemError,
+				"non-dict annotations");
+		return -1;
+	}
+	Py_XDECREF(((PyFunctionObject *)op) -> func_annotations);
+	((PyFunctionObject *) op) -> func_annotations = annotations;
+	return 0;
+}
+
 /* Methods */
 
 #define OFF(x) offsetof(PyFunctionObject, x)
@@ -395,12 +428,48 @@
 	return 0;
 }
 
+static PyObject *
+func_get_annotations(PyFunctionObject *op)
+{
+	if (op->func_annotations == NULL) {
+		op->func_annotations = PyDict_New();
+		if (op->func_annotations == NULL)
+			return NULL;
+	}
+	Py_INCREF(op->func_annotations);
+	return op->func_annotations;
+}
+
+static int
+func_set_annotations(PyFunctionObject *op, PyObject *value)
+{
+	PyObject *tmp;
+
+	if (value == Py_None)
+		value = NULL;
+	/* Legal to del f.func_annotations.
+	 * Can only set func_annotations to NULL (through C api)
+	 * or a dict. */
+	if (value != NULL && !PyDict_Check(value)) {
+		PyErr_SetString(PyExc_TypeError,
+			"func_annotations must be set to a dict object");
+		return -1;
+	}
+	tmp = op->func_annotations;
+	Py_XINCREF(value);
+	op->func_annotations = value;
+	Py_XDECREF(tmp);
+	return 0;
+}
+
 static PyGetSetDef func_getsetlist[] = {
         {"func_code", (getter)func_get_code, (setter)func_set_code},
         {"func_defaults", (getter)func_get_defaults,
 	 (setter)func_set_defaults},
 	{"func_kwdefaults", (getter)func_get_kwdefaults,
 	 (setter)func_set_kwdefaults},
+	{"func_annotations", (getter)func_get_annotations,
+	 (setter)func_set_annotations},
 	{"func_dict", (getter)func_get_dict, (setter)func_set_dict},
 	{"__dict__", (getter)func_get_dict, (setter)func_set_dict},
 	{"func_name", (getter)func_get_name, (setter)func_set_name},
@@ -524,6 +593,7 @@
 	Py_XDECREF(op->func_doc);
 	Py_XDECREF(op->func_dict);
 	Py_XDECREF(op->func_closure);
+	Py_XDECREF(op->func_annotations);
 	PyObject_GC_Del(op);
 }
 
@@ -546,6 +616,7 @@
 	Py_VISIT(f->func_name);
 	Py_VISIT(f->func_dict);
 	Py_VISIT(f->func_closure);
+	Py_VISIT(f->func_annotations);
 	return 0;
 }
 
diff --git a/Parser/Python.asdl b/Parser/Python.asdl
index dbf14e7..2c3fa94 100644
--- a/Parser/Python.asdl
+++ b/Parser/Python.asdl
@@ -10,7 +10,7 @@
 	    | Suite(stmt* body)
 
 	stmt = FunctionDef(identifier name, arguments args, 
-                           stmt* body, expr* decorators)
+                           stmt* body, expr* decorators, expr? returns)
 	      | ClassDef(identifier name, expr* bases, stmt* body)
 	      | Return(expr? value)
 
@@ -100,8 +100,12 @@
 	excepthandler = (expr? type, expr? name, stmt* body, int lineno,
 	                 int col_offset)
 
-	arguments = (expr* args, identifier? vararg, expr* kwonlyargs,
-		         identifier? kwarg, expr* defaults, expr* kw_defaults)
+	arguments = (arg* args, identifier? vararg, expr? varargannotation,
+                     arg* kwonlyargs, identifier? kwarg,
+                     expr? kwargannotation, expr* defaults,
+                     expr* kw_defaults)
+	arg = SimpleArg(identifier arg, expr? annotation)
+            | NestedArgs(arg* args)
 
         -- keyword arguments supplied to call
         keyword = (identifier arg, expr value)
diff --git a/Parser/tokenizer.c b/Parser/tokenizer.c
index 947ad9c..4c3c29e 100644
--- a/Parser/tokenizer.c
+++ b/Parser/tokenizer.c
@@ -92,6 +92,7 @@
 	"DOUBLESLASH",
 	"DOUBLESLASHEQUAL",
 	"AT",
+	"RARROW",
 	/* This table must match the #defines in token.h! */
 	"OP",
 	"<ERRORTOKEN>",
@@ -998,6 +999,7 @@
 	case '-':
 		switch (c2) {
 		case '=':	return MINEQUAL;
+		case '>':	return RARROW;
 		}
 		break;
 	case '*':
diff --git a/Python/Python-ast.c b/Python/Python-ast.c
index 2839c0b..4cf686f 100644
--- a/Python/Python-ast.c
+++ b/Python/Python-ast.c
@@ -34,6 +34,7 @@
         "args",
         "body",
         "decorators",
+        "returns",
 };
 static PyTypeObject *ClassDef_type;
 static char *ClassDef_fields[]={
@@ -333,11 +334,24 @@
 static char *arguments_fields[]={
         "args",
         "vararg",
+        "varargannotation",
         "kwonlyargs",
         "kwarg",
+        "kwargannotation",
         "defaults",
         "kw_defaults",
 };
+static PyTypeObject *arg_type;
+static PyObject* ast2obj_arg(void*);
+static PyTypeObject *SimpleArg_type;
+static char *SimpleArg_fields[]={
+        "arg",
+        "annotation",
+};
+static PyTypeObject *NestedArgs_type;
+static char *NestedArgs_fields[]={
+        "args",
+};
 static PyTypeObject *keyword_type;
 static PyObject* ast2obj_keyword(void*);
 static char *keyword_fields[]={
@@ -454,7 +468,7 @@
         if (!stmt_type) return 0;
         if (!add_attributes(stmt_type, stmt_attributes, 2)) return 0;
         FunctionDef_type = make_type("FunctionDef", stmt_type,
-                                     FunctionDef_fields, 4);
+                                     FunctionDef_fields, 5);
         if (!FunctionDef_type) return 0;
         ClassDef_type = make_type("ClassDef", stmt_type, ClassDef_fields, 3);
         if (!ClassDef_type) return 0;
@@ -710,8 +724,16 @@
         excepthandler_type = make_type("excepthandler", AST_type,
                                        excepthandler_fields, 5);
         if (!excepthandler_type) return 0;
-        arguments_type = make_type("arguments", AST_type, arguments_fields, 6);
+        arguments_type = make_type("arguments", AST_type, arguments_fields, 8);
         if (!arguments_type) return 0;
+        arg_type = make_type("arg", AST_type, NULL, 0);
+        if (!arg_type) return 0;
+        if (!add_attributes(arg_type, NULL, 0)) return 0;
+        SimpleArg_type = make_type("SimpleArg", arg_type, SimpleArg_fields, 2);
+        if (!SimpleArg_type) return 0;
+        NestedArgs_type = make_type("NestedArgs", arg_type, NestedArgs_fields,
+                                    1);
+        if (!NestedArgs_type) return 0;
         keyword_type = make_type("keyword", AST_type, keyword_fields, 2);
         if (!keyword_type) return 0;
         alias_type = make_type("alias", AST_type, alias_fields, 2);
@@ -783,7 +805,8 @@
 
 stmt_ty
 FunctionDef(identifier name, arguments_ty args, asdl_seq * body, asdl_seq *
-            decorators, int lineno, int col_offset, PyArena *arena)
+            decorators, expr_ty returns, int lineno, int col_offset, PyArena
+            *arena)
 {
         stmt_ty p;
         if (!name) {
@@ -806,6 +829,7 @@
         p->v.FunctionDef.args = args;
         p->v.FunctionDef.body = body;
         p->v.FunctionDef.decorators = decorators;
+        p->v.FunctionDef.returns = returns;
         p->lineno = lineno;
         p->col_offset = col_offset;
         return p;
@@ -1830,8 +1854,9 @@
 }
 
 arguments_ty
-arguments(asdl_seq * args, identifier vararg, asdl_seq * kwonlyargs, identifier
-          kwarg, asdl_seq * defaults, asdl_seq * kw_defaults, PyArena *arena)
+arguments(asdl_seq * args, identifier vararg, expr_ty varargannotation,
+          asdl_seq * kwonlyargs, identifier kwarg, expr_ty kwargannotation,
+          asdl_seq * defaults, asdl_seq * kw_defaults, PyArena *arena)
 {
         arguments_ty p;
         p = (arguments_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -1841,13 +1866,49 @@
         }
         p->args = args;
         p->vararg = vararg;
+        p->varargannotation = varargannotation;
         p->kwonlyargs = kwonlyargs;
         p->kwarg = kwarg;
+        p->kwargannotation = kwargannotation;
         p->defaults = defaults;
         p->kw_defaults = kw_defaults;
         return p;
 }
 
+arg_ty
+SimpleArg(identifier arg, expr_ty annotation, PyArena *arena)
+{
+        arg_ty p;
+        if (!arg) {
+                PyErr_SetString(PyExc_ValueError,
+                                "field arg is required for SimpleArg");
+                return NULL;
+        }
+        p = (arg_ty)PyArena_Malloc(arena, sizeof(*p));
+        if (!p) {
+                PyErr_NoMemory();
+                return NULL;
+        }
+        p->kind = SimpleArg_kind;
+        p->v.SimpleArg.arg = arg;
+        p->v.SimpleArg.annotation = annotation;
+        return p;
+}
+
+arg_ty
+NestedArgs(asdl_seq * args, PyArena *arena)
+{
+        arg_ty p;
+        p = (arg_ty)PyArena_Malloc(arena, sizeof(*p));
+        if (!p) {
+                PyErr_NoMemory();
+                return NULL;
+        }
+        p->kind = NestedArgs_kind;
+        p->v.NestedArgs.args = args;
+        return p;
+}
+
 keyword_ty
 keyword(identifier arg, expr_ty value, PyArena *arena)
 {
@@ -1981,6 +2042,11 @@
                 if (PyObject_SetAttrString(result, "decorators", value) == -1)
                         goto failed;
                 Py_DECREF(value);
+                value = ast2obj_expr(o->v.FunctionDef.returns);
+                if (!value) goto failed;
+                if (PyObject_SetAttrString(result, "returns", value) == -1)
+                        goto failed;
+                Py_DECREF(value);
                 break;
         case ClassDef_kind:
                 result = PyType_GenericNew(ClassDef_type, NULL, NULL);
@@ -2901,7 +2967,7 @@
 
         result = PyType_GenericNew(arguments_type, NULL, NULL);
         if (!result) return NULL;
-        value = ast2obj_list(o->args, ast2obj_expr);
+        value = ast2obj_list(o->args, ast2obj_arg);
         if (!value) goto failed;
         if (PyObject_SetAttrString(result, "args", value) == -1)
                 goto failed;
@@ -2911,7 +2977,12 @@
         if (PyObject_SetAttrString(result, "vararg", value) == -1)
                 goto failed;
         Py_DECREF(value);
-        value = ast2obj_list(o->kwonlyargs, ast2obj_expr);
+        value = ast2obj_expr(o->varargannotation);
+        if (!value) goto failed;
+        if (PyObject_SetAttrString(result, "varargannotation", value) == -1)
+                goto failed;
+        Py_DECREF(value);
+        value = ast2obj_list(o->kwonlyargs, ast2obj_arg);
         if (!value) goto failed;
         if (PyObject_SetAttrString(result, "kwonlyargs", value) == -1)
                 goto failed;
@@ -2921,6 +2992,11 @@
         if (PyObject_SetAttrString(result, "kwarg", value) == -1)
                 goto failed;
         Py_DECREF(value);
+        value = ast2obj_expr(o->kwargannotation);
+        if (!value) goto failed;
+        if (PyObject_SetAttrString(result, "kwargannotation", value) == -1)
+                goto failed;
+        Py_DECREF(value);
         value = ast2obj_list(o->defaults, ast2obj_expr);
         if (!value) goto failed;
         if (PyObject_SetAttrString(result, "defaults", value) == -1)
@@ -2939,6 +3015,48 @@
 }
 
 PyObject*
+ast2obj_arg(void* _o)
+{
+        arg_ty o = (arg_ty)_o;
+        PyObject *result = NULL, *value = NULL;
+        if (!o) {
+                Py_INCREF(Py_None);
+                return Py_None;
+        }
+
+        switch (o->kind) {
+        case SimpleArg_kind:
+                result = PyType_GenericNew(SimpleArg_type, NULL, NULL);
+                if (!result) goto failed;
+                value = ast2obj_identifier(o->v.SimpleArg.arg);
+                if (!value) goto failed;
+                if (PyObject_SetAttrString(result, "arg", value) == -1)
+                        goto failed;
+                Py_DECREF(value);
+                value = ast2obj_expr(o->v.SimpleArg.annotation);
+                if (!value) goto failed;
+                if (PyObject_SetAttrString(result, "annotation", value) == -1)
+                        goto failed;
+                Py_DECREF(value);
+                break;
+        case NestedArgs_kind:
+                result = PyType_GenericNew(NestedArgs_type, NULL, NULL);
+                if (!result) goto failed;
+                value = ast2obj_list(o->v.NestedArgs.args, ast2obj_arg);
+                if (!value) goto failed;
+                if (PyObject_SetAttrString(result, "args", value) == -1)
+                        goto failed;
+                Py_DECREF(value);
+                break;
+        }
+        return result;
+failed:
+        Py_XDECREF(value);
+        Py_XDECREF(result);
+        return NULL;
+}
+
+PyObject*
 ast2obj_keyword(void* _o)
 {
         keyword_ty o = (keyword_ty)_o;
@@ -3008,7 +3126,7 @@
         if (PyDict_SetItemString(d, "AST", (PyObject*)AST_type) < 0) return;
         if (PyModule_AddIntConstant(m, "PyCF_ONLY_AST", PyCF_ONLY_AST) < 0)
                 return;
-        if (PyModule_AddStringConstant(m, "__version__", "51773") < 0)
+        if (PyModule_AddStringConstant(m, "__version__", "52491") < 0)
                 return;
         if (PyDict_SetItemString(d, "mod", (PyObject*)mod_type) < 0) return;
         if (PyDict_SetItemString(d, "Module", (PyObject*)Module_type) < 0)
@@ -3146,6 +3264,11 @@
             (PyObject*)excepthandler_type) < 0) return;
         if (PyDict_SetItemString(d, "arguments", (PyObject*)arguments_type) <
             0) return;
+        if (PyDict_SetItemString(d, "arg", (PyObject*)arg_type) < 0) return;
+        if (PyDict_SetItemString(d, "SimpleArg", (PyObject*)SimpleArg_type) <
+            0) return;
+        if (PyDict_SetItemString(d, "NestedArgs", (PyObject*)NestedArgs_type) <
+            0) return;
         if (PyDict_SetItemString(d, "keyword", (PyObject*)keyword_type) < 0)
             return;
         if (PyDict_SetItemString(d, "alias", (PyObject*)alias_type) < 0) return;
diff --git a/Python/ast.c b/Python/ast.c
index 411c42f..5ccd6f5 100644
--- a/Python/ast.c
+++ b/Python/ast.c
@@ -388,14 +388,14 @@
             expr_name = "list comprehension";
             break;
         case Dict_kind:
-	case Set_kind:
+        case Set_kind:
         case Num_kind:
         case Str_kind:
             expr_name = "literal";
             break;
-	case Ellipsis_kind:
-	    expr_name = "Ellipsis";
-	    break;
+        case Ellipsis_kind:
+            expr_name = "Ellipsis";
+            break;
         case Compare_kind:
             expr_name = "comparison";
             break;
@@ -553,59 +553,74 @@
     return seq;
 }
 
-static expr_ty
+static arg_ty
+compiler_simple_arg(struct compiling *c, const node *n)
+{
+    identifier name;
+    expr_ty annotation = NULL;
+    node *ch;
+
+    assert(TYPE(n) == tname || TYPE(n) == vname);
+    ch = CHILD(n, 0);
+    if (!strcmp(STR(ch), "None")) {
+        ast_error(ch, "assignment to None");
+        return NULL;
+    }
+    name = NEW_IDENTIFIER(ch);
+    if (!name)
+        return NULL;
+
+    if (NCH(n) == 3 && TYPE(CHILD(n, 1)) == COLON) {
+        annotation = ast_for_expr(c, CHILD(n, 2));
+        if (!annotation)
+            return NULL;
+    }
+
+    return SimpleArg(name, annotation, c->c_arena);
+}
+
+static arg_ty
 compiler_complex_args(struct compiling *c, const node *n)
 {
     int i, len = (NCH(n) + 1) / 2;
-    expr_ty result;
+    arg_ty arg;
     asdl_seq *args = asdl_seq_new(len, c->c_arena);
     if (!args)
         return NULL;
 
-    /* fpdef: NAME | '(' fplist ')'
-       fplist: fpdef (',' fpdef)* [',']
-    */
-    REQ(n, fplist);
+    assert(TYPE(n) == tfplist || TYPE(n) == vfplist);
     for (i = 0; i < len; i++) {
-        const node *fpdef_node = CHILD(n, 2*i);
-        const node *child;
-        expr_ty arg;
-set_name:
-        /* fpdef_node is either a NAME or an fplist */
-        child = CHILD(fpdef_node, 0);
-        if (TYPE(child) == NAME) {
-                if (!strcmp(STR(child), "None")) {
-                        ast_error(child, "assignment to None");
-                        return NULL;
-                    }   
-            arg = Name(NEW_IDENTIFIER(child), Store, LINENO(child),
-                       child->n_col_offset, c->c_arena);
-            }
-        else {
-            assert(TYPE(fpdef_node) == fpdef);
-            /* fpdef_node[0] is not a name, so it must be a '(', get CHILD[1] */
-            child = CHILD(fpdef_node, 1);
-            assert(TYPE(child) == fplist);
-            /* NCH == 1 means we have (x), we need to elide the extra parens */
-            if (NCH(child) == 1) {
-                fpdef_node = CHILD(child, 0);
-                assert(TYPE(fpdef_node) == fpdef);
-                goto set_name;
-            }
-            arg = compiler_complex_args(c, child);
+        const node *child = CHILD(n, 2*i);
+        /* def foo(((x), y)): -- x is not nested complex, special case. */
+        while (NCH(child) == 3 && NCH(CHILD(child, 1)) == 1)
+            child = CHILD(CHILD(child, 1), 0);
+
+        /* child either holds a tname or '(', a tfplist, ')' */
+        switch (TYPE(CHILD(child, 0))) {
+        case tname:
+        case vname:
+            arg = compiler_simple_arg(c, CHILD(child, 0));
+            break;
+        case LPAR:
+            arg = compiler_complex_args(c, CHILD(child, 1));
+            break;
+        default:
+            PyErr_Format(PyExc_SystemError,
+                             "unexpected node in args: %d @ %d",
+                             TYPE(CHILD(child, 0)), i);
+            arg = NULL;
         }
+        if (!arg)
+            return NULL;
         asdl_seq_SET(args, i, arg);
     }
 
-    result = Tuple(args, Store, LINENO(n), n->n_col_offset, c->c_arena);
-    if (!set_context(result, Store, n))
-        return NULL;
-    return result;
+    return NestedArgs(args, c->c_arena);
 }
 
 /* returns -1 if failed to handle keyword only arguments
    returns new position to keep processing if successful
-               (',' NAME ['=' test])* 
+               (',' tname ['=' test])*
                      ^^^
    start pointing here
  */
@@ -614,7 +629,8 @@
                         asdl_seq *kwonlyargs, asdl_seq *kwdefaults)
 {
     node *ch;
-    expr_ty name;
+    expr_ty expression, annotation;
+    arg_ty arg;
     int i = start;
     int j = 0; /* index for kwdefaults and kwonlyargs */
     assert(kwonlyargs != NULL);
@@ -622,9 +638,10 @@
     while (i < NCH(n)) {
         ch = CHILD(n, i);
         switch (TYPE(ch)) {
-            case NAME:
+            case vname:
+            case tname:
                 if (i + 1 < NCH(n) && TYPE(CHILD(n, i + 1)) == EQUAL) {
-                    expr_ty expression = ast_for_expr(c, CHILD(n, i + 2));
+                    expression = ast_for_expr(c, CHILD(n, i + 2));
                     if (!expression) {
                         ast_error(ch, "assignment to None");
                         goto error;
@@ -635,18 +652,28 @@
                 else { /* setting NULL if no default value exists */
                     asdl_seq_SET(kwdefaults, j, NULL);
                 }
+                if (NCH(ch) == 3) {
+                    /* ch is NAME ':' test */
+                    annotation = ast_for_expr(c, CHILD(ch, 2));
+                    if (!annotation) {
+                        ast_error(ch, "expected expression");
+                        goto error;
+                    }
+                }
+                else {
+                    annotation = NULL;
+                }
+                ch = CHILD(ch, 0);
                 if (!strcmp(STR(ch), "None")) {
                     ast_error(ch, "assignment to None");
                     goto error;
                 }
-                name = Name(NEW_IDENTIFIER(ch),
-                            Param, LINENO(ch), ch->n_col_offset,
-                            c->c_arena);
-                if (!name) {
+                arg = SimpleArg(NEW_IDENTIFIER(ch), annotation, c->c_arena);
+                if (!arg) {
                     ast_error(ch, "expecting name");
                     goto error;
                 }
-                asdl_seq_SET(kwonlyargs, j++, name);
+                asdl_seq_SET(kwonlyargs, j++, arg);
                 i += 2; /* the name and the comma */
                 break;
             case DOUBLESTAR:
@@ -666,29 +693,41 @@
 static arguments_ty
 ast_for_arguments(struct compiling *c, const node *n)
 {
-    /* parameters: '(' [varargslist] ')'
-       varargslist: (fpdef ['=' test] ',')* 
-             ('*' [NAME] (',' fpdef ['=' test])* [',' '**' NAME] | '**' NAME)
-             | fpdef ['=' test] (',' fpdef ['=' test])* [',']
+    /* This function handles both typedargslist (function definition)
+       and varargslist (lambda definition).
+
+       parameters: '(' [typedargslist] ')'
+       typedargslist: ((tfpdef ['=' test] ',')*
+           ('*' [tname] (',' tname ['=' test])* [',' '**' tname]
+           | '**' tname)
+           | tfpdef ['=' test] (',' tfpdef ['=' test])* [','])
+       varargslist: ((vfpdef ['=' test] ',')*
+           ('*' [vname] (',' vname ['=' test])*  [',' '**' vname]
+           | '**' vname)
+           | vfpdef ['=' test] (',' vfpdef ['=' test])* [','])
     */
     int i, j, k, nposargs = 0, nkwonlyargs = 0;
     int nposdefaults = 0, found_default = 0;
     asdl_seq *posargs, *posdefaults, *kwonlyargs, *kwdefaults;
     identifier vararg = NULL, kwarg = NULL;
+    arg_ty arg;
+    expr_ty varargannotation = NULL, kwargannotation = NULL;
     node *ch;
 
     if (TYPE(n) == parameters) {
         if (NCH(n) == 2) /* () as argument list */
-            return arguments(NULL, NULL, NULL, NULL, NULL, NULL, c->c_arena);
+            return arguments(NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+                             NULL, c->c_arena);
         n = CHILD(n, 1);
     }
-    REQ(n, varargslist);
+    assert(TYPE(n) == typedargslist || TYPE(n) == varargslist);
 
     /* first count the number of positional args & defaults */
     for (i = 0; i < NCH(n); i++) {
         ch = CHILD(n, i);
         if (TYPE(ch) == STAR) {
-            if (TYPE(CHILD(n, i+1)) == NAME) {
+            if (TYPE(CHILD(n, i+1)) == tname
+                || TYPE(CHILD(n, i+1)) == vname) {
             /* skip NAME of vararg */
             /* so that following can count only keyword only args */
                 i += 2;
@@ -698,7 +737,7 @@
             }
             break; 
         }
-        if (TYPE(ch) == fpdef) nposargs++;
+        if (TYPE(ch) == vfpdef || TYPE(ch) == tfpdef) nposargs++;
         if (TYPE(ch) == EQUAL) nposdefaults++;
     }
     /* count the number of keyword only args & 
@@ -706,35 +745,39 @@
     for ( ; i < NCH(n); ++i) {
         ch = CHILD(n, i);
         if (TYPE(ch) == DOUBLESTAR) break;
-        if (TYPE(ch) == NAME) nkwonlyargs++;
+        if (TYPE(ch) == tname || TYPE(ch) == vname) nkwonlyargs++;
     }
 
     posargs = (nposargs ? asdl_seq_new(nposargs, c->c_arena) : NULL);
     if (!posargs && nposargs)
-            return NULL; /* Don't need to goto error; no objects allocated */
+        goto error;
     kwonlyargs = (nkwonlyargs ?
                    asdl_seq_new(nkwonlyargs, c->c_arena) : NULL);
     if (!kwonlyargs && nkwonlyargs)
-            return NULL; /* Don't need to goto error; no objects allocated */
+        goto error;
     posdefaults = (nposdefaults ? 
                     asdl_seq_new(nposdefaults, c->c_arena) : NULL);
     if (!posdefaults && nposdefaults)
-            return NULL; /* Don't need to goto error; no objects allocated */
+        goto error;
     /* The length of kwonlyargs and kwdefaults are same 
        since we set NULL as default for keyword only argument w/o default
        - we have sequence data structure, but no dictionary */
-    kwdefaults = (nkwonlyargs ? 
+    kwdefaults = (nkwonlyargs ?
                    asdl_seq_new(nkwonlyargs, c->c_arena) : NULL);
     if (!kwdefaults && nkwonlyargs)
-            return NULL; /* Don't need to goto error; no objects allocated */
+        goto error;
 
     if (nposargs + nkwonlyargs > 255) {
-		ast_error(n, "more than 255 arguments");
-		return NULL;
+        ast_error(n, "more than 255 arguments");
+        return NULL;
     }
 
-    /* fpdef: NAME | '(' fplist ')'
-       fplist: fpdef (',' fpdef)* [',']
+    /* tname: NAME [':' test]
+       tfpdef: tname | '(' tfplist ')'
+       tfplist: tfpdef (',' tfpdef)* [',']
+       vname: NAME
+       vfpdef: NAME | '(' vfplist ')'
+       vfplist: vfpdef (',' vfpdef)* [',']
     */
     i = 0;
     j = 0;  /* index for defaults */
@@ -742,8 +785,8 @@
     while (i < NCH(n)) {
         ch = CHILD(n, i);
         switch (TYPE(ch)) {
-            case fpdef:
-            handle_fpdef:
+            case tfpdef:
+            case vfpdef:
                 /* XXX Need to worry about checking if TYPE(CHILD(n, i+1)) is
                    anything other than EQUAL or a comma? */
                 /* XXX Should NCH(n) check be made a separate check? */
@@ -753,7 +796,6 @@
                         goto error;
                     assert(posdefaults != NULL);
                     asdl_seq_SET(posdefaults, j++, expression);
-
                     i += 2;
                     found_default = 1;
                 }
@@ -762,59 +804,47 @@
                              "non-default argument follows default argument");
                     goto error;
                 }
-                if (NCH(ch) == 3) {
-                    ch = CHILD(ch, 1);
-                    /* def foo((x)): is not complex, special case. */
-                    if (NCH(ch) != 1) {
-                        /* We have complex arguments, setup for unpacking. */
-                        asdl_seq_SET(posargs, k++,
-                                     compiler_complex_args(c, ch));
-                    } else {
-                        /* def foo((x)): setup for checking NAME below. */
-                        /* Loop because there can be many parens and tuple
-                           unpacking mixed in. */
-                        ch = CHILD(ch, 0);
-                        assert(TYPE(ch) == fpdef);
-                        goto handle_fpdef;
-                    }
-                }
-                if (TYPE(CHILD(ch, 0)) == NAME) {
-                    expr_ty name;
-                    if (!strcmp(STR(CHILD(ch, 0)), "None")) {
-                            ast_error(CHILD(ch, 0), "assignment to None");
-                            goto error;
-                    }
-                    name = Name(NEW_IDENTIFIER(CHILD(ch, 0)),
-                                Param, LINENO(ch), ch->n_col_offset,
-                                c->c_arena);
-                    if (!name)
-                        goto error;
-                    asdl_seq_SET(posargs, k++, name);
+                /* def foo((x)): is not complex, special case. */
+                while (NCH(ch) == 3 && NCH(CHILD(ch, 1)) == 1)
+                    ch = CHILD(CHILD(ch, 1), 0);
 
-                }
+                if (NCH(ch) != 1)
+                    arg = compiler_complex_args(c, CHILD(ch, 1));
+                else
+                    arg = compiler_simple_arg(c, CHILD(ch, 0));
+                if (!arg)
+                    goto error;
+                asdl_seq_SET(posargs, k++, arg);
+
                 i += 2; /* the name and the comma */
                 break;
             case STAR:
                 if (i+1 >= NCH(n)) {
                     ast_error(CHILD(n, i), "no name for vararg");
-		    goto error;
+                    goto error;
                 }
-                if (!strcmp(STR(CHILD(n, i+1)), "None")) {
-                        ast_error(CHILD(n, i+1), "assignment to None");
-                        goto error;
-                }
-                if (TYPE(CHILD(n, i+1)) == COMMA) {
-                    int res = 0;    
+                ch = CHILD(n, i+1);  /* tname or COMMA */
+                if (TYPE(ch) == COMMA) {
+                    int res = 0;
                     i += 2; /* now follows keyword only arguments */
                     res = handle_keywordonly_args(c, n, i,
                                                   kwonlyargs, kwdefaults);
                     if (res == -1) goto error;
                     i = res; /* res has new position to process */
                 }
+                else if (!strcmp(STR(CHILD(ch, 0)), "None")) {
+                    ast_error(CHILD(ch, 0), "assignment to None");
+                    goto error;
+                }
                 else {
-                    vararg = NEW_IDENTIFIER(CHILD(n, i+1));
+                    vararg = NEW_IDENTIFIER(CHILD(ch, 0));
+                    if (NCH(ch) > 1) {
+                            /* there is an annotation on the vararg */
+                            varargannotation = ast_for_expr(c, CHILD(ch, 2));
+                    }
                     i += 3;
-                    if (i < NCH(n) && TYPE(CHILD(n, i)) == NAME) {
+                    if (i < NCH(n) && (TYPE(CHILD(n, i)) == tname
+                                    || TYPE(CHILD(n, i)) == vname)) {
                         int res = 0;
                         res = handle_keywordonly_args(c, n, i,
                                                       kwonlyargs, kwdefaults);
@@ -824,11 +854,17 @@
                 }
                 break;
             case DOUBLESTAR:
-                if (!strcmp(STR(CHILD(n, i+1)), "None")) {
-                        ast_error(CHILD(n, i+1), "assignment to None");
+                ch = CHILD(n, i+1);  /* tname */
+                assert(TYPE(ch) == tname || TYPE(ch) == vname);
+                if (!strcmp(STR(CHILD(ch, 0)), "None")) {
+                        ast_error(CHILD(ch, 0), "assignment to None");
                         goto error;
                 }
-                kwarg = NEW_IDENTIFIER(CHILD(n, i+1));
+                kwarg = NEW_IDENTIFIER(CHILD(ch, 0));
+                if (NCH(ch) > 1) {
+                    /* there is an annotation on the kwarg */
+                    kwargannotation = ast_for_expr(c, CHILD(ch, 2));
+                }
                 i += 3;
                 break;
             default:
@@ -838,8 +874,8 @@
                 goto error;
         }
     }
-    return arguments(posargs, vararg, kwonlyargs, kwarg, 
-                     posdefaults, kwdefaults, c->c_arena);
+    return arguments(posargs, vararg, varargannotation, kwonlyargs, kwarg,
+                    kwargannotation, posdefaults, kwdefaults, c->c_arena);
  error:
     Py_XDECREF(vararg);
     Py_XDECREF(kwarg);
@@ -938,11 +974,12 @@
 static stmt_ty
 ast_for_funcdef(struct compiling *c, const node *n)
 {
-    /* funcdef: 'def' [decorators] NAME parameters ':' suite */
+    /* funcdef: 'def' [decorators] NAME parameters ['->' test] ':' suite */
     identifier name;
     arguments_ty args;
     asdl_seq *body;
     asdl_seq *decorator_seq = NULL;
+    expr_ty returns = NULL;
     int name_i;
 
     REQ(n, funcdef);
@@ -967,11 +1004,17 @@
     args = ast_for_arguments(c, CHILD(n, name_i + 1));
     if (!args)
         return NULL;
+    if (TYPE(CHILD(n, name_i+2)) == RARROW) {
+        returns = ast_for_expr(c, CHILD(n, name_i + 3));
+        if (!returns)
+                return NULL;
+        name_i += 2;
+    }
     body = ast_for_suite(c, CHILD(n, name_i + 3));
     if (!body)
         return NULL;
 
-    return FunctionDef(name, args, body, decorator_seq, LINENO(n),
+    return FunctionDef(name, args, body, decorator_seq, returns, LINENO(n),
                        n->n_col_offset, c->c_arena);
 }
 
@@ -983,7 +1026,8 @@
     expr_ty expression;
 
     if (NCH(n) == 3) {
-        args = arguments(NULL, NULL, NULL, NULL, NULL, NULL, c->c_arena);
+        args = arguments(NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+                         NULL, c->c_arena);
         if (!args)
             return NULL;
         expression = ast_for_expr(c, CHILD(n, 2));
@@ -1361,9 +1405,8 @@
         PyArena_AddPyObject(c->c_arena, pynum);
         return Num(pynum, LINENO(n), n->n_col_offset, c->c_arena);
     }
-    case DOT:
-    	/* Ellipsis */
-	return Ellipsis(LINENO(n), n->n_col_offset, c->c_arena);
+    case DOT: /* Ellipsis */
+        return Ellipsis(LINENO(n), n->n_col_offset, c->c_arena);
     case LPAR: /* some parenthesized expressions */
         ch = CHILD(n, 1);
         
@@ -1394,13 +1437,13 @@
         else
             return ast_for_listcomp(c, ch);
     case LBRACE: {
-	/* dictsetmaker: test ':' test (',' test ':' test)* [','] |
-	 *               test (',' test)* [',']  */
-	int i, size;
-	asdl_seq *keys, *values;
-	
-	ch = CHILD(n, 1);
-	if (NCH(ch) == 1 || (NCH(ch) > 0 && STR(CHILD(ch, 1))[0] == ',')) {
+        /* dictsetmaker: test ':' test (',' test ':' test)* [','] |
+         *               test (',' test)* [',']  */
+        int i, size;
+        asdl_seq *keys, *values;
+
+        ch = CHILD(n, 1);
+        if (NCH(ch) == 1 || (NCH(ch) > 0 && STR(CHILD(ch, 1))[0] == ',')) {
             /* it's a set */
             size = (NCH(ch) + 1) / 2; /* +1 in case no trailing comma */
             keys = asdl_seq_new(size, c->c_arena);
@@ -3046,10 +3089,10 @@
         n = CHILD(n, 0);
     }
     if (TYPE(n) == small_stmt) {
-	REQ(n, small_stmt);
-	n = CHILD(n, 0);
-	/* small_stmt: expr_stmt | print_stmt  | del_stmt | pass_stmt
-	             | flow_stmt | import_stmt | global_stmt | assert_stmt
+        REQ(n, small_stmt);
+        n = CHILD(n, 0);
+        /* small_stmt: expr_stmt | print_stmt  | del_stmt | pass_stmt
+                     | flow_stmt | import_stmt | global_stmt | assert_stmt
         */
         switch (TYPE(n)) {
             case expr_stmt:
diff --git a/Python/ceval.c b/Python/ceval.c
index 82aa668..f5ebb8e 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -2293,10 +2293,37 @@
 		{
 		    int posdefaults = oparg & 0xff;
 		    int kwdefaults = (oparg>>8) & 0xff;
+		    int num_annotations = (oparg >> 16) & 0x7fff;
 
 			v = POP(); /* code object */
 			x = PyFunction_New(v, f->f_globals);
 			Py_DECREF(v);
+
+			if (x != NULL && num_annotations > 0) {
+				Py_ssize_t name_ix;
+				u = POP(); /* names of args with annotations */
+				v = PyDict_New();
+				if (v == NULL) {
+					Py_DECREF(x);
+					x = NULL;
+					break;
+				}
+				name_ix = PyTuple_Size(u);
+				assert(num_annotations == name_ix+1);
+				while (name_ix > 0) {
+					--name_ix;
+					t = PyTuple_GET_ITEM(u, name_ix);
+					w = POP();
+					/* XXX(nnorwitz): check for errors */
+					PyDict_SetItem(v, t, w);
+					Py_DECREF(w);
+				}
+
+				err = PyFunction_SetAnnotations(x, v);
+				Py_DECREF(v);
+				Py_DECREF(u);
+			}
+
 			/* XXX Maybe this should be a separate opcode? */
 			if (x != NULL && posdefaults > 0) {
 				v = PyTuple_New(posdefaults);
@@ -2322,6 +2349,7 @@
 				while (--kwdefaults >= 0) {
 					w = POP(); /* default value */
 					u = POP(); /* kw only arg name */
+					/* XXX(nnorwitz): check for errors */
 					PyDict_SetItem(v, u, w);
 				}
 				err = PyFunction_SetKwDefaults(x, v);
diff --git a/Python/compile.c b/Python/compile.c
index bdafd92..d2374a9 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -832,7 +832,7 @@
 
 		case RAISE_VARARGS:
 			return -oparg;
-#define NARGS(o) (((o) % 256) + 2*((o) / 256))
+#define NARGS(o) (((o) % 256) + 2*(((o) / 256) % 256))
 		case CALL_FUNCTION:
 			return -NARGS(oparg);
 		case CALL_FUNCTION_VAR:
@@ -841,7 +841,7 @@
 		case CALL_FUNCTION_VAR_KW:
 			return -NARGS(oparg)-2;
 		case MAKE_FUNCTION:
-			return -NARGS(oparg);
+			return -NARGS(oparg) - ((oparg >> 16) & 0xffff);
 #undef NARGS
 		case BUILD_SLICE:
 			if (oparg == 3)
@@ -1267,14 +1267,37 @@
 }
 
 static int
+compiler_unpack_nested(struct compiler *c, asdl_seq *args) {
+	int i, len;
+	len = asdl_seq_LEN(args);
+	ADDOP_I(c, UNPACK_SEQUENCE, len);
+	for (i = 0; i < len; i++) {
+		arg_ty elt = (arg_ty)asdl_seq_GET(args, i);
+		switch (elt->kind) {
+		case SimpleArg_kind:
+			if (!compiler_nameop(c, elt->v.SimpleArg.arg, Store))
+				return 0;
+			break;
+		case NestedArgs_kind:
+			if (!compiler_unpack_nested(c, elt->v.NestedArgs.args))
+				return 0;
+			break;
+		default:
+			return 0;
+		}
+    }
+    return 1;
+}
+
+static int
 compiler_arguments(struct compiler *c, arguments_ty args)
 {
 	int i;
 	int n = asdl_seq_LEN(args->args);
-	/* Correctly handle nested argument lists */
+
 	for (i = 0; i < n; i++) {
-		expr_ty arg = (expr_ty)asdl_seq_GET(args->args, i);
-		if (arg->kind == Tuple_kind) {
+		arg_ty arg = (arg_ty)asdl_seq_GET(args->args, i);
+		if (arg->kind == NestedArgs_kind) {
 			PyObject *id = PyString_FromFormat(".%d", i);
 			if (id == NULL) {
 				return 0;
@@ -1284,7 +1307,8 @@
 				return 0;
 			}
 			Py_DECREF(id);
-			VISIT(c, expr, arg);
+			if (!compiler_unpack_nested(c, arg->v.NestedArgs.args))
+				return 0;
 		}
 	}
 	return 1;
@@ -1296,10 +1320,10 @@
 {
 	int i, default_count = 0;
 	for (i = 0; i < asdl_seq_LEN(kwonlyargs); i++) {
-		expr_ty arg = asdl_seq_GET(kwonlyargs, i);
+		arg_ty arg = asdl_seq_GET(kwonlyargs, i);
 		expr_ty default_ = asdl_seq_GET(kw_defaults, i);
 		if (default_) {
-			ADDOP_O(c, LOAD_CONST, arg->v.Name.id, consts);
+			ADDOP_O(c, LOAD_CONST, arg->v.SimpleArg.arg, consts);
 			if (!compiler_visit_expr(c, default_)) {
 			    return -1;
 			}
@@ -1310,14 +1334,112 @@
 }
 
 static int
+compiler_visit_argannotation(struct compiler *c, identifier id,
+    expr_ty annotation, PyObject *names)
+{
+	if (annotation) {
+		VISIT(c, expr, annotation);
+		if (PyList_Append(names, id))
+			return -1;
+	}
+	return 0;
+}
+
+static int
+compiler_visit_argannotations(struct compiler *c, asdl_seq* args,
+                              PyObject *names)
+{
+	int i, error;
+	for (i = 0; i < asdl_seq_LEN(args); i++) {
+		arg_ty arg = (arg_ty)asdl_seq_GET(args, i);
+		if (arg->kind == NestedArgs_kind)
+			error = compiler_visit_argannotations(
+			           c,
+			           arg->v.NestedArgs.args,
+			           names);
+		else
+			error = compiler_visit_argannotation(
+			           c,
+			           arg->v.SimpleArg.arg,
+			           arg->v.SimpleArg.annotation,
+			           names);
+		if (error)
+			return error;
+	}
+	return 0;
+}
+
+static int
+compiler_visit_annotations(struct compiler *c, arguments_ty args,
+                           expr_ty returns)
+{
+	/* push arg annotations and a list of the argument names. return the #
+	   of items pushed. this is out-of-order wrt the source code. */
+	static identifier return_str;
+	PyObject *names;
+	int len;
+	names = PyList_New(0);
+	if (!names)
+		return -1;
+
+	if (compiler_visit_argannotations(c, args->args, names))
+		goto error;
+	if (args->varargannotation &&
+	    compiler_visit_argannotation(c, args->vararg,
+	                                 args->varargannotation, names))
+		goto error;
+	if (compiler_visit_argannotations(c, args->kwonlyargs, names))
+		goto error;
+	if (args->kwargannotation &&
+	    compiler_visit_argannotation(c, args->kwarg,
+	                                 args->kwargannotation, names))
+		goto error;
+
+	if (!return_str) {
+		return_str = PyString_InternFromString("return");
+		if (!return_str)
+			goto error;
+	}
+	if (compiler_visit_argannotation(c, return_str, returns, names)) {
+		goto error;
+	}
+
+	len = PyList_GET_SIZE(names);
+	if (len) {
+		/* convert names to a tuple and place on stack */
+		PyObject *elt;
+		int i;
+		PyObject *s = PyTuple_New(len);
+		if (!s)
+			goto error;
+		for (i = 0; i < len; i++) {
+			elt = PyList_GET_ITEM(names, i);
+			Py_INCREF(elt);
+			PyTuple_SET_ITEM(s, i, elt);
+		}
+		ADDOP_O(c, LOAD_CONST, s, consts);
+		Py_DECREF(s);
+		len++; /* include the just-pushed tuple */
+	}
+	Py_DECREF(names);
+	return len;
+
+error:
+	Py_DECREF(names);
+	return -1;
+}
+
+static int
 compiler_function(struct compiler *c, stmt_ty s)
 {
 	PyCodeObject *co;
 	PyObject *first_const = Py_None;
 	arguments_ty args = s->v.FunctionDef.args;
+	expr_ty returns = s->v.FunctionDef.returns;
 	asdl_seq* decos = s->v.FunctionDef.decorators;
 	stmt_ty st;
 	int i, n, docstring, kw_default_count = 0, arglength;
+	int num_annotations;
 
 	assert(s->kind == FunctionDef_kind);
 
@@ -1332,6 +1454,7 @@
 	}
 	if (args->defaults)
 		VISIT_SEQ(c, expr, args->defaults);
+	num_annotations = compiler_visit_annotations(c, args, returns);
 
 	if (!compiler_enter_scope(c, s->v.FunctionDef.name, (void *)s,
 				  s->lineno))
@@ -1364,9 +1487,11 @@
 
 	arglength = asdl_seq_LEN(args->defaults);
 	arglength |= kw_default_count << 8;
+	arglength |= num_annotations << 16;
 	compiler_make_closure(c, co, arglength);
 	Py_DECREF(co);
 
+        /* decorators */
 	for (i = 0; i < asdl_seq_LEN(decos); i++) {
 		ADDOP_I(c, CALL_FUNCTION, 1);
 	}
diff --git a/Python/graminit.c b/Python/graminit.c
index 0e94db4..93ee69a 100644
--- a/Python/graminit.c
+++ b/Python/graminit.c
@@ -99,29 +99,38 @@
 static arc arcs_5_3[1] = {
 	{20, 4},
 };
-static arc arcs_5_4[1] = {
+static arc arcs_5_4[2] = {
 	{21, 5},
+	{23, 6},
 };
 static arc arcs_5_5[1] = {
-	{22, 6},
+	{22, 7},
 };
 static arc arcs_5_6[1] = {
-	{0, 6},
+	{24, 8},
 };
-static state states_5[7] = {
+static arc arcs_5_7[1] = {
+	{23, 6},
+};
+static arc arcs_5_8[1] = {
+	{0, 8},
+};
+static state states_5[9] = {
 	{2, arcs_5_0},
 	{1, arcs_5_1},
 	{1, arcs_5_2},
 	{1, arcs_5_3},
-	{1, arcs_5_4},
+	{2, arcs_5_4},
 	{1, arcs_5_5},
 	{1, arcs_5_6},
+	{1, arcs_5_7},
+	{1, arcs_5_8},
 };
 static arc arcs_6_0[1] = {
 	{13, 1},
 };
 static arc arcs_6_1[2] = {
-	{23, 2},
+	{25, 2},
 	{15, 3},
 };
 static arc arcs_6_2[1] = {
@@ -137,54 +146,54 @@
 	{1, arcs_6_3},
 };
 static arc arcs_7_0[3] = {
-	{24, 1},
-	{28, 2},
-	{29, 3},
+	{26, 1},
+	{29, 2},
+	{31, 3},
 };
 static arc arcs_7_1[3] = {
-	{25, 4},
-	{27, 5},
+	{27, 4},
+	{28, 5},
 	{0, 1},
 };
 static arc arcs_7_2[3] = {
-	{19, 6},
-	{27, 7},
+	{30, 6},
+	{28, 7},
 	{0, 2},
 };
 static arc arcs_7_3[1] = {
-	{19, 8},
+	{30, 8},
 };
 static arc arcs_7_4[1] = {
-	{26, 9},
+	{22, 9},
 };
 static arc arcs_7_5[4] = {
-	{24, 1},
-	{28, 2},
-	{29, 3},
+	{26, 1},
+	{29, 2},
+	{31, 3},
 	{0, 5},
 };
 static arc arcs_7_6[2] = {
-	{27, 7},
+	{28, 7},
 	{0, 6},
 };
 static arc arcs_7_7[2] = {
-	{19, 10},
-	{29, 3},
+	{30, 10},
+	{31, 3},
 };
 static arc arcs_7_8[1] = {
 	{0, 8},
 };
 static arc arcs_7_9[2] = {
-	{27, 5},
+	{28, 5},
 	{0, 9},
 };
 static arc arcs_7_10[3] = {
-	{27, 7},
-	{25, 11},
+	{28, 7},
+	{27, 11},
 	{0, 10},
 };
 static arc arcs_7_11[1] = {
-	{26, 6},
+	{22, 6},
 };
 static state states_7[12] = {
 	{3, arcs_7_0},
@@ -200,261 +209,330 @@
 	{3, arcs_7_10},
 	{1, arcs_7_11},
 };
-static arc arcs_8_0[2] = {
+static arc arcs_8_0[1] = {
 	{19, 1},
-	{13, 2},
 };
-static arc arcs_8_1[1] = {
+static arc arcs_8_1[2] = {
+	{23, 2},
 	{0, 1},
 };
 static arc arcs_8_2[1] = {
-	{30, 3},
+	{22, 3},
 };
 static arc arcs_8_3[1] = {
-	{15, 1},
+	{0, 3},
 };
 static state states_8[4] = {
-	{2, arcs_8_0},
-	{1, arcs_8_1},
+	{1, arcs_8_0},
+	{2, arcs_8_1},
 	{1, arcs_8_2},
 	{1, arcs_8_3},
 };
-static arc arcs_9_0[1] = {
-	{24, 1},
+static arc arcs_9_0[2] = {
+	{30, 1},
+	{13, 2},
 };
-static arc arcs_9_1[2] = {
-	{27, 2},
+static arc arcs_9_1[1] = {
 	{0, 1},
 };
-static arc arcs_9_2[2] = {
-	{24, 1},
+static arc arcs_9_2[1] = {
+	{32, 3},
+};
+static arc arcs_9_3[1] = {
+	{15, 1},
+};
+static state states_9[4] = {
+	{2, arcs_9_0},
+	{1, arcs_9_1},
+	{1, arcs_9_2},
+	{1, arcs_9_3},
+};
+static arc arcs_10_0[1] = {
+	{26, 1},
+};
+static arc arcs_10_1[2] = {
+	{28, 2},
+	{0, 1},
+};
+static arc arcs_10_2[2] = {
+	{26, 1},
 	{0, 2},
 };
-static state states_9[3] = {
-	{1, arcs_9_0},
-	{2, arcs_9_1},
-	{2, arcs_9_2},
+static state states_10[3] = {
+	{1, arcs_10_0},
+	{2, arcs_10_1},
+	{2, arcs_10_2},
 };
-static arc arcs_10_0[2] = {
-	{3, 1},
-	{4, 1},
+static arc arcs_11_0[3] = {
+	{34, 1},
+	{29, 2},
+	{31, 3},
 };
-static arc arcs_10_1[1] = {
+static arc arcs_11_1[3] = {
+	{27, 4},
+	{28, 5},
 	{0, 1},
 };
-static state states_10[2] = {
-	{2, arcs_10_0},
-	{1, arcs_10_1},
-};
-static arc arcs_11_0[1] = {
-	{31, 1},
-};
-static arc arcs_11_1[2] = {
-	{32, 2},
-	{2, 3},
-};
-static arc arcs_11_2[2] = {
-	{31, 1},
-	{2, 3},
+static arc arcs_11_2[3] = {
+	{35, 6},
+	{28, 7},
+	{0, 2},
 };
 static arc arcs_11_3[1] = {
-	{0, 3},
+	{35, 8},
 };
-static state states_11[4] = {
-	{1, arcs_11_0},
-	{2, arcs_11_1},
-	{2, arcs_11_2},
-	{1, arcs_11_3},
+static arc arcs_11_4[1] = {
+	{22, 9},
 };
-static arc arcs_12_0[8] = {
-	{33, 1},
+static arc arcs_11_5[4] = {
 	{34, 1},
-	{35, 1},
-	{36, 1},
-	{37, 1},
-	{38, 1},
-	{39, 1},
-	{40, 1},
+	{29, 2},
+	{31, 3},
+	{0, 5},
+};
+static arc arcs_11_6[2] = {
+	{28, 7},
+	{0, 6},
+};
+static arc arcs_11_7[2] = {
+	{35, 10},
+	{31, 3},
+};
+static arc arcs_11_8[1] = {
+	{0, 8},
+};
+static arc arcs_11_9[2] = {
+	{28, 5},
+	{0, 9},
+};
+static arc arcs_11_10[3] = {
+	{28, 7},
+	{27, 11},
+	{0, 10},
+};
+static arc arcs_11_11[1] = {
+	{22, 6},
+};
+static state states_11[12] = {
+	{3, arcs_11_0},
+	{3, arcs_11_1},
+	{3, arcs_11_2},
+	{1, arcs_11_3},
+	{1, arcs_11_4},
+	{4, arcs_11_5},
+	{2, arcs_11_6},
+	{2, arcs_11_7},
+	{1, arcs_11_8},
+	{2, arcs_11_9},
+	{3, arcs_11_10},
+	{1, arcs_11_11},
+};
+static arc arcs_12_0[1] = {
+	{19, 1},
 };
 static arc arcs_12_1[1] = {
 	{0, 1},
 };
 static state states_12[2] = {
-	{8, arcs_12_0},
+	{1, arcs_12_0},
 	{1, arcs_12_1},
 };
-static arc arcs_13_0[1] = {
-	{9, 1},
+static arc arcs_13_0[2] = {
+	{35, 1},
+	{13, 2},
 };
-static arc arcs_13_1[3] = {
-	{41, 2},
-	{25, 3},
+static arc arcs_13_1[1] = {
 	{0, 1},
 };
-static arc arcs_13_2[2] = {
-	{42, 4},
-	{9, 4},
+static arc arcs_13_2[1] = {
+	{36, 3},
 };
-static arc arcs_13_3[2] = {
-	{42, 5},
-	{9, 5},
+static arc arcs_13_3[1] = {
+	{15, 1},
 };
-static arc arcs_13_4[1] = {
-	{0, 4},
+static state states_13[4] = {
+	{2, arcs_13_0},
+	{1, arcs_13_1},
+	{1, arcs_13_2},
+	{1, arcs_13_3},
 };
-static arc arcs_13_5[2] = {
-	{25, 3},
-	{0, 5},
+static arc arcs_14_0[1] = {
+	{34, 1},
 };
-static state states_13[6] = {
-	{1, arcs_13_0},
-	{3, arcs_13_1},
-	{2, arcs_13_2},
-	{2, arcs_13_3},
-	{1, arcs_13_4},
-	{2, arcs_13_5},
+static arc arcs_14_1[2] = {
+	{28, 2},
+	{0, 1},
 };
-static arc arcs_14_0[12] = {
+static arc arcs_14_2[2] = {
+	{34, 1},
+	{0, 2},
+};
+static state states_14[3] = {
+	{1, arcs_14_0},
+	{2, arcs_14_1},
+	{2, arcs_14_2},
+};
+static arc arcs_15_0[2] = {
+	{3, 1},
+	{4, 1},
+};
+static arc arcs_15_1[1] = {
+	{0, 1},
+};
+static state states_15[2] = {
+	{2, arcs_15_0},
+	{1, arcs_15_1},
+};
+static arc arcs_16_0[1] = {
+	{37, 1},
+};
+static arc arcs_16_1[2] = {
+	{38, 2},
+	{2, 3},
+};
+static arc arcs_16_2[2] = {
+	{37, 1},
+	{2, 3},
+};
+static arc arcs_16_3[1] = {
+	{0, 3},
+};
+static state states_16[4] = {
+	{1, arcs_16_0},
+	{2, arcs_16_1},
+	{2, arcs_16_2},
+	{1, arcs_16_3},
+};
+static arc arcs_17_0[8] = {
+	{39, 1},
+	{40, 1},
+	{41, 1},
+	{42, 1},
 	{43, 1},
 	{44, 1},
 	{45, 1},
 	{46, 1},
-	{47, 1},
-	{48, 1},
+};
+static arc arcs_17_1[1] = {
+	{0, 1},
+};
+static state states_17[2] = {
+	{8, arcs_17_0},
+	{1, arcs_17_1},
+};
+static arc arcs_18_0[1] = {
+	{9, 1},
+};
+static arc arcs_18_1[3] = {
+	{47, 2},
+	{27, 3},
+	{0, 1},
+};
+static arc arcs_18_2[2] = {
+	{48, 4},
+	{9, 4},
+};
+static arc arcs_18_3[2] = {
+	{48, 5},
+	{9, 5},
+};
+static arc arcs_18_4[1] = {
+	{0, 4},
+};
+static arc arcs_18_5[2] = {
+	{27, 3},
+	{0, 5},
+};
+static state states_18[6] = {
+	{1, arcs_18_0},
+	{3, arcs_18_1},
+	{2, arcs_18_2},
+	{2, arcs_18_3},
+	{1, arcs_18_4},
+	{2, arcs_18_5},
+};
+static arc arcs_19_0[12] = {
 	{49, 1},
 	{50, 1},
 	{51, 1},
 	{52, 1},
 	{53, 1},
 	{54, 1},
-};
-static arc arcs_14_1[1] = {
-	{0, 1},
-};
-static state states_14[2] = {
-	{12, arcs_14_0},
-	{1, arcs_14_1},
-};
-static arc arcs_15_0[1] = {
 	{55, 1},
-};
-static arc arcs_15_1[3] = {
-	{26, 2},
-	{56, 3},
-	{0, 1},
-};
-static arc arcs_15_2[2] = {
-	{27, 4},
-	{0, 2},
-};
-static arc arcs_15_3[1] = {
-	{26, 5},
-};
-static arc arcs_15_4[2] = {
-	{26, 2},
-	{0, 4},
-};
-static arc arcs_15_5[2] = {
-	{27, 6},
-	{0, 5},
-};
-static arc arcs_15_6[1] = {
-	{26, 7},
-};
-static arc arcs_15_7[2] = {
-	{27, 8},
-	{0, 7},
-};
-static arc arcs_15_8[2] = {
-	{26, 7},
-	{0, 8},
-};
-static state states_15[9] = {
-	{1, arcs_15_0},
-	{3, arcs_15_1},
-	{2, arcs_15_2},
-	{1, arcs_15_3},
-	{2, arcs_15_4},
-	{2, arcs_15_5},
-	{1, arcs_15_6},
-	{2, arcs_15_7},
-	{2, arcs_15_8},
-};
-static arc arcs_16_0[1] = {
+	{56, 1},
 	{57, 1},
-};
-static arc arcs_16_1[1] = {
-	{58, 2},
-};
-static arc arcs_16_2[1] = {
-	{0, 2},
-};
-static state states_16[3] = {
-	{1, arcs_16_0},
-	{1, arcs_16_1},
-	{1, arcs_16_2},
-};
-static arc arcs_17_0[1] = {
+	{58, 1},
 	{59, 1},
-};
-static arc arcs_17_1[1] = {
-	{0, 1},
-};
-static state states_17[2] = {
-	{1, arcs_17_0},
-	{1, arcs_17_1},
-};
-static arc arcs_18_0[5] = {
 	{60, 1},
-	{61, 1},
-	{62, 1},
-	{63, 1},
-	{64, 1},
-};
-static arc arcs_18_1[1] = {
-	{0, 1},
-};
-static state states_18[2] = {
-	{5, arcs_18_0},
-	{1, arcs_18_1},
-};
-static arc arcs_19_0[1] = {
-	{65, 1},
 };
 static arc arcs_19_1[1] = {
 	{0, 1},
 };
 static state states_19[2] = {
-	{1, arcs_19_0},
+	{12, arcs_19_0},
 	{1, arcs_19_1},
 };
 static arc arcs_20_0[1] = {
-	{66, 1},
+	{61, 1},
 };
-static arc arcs_20_1[1] = {
+static arc arcs_20_1[3] = {
+	{22, 2},
+	{62, 3},
 	{0, 1},
 };
-static state states_20[2] = {
+static arc arcs_20_2[2] = {
+	{28, 4},
+	{0, 2},
+};
+static arc arcs_20_3[1] = {
+	{22, 5},
+};
+static arc arcs_20_4[2] = {
+	{22, 2},
+	{0, 4},
+};
+static arc arcs_20_5[2] = {
+	{28, 6},
+	{0, 5},
+};
+static arc arcs_20_6[1] = {
+	{22, 7},
+};
+static arc arcs_20_7[2] = {
+	{28, 8},
+	{0, 7},
+};
+static arc arcs_20_8[2] = {
+	{22, 7},
+	{0, 8},
+};
+static state states_20[9] = {
 	{1, arcs_20_0},
-	{1, arcs_20_1},
+	{3, arcs_20_1},
+	{2, arcs_20_2},
+	{1, arcs_20_3},
+	{2, arcs_20_4},
+	{2, arcs_20_5},
+	{1, arcs_20_6},
+	{2, arcs_20_7},
+	{2, arcs_20_8},
 };
 static arc arcs_21_0[1] = {
-	{67, 1},
+	{63, 1},
 };
-static arc arcs_21_1[2] = {
-	{9, 2},
-	{0, 1},
+static arc arcs_21_1[1] = {
+	{64, 2},
 };
 static arc arcs_21_2[1] = {
 	{0, 2},
 };
 static state states_21[3] = {
 	{1, arcs_21_0},
-	{2, arcs_21_1},
+	{1, arcs_21_1},
 	{1, arcs_21_2},
 };
 static arc arcs_22_0[1] = {
-	{42, 1},
+	{65, 1},
 };
 static arc arcs_22_1[1] = {
 	{0, 1},
@@ -463,662 +541,646 @@
 	{1, arcs_22_0},
 	{1, arcs_22_1},
 };
-static arc arcs_23_0[1] = {
+static arc arcs_23_0[5] = {
+	{66, 1},
+	{67, 1},
 	{68, 1},
-};
-static arc arcs_23_1[2] = {
-	{26, 2},
-	{0, 1},
-};
-static arc arcs_23_2[2] = {
-	{27, 3},
-	{0, 2},
-};
-static arc arcs_23_3[1] = {
-	{26, 4},
-};
-static arc arcs_23_4[2] = {
-	{27, 5},
-	{0, 4},
-};
-static arc arcs_23_5[1] = {
-	{26, 6},
-};
-static arc arcs_23_6[1] = {
-	{0, 6},
-};
-static state states_23[7] = {
-	{1, arcs_23_0},
-	{2, arcs_23_1},
-	{2, arcs_23_2},
-	{1, arcs_23_3},
-	{2, arcs_23_4},
-	{1, arcs_23_5},
-	{1, arcs_23_6},
-};
-static arc arcs_24_0[2] = {
 	{69, 1},
 	{70, 1},
 };
+static arc arcs_23_1[1] = {
+	{0, 1},
+};
+static state states_23[2] = {
+	{5, arcs_23_0},
+	{1, arcs_23_1},
+};
+static arc arcs_24_0[1] = {
+	{71, 1},
+};
 static arc arcs_24_1[1] = {
 	{0, 1},
 };
 static state states_24[2] = {
-	{2, arcs_24_0},
+	{1, arcs_24_0},
 	{1, arcs_24_1},
 };
 static arc arcs_25_0[1] = {
-	{71, 1},
+	{72, 1},
 };
 static arc arcs_25_1[1] = {
-	{72, 2},
+	{0, 1},
 };
-static arc arcs_25_2[1] = {
-	{0, 2},
-};
-static state states_25[3] = {
+static state states_25[2] = {
 	{1, arcs_25_0},
 	{1, arcs_25_1},
-	{1, arcs_25_2},
 };
 static arc arcs_26_0[1] = {
 	{73, 1},
 };
 static arc arcs_26_1[2] = {
-	{74, 2},
-	{12, 3},
+	{9, 2},
+	{0, 1},
 };
-static arc arcs_26_2[3] = {
-	{74, 2},
-	{12, 3},
-	{71, 4},
+static arc arcs_26_2[1] = {
+	{0, 2},
 };
-static arc arcs_26_3[1] = {
-	{71, 4},
-};
-static arc arcs_26_4[3] = {
-	{28, 5},
-	{13, 6},
-	{75, 5},
-};
-static arc arcs_26_5[1] = {
-	{0, 5},
-};
-static arc arcs_26_6[1] = {
-	{75, 7},
-};
-static arc arcs_26_7[1] = {
-	{15, 5},
-};
-static state states_26[8] = {
+static state states_26[3] = {
 	{1, arcs_26_0},
 	{2, arcs_26_1},
-	{3, arcs_26_2},
-	{1, arcs_26_3},
-	{3, arcs_26_4},
-	{1, arcs_26_5},
-	{1, arcs_26_6},
-	{1, arcs_26_7},
+	{1, arcs_26_2},
 };
 static arc arcs_27_0[1] = {
-	{19, 1},
+	{48, 1},
 };
-static arc arcs_27_1[2] = {
-	{77, 2},
+static arc arcs_27_1[1] = {
 	{0, 1},
 };
-static arc arcs_27_2[1] = {
-	{19, 3},
-};
-static arc arcs_27_3[1] = {
-	{0, 3},
-};
-static state states_27[4] = {
+static state states_27[2] = {
 	{1, arcs_27_0},
-	{2, arcs_27_1},
-	{1, arcs_27_2},
-	{1, arcs_27_3},
+	{1, arcs_27_1},
 };
 static arc arcs_28_0[1] = {
-	{12, 1},
+	{74, 1},
 };
 static arc arcs_28_1[2] = {
-	{77, 2},
+	{22, 2},
 	{0, 1},
 };
-static arc arcs_28_2[1] = {
-	{19, 3},
+static arc arcs_28_2[2] = {
+	{28, 3},
+	{0, 2},
 };
 static arc arcs_28_3[1] = {
-	{0, 3},
-};
-static state states_28[4] = {
-	{1, arcs_28_0},
-	{2, arcs_28_1},
-	{1, arcs_28_2},
-	{1, arcs_28_3},
-};
-static arc arcs_29_0[1] = {
-	{76, 1},
-};
-static arc arcs_29_1[2] = {
-	{27, 2},
-	{0, 1},
-};
-static arc arcs_29_2[2] = {
-	{76, 1},
-	{0, 2},
-};
-static state states_29[3] = {
-	{1, arcs_29_0},
-	{2, arcs_29_1},
-	{2, arcs_29_2},
-};
-static arc arcs_30_0[1] = {
-	{78, 1},
-};
-static arc arcs_30_1[2] = {
-	{27, 0},
-	{0, 1},
-};
-static state states_30[2] = {
-	{1, arcs_30_0},
-	{2, arcs_30_1},
-};
-static arc arcs_31_0[1] = {
-	{19, 1},
-};
-static arc arcs_31_1[2] = {
-	{74, 0},
-	{0, 1},
-};
-static state states_31[2] = {
-	{1, arcs_31_0},
-	{2, arcs_31_1},
-};
-static arc arcs_32_0[1] = {
-	{79, 1},
-};
-static arc arcs_32_1[1] = {
-	{19, 2},
-};
-static arc arcs_32_2[2] = {
-	{27, 1},
-	{0, 2},
-};
-static state states_32[3] = {
-	{1, arcs_32_0},
-	{1, arcs_32_1},
-	{2, arcs_32_2},
-};
-static arc arcs_33_0[1] = {
-	{80, 1},
-};
-static arc arcs_33_1[1] = {
-	{26, 2},
-};
-static arc arcs_33_2[2] = {
-	{27, 3},
-	{0, 2},
-};
-static arc arcs_33_3[1] = {
-	{26, 4},
-};
-static arc arcs_33_4[1] = {
-	{0, 4},
-};
-static state states_33[5] = {
-	{1, arcs_33_0},
-	{1, arcs_33_1},
-	{2, arcs_33_2},
-	{1, arcs_33_3},
-	{1, arcs_33_4},
-};
-static arc arcs_34_0[7] = {
-	{81, 1},
-	{82, 1},
-	{83, 1},
-	{84, 1},
-	{85, 1},
-	{17, 1},
-	{86, 1},
-};
-static arc arcs_34_1[1] = {
-	{0, 1},
-};
-static state states_34[2] = {
-	{7, arcs_34_0},
-	{1, arcs_34_1},
-};
-static arc arcs_35_0[1] = {
-	{87, 1},
-};
-static arc arcs_35_1[1] = {
-	{26, 2},
-};
-static arc arcs_35_2[1] = {
-	{21, 3},
-};
-static arc arcs_35_3[1] = {
 	{22, 4},
 };
-static arc arcs_35_4[3] = {
-	{88, 1},
-	{89, 5},
+static arc arcs_28_4[2] = {
+	{28, 5},
 	{0, 4},
 };
-static arc arcs_35_5[1] = {
-	{21, 6},
-};
-static arc arcs_35_6[1] = {
-	{22, 7},
-};
-static arc arcs_35_7[1] = {
-	{0, 7},
-};
-static state states_35[8] = {
-	{1, arcs_35_0},
-	{1, arcs_35_1},
-	{1, arcs_35_2},
-	{1, arcs_35_3},
-	{3, arcs_35_4},
-	{1, arcs_35_5},
-	{1, arcs_35_6},
-	{1, arcs_35_7},
-};
-static arc arcs_36_0[1] = {
-	{90, 1},
-};
-static arc arcs_36_1[1] = {
-	{26, 2},
-};
-static arc arcs_36_2[1] = {
-	{21, 3},
-};
-static arc arcs_36_3[1] = {
-	{22, 4},
-};
-static arc arcs_36_4[2] = {
-	{89, 5},
-	{0, 4},
-};
-static arc arcs_36_5[1] = {
-	{21, 6},
-};
-static arc arcs_36_6[1] = {
-	{22, 7},
-};
-static arc arcs_36_7[1] = {
-	{0, 7},
-};
-static state states_36[8] = {
-	{1, arcs_36_0},
-	{1, arcs_36_1},
-	{1, arcs_36_2},
-	{1, arcs_36_3},
-	{2, arcs_36_4},
-	{1, arcs_36_5},
-	{1, arcs_36_6},
-	{1, arcs_36_7},
-};
-static arc arcs_37_0[1] = {
-	{91, 1},
-};
-static arc arcs_37_1[1] = {
-	{58, 2},
-};
-static arc arcs_37_2[1] = {
-	{92, 3},
-};
-static arc arcs_37_3[1] = {
-	{9, 4},
-};
-static arc arcs_37_4[1] = {
-	{21, 5},
-};
-static arc arcs_37_5[1] = {
+static arc arcs_28_5[1] = {
 	{22, 6},
 };
-static arc arcs_37_6[2] = {
-	{89, 7},
+static arc arcs_28_6[1] = {
 	{0, 6},
 };
-static arc arcs_37_7[1] = {
-	{21, 8},
+static state states_28[7] = {
+	{1, arcs_28_0},
+	{2, arcs_28_1},
+	{2, arcs_28_2},
+	{1, arcs_28_3},
+	{2, arcs_28_4},
+	{1, arcs_28_5},
+	{1, arcs_28_6},
 };
-static arc arcs_37_8[1] = {
-	{22, 9},
+static arc arcs_29_0[2] = {
+	{75, 1},
+	{76, 1},
 };
-static arc arcs_37_9[1] = {
-	{0, 9},
+static arc arcs_29_1[1] = {
+	{0, 1},
 };
-static state states_37[10] = {
-	{1, arcs_37_0},
-	{1, arcs_37_1},
-	{1, arcs_37_2},
-	{1, arcs_37_3},
-	{1, arcs_37_4},
-	{1, arcs_37_5},
-	{2, arcs_37_6},
-	{1, arcs_37_7},
-	{1, arcs_37_8},
-	{1, arcs_37_9},
+static state states_29[2] = {
+	{2, arcs_29_0},
+	{1, arcs_29_1},
 };
-static arc arcs_38_0[1] = {
-	{93, 1},
-};
-static arc arcs_38_1[1] = {
-	{21, 2},
-};
-static arc arcs_38_2[1] = {
-	{22, 3},
-};
-static arc arcs_38_3[2] = {
-	{94, 4},
-	{95, 5},
-};
-static arc arcs_38_4[1] = {
-	{21, 6},
-};
-static arc arcs_38_5[1] = {
-	{21, 7},
-};
-static arc arcs_38_6[1] = {
-	{22, 8},
-};
-static arc arcs_38_7[1] = {
-	{22, 9},
-};
-static arc arcs_38_8[4] = {
-	{94, 4},
-	{89, 10},
-	{95, 5},
-	{0, 8},
-};
-static arc arcs_38_9[1] = {
-	{0, 9},
-};
-static arc arcs_38_10[1] = {
-	{21, 11},
-};
-static arc arcs_38_11[1] = {
-	{22, 12},
-};
-static arc arcs_38_12[2] = {
-	{95, 5},
-	{0, 12},
-};
-static state states_38[13] = {
-	{1, arcs_38_0},
-	{1, arcs_38_1},
-	{1, arcs_38_2},
-	{2, arcs_38_3},
-	{1, arcs_38_4},
-	{1, arcs_38_5},
-	{1, arcs_38_6},
-	{1, arcs_38_7},
-	{4, arcs_38_8},
-	{1, arcs_38_9},
-	{1, arcs_38_10},
-	{1, arcs_38_11},
-	{2, arcs_38_12},
-};
-static arc arcs_39_0[1] = {
-	{96, 1},
-};
-static arc arcs_39_1[1] = {
-	{26, 2},
-};
-static arc arcs_39_2[2] = {
-	{97, 3},
-	{21, 4},
-};
-static arc arcs_39_3[1] = {
-	{21, 4},
-};
-static arc arcs_39_4[1] = {
-	{22, 5},
-};
-static arc arcs_39_5[1] = {
-	{0, 5},
-};
-static state states_39[6] = {
-	{1, arcs_39_0},
-	{1, arcs_39_1},
-	{2, arcs_39_2},
-	{1, arcs_39_3},
-	{1, arcs_39_4},
-	{1, arcs_39_5},
-};
-static arc arcs_40_0[1] = {
+static arc arcs_30_0[1] = {
 	{77, 1},
 };
-static arc arcs_40_1[1] = {
-	{98, 2},
+static arc arcs_30_1[1] = {
+	{78, 2},
 };
-static arc arcs_40_2[1] = {
+static arc arcs_30_2[1] = {
 	{0, 2},
 };
-static state states_40[3] = {
+static state states_30[3] = {
+	{1, arcs_30_0},
+	{1, arcs_30_1},
+	{1, arcs_30_2},
+};
+static arc arcs_31_0[1] = {
+	{79, 1},
+};
+static arc arcs_31_1[2] = {
+	{80, 2},
+	{12, 3},
+};
+static arc arcs_31_2[3] = {
+	{80, 2},
+	{12, 3},
+	{77, 4},
+};
+static arc arcs_31_3[1] = {
+	{77, 4},
+};
+static arc arcs_31_4[3] = {
+	{29, 5},
+	{13, 6},
+	{81, 5},
+};
+static arc arcs_31_5[1] = {
+	{0, 5},
+};
+static arc arcs_31_6[1] = {
+	{81, 7},
+};
+static arc arcs_31_7[1] = {
+	{15, 5},
+};
+static state states_31[8] = {
+	{1, arcs_31_0},
+	{2, arcs_31_1},
+	{3, arcs_31_2},
+	{1, arcs_31_3},
+	{3, arcs_31_4},
+	{1, arcs_31_5},
+	{1, arcs_31_6},
+	{1, arcs_31_7},
+};
+static arc arcs_32_0[1] = {
+	{19, 1},
+};
+static arc arcs_32_1[2] = {
+	{83, 2},
+	{0, 1},
+};
+static arc arcs_32_2[1] = {
+	{19, 3},
+};
+static arc arcs_32_3[1] = {
+	{0, 3},
+};
+static state states_32[4] = {
+	{1, arcs_32_0},
+	{2, arcs_32_1},
+	{1, arcs_32_2},
+	{1, arcs_32_3},
+};
+static arc arcs_33_0[1] = {
+	{12, 1},
+};
+static arc arcs_33_1[2] = {
+	{83, 2},
+	{0, 1},
+};
+static arc arcs_33_2[1] = {
+	{19, 3},
+};
+static arc arcs_33_3[1] = {
+	{0, 3},
+};
+static state states_33[4] = {
+	{1, arcs_33_0},
+	{2, arcs_33_1},
+	{1, arcs_33_2},
+	{1, arcs_33_3},
+};
+static arc arcs_34_0[1] = {
+	{82, 1},
+};
+static arc arcs_34_1[2] = {
+	{28, 2},
+	{0, 1},
+};
+static arc arcs_34_2[2] = {
+	{82, 1},
+	{0, 2},
+};
+static state states_34[3] = {
+	{1, arcs_34_0},
+	{2, arcs_34_1},
+	{2, arcs_34_2},
+};
+static arc arcs_35_0[1] = {
+	{84, 1},
+};
+static arc arcs_35_1[2] = {
+	{28, 0},
+	{0, 1},
+};
+static state states_35[2] = {
+	{1, arcs_35_0},
+	{2, arcs_35_1},
+};
+static arc arcs_36_0[1] = {
+	{19, 1},
+};
+static arc arcs_36_1[2] = {
+	{80, 0},
+	{0, 1},
+};
+static state states_36[2] = {
+	{1, arcs_36_0},
+	{2, arcs_36_1},
+};
+static arc arcs_37_0[1] = {
+	{85, 1},
+};
+static arc arcs_37_1[1] = {
+	{19, 2},
+};
+static arc arcs_37_2[2] = {
+	{28, 1},
+	{0, 2},
+};
+static state states_37[3] = {
+	{1, arcs_37_0},
+	{1, arcs_37_1},
+	{2, arcs_37_2},
+};
+static arc arcs_38_0[1] = {
+	{86, 1},
+};
+static arc arcs_38_1[1] = {
+	{22, 2},
+};
+static arc arcs_38_2[2] = {
+	{28, 3},
+	{0, 2},
+};
+static arc arcs_38_3[1] = {
+	{22, 4},
+};
+static arc arcs_38_4[1] = {
+	{0, 4},
+};
+static state states_38[5] = {
+	{1, arcs_38_0},
+	{1, arcs_38_1},
+	{2, arcs_38_2},
+	{1, arcs_38_3},
+	{1, arcs_38_4},
+};
+static arc arcs_39_0[7] = {
+	{87, 1},
+	{88, 1},
+	{89, 1},
+	{90, 1},
+	{91, 1},
+	{17, 1},
+	{92, 1},
+};
+static arc arcs_39_1[1] = {
+	{0, 1},
+};
+static state states_39[2] = {
+	{7, arcs_39_0},
+	{1, arcs_39_1},
+};
+static arc arcs_40_0[1] = {
+	{93, 1},
+};
+static arc arcs_40_1[1] = {
+	{22, 2},
+};
+static arc arcs_40_2[1] = {
+	{23, 3},
+};
+static arc arcs_40_3[1] = {
+	{24, 4},
+};
+static arc arcs_40_4[3] = {
+	{94, 1},
+	{95, 5},
+	{0, 4},
+};
+static arc arcs_40_5[1] = {
+	{23, 6},
+};
+static arc arcs_40_6[1] = {
+	{24, 7},
+};
+static arc arcs_40_7[1] = {
+	{0, 7},
+};
+static state states_40[8] = {
 	{1, arcs_40_0},
 	{1, arcs_40_1},
 	{1, arcs_40_2},
+	{1, arcs_40_3},
+	{3, arcs_40_4},
+	{1, arcs_40_5},
+	{1, arcs_40_6},
+	{1, arcs_40_7},
 };
 static arc arcs_41_0[1] = {
-	{99, 1},
+	{96, 1},
 };
-static arc arcs_41_1[2] = {
-	{26, 2},
-	{0, 1},
+static arc arcs_41_1[1] = {
+	{22, 2},
 };
-static arc arcs_41_2[2] = {
-	{27, 3},
-	{0, 2},
+static arc arcs_41_2[1] = {
+	{23, 3},
 };
 static arc arcs_41_3[1] = {
-	{26, 4},
+	{24, 4},
 };
-static arc arcs_41_4[1] = {
+static arc arcs_41_4[2] = {
+	{95, 5},
 	{0, 4},
 };
-static state states_41[5] = {
-	{1, arcs_41_0},
-	{2, arcs_41_1},
-	{2, arcs_41_2},
-	{1, arcs_41_3},
-	{1, arcs_41_4},
+static arc arcs_41_5[1] = {
+	{23, 6},
 };
-static arc arcs_42_0[2] = {
-	{3, 1},
-	{2, 2},
+static arc arcs_41_6[1] = {
+	{24, 7},
+};
+static arc arcs_41_7[1] = {
+	{0, 7},
+};
+static state states_41[8] = {
+	{1, arcs_41_0},
+	{1, arcs_41_1},
+	{1, arcs_41_2},
+	{1, arcs_41_3},
+	{2, arcs_41_4},
+	{1, arcs_41_5},
+	{1, arcs_41_6},
+	{1, arcs_41_7},
+};
+static arc arcs_42_0[1] = {
+	{97, 1},
 };
 static arc arcs_42_1[1] = {
-	{0, 1},
+	{64, 2},
 };
 static arc arcs_42_2[1] = {
-	{100, 3},
+	{98, 3},
 };
 static arc arcs_42_3[1] = {
-	{6, 4},
+	{9, 4},
 };
-static arc arcs_42_4[2] = {
-	{6, 4},
-	{101, 1},
+static arc arcs_42_4[1] = {
+	{23, 5},
 };
-static state states_42[5] = {
-	{2, arcs_42_0},
+static arc arcs_42_5[1] = {
+	{24, 6},
+};
+static arc arcs_42_6[2] = {
+	{95, 7},
+	{0, 6},
+};
+static arc arcs_42_7[1] = {
+	{23, 8},
+};
+static arc arcs_42_8[1] = {
+	{24, 9},
+};
+static arc arcs_42_9[1] = {
+	{0, 9},
+};
+static state states_42[10] = {
+	{1, arcs_42_0},
 	{1, arcs_42_1},
 	{1, arcs_42_2},
 	{1, arcs_42_3},
-	{2, arcs_42_4},
+	{1, arcs_42_4},
+	{1, arcs_42_5},
+	{2, arcs_42_6},
+	{1, arcs_42_7},
+	{1, arcs_42_8},
+	{1, arcs_42_9},
 };
 static arc arcs_43_0[1] = {
-	{103, 1},
+	{99, 1},
 };
-static arc arcs_43_1[2] = {
-	{27, 2},
-	{0, 1},
+static arc arcs_43_1[1] = {
+	{23, 2},
 };
 static arc arcs_43_2[1] = {
-	{103, 3},
+	{24, 3},
 };
 static arc arcs_43_3[2] = {
-	{27, 4},
-	{0, 3},
+	{100, 4},
+	{101, 5},
 };
-static arc arcs_43_4[2] = {
-	{103, 3},
-	{0, 4},
+static arc arcs_43_4[1] = {
+	{23, 6},
 };
-static state states_43[5] = {
+static arc arcs_43_5[1] = {
+	{23, 7},
+};
+static arc arcs_43_6[1] = {
+	{24, 8},
+};
+static arc arcs_43_7[1] = {
+	{24, 9},
+};
+static arc arcs_43_8[4] = {
+	{100, 4},
+	{95, 10},
+	{101, 5},
+	{0, 8},
+};
+static arc arcs_43_9[1] = {
+	{0, 9},
+};
+static arc arcs_43_10[1] = {
+	{23, 11},
+};
+static arc arcs_43_11[1] = {
+	{24, 12},
+};
+static arc arcs_43_12[2] = {
+	{101, 5},
+	{0, 12},
+};
+static state states_43[13] = {
 	{1, arcs_43_0},
-	{2, arcs_43_1},
+	{1, arcs_43_1},
 	{1, arcs_43_2},
 	{2, arcs_43_3},
-	{2, arcs_43_4},
+	{1, arcs_43_4},
+	{1, arcs_43_5},
+	{1, arcs_43_6},
+	{1, arcs_43_7},
+	{4, arcs_43_8},
+	{1, arcs_43_9},
+	{1, arcs_43_10},
+	{1, arcs_43_11},
+	{2, arcs_43_12},
 };
-static arc arcs_44_0[2] = {
-	{104, 1},
-	{105, 1},
+static arc arcs_44_0[1] = {
+	{102, 1},
 };
 static arc arcs_44_1[1] = {
-	{0, 1},
+	{22, 2},
 };
-static state states_44[2] = {
-	{2, arcs_44_0},
+static arc arcs_44_2[2] = {
+	{103, 3},
+	{23, 4},
+};
+static arc arcs_44_3[1] = {
+	{23, 4},
+};
+static arc arcs_44_4[1] = {
+	{24, 5},
+};
+static arc arcs_44_5[1] = {
+	{0, 5},
+};
+static state states_44[6] = {
+	{1, arcs_44_0},
 	{1, arcs_44_1},
+	{2, arcs_44_2},
+	{1, arcs_44_3},
+	{1, arcs_44_4},
+	{1, arcs_44_5},
 };
 static arc arcs_45_0[1] = {
-	{106, 1},
+	{83, 1},
 };
-static arc arcs_45_1[2] = {
-	{23, 2},
-	{21, 3},
+static arc arcs_45_1[1] = {
+	{104, 2},
 };
 static arc arcs_45_2[1] = {
-	{21, 3},
+	{0, 2},
 };
-static arc arcs_45_3[1] = {
-	{103, 4},
-};
-static arc arcs_45_4[1] = {
-	{0, 4},
-};
-static state states_45[5] = {
+static state states_45[3] = {
 	{1, arcs_45_0},
-	{2, arcs_45_1},
+	{1, arcs_45_1},
 	{1, arcs_45_2},
-	{1, arcs_45_3},
-	{1, arcs_45_4},
 };
-static arc arcs_46_0[2] = {
-	{104, 1},
-	{107, 2},
+static arc arcs_46_0[1] = {
+	{105, 1},
 };
 static arc arcs_46_1[2] = {
-	{87, 3},
+	{22, 2},
 	{0, 1},
 };
-static arc arcs_46_2[1] = {
+static arc arcs_46_2[2] = {
+	{28, 3},
 	{0, 2},
 };
 static arc arcs_46_3[1] = {
-	{104, 4},
+	{22, 4},
 };
 static arc arcs_46_4[1] = {
-	{89, 5},
+	{0, 4},
 };
-static arc arcs_46_5[1] = {
-	{26, 2},
-};
-static state states_46[6] = {
-	{2, arcs_46_0},
+static state states_46[5] = {
+	{1, arcs_46_0},
 	{2, arcs_46_1},
-	{1, arcs_46_2},
+	{2, arcs_46_2},
 	{1, arcs_46_3},
 	{1, arcs_46_4},
-	{1, arcs_46_5},
 };
-static arc arcs_47_0[1] = {
-	{108, 1},
+static arc arcs_47_0[2] = {
+	{3, 1},
+	{2, 2},
 };
-static arc arcs_47_1[2] = {
-	{109, 0},
+static arc arcs_47_1[1] = {
 	{0, 1},
 };
-static state states_47[2] = {
-	{1, arcs_47_0},
-	{2, arcs_47_1},
+static arc arcs_47_2[1] = {
+	{106, 3},
+};
+static arc arcs_47_3[1] = {
+	{6, 4},
+};
+static arc arcs_47_4[2] = {
+	{6, 4},
+	{107, 1},
+};
+static state states_47[5] = {
+	{2, arcs_47_0},
+	{1, arcs_47_1},
+	{1, arcs_47_2},
+	{1, arcs_47_3},
+	{2, arcs_47_4},
 };
 static arc arcs_48_0[1] = {
-	{110, 1},
+	{109, 1},
 };
 static arc arcs_48_1[2] = {
-	{111, 0},
+	{28, 2},
 	{0, 1},
 };
-static state states_48[2] = {
+static arc arcs_48_2[1] = {
+	{109, 3},
+};
+static arc arcs_48_3[2] = {
+	{28, 4},
+	{0, 3},
+};
+static arc arcs_48_4[2] = {
+	{109, 3},
+	{0, 4},
+};
+static state states_48[5] = {
 	{1, arcs_48_0},
 	{2, arcs_48_1},
+	{1, arcs_48_2},
+	{2, arcs_48_3},
+	{2, arcs_48_4},
 };
 static arc arcs_49_0[2] = {
-	{112, 1},
-	{113, 2},
+	{110, 1},
+	{111, 1},
 };
 static arc arcs_49_1[1] = {
-	{110, 2},
-};
-static arc arcs_49_2[1] = {
-	{0, 2},
-};
-static state states_49[3] = {
-	{2, arcs_49_0},
-	{1, arcs_49_1},
-	{1, arcs_49_2},
-};
-static arc arcs_50_0[1] = {
-	{98, 1},
-};
-static arc arcs_50_1[2] = {
-	{114, 0},
 	{0, 1},
 };
-static state states_50[2] = {
+static state states_49[2] = {
+	{2, arcs_49_0},
+	{1, arcs_49_1},
+};
+static arc arcs_50_0[1] = {
+	{112, 1},
+};
+static arc arcs_50_1[2] = {
+	{33, 2},
+	{23, 3},
+};
+static arc arcs_50_2[1] = {
+	{23, 3},
+};
+static arc arcs_50_3[1] = {
+	{109, 4},
+};
+static arc arcs_50_4[1] = {
+	{0, 4},
+};
+static state states_50[5] = {
 	{1, arcs_50_0},
 	{2, arcs_50_1},
+	{1, arcs_50_2},
+	{1, arcs_50_3},
+	{1, arcs_50_4},
 };
-static arc arcs_51_0[9] = {
-	{115, 1},
-	{116, 1},
-	{117, 1},
-	{118, 1},
-	{119, 1},
-	{120, 1},
-	{92, 1},
-	{112, 2},
-	{121, 3},
+static arc arcs_51_0[2] = {
+	{110, 1},
+	{113, 2},
 };
-static arc arcs_51_1[1] = {
+static arc arcs_51_1[2] = {
+	{93, 3},
 	{0, 1},
 };
 static arc arcs_51_2[1] = {
-	{92, 1},
+	{0, 2},
 };
-static arc arcs_51_3[2] = {
-	{112, 1},
-	{0, 3},
+static arc arcs_51_3[1] = {
+	{110, 4},
 };
-static state states_51[4] = {
-	{9, arcs_51_0},
-	{1, arcs_51_1},
+static arc arcs_51_4[1] = {
+	{95, 5},
+};
+static arc arcs_51_5[1] = {
+	{22, 2},
+};
+static state states_51[6] = {
+	{2, arcs_51_0},
+	{2, arcs_51_1},
 	{1, arcs_51_2},
-	{2, arcs_51_3},
+	{1, arcs_51_3},
+	{1, arcs_51_4},
+	{1, arcs_51_5},
 };
 static arc arcs_52_0[1] = {
-	{122, 1},
+	{114, 1},
 };
 static arc arcs_52_1[2] = {
-	{123, 0},
+	{115, 0},
 	{0, 1},
 };
 static state states_52[2] = {
@@ -1126,856 +1188,947 @@
 	{2, arcs_52_1},
 };
 static arc arcs_53_0[1] = {
-	{124, 1},
+	{116, 1},
 };
 static arc arcs_53_1[2] = {
-	{125, 0},
+	{117, 0},
 	{0, 1},
 };
 static state states_53[2] = {
 	{1, arcs_53_0},
 	{2, arcs_53_1},
 };
-static arc arcs_54_0[1] = {
-	{126, 1},
+static arc arcs_54_0[2] = {
+	{118, 1},
+	{119, 2},
 };
-static arc arcs_54_1[2] = {
-	{127, 0},
-	{0, 1},
+static arc arcs_54_1[1] = {
+	{116, 2},
 };
-static state states_54[2] = {
-	{1, arcs_54_0},
-	{2, arcs_54_1},
+static arc arcs_54_2[1] = {
+	{0, 2},
+};
+static state states_54[3] = {
+	{2, arcs_54_0},
+	{1, arcs_54_1},
+	{1, arcs_54_2},
 };
 static arc arcs_55_0[1] = {
-	{128, 1},
+	{104, 1},
 };
-static arc arcs_55_1[3] = {
-	{129, 0},
-	{56, 0},
+static arc arcs_55_1[2] = {
+	{120, 0},
 	{0, 1},
 };
 static state states_55[2] = {
 	{1, arcs_55_0},
-	{3, arcs_55_1},
+	{2, arcs_55_1},
 };
-static arc arcs_56_0[1] = {
-	{130, 1},
+static arc arcs_56_0[9] = {
+	{121, 1},
+	{122, 1},
+	{123, 1},
+	{124, 1},
+	{125, 1},
+	{126, 1},
+	{98, 1},
+	{118, 2},
+	{127, 3},
 };
-static arc arcs_56_1[3] = {
-	{131, 0},
-	{132, 0},
+static arc arcs_56_1[1] = {
 	{0, 1},
 };
-static state states_56[2] = {
-	{1, arcs_56_0},
-	{3, arcs_56_1},
+static arc arcs_56_2[1] = {
+	{98, 1},
+};
+static arc arcs_56_3[2] = {
+	{118, 1},
+	{0, 3},
+};
+static state states_56[4] = {
+	{9, arcs_56_0},
+	{1, arcs_56_1},
+	{1, arcs_56_2},
+	{2, arcs_56_3},
 };
 static arc arcs_57_0[1] = {
-	{133, 1},
+	{128, 1},
 };
-static arc arcs_57_1[5] = {
-	{28, 0},
-	{134, 0},
-	{135, 0},
-	{136, 0},
+static arc arcs_57_1[2] = {
+	{129, 0},
 	{0, 1},
 };
 static state states_57[2] = {
 	{1, arcs_57_0},
-	{5, arcs_57_1},
+	{2, arcs_57_1},
 };
-static arc arcs_58_0[4] = {
-	{131, 1},
-	{132, 1},
-	{137, 1},
-	{138, 2},
+static arc arcs_58_0[1] = {
+	{130, 1},
 };
-static arc arcs_58_1[1] = {
-	{133, 2},
+static arc arcs_58_1[2] = {
+	{131, 0},
+	{0, 1},
 };
-static arc arcs_58_2[1] = {
-	{0, 2},
-};
-static state states_58[3] = {
-	{4, arcs_58_0},
-	{1, arcs_58_1},
-	{1, arcs_58_2},
+static state states_58[2] = {
+	{1, arcs_58_0},
+	{2, arcs_58_1},
 };
 static arc arcs_59_0[1] = {
-	{139, 1},
+	{132, 1},
 };
-static arc arcs_59_1[3] = {
-	{140, 1},
-	{29, 2},
+static arc arcs_59_1[2] = {
+	{133, 0},
 	{0, 1},
 };
-static arc arcs_59_2[1] = {
-	{133, 3},
-};
-static arc arcs_59_3[1] = {
-	{0, 3},
-};
-static state states_59[4] = {
+static state states_59[2] = {
 	{1, arcs_59_0},
-	{3, arcs_59_1},
-	{1, arcs_59_2},
-	{1, arcs_59_3},
+	{2, arcs_59_1},
 };
-static arc arcs_60_0[7] = {
-	{13, 1},
-	{142, 2},
-	{145, 3},
-	{19, 4},
-	{148, 4},
-	{149, 5},
-	{74, 6},
+static arc arcs_60_0[1] = {
+	{134, 1},
 };
 static arc arcs_60_1[3] = {
-	{42, 7},
-	{141, 7},
-	{15, 4},
+	{135, 0},
+	{62, 0},
+	{0, 1},
 };
-static arc arcs_60_2[2] = {
-	{143, 8},
-	{144, 4},
-};
-static arc arcs_60_3[2] = {
-	{146, 9},
-	{147, 4},
-};
-static arc arcs_60_4[1] = {
-	{0, 4},
-};
-static arc arcs_60_5[2] = {
-	{149, 5},
-	{0, 5},
-};
-static arc arcs_60_6[1] = {
-	{74, 10},
-};
-static arc arcs_60_7[1] = {
-	{15, 4},
-};
-static arc arcs_60_8[1] = {
-	{144, 4},
-};
-static arc arcs_60_9[1] = {
-	{147, 4},
-};
-static arc arcs_60_10[1] = {
-	{74, 4},
-};
-static state states_60[11] = {
-	{7, arcs_60_0},
+static state states_60[2] = {
+	{1, arcs_60_0},
 	{3, arcs_60_1},
-	{2, arcs_60_2},
-	{2, arcs_60_3},
-	{1, arcs_60_4},
-	{2, arcs_60_5},
-	{1, arcs_60_6},
-	{1, arcs_60_7},
-	{1, arcs_60_8},
-	{1, arcs_60_9},
-	{1, arcs_60_10},
 };
 static arc arcs_61_0[1] = {
-	{26, 1},
+	{136, 1},
 };
 static arc arcs_61_1[3] = {
-	{150, 2},
-	{27, 3},
+	{137, 0},
+	{138, 0},
 	{0, 1},
 };
-static arc arcs_61_2[1] = {
-	{0, 2},
-};
-static arc arcs_61_3[2] = {
-	{26, 4},
-	{0, 3},
-};
-static arc arcs_61_4[2] = {
-	{27, 3},
-	{0, 4},
-};
-static state states_61[5] = {
+static state states_61[2] = {
 	{1, arcs_61_0},
 	{3, arcs_61_1},
-	{1, arcs_61_2},
-	{2, arcs_61_3},
-	{2, arcs_61_4},
 };
 static arc arcs_62_0[1] = {
-	{26, 1},
+	{139, 1},
 };
-static arc arcs_62_1[3] = {
-	{151, 2},
-	{27, 3},
+static arc arcs_62_1[5] = {
+	{29, 0},
+	{140, 0},
+	{141, 0},
+	{142, 0},
 	{0, 1},
 };
-static arc arcs_62_2[1] = {
-	{0, 2},
-};
-static arc arcs_62_3[2] = {
-	{26, 4},
-	{0, 3},
-};
-static arc arcs_62_4[2] = {
-	{27, 3},
-	{0, 4},
-};
-static state states_62[5] = {
+static state states_62[2] = {
 	{1, arcs_62_0},
-	{3, arcs_62_1},
-	{1, arcs_62_2},
-	{2, arcs_62_3},
-	{2, arcs_62_4},
+	{5, arcs_62_1},
 };
-static arc arcs_63_0[1] = {
-	{106, 1},
+static arc arcs_63_0[4] = {
+	{137, 1},
+	{138, 1},
+	{143, 1},
+	{144, 2},
 };
-static arc arcs_63_1[2] = {
-	{23, 2},
-	{21, 3},
+static arc arcs_63_1[1] = {
+	{139, 2},
 };
 static arc arcs_63_2[1] = {
-	{21, 3},
-};
-static arc arcs_63_3[1] = {
-	{26, 4},
-};
-static arc arcs_63_4[1] = {
-	{0, 4},
-};
-static state states_63[5] = {
-	{1, arcs_63_0},
-	{2, arcs_63_1},
-	{1, arcs_63_2},
-	{1, arcs_63_3},
-	{1, arcs_63_4},
-};
-static arc arcs_64_0[3] = {
-	{13, 1},
-	{142, 2},
-	{74, 3},
-};
-static arc arcs_64_1[2] = {
-	{14, 4},
-	{15, 5},
-};
-static arc arcs_64_2[1] = {
-	{152, 6},
-};
-static arc arcs_64_3[1] = {
-	{19, 5},
-};
-static arc arcs_64_4[1] = {
-	{15, 5},
-};
-static arc arcs_64_5[1] = {
-	{0, 5},
-};
-static arc arcs_64_6[1] = {
-	{144, 5},
-};
-static state states_64[7] = {
-	{3, arcs_64_0},
-	{2, arcs_64_1},
-	{1, arcs_64_2},
-	{1, arcs_64_3},
-	{1, arcs_64_4},
-	{1, arcs_64_5},
-	{1, arcs_64_6},
-};
-static arc arcs_65_0[1] = {
-	{153, 1},
-};
-static arc arcs_65_1[2] = {
-	{27, 2},
-	{0, 1},
-};
-static arc arcs_65_2[2] = {
-	{153, 1},
 	{0, 2},
 };
-static state states_65[3] = {
-	{1, arcs_65_0},
-	{2, arcs_65_1},
-	{2, arcs_65_2},
+static state states_63[3] = {
+	{4, arcs_63_0},
+	{1, arcs_63_1},
+	{1, arcs_63_2},
 };
-static arc arcs_66_0[2] = {
-	{26, 1},
-	{21, 2},
+static arc arcs_64_0[1] = {
+	{145, 1},
 };
-static arc arcs_66_1[2] = {
-	{21, 2},
+static arc arcs_64_1[3] = {
+	{146, 1},
+	{31, 2},
 	{0, 1},
 };
-static arc arcs_66_2[3] = {
-	{26, 3},
+static arc arcs_64_2[1] = {
+	{139, 3},
+};
+static arc arcs_64_3[1] = {
+	{0, 3},
+};
+static state states_64[4] = {
+	{1, arcs_64_0},
+	{3, arcs_64_1},
+	{1, arcs_64_2},
+	{1, arcs_64_3},
+};
+static arc arcs_65_0[7] = {
+	{13, 1},
+	{148, 2},
+	{151, 3},
+	{19, 4},
 	{154, 4},
+	{155, 5},
+	{80, 6},
+};
+static arc arcs_65_1[3] = {
+	{48, 7},
+	{147, 7},
+	{15, 4},
+};
+static arc arcs_65_2[2] = {
+	{149, 8},
+	{150, 4},
+};
+static arc arcs_65_3[2] = {
+	{152, 9},
+	{153, 4},
+};
+static arc arcs_65_4[1] = {
+	{0, 4},
+};
+static arc arcs_65_5[2] = {
+	{155, 5},
+	{0, 5},
+};
+static arc arcs_65_6[1] = {
+	{80, 10},
+};
+static arc arcs_65_7[1] = {
+	{15, 4},
+};
+static arc arcs_65_8[1] = {
+	{150, 4},
+};
+static arc arcs_65_9[1] = {
+	{153, 4},
+};
+static arc arcs_65_10[1] = {
+	{80, 4},
+};
+static state states_65[11] = {
+	{7, arcs_65_0},
+	{3, arcs_65_1},
+	{2, arcs_65_2},
+	{2, arcs_65_3},
+	{1, arcs_65_4},
+	{2, arcs_65_5},
+	{1, arcs_65_6},
+	{1, arcs_65_7},
+	{1, arcs_65_8},
+	{1, arcs_65_9},
+	{1, arcs_65_10},
+};
+static arc arcs_66_0[1] = {
+	{22, 1},
+};
+static arc arcs_66_1[3] = {
+	{156, 2},
+	{28, 3},
+	{0, 1},
+};
+static arc arcs_66_2[1] = {
 	{0, 2},
 };
 static arc arcs_66_3[2] = {
-	{154, 4},
+	{22, 4},
 	{0, 3},
 };
-static arc arcs_66_4[1] = {
+static arc arcs_66_4[2] = {
+	{28, 3},
 	{0, 4},
 };
 static state states_66[5] = {
-	{2, arcs_66_0},
-	{2, arcs_66_1},
-	{3, arcs_66_2},
+	{1, arcs_66_0},
+	{3, arcs_66_1},
+	{1, arcs_66_2},
 	{2, arcs_66_3},
-	{1, arcs_66_4},
+	{2, arcs_66_4},
 };
 static arc arcs_67_0[1] = {
-	{21, 1},
+	{22, 1},
 };
-static arc arcs_67_1[2] = {
-	{26, 2},
+static arc arcs_67_1[3] = {
+	{157, 2},
+	{28, 3},
 	{0, 1},
 };
 static arc arcs_67_2[1] = {
 	{0, 2},
 };
-static state states_67[3] = {
-	{1, arcs_67_0},
-	{2, arcs_67_1},
-	{1, arcs_67_2},
-};
-static arc arcs_68_0[1] = {
-	{98, 1},
-};
-static arc arcs_68_1[2] = {
-	{27, 2},
-	{0, 1},
-};
-static arc arcs_68_2[2] = {
-	{98, 1},
-	{0, 2},
-};
-static state states_68[3] = {
-	{1, arcs_68_0},
-	{2, arcs_68_1},
-	{2, arcs_68_2},
-};
-static arc arcs_69_0[1] = {
-	{26, 1},
-};
-static arc arcs_69_1[2] = {
-	{27, 2},
-	{0, 1},
-};
-static arc arcs_69_2[2] = {
-	{26, 1},
-	{0, 2},
-};
-static state states_69[3] = {
-	{1, arcs_69_0},
-	{2, arcs_69_1},
-	{2, arcs_69_2},
-};
-static arc arcs_70_0[1] = {
-	{26, 1},
-};
-static arc arcs_70_1[3] = {
-	{21, 2},
-	{27, 3},
-	{0, 1},
-};
-static arc arcs_70_2[1] = {
-	{26, 4},
-};
-static arc arcs_70_3[2] = {
-	{26, 5},
+static arc arcs_67_3[2] = {
+	{22, 4},
 	{0, 3},
 };
-static arc arcs_70_4[2] = {
-	{27, 6},
+static arc arcs_67_4[2] = {
+	{28, 3},
 	{0, 4},
 };
-static arc arcs_70_5[2] = {
-	{27, 3},
+static state states_67[5] = {
+	{1, arcs_67_0},
+	{3, arcs_67_1},
+	{1, arcs_67_2},
+	{2, arcs_67_3},
+	{2, arcs_67_4},
+};
+static arc arcs_68_0[1] = {
+	{112, 1},
+};
+static arc arcs_68_1[2] = {
+	{33, 2},
+	{23, 3},
+};
+static arc arcs_68_2[1] = {
+	{23, 3},
+};
+static arc arcs_68_3[1] = {
+	{22, 4},
+};
+static arc arcs_68_4[1] = {
+	{0, 4},
+};
+static state states_68[5] = {
+	{1, arcs_68_0},
+	{2, arcs_68_1},
+	{1, arcs_68_2},
+	{1, arcs_68_3},
+	{1, arcs_68_4},
+};
+static arc arcs_69_0[3] = {
+	{13, 1},
+	{148, 2},
+	{80, 3},
+};
+static arc arcs_69_1[2] = {
+	{14, 4},
+	{15, 5},
+};
+static arc arcs_69_2[1] = {
+	{158, 6},
+};
+static arc arcs_69_3[1] = {
+	{19, 5},
+};
+static arc arcs_69_4[1] = {
+	{15, 5},
+};
+static arc arcs_69_5[1] = {
 	{0, 5},
 };
-static arc arcs_70_6[2] = {
-	{26, 7},
-	{0, 6},
+static arc arcs_69_6[1] = {
+	{150, 5},
 };
-static arc arcs_70_7[1] = {
-	{21, 2},
+static state states_69[7] = {
+	{3, arcs_69_0},
+	{2, arcs_69_1},
+	{1, arcs_69_2},
+	{1, arcs_69_3},
+	{1, arcs_69_4},
+	{1, arcs_69_5},
+	{1, arcs_69_6},
 };
-static state states_70[8] = {
+static arc arcs_70_0[1] = {
+	{159, 1},
+};
+static arc arcs_70_1[2] = {
+	{28, 2},
+	{0, 1},
+};
+static arc arcs_70_2[2] = {
+	{159, 1},
+	{0, 2},
+};
+static state states_70[3] = {
 	{1, arcs_70_0},
-	{3, arcs_70_1},
-	{1, arcs_70_2},
-	{2, arcs_70_3},
-	{2, arcs_70_4},
-	{2, arcs_70_5},
-	{2, arcs_70_6},
-	{1, arcs_70_7},
+	{2, arcs_70_1},
+	{2, arcs_70_2},
 };
-static arc arcs_71_0[1] = {
-	{155, 1},
+static arc arcs_71_0[2] = {
+	{22, 1},
+	{23, 2},
 };
-static arc arcs_71_1[1] = {
-	{19, 2},
+static arc arcs_71_1[2] = {
+	{23, 2},
+	{0, 1},
 };
-static arc arcs_71_2[2] = {
-	{13, 3},
-	{21, 4},
+static arc arcs_71_2[3] = {
+	{22, 3},
+	{160, 4},
+	{0, 2},
 };
 static arc arcs_71_3[2] = {
-	{9, 5},
-	{15, 6},
+	{160, 4},
+	{0, 3},
 };
 static arc arcs_71_4[1] = {
-	{22, 7},
+	{0, 4},
 };
-static arc arcs_71_5[1] = {
-	{15, 6},
-};
-static arc arcs_71_6[1] = {
-	{21, 4},
-};
-static arc arcs_71_7[1] = {
-	{0, 7},
-};
-static state states_71[8] = {
-	{1, arcs_71_0},
-	{1, arcs_71_1},
-	{2, arcs_71_2},
+static state states_71[5] = {
+	{2, arcs_71_0},
+	{2, arcs_71_1},
+	{3, arcs_71_2},
 	{2, arcs_71_3},
 	{1, arcs_71_4},
-	{1, arcs_71_5},
-	{1, arcs_71_6},
-	{1, arcs_71_7},
 };
-static arc arcs_72_0[3] = {
-	{156, 1},
-	{28, 2},
-	{29, 3},
+static arc arcs_72_0[1] = {
+	{23, 1},
 };
 static arc arcs_72_1[2] = {
-	{27, 4},
+	{22, 2},
 	{0, 1},
 };
 static arc arcs_72_2[1] = {
-	{26, 5},
+	{0, 2},
 };
-static arc arcs_72_3[1] = {
-	{26, 6},
-};
-static arc arcs_72_4[4] = {
-	{156, 1},
-	{28, 2},
-	{29, 3},
-	{0, 4},
-};
-static arc arcs_72_5[2] = {
-	{27, 7},
-	{0, 5},
-};
-static arc arcs_72_6[1] = {
-	{0, 6},
-};
-static arc arcs_72_7[1] = {
-	{29, 3},
-};
-static state states_72[8] = {
-	{3, arcs_72_0},
+static state states_72[3] = {
+	{1, arcs_72_0},
 	{2, arcs_72_1},
 	{1, arcs_72_2},
-	{1, arcs_72_3},
-	{4, arcs_72_4},
-	{2, arcs_72_5},
-	{1, arcs_72_6},
-	{1, arcs_72_7},
 };
 static arc arcs_73_0[1] = {
-	{26, 1},
+	{104, 1},
 };
-static arc arcs_73_1[3] = {
-	{151, 2},
-	{25, 3},
+static arc arcs_73_1[2] = {
+	{28, 2},
 	{0, 1},
 };
-static arc arcs_73_2[1] = {
+static arc arcs_73_2[2] = {
+	{104, 1},
 	{0, 2},
 };
-static arc arcs_73_3[1] = {
-	{26, 2},
-};
-static state states_73[4] = {
+static state states_73[3] = {
 	{1, arcs_73_0},
-	{3, arcs_73_1},
-	{1, arcs_73_2},
-	{1, arcs_73_3},
+	{2, arcs_73_1},
+	{2, arcs_73_2},
 };
-static arc arcs_74_0[2] = {
-	{150, 1},
-	{158, 1},
+static arc arcs_74_0[1] = {
+	{22, 1},
 };
-static arc arcs_74_1[1] = {
+static arc arcs_74_1[2] = {
+	{28, 2},
 	{0, 1},
 };
-static state states_74[2] = {
-	{2, arcs_74_0},
-	{1, arcs_74_1},
+static arc arcs_74_2[2] = {
+	{22, 1},
+	{0, 2},
+};
+static state states_74[3] = {
+	{1, arcs_74_0},
+	{2, arcs_74_1},
+	{2, arcs_74_2},
 };
 static arc arcs_75_0[1] = {
-	{91, 1},
+	{22, 1},
 };
-static arc arcs_75_1[1] = {
-	{58, 2},
+static arc arcs_75_1[3] = {
+	{23, 2},
+	{28, 3},
+	{0, 1},
 };
 static arc arcs_75_2[1] = {
-	{92, 3},
+	{22, 4},
 };
-static arc arcs_75_3[1] = {
-	{102, 4},
-};
-static arc arcs_75_4[2] = {
-	{157, 5},
-	{0, 4},
-};
-static arc arcs_75_5[1] = {
-	{0, 5},
-};
-static state states_75[6] = {
-	{1, arcs_75_0},
-	{1, arcs_75_1},
-	{1, arcs_75_2},
-	{1, arcs_75_3},
-	{2, arcs_75_4},
-	{1, arcs_75_5},
-};
-static arc arcs_76_0[1] = {
-	{87, 1},
-};
-static arc arcs_76_1[1] = {
-	{103, 2},
-};
-static arc arcs_76_2[2] = {
-	{157, 3},
-	{0, 2},
-};
-static arc arcs_76_3[1] = {
+static arc arcs_75_3[2] = {
+	{22, 5},
 	{0, 3},
 };
-static state states_76[4] = {
+static arc arcs_75_4[2] = {
+	{28, 6},
+	{0, 4},
+};
+static arc arcs_75_5[2] = {
+	{28, 3},
+	{0, 5},
+};
+static arc arcs_75_6[2] = {
+	{22, 7},
+	{0, 6},
+};
+static arc arcs_75_7[1] = {
+	{23, 2},
+};
+static state states_75[8] = {
+	{1, arcs_75_0},
+	{3, arcs_75_1},
+	{1, arcs_75_2},
+	{2, arcs_75_3},
+	{2, arcs_75_4},
+	{2, arcs_75_5},
+	{2, arcs_75_6},
+	{1, arcs_75_7},
+};
+static arc arcs_76_0[1] = {
+	{161, 1},
+};
+static arc arcs_76_1[1] = {
+	{19, 2},
+};
+static arc arcs_76_2[2] = {
+	{13, 3},
+	{23, 4},
+};
+static arc arcs_76_3[2] = {
+	{9, 5},
+	{15, 6},
+};
+static arc arcs_76_4[1] = {
+	{24, 7},
+};
+static arc arcs_76_5[1] = {
+	{15, 6},
+};
+static arc arcs_76_6[1] = {
+	{23, 4},
+};
+static arc arcs_76_7[1] = {
+	{0, 7},
+};
+static state states_76[8] = {
 	{1, arcs_76_0},
 	{1, arcs_76_1},
 	{2, arcs_76_2},
-	{1, arcs_76_3},
+	{2, arcs_76_3},
+	{1, arcs_76_4},
+	{1, arcs_76_5},
+	{1, arcs_76_6},
+	{1, arcs_76_7},
 };
-static arc arcs_77_0[2] = {
-	{151, 1},
-	{160, 1},
+static arc arcs_77_0[3] = {
+	{162, 1},
+	{29, 2},
+	{31, 3},
 };
-static arc arcs_77_1[1] = {
+static arc arcs_77_1[2] = {
+	{28, 4},
 	{0, 1},
 };
-static state states_77[2] = {
-	{2, arcs_77_0},
-	{1, arcs_77_1},
+static arc arcs_77_2[1] = {
+	{22, 5},
 };
-static arc arcs_78_0[1] = {
-	{91, 1},
+static arc arcs_77_3[1] = {
+	{22, 6},
 };
-static arc arcs_78_1[1] = {
-	{58, 2},
-};
-static arc arcs_78_2[1] = {
-	{92, 3},
-};
-static arc arcs_78_3[1] = {
-	{104, 4},
-};
-static arc arcs_78_4[2] = {
-	{159, 5},
+static arc arcs_77_4[4] = {
+	{162, 1},
+	{29, 2},
+	{31, 3},
 	{0, 4},
 };
-static arc arcs_78_5[1] = {
+static arc arcs_77_5[2] = {
+	{28, 7},
 	{0, 5},
 };
-static state states_78[6] = {
-	{1, arcs_78_0},
-	{1, arcs_78_1},
-	{1, arcs_78_2},
-	{1, arcs_78_3},
-	{2, arcs_78_4},
-	{1, arcs_78_5},
+static arc arcs_77_6[1] = {
+	{0, 6},
 };
-static arc arcs_79_0[1] = {
-	{87, 1},
+static arc arcs_77_7[1] = {
+	{31, 3},
 };
-static arc arcs_79_1[1] = {
-	{103, 2},
+static state states_77[8] = {
+	{3, arcs_77_0},
+	{2, arcs_77_1},
+	{1, arcs_77_2},
+	{1, arcs_77_3},
+	{4, arcs_77_4},
+	{2, arcs_77_5},
+	{1, arcs_77_6},
+	{1, arcs_77_7},
 };
-static arc arcs_79_2[2] = {
-	{159, 3},
+static arc arcs_78_0[1] = {
+	{22, 1},
+};
+static arc arcs_78_1[3] = {
+	{157, 2},
+	{27, 3},
+	{0, 1},
+};
+static arc arcs_78_2[1] = {
 	{0, 2},
 };
-static arc arcs_79_3[1] = {
-	{0, 3},
+static arc arcs_78_3[1] = {
+	{22, 2},
 };
-static state states_79[4] = {
-	{1, arcs_79_0},
+static state states_78[4] = {
+	{1, arcs_78_0},
+	{3, arcs_78_1},
+	{1, arcs_78_2},
+	{1, arcs_78_3},
+};
+static arc arcs_79_0[2] = {
+	{156, 1},
+	{164, 1},
+};
+static arc arcs_79_1[1] = {
+	{0, 1},
+};
+static state states_79[2] = {
+	{2, arcs_79_0},
 	{1, arcs_79_1},
-	{2, arcs_79_2},
-	{1, arcs_79_3},
 };
 static arc arcs_80_0[1] = {
-	{26, 1},
+	{97, 1},
 };
-static arc arcs_80_1[2] = {
-	{27, 0},
-	{0, 1},
+static arc arcs_80_1[1] = {
+	{64, 2},
 };
-static state states_80[2] = {
+static arc arcs_80_2[1] = {
+	{98, 3},
+};
+static arc arcs_80_3[1] = {
+	{108, 4},
+};
+static arc arcs_80_4[2] = {
+	{163, 5},
+	{0, 4},
+};
+static arc arcs_80_5[1] = {
+	{0, 5},
+};
+static state states_80[6] = {
 	{1, arcs_80_0},
-	{2, arcs_80_1},
+	{1, arcs_80_1},
+	{1, arcs_80_2},
+	{1, arcs_80_3},
+	{2, arcs_80_4},
+	{1, arcs_80_5},
 };
 static arc arcs_81_0[1] = {
-	{19, 1},
+	{93, 1},
 };
 static arc arcs_81_1[1] = {
-	{0, 1},
+	{109, 2},
 };
-static state states_81[2] = {
+static arc arcs_81_2[2] = {
+	{163, 3},
+	{0, 2},
+};
+static arc arcs_81_3[1] = {
+	{0, 3},
+};
+static state states_81[4] = {
 	{1, arcs_81_0},
 	{1, arcs_81_1},
+	{2, arcs_81_2},
+	{1, arcs_81_3},
 };
-static arc arcs_82_0[1] = {
-	{163, 1},
+static arc arcs_82_0[2] = {
+	{157, 1},
+	{166, 1},
 };
-static arc arcs_82_1[2] = {
+static arc arcs_82_1[1] = {
+	{0, 1},
+};
+static state states_82[2] = {
+	{2, arcs_82_0},
+	{1, arcs_82_1},
+};
+static arc arcs_83_0[1] = {
+	{97, 1},
+};
+static arc arcs_83_1[1] = {
+	{64, 2},
+};
+static arc arcs_83_2[1] = {
+	{98, 3},
+};
+static arc arcs_83_3[1] = {
+	{110, 4},
+};
+static arc arcs_83_4[2] = {
+	{165, 5},
+	{0, 4},
+};
+static arc arcs_83_5[1] = {
+	{0, 5},
+};
+static state states_83[6] = {
+	{1, arcs_83_0},
+	{1, arcs_83_1},
+	{1, arcs_83_2},
+	{1, arcs_83_3},
+	{2, arcs_83_4},
+	{1, arcs_83_5},
+};
+static arc arcs_84_0[1] = {
+	{93, 1},
+};
+static arc arcs_84_1[1] = {
+	{109, 2},
+};
+static arc arcs_84_2[2] = {
+	{165, 3},
+	{0, 2},
+};
+static arc arcs_84_3[1] = {
+	{0, 3},
+};
+static state states_84[4] = {
+	{1, arcs_84_0},
+	{1, arcs_84_1},
+	{2, arcs_84_2},
+	{1, arcs_84_3},
+};
+static arc arcs_85_0[1] = {
+	{22, 1},
+};
+static arc arcs_85_1[2] = {
+	{28, 0},
+	{0, 1},
+};
+static state states_85[2] = {
+	{1, arcs_85_0},
+	{2, arcs_85_1},
+};
+static arc arcs_86_0[1] = {
+	{19, 1},
+};
+static arc arcs_86_1[1] = {
+	{0, 1},
+};
+static state states_86[2] = {
+	{1, arcs_86_0},
+	{1, arcs_86_1},
+};
+static arc arcs_87_0[1] = {
+	{169, 1},
+};
+static arc arcs_87_1[2] = {
 	{9, 2},
 	{0, 1},
 };
-static arc arcs_82_2[1] = {
+static arc arcs_87_2[1] = {
 	{0, 2},
 };
-static state states_82[3] = {
-	{1, arcs_82_0},
-	{2, arcs_82_1},
-	{1, arcs_82_2},
+static state states_87[3] = {
+	{1, arcs_87_0},
+	{2, arcs_87_1},
+	{1, arcs_87_2},
 };
-static dfa dfas[83] = {
+static dfa dfas[88] = {
 	{256, "single_input", 0, 3, states_0,
-	 "\004\050\014\000\000\000\200\012\236\206\201\054\001\004\001\000\030\102\062\010\010"},
+	 "\004\050\014\000\000\000\000\240\202\247\141\040\113\000\101\000\000\206\220\014\002\002"},
 	{257, "file_input", 0, 2, states_1,
-	 "\204\050\014\000\000\000\200\012\236\206\201\054\001\004\001\000\030\102\062\010\010"},
+	 "\204\050\014\000\000\000\000\240\202\247\141\040\113\000\101\000\000\206\220\014\002\002"},
 	{258, "eval_input", 0, 3, states_2,
-	 "\000\040\010\000\000\000\000\000\000\004\000\000\000\004\001\000\030\102\062\000\000"},
+	 "\000\040\010\000\000\000\000\000\000\000\001\000\000\000\101\000\000\206\220\014\000\000"},
 	{259, "decorator", 0, 7, states_3,
-	 "\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+	 "\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
 	{260, "decorators", 0, 2, states_4,
-	 "\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
-	{261, "funcdef", 0, 7, states_5,
-	 "\000\010\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+	 "\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+	{261, "funcdef", 0, 9, states_5,
+	 "\000\010\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
 	{262, "parameters", 0, 4, states_6,
-	 "\000\040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
-	{263, "varargslist", 0, 12, states_7,
-	 "\000\040\010\060\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
-	{264, "fpdef", 0, 4, states_8,
-	 "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
-	{265, "fplist", 0, 3, states_9,
-	 "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
-	{266, "stmt", 0, 2, states_10,
-	 "\000\050\014\000\000\000\200\012\236\206\201\054\001\004\001\000\030\102\062\010\010"},
-	{267, "simple_stmt", 0, 4, states_11,
-	 "\000\040\010\000\000\000\200\012\236\206\001\000\000\004\001\000\030\102\062\000\010"},
-	{268, "small_stmt", 0, 2, states_12,
-	 "\000\040\010\000\000\000\200\012\236\206\001\000\000\004\001\000\030\102\062\000\010"},
-	{269, "expr_stmt", 0, 6, states_13,
-	 "\000\040\010\000\000\000\000\000\000\004\000\000\000\004\001\000\030\102\062\000\000"},
-	{270, "augassign", 0, 2, states_14,
-	 "\000\000\000\000\000\370\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
-	{271, "print_stmt", 0, 9, states_15,
-	 "\000\000\000\000\000\000\200\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
-	{272, "del_stmt", 0, 3, states_16,
-	 "\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000"},
-	{273, "pass_stmt", 0, 2, states_17,
-	 "\000\000\000\000\000\000\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000"},
-	{274, "flow_stmt", 0, 2, states_18,
-	 "\000\000\000\000\000\000\000\000\036\000\000\000\000\000\000\000\000\000\000\000\010"},
-	{275, "break_stmt", 0, 2, states_19,
-	 "\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000"},
-	{276, "continue_stmt", 0, 2, states_20,
-	 "\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000"},
-	{277, "return_stmt", 0, 3, states_21,
-	 "\000\000\000\000\000\000\000\000\010\000\000\000\000\000\000\000\000\000\000\000\000"},
-	{278, "yield_stmt", 0, 2, states_22,
-	 "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\010"},
-	{279, "raise_stmt", 0, 7, states_23,
-	 "\000\000\000\000\000\000\000\000\020\000\000\000\000\000\000\000\000\000\000\000\000"},
-	{280, "import_stmt", 0, 2, states_24,
-	 "\000\000\000\000\000\000\000\000\200\002\000\000\000\000\000\000\000\000\000\000\000"},
-	{281, "import_name", 0, 3, states_25,
-	 "\000\000\000\000\000\000\000\000\200\000\000\000\000\000\000\000\000\000\000\000\000"},
-	{282, "import_from", 0, 8, states_26,
-	 "\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000"},
-	{283, "import_as_name", 0, 4, states_27,
-	 "\000\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
-	{284, "dotted_as_name", 0, 4, states_28,
-	 "\000\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
-	{285, "import_as_names", 0, 3, states_29,
-	 "\000\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
-	{286, "dotted_as_names", 0, 2, states_30,
-	 "\000\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
-	{287, "dotted_name", 0, 2, states_31,
-	 "\000\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
-	{288, "global_stmt", 0, 3, states_32,
-	 "\000\000\000\000\000\000\000\000\000\200\000\000\000\000\000\000\000\000\000\000\000"},
-	{289, "assert_stmt", 0, 5, states_33,
-	 "\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000"},
-	{290, "compound_stmt", 0, 2, states_34,
-	 "\000\010\004\000\000\000\000\000\000\000\200\054\001\000\000\000\000\000\000\010\000"},
-	{291, "if_stmt", 0, 8, states_35,
-	 "\000\000\000\000\000\000\000\000\000\000\200\000\000\000\000\000\000\000\000\000\000"},
-	{292, "while_stmt", 0, 8, states_36,
-	 "\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000"},
-	{293, "for_stmt", 0, 10, states_37,
-	 "\000\000\000\000\000\000\000\000\000\000\000\010\000\000\000\000\000\000\000\000\000"},
-	{294, "try_stmt", 0, 13, states_38,
-	 "\000\000\000\000\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000\000"},
-	{295, "with_stmt", 0, 6, states_39,
-	 "\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000"},
-	{296, "with_var", 0, 3, states_40,
-	 "\000\000\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000\000\000\000"},
-	{297, "except_clause", 0, 5, states_41,
-	 "\000\000\000\000\000\000\000\000\000\000\000\000\010\000\000\000\000\000\000\000\000"},
-	{298, "suite", 0, 5, states_42,
-	 "\004\040\010\000\000\000\200\012\236\206\001\000\000\004\001\000\030\102\062\000\010"},
-	{299, "testlist_safe", 0, 5, states_43,
-	 "\000\040\010\000\000\000\000\000\000\004\000\000\000\004\001\000\030\102\062\000\000"},
-	{300, "old_test", 0, 2, states_44,
-	 "\000\040\010\000\000\000\000\000\000\004\000\000\000\004\001\000\030\102\062\000\000"},
-	{301, "old_lambdef", 0, 5, states_45,
-	 "\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000"},
-	{302, "test", 0, 6, states_46,
-	 "\000\040\010\000\000\000\000\000\000\004\000\000\000\004\001\000\030\102\062\000\000"},
-	{303, "or_test", 0, 2, states_47,
-	 "\000\040\010\000\000\000\000\000\000\004\000\000\000\000\001\000\030\102\062\000\000"},
-	{304, "and_test", 0, 2, states_48,
-	 "\000\040\010\000\000\000\000\000\000\004\000\000\000\000\001\000\030\102\062\000\000"},
-	{305, "not_test", 0, 3, states_49,
-	 "\000\040\010\000\000\000\000\000\000\004\000\000\000\000\001\000\030\102\062\000\000"},
-	{306, "comparison", 0, 2, states_50,
-	 "\000\040\010\000\000\000\000\000\000\004\000\000\000\000\000\000\030\102\062\000\000"},
-	{307, "comp_op", 0, 4, states_51,
-	 "\000\000\000\000\000\000\000\000\000\000\000\020\000\000\371\003\000\000\000\000\000"},
-	{308, "expr", 0, 2, states_52,
-	 "\000\040\010\000\000\000\000\000\000\004\000\000\000\000\000\000\030\102\062\000\000"},
-	{309, "xor_expr", 0, 2, states_53,
-	 "\000\040\010\000\000\000\000\000\000\004\000\000\000\000\000\000\030\102\062\000\000"},
-	{310, "and_expr", 0, 2, states_54,
-	 "\000\040\010\000\000\000\000\000\000\004\000\000\000\000\000\000\030\102\062\000\000"},
-	{311, "shift_expr", 0, 2, states_55,
-	 "\000\040\010\000\000\000\000\000\000\004\000\000\000\000\000\000\030\102\062\000\000"},
-	{312, "arith_expr", 0, 2, states_56,
-	 "\000\040\010\000\000\000\000\000\000\004\000\000\000\000\000\000\030\102\062\000\000"},
-	{313, "term", 0, 2, states_57,
-	 "\000\040\010\000\000\000\000\000\000\004\000\000\000\000\000\000\030\102\062\000\000"},
-	{314, "factor", 0, 3, states_58,
-	 "\000\040\010\000\000\000\000\000\000\004\000\000\000\000\000\000\030\102\062\000\000"},
-	{315, "power", 0, 4, states_59,
-	 "\000\040\010\000\000\000\000\000\000\004\000\000\000\000\000\000\000\100\062\000\000"},
-	{316, "atom", 0, 11, states_60,
-	 "\000\040\010\000\000\000\000\000\000\004\000\000\000\000\000\000\000\100\062\000\000"},
-	{317, "listmaker", 0, 5, states_61,
-	 "\000\040\010\000\000\000\000\000\000\004\000\000\000\004\001\000\030\102\062\000\000"},
-	{318, "testlist_gexp", 0, 5, states_62,
-	 "\000\040\010\000\000\000\000\000\000\004\000\000\000\004\001\000\030\102\062\000\000"},
-	{319, "lambdef", 0, 5, states_63,
-	 "\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000"},
-	{320, "trailer", 0, 7, states_64,
-	 "\000\040\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\100\000\000\000"},
-	{321, "subscriptlist", 0, 3, states_65,
-	 "\000\040\050\000\000\000\000\000\000\004\000\000\000\004\001\000\030\102\062\000\000"},
-	{322, "subscript", 0, 5, states_66,
-	 "\000\040\050\000\000\000\000\000\000\004\000\000\000\004\001\000\030\102\062\000\000"},
-	{323, "sliceop", 0, 3, states_67,
-	 "\000\000\040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
-	{324, "exprlist", 0, 3, states_68,
-	 "\000\040\010\000\000\000\000\000\000\004\000\000\000\000\000\000\030\102\062\000\000"},
-	{325, "testlist", 0, 3, states_69,
-	 "\000\040\010\000\000\000\000\000\000\004\000\000\000\004\001\000\030\102\062\000\000"},
-	{326, "dictsetmaker", 0, 8, states_70,
-	 "\000\040\010\000\000\000\000\000\000\004\000\000\000\004\001\000\030\102\062\000\000"},
-	{327, "classdef", 0, 8, states_71,
-	 "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000"},
-	{328, "arglist", 0, 8, states_72,
-	 "\000\040\010\060\000\000\000\000\000\004\000\000\000\004\001\000\030\102\062\000\000"},
-	{329, "argument", 0, 4, states_73,
-	 "\000\040\010\000\000\000\000\000\000\004\000\000\000\004\001\000\030\102\062\000\000"},
-	{330, "list_iter", 0, 2, states_74,
-	 "\000\000\000\000\000\000\000\000\000\000\200\010\000\000\000\000\000\000\000\000\000"},
-	{331, "list_for", 0, 6, states_75,
-	 "\000\000\000\000\000\000\000\000\000\000\000\010\000\000\000\000\000\000\000\000\000"},
-	{332, "list_if", 0, 4, states_76,
-	 "\000\000\000\000\000\000\000\000\000\000\200\000\000\000\000\000\000\000\000\000\000"},
-	{333, "gen_iter", 0, 2, states_77,
-	 "\000\000\000\000\000\000\000\000\000\000\200\010\000\000\000\000\000\000\000\000\000"},
-	{334, "gen_for", 0, 6, states_78,
-	 "\000\000\000\000\000\000\000\000\000\000\000\010\000\000\000\000\000\000\000\000\000"},
-	{335, "gen_if", 0, 4, states_79,
-	 "\000\000\000\000\000\000\000\000\000\000\200\000\000\000\000\000\000\000\000\000\000"},
-	{336, "testlist1", 0, 2, states_80,
-	 "\000\040\010\000\000\000\000\000\000\004\000\000\000\004\001\000\030\102\062\000\000"},
-	{337, "encoding_decl", 0, 2, states_81,
-	 "\000\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
-	{338, "yield_expr", 0, 3, states_82,
-	 "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\010"},
+	 "\000\040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+	{263, "typedargslist", 0, 12, states_7,
+	 "\000\040\010\240\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+	{264, "tname", 0, 4, states_8,
+	 "\000\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+	{265, "tfpdef", 0, 4, states_9,
+	 "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+	{266, "tfplist", 0, 3, states_10,
+	 "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+	{267, "varargslist", 0, 12, states_11,
+	 "\000\040\010\240\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+	{268, "vname", 0, 2, states_12,
+	 "\000\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+	{269, "vfpdef", 0, 4, states_13,
+	 "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+	{270, "vfplist", 0, 3, states_14,
+	 "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+	{271, "stmt", 0, 2, states_15,
+	 "\000\050\014\000\000\000\000\240\202\247\141\040\113\000\101\000\000\206\220\014\002\002"},
+	{272, "simple_stmt", 0, 4, states_16,
+	 "\000\040\010\000\000\000\000\240\202\247\141\000\000\000\101\000\000\206\220\014\000\002"},
+	{273, "small_stmt", 0, 2, states_17,
+	 "\000\040\010\000\000\000\000\240\202\247\141\000\000\000\101\000\000\206\220\014\000\002"},
+	{274, "expr_stmt", 0, 6, states_18,
+	 "\000\040\010\000\000\000\000\000\000\000\001\000\000\000\101\000\000\206\220\014\000\000"},
+	{275, "augassign", 0, 2, states_19,
+	 "\000\000\000\000\000\000\376\037\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+	{276, "print_stmt", 0, 9, states_20,
+	 "\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+	{277, "del_stmt", 0, 3, states_21,
+	 "\000\000\000\000\000\000\000\200\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+	{278, "pass_stmt", 0, 2, states_22,
+	 "\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+	{279, "flow_stmt", 0, 2, states_23,
+	 "\000\000\000\000\000\000\000\000\200\007\000\000\000\000\000\000\000\000\000\000\000\002"},
+	{280, "break_stmt", 0, 2, states_24,
+	 "\000\000\000\000\000\000\000\000\200\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+	{281, "continue_stmt", 0, 2, states_25,
+	 "\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000"},
+	{282, "return_stmt", 0, 3, states_26,
+	 "\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000"},
+	{283, "yield_stmt", 0, 2, states_27,
+	 "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002"},
+	{284, "raise_stmt", 0, 7, states_28,
+	 "\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000"},
+	{285, "import_stmt", 0, 2, states_29,
+	 "\000\000\000\000\000\000\000\000\000\240\000\000\000\000\000\000\000\000\000\000\000\000"},
+	{286, "import_name", 0, 3, states_30,
+	 "\000\000\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000\000\000\000\000"},
+	{287, "import_from", 0, 8, states_31,
+	 "\000\000\000\000\000\000\000\000\000\200\000\000\000\000\000\000\000\000\000\000\000\000"},
+	{288, "import_as_name", 0, 4, states_32,
+	 "\000\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+	{289, "dotted_as_name", 0, 4, states_33,
+	 "\000\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+	{290, "import_as_names", 0, 3, states_34,
+	 "\000\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+	{291, "dotted_as_names", 0, 2, states_35,
+	 "\000\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+	{292, "dotted_name", 0, 2, states_36,
+	 "\000\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+	{293, "global_stmt", 0, 3, states_37,
+	 "\000\000\000\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000\000\000\000"},
+	{294, "assert_stmt", 0, 5, states_38,
+	 "\000\000\000\000\000\000\000\000\000\000\100\000\000\000\000\000\000\000\000\000\000\000"},
+	{295, "compound_stmt", 0, 2, states_39,
+	 "\000\010\004\000\000\000\000\000\000\000\000\040\113\000\000\000\000\000\000\000\002\000"},
+	{296, "if_stmt", 0, 8, states_40,
+	 "\000\000\000\000\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000\000\000"},
+	{297, "while_stmt", 0, 8, states_41,
+	 "\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000"},
+	{298, "for_stmt", 0, 10, states_42,
+	 "\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000"},
+	{299, "try_stmt", 0, 13, states_43,
+	 "\000\000\000\000\000\000\000\000\000\000\000\000\010\000\000\000\000\000\000\000\000\000"},
+	{300, "with_stmt", 0, 6, states_44,
+	 "\000\000\000\000\000\000\000\000\000\000\000\000\100\000\000\000\000\000\000\000\000\000"},
+	{301, "with_var", 0, 3, states_45,
+	 "\000\000\000\000\000\000\000\000\000\000\010\000\000\000\000\000\000\000\000\000\000\000"},
+	{302, "except_clause", 0, 5, states_46,
+	 "\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000"},
+	{303, "suite", 0, 5, states_47,
+	 "\004\040\010\000\000\000\000\240\202\247\141\000\000\000\101\000\000\206\220\014\000\002"},
+	{304, "testlist_safe", 0, 5, states_48,
+	 "\000\040\010\000\000\000\000\000\000\000\001\000\000\000\101\000\000\206\220\014\000\000"},
+	{305, "old_test", 0, 2, states_49,
+	 "\000\040\010\000\000\000\000\000\000\000\001\000\000\000\101\000\000\206\220\014\000\000"},
+	{306, "old_lambdef", 0, 5, states_50,
+	 "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000"},
+	{307, "test", 0, 6, states_51,
+	 "\000\040\010\000\000\000\000\000\000\000\001\000\000\000\101\000\000\206\220\014\000\000"},
+	{308, "or_test", 0, 2, states_52,
+	 "\000\040\010\000\000\000\000\000\000\000\001\000\000\000\100\000\000\206\220\014\000\000"},
+	{309, "and_test", 0, 2, states_53,
+	 "\000\040\010\000\000\000\000\000\000\000\001\000\000\000\100\000\000\206\220\014\000\000"},
+	{310, "not_test", 0, 3, states_54,
+	 "\000\040\010\000\000\000\000\000\000\000\001\000\000\000\100\000\000\206\220\014\000\000"},
+	{311, "comparison", 0, 2, states_55,
+	 "\000\040\010\000\000\000\000\000\000\000\001\000\000\000\000\000\000\206\220\014\000\000"},
+	{312, "comp_op", 0, 4, states_56,
+	 "\000\000\000\000\000\000\000\000\000\000\000\000\004\000\100\376\000\000\000\000\000\000"},
+	{313, "expr", 0, 2, states_57,
+	 "\000\040\010\000\000\000\000\000\000\000\001\000\000\000\000\000\000\206\220\014\000\000"},
+	{314, "xor_expr", 0, 2, states_58,
+	 "\000\040\010\000\000\000\000\000\000\000\001\000\000\000\000\000\000\206\220\014\000\000"},
+	{315, "and_expr", 0, 2, states_59,
+	 "\000\040\010\000\000\000\000\000\000\000\001\000\000\000\000\000\000\206\220\014\000\000"},
+	{316, "shift_expr", 0, 2, states_60,
+	 "\000\040\010\000\000\000\000\000\000\000\001\000\000\000\000\000\000\206\220\014\000\000"},
+	{317, "arith_expr", 0, 2, states_61,
+	 "\000\040\010\000\000\000\000\000\000\000\001\000\000\000\000\000\000\206\220\014\000\000"},
+	{318, "term", 0, 2, states_62,
+	 "\000\040\010\000\000\000\000\000\000\000\001\000\000\000\000\000\000\206\220\014\000\000"},
+	{319, "factor", 0, 3, states_63,
+	 "\000\040\010\000\000\000\000\000\000\000\001\000\000\000\000\000\000\206\220\014\000\000"},
+	{320, "power", 0, 4, states_64,
+	 "\000\040\010\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\220\014\000\000"},
+	{321, "atom", 0, 11, states_65,
+	 "\000\040\010\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\220\014\000\000"},
+	{322, "listmaker", 0, 5, states_66,
+	 "\000\040\010\000\000\000\000\000\000\000\001\000\000\000\101\000\000\206\220\014\000\000"},
+	{323, "testlist_gexp", 0, 5, states_67,
+	 "\000\040\010\000\000\000\000\000\000\000\001\000\000\000\101\000\000\206\220\014\000\000"},
+	{324, "lambdef", 0, 5, states_68,
+	 "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000"},
+	{325, "trailer", 0, 7, states_69,
+	 "\000\040\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\020\000\000\000"},
+	{326, "subscriptlist", 0, 3, states_70,
+	 "\000\040\210\000\000\000\000\000\000\000\001\000\000\000\101\000\000\206\220\014\000\000"},
+	{327, "subscript", 0, 5, states_71,
+	 "\000\040\210\000\000\000\000\000\000\000\001\000\000\000\101\000\000\206\220\014\000\000"},
+	{328, "sliceop", 0, 3, states_72,
+	 "\000\000\200\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+	{329, "exprlist", 0, 3, states_73,
+	 "\000\040\010\000\000\000\000\000\000\000\001\000\000\000\000\000\000\206\220\014\000\000"},
+	{330, "testlist", 0, 3, states_74,
+	 "\000\040\010\000\000\000\000\000\000\000\001\000\000\000\101\000\000\206\220\014\000\000"},
+	{331, "dictsetmaker", 0, 8, states_75,
+	 "\000\040\010\000\000\000\000\000\000\000\001\000\000\000\101\000\000\206\220\014\000\000"},
+	{332, "classdef", 0, 8, states_76,
+	 "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000"},
+	{333, "arglist", 0, 8, states_77,
+	 "\000\040\010\240\000\000\000\000\000\000\001\000\000\000\101\000\000\206\220\014\000\000"},
+	{334, "argument", 0, 4, states_78,
+	 "\000\040\010\000\000\000\000\000\000\000\001\000\000\000\101\000\000\206\220\014\000\000"},
+	{335, "list_iter", 0, 2, states_79,
+	 "\000\000\000\000\000\000\000\000\000\000\000\040\002\000\000\000\000\000\000\000\000\000"},
+	{336, "list_for", 0, 6, states_80,
+	 "\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000"},
+	{337, "list_if", 0, 4, states_81,
+	 "\000\000\000\000\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000\000\000"},
+	{338, "gen_iter", 0, 2, states_82,
+	 "\000\000\000\000\000\000\000\000\000\000\000\040\002\000\000\000\000\000\000\000\000\000"},
+	{339, "gen_for", 0, 6, states_83,
+	 "\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000"},
+	{340, "gen_if", 0, 4, states_84,
+	 "\000\000\000\000\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000\000\000"},
+	{341, "testlist1", 0, 2, states_85,
+	 "\000\040\010\000\000\000\000\000\000\000\001\000\000\000\101\000\000\206\220\014\000\000"},
+	{342, "encoding_decl", 0, 2, states_86,
+	 "\000\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+	{343, "yield_expr", 0, 3, states_87,
+	 "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002"},
 };
-static label labels[164] = {
+static label labels[170] = {
 	{0, "EMPTY"},
 	{256, 0},
 	{4, 0},
-	{267, 0},
-	{290, 0},
+	{272, 0},
+	{295, 0},
 	{257, 0},
-	{266, 0},
+	{271, 0},
 	{0, 0},
 	{258, 0},
-	{325, 0},
+	{330, 0},
 	{259, 0},
 	{50, 0},
-	{287, 0},
+	{292, 0},
 	{7, 0},
-	{328, 0},
+	{333, 0},
 	{8, 0},
 	{260, 0},
 	{261, 0},
 	{1, "def"},
 	{1, 0},
 	{262, 0},
+	{51, 0},
+	{307, 0},
 	{11, 0},
-	{298, 0},
+	{303, 0},
 	{263, 0},
-	{264, 0},
+	{265, 0},
 	{22, 0},
-	{302, 0},
 	{12, 0},
 	{16, 0},
+	{264, 0},
 	{36, 0},
-	{265, 0},
-	{268, 0},
-	{13, 0},
+	{266, 0},
+	{267, 0},
 	{269, 0},
-	{271, 0},
-	{272, 0},
-	{273, 0},
-	{274, 0},
-	{280, 0},
-	{288, 0},
-	{289, 0},
+	{268, 0},
 	{270, 0},
-	{338, 0},
+	{273, 0},
+	{13, 0},
+	{274, 0},
+	{276, 0},
+	{277, 0},
+	{278, 0},
+	{279, 0},
+	{285, 0},
+	{293, 0},
+	{294, 0},
+	{275, 0},
+	{343, 0},
 	{37, 0},
 	{38, 0},
 	{39, 0},
@@ -1991,35 +2144,35 @@
 	{1, "print"},
 	{35, 0},
 	{1, "del"},
-	{324, 0},
+	{329, 0},
 	{1, "pass"},
-	{275, 0},
-	{276, 0},
-	{277, 0},
-	{279, 0},
-	{278, 0},
+	{280, 0},
+	{281, 0},
+	{282, 0},
+	{284, 0},
+	{283, 0},
 	{1, "break"},
 	{1, "continue"},
 	{1, "return"},
 	{1, "raise"},
-	{281, 0},
-	{282, 0},
-	{1, "import"},
 	{286, 0},
+	{287, 0},
+	{1, "import"},
+	{291, 0},
 	{1, "from"},
 	{23, 0},
-	{285, 0},
-	{283, 0},
+	{290, 0},
+	{288, 0},
 	{1, "as"},
-	{284, 0},
+	{289, 0},
 	{1, "global"},
 	{1, "assert"},
-	{291, 0},
-	{292, 0},
-	{293, 0},
-	{294, 0},
-	{295, 0},
-	{327, 0},
+	{296, 0},
+	{297, 0},
+	{298, 0},
+	{299, 0},
+	{300, 0},
+	{332, 0},
 	{1, "if"},
 	{1, "elif"},
 	{1, "else"},
@@ -2027,27 +2180,27 @@
 	{1, "for"},
 	{1, "in"},
 	{1, "try"},
-	{297, 0},
+	{302, 0},
 	{1, "finally"},
 	{1, "with"},
-	{296, 0},
-	{308, 0},
+	{301, 0},
+	{313, 0},
 	{1, "except"},
 	{5, 0},
 	{6, 0},
-	{299, 0},
-	{300, 0},
-	{303, 0},
-	{301, 0},
-	{1, "lambda"},
-	{319, 0},
 	{304, 0},
-	{1, "or"},
 	{305, 0},
+	{308, 0},
+	{306, 0},
+	{1, "lambda"},
+	{324, 0},
+	{309, 0},
+	{1, "or"},
+	{310, 0},
 	{1, "and"},
 	{1, "not"},
-	{306, 0},
-	{307, 0},
+	{311, 0},
+	{312, 0},
 	{20, 0},
 	{21, 0},
 	{28, 0},
@@ -2055,52 +2208,52 @@
 	{30, 0},
 	{29, 0},
 	{1, "is"},
-	{309, 0},
+	{314, 0},
 	{18, 0},
-	{310, 0},
+	{315, 0},
 	{33, 0},
-	{311, 0},
+	{316, 0},
 	{19, 0},
-	{312, 0},
+	{317, 0},
 	{34, 0},
-	{313, 0},
+	{318, 0},
 	{14, 0},
 	{15, 0},
-	{314, 0},
+	{319, 0},
 	{17, 0},
 	{24, 0},
 	{48, 0},
 	{32, 0},
-	{315, 0},
-	{316, 0},
 	{320, 0},
-	{318, 0},
+	{321, 0},
+	{325, 0},
+	{323, 0},
 	{9, 0},
-	{317, 0},
+	{322, 0},
 	{10, 0},
 	{26, 0},
-	{326, 0},
+	{331, 0},
 	{27, 0},
 	{2, 0},
 	{3, 0},
-	{331, 0},
-	{334, 0},
-	{321, 0},
-	{322, 0},
-	{323, 0},
-	{1, "class"},
-	{329, 0},
-	{330, 0},
-	{332, 0},
-	{333, 0},
-	{335, 0},
 	{336, 0},
+	{339, 0},
+	{326, 0},
+	{327, 0},
+	{328, 0},
+	{1, "class"},
+	{334, 0},
+	{335, 0},
 	{337, 0},
+	{338, 0},
+	{340, 0},
+	{341, 0},
+	{342, 0},
 	{1, "yield"},
 };
 grammar _PyParser_Grammar = {
-	83,
+	88,
 	dfas,
-	{164, labels},
+	{170, labels},
 	256
 };
diff --git a/Python/symtable.c b/Python/symtable.c
index b0ebed4..708e18c 100644
--- a/Python/symtable.c
+++ b/Python/symtable.c
@@ -172,9 +172,12 @@
 static int symtable_visit_comprehension(struct symtable *st, comprehension_ty);
 static int symtable_visit_keyword(struct symtable *st, keyword_ty);
 static int symtable_visit_slice(struct symtable *st, slice_ty);
-static int symtable_visit_params(struct symtable *st, asdl_seq *args, int top);
-static int symtable_visit_params_nested(struct symtable *st, asdl_seq *args);
+static int symtable_visit_params(struct symtable *st, asdl_seq *args, int top,
+                                 int annotations);
+static int symtable_visit_params_nested(struct symtable *st, asdl_seq *args,
+                                        int annotations);
 static int symtable_implicit_arg(struct symtable *st, int pos);
+static int symtable_visit_annotations(struct symtable *st, stmt_ty s);
 
 
 static identifier top = NULL, lambda = NULL, genexpr = NULL;
@@ -935,6 +938,8 @@
 		if (s->v.FunctionDef.args->kw_defaults)
 			VISIT_KWONLYDEFAULTS(st, 
 					   s->v.FunctionDef.args->kw_defaults);
+		if (!symtable_visit_annotations(st, s))
+			return 0;
 		if (s->v.FunctionDef.decorators)
 			VISIT_SEQ(st, expr, s->v.FunctionDef.decorators);
 		if (!symtable_enter_block(st, s->v.FunctionDef.name, 
@@ -1219,22 +1224,29 @@
 }
 
 static int 
-symtable_visit_params(struct symtable *st, asdl_seq *args, int toplevel)
+symtable_visit_params(struct symtable *st, asdl_seq *args, int toplevel,
+                      int annotations)
 {
 	int i;
+
+	if (!args)
+		return -1;
 	
         /* go through all the toplevel arguments first */
 	for (i = 0; i < asdl_seq_LEN(args); i++) {
-		expr_ty arg = (expr_ty)asdl_seq_GET(args, i);
-		if (arg->kind == Name_kind) {
-			assert(arg->v.Name.ctx == Param ||
-                               (arg->v.Name.ctx == Store && !toplevel));
-			if (!symtable_add_def(st, arg->v.Name.id, DEF_PARAM))
-				return 0;
+		arg_ty arg = (arg_ty)asdl_seq_GET(args, i);
+		if (arg->kind == SimpleArg_kind) {
+			if (!annotations) {
+				if (!symtable_add_def(st,
+				                      arg->v.SimpleArg.arg,
+				                      DEF_PARAM))
+					return 0;
+			}
+			else if (arg->v.SimpleArg.annotation)
+				VISIT(st, expr, arg->v.SimpleArg.annotation);
 		}
-		else if (arg->kind == Tuple_kind) {
-			assert(arg->v.Tuple.ctx == Store);
-			if (toplevel) {
+		else if (arg->kind == NestedArgs_kind) {
+			if (toplevel && !annotations) {
 				if (!symtable_implicit_arg(st, i))
 					return 0;
 			}
@@ -1249,7 +1261,7 @@
 	}
 
 	if (!toplevel) {
-		if (!symtable_visit_params_nested(st, args))
+		if (!symtable_visit_params_nested(st, args, annotations))
 			return 0;
 	}
 
@@ -1257,16 +1269,37 @@
 }
 
 static int
-symtable_visit_params_nested(struct symtable *st, asdl_seq *args)
+symtable_visit_params_nested(struct symtable *st, asdl_seq *args,
+                             int annotations)
 {
 	int i;
 	for (i = 0; i < asdl_seq_LEN(args); i++) {
-		expr_ty arg = (expr_ty)asdl_seq_GET(args, i);
-		if (arg->kind == Tuple_kind &&
-		    !symtable_visit_params(st, arg->v.Tuple.elts, 0))
+		arg_ty arg = (arg_ty)asdl_seq_GET(args, i);
+		if (arg->kind == NestedArgs_kind &&
+		    !symtable_visit_params(st, arg->v.NestedArgs.args, 0,
+		                           annotations))
 			return 0;
 	}
+
+	return 1;
+}
+
+
+static int
+symtable_visit_annotations(struct symtable *st, stmt_ty s)
+{
+	arguments_ty a = s->v.FunctionDef.args;
 	
+	if (a->args && !symtable_visit_params(st, a->args, 1, 1))
+		return 0;
+	if (a->varargannotation)
+		VISIT(st, expr, a->varargannotation);
+	if (a->kwargannotation)
+		VISIT(st, expr, a->kwargannotation);
+	if (a->kwonlyargs && !symtable_visit_params(st, a->kwonlyargs, 1, 1))
+		return 0;
+	if (s->v.FunctionDef.returns)
+		VISIT(st, expr, s->v.FunctionDef.returns);
 	return 1;
 }
 
@@ -1276,9 +1309,9 @@
 	/* skip default arguments inside function block
 	   XXX should ast be different?
 	*/
-	if (a->args && !symtable_visit_params(st, a->args, 1))
+	if (a->args && !symtable_visit_params(st, a->args, 1, 0))
 		return 0;
-	if (a->kwonlyargs && !symtable_visit_params(st, a->kwonlyargs, 1))
+	if (a->kwonlyargs && !symtable_visit_params(st, a->kwonlyargs, 1, 0))
 		return 0;
 	if (a->vararg) {
 		if (!symtable_add_def(st, a->vararg, DEF_PARAM))
@@ -1290,7 +1323,7 @@
 			return 0;
 		st->st_cur->ste_varkeywords = 1;
 	}
-	if (a->args && !symtable_visit_params_nested(st, a->args))
+	if (a->args && !symtable_visit_params_nested(st, a->args, 0))
 		return 0;
 	return 1;
 }
diff --git a/Tools/compiler/ast.txt b/Tools/compiler/ast.txt
index 2f62f55..2ff1223 100644
--- a/Tools/compiler/ast.txt
+++ b/Tools/compiler/ast.txt
@@ -12,8 +12,11 @@
 Module: doc*, node
 Stmt: nodes!
 Decorators: nodes!
-Function: decorators&, name*, argnames*, defaults!, kwonlyargs*, flags*, doc*, code
-Lambda: argnames*, defaults!, kwonlyargs*, flags*, code
+Function: decorators&, name*, arguments!, defaults!, kwonlyargs!, returns&, flags*, doc*, code
+Lambda: arguments!, defaults!, kwonlyargs!, flags*, code
+SimpleArg: name*, annotation&
+NestedArgs: args!
+Kwarg: arg, expr
 Class: name*, bases!, doc*, code
 Pass: 
 Break: 
@@ -93,9 +96,10 @@
         self.varargs = 1
     if flags & CO_VARKEYWORDS:
         self.kwargs = 1
+    self.returns = None
 
 init(GenExpr):
-    self.argnames = ['.0']
+    self.arguments = [SimpleArg('.0', None)]
     self.varargs = self.kwargs = None
     self.kwonlyargs = ()
 
diff --git a/Tools/compiler/astgen.py b/Tools/compiler/astgen.py
index 26a185b..1485707 100644
--- a/Tools/compiler/astgen.py
+++ b/Tools/compiler/astgen.py
@@ -266,7 +266,10 @@
         pass # implemented by subclasses
 
 class EmptyNode(Node):
-    pass
+    def getChildNodes(self):
+        return ()
+    def getChildren(self):
+        return ()
 
 class Expression(Node):
     # Expression is an artificial node class to support "eval"
