From gvanrossum at codespeak.net Tue Jul 1 13:53:05 2003 From: gvanrossum at codespeak.net (gvanrossum at codespeak.net) Date: Tue, 1 Jul 2003 13:53:05 +0200 (MEST) Subject: [pypy-svn] rev 1075 - pypy/trunk/src/pypy/objspace/ann/test Message-ID: <20030701115305.636525ABE7@thoth.codespeak.net> Author: gvanrossum Date: Tue Jul 1 13:53:04 2003 New Revision: 1075 Modified: pypy/trunk/src/pypy/objspace/ann/test/test_objspace.py Log: Remove debug print statement Modified: pypy/trunk/src/pypy/objspace/ann/test/test_objspace.py ============================================================================== --- pypy/trunk/src/pypy/objspace/ann/test/test_objspace.py (original) +++ pypy/trunk/src/pypy/objspace/ann/test/test_objspace.py Tue Jul 1 13:53:04 2003 @@ -142,7 +142,6 @@ self.space.wrap(()), self.space.wrap({}), ]) - print x self.assertEquals(isinstance(x, W_Anything), False) def dont_test_global(self): From gvanrossum at codespeak.net Tue Jul 1 13:53:35 2003 From: gvanrossum at codespeak.net (gvanrossum at codespeak.net) Date: Tue, 1 Jul 2003 13:53:35 +0200 (MEST) Subject: [pypy-svn] rev 1076 - pypy/trunk/src/pypy/objspace/ann Message-ID: <20030701115335.675755ABE7@thoth.codespeak.net> Author: gvanrossum Date: Tue Jul 1 13:53:35 2003 New Revision: 1076 Modified: pypy/trunk/src/pypy/objspace/ann/objspace.py Log: Add faux inplace_add for now. Modified: pypy/trunk/src/pypy/objspace/ann/objspace.py ============================================================================== --- pypy/trunk/src/pypy/objspace/ann/objspace.py (original) +++ pypy/trunk/src/pypy/objspace/ann/objspace.py Tue Jul 1 13:53:35 2003 @@ -227,6 +227,8 @@ else: return W_Anything() + inplace_add = add # XXX Not quite right! + def sub(self, w_left, w_right): try: left = self.unwrap(w_left) From pedronis at codespeak.net Wed Jul 2 00:23:07 2003 From: pedronis at codespeak.net (pedronis at codespeak.net) Date: Wed, 2 Jul 2003 00:23:07 +0200 (MEST) Subject: [pypy-svn] rev 1077 - in pypy/trunk/src/pypy/objspace/ann: . test Message-ID: <20030701222307.E0D165ABE7@thoth.codespeak.net> Author: pedronis Date: Wed Jul 2 00:23:06 2003 New Revision: 1077 Modified: pypy/trunk/src/pypy/objspace/ann/test/test_objspace.py pypy/trunk/src/pypy/objspace/ann/wrapper.py Log: fix to get test_assign_local_w_flow_control properly working while keeping the other tests in pypy/objspace/ann/test/test_objspace.py OK. the point is not to consider a fix-point reached as long as there's a W_ConstantIterator which is being consumed. Modified: pypy/trunk/src/pypy/objspace/ann/test/test_objspace.py ============================================================================== --- pypy/trunk/src/pypy/objspace/ann/test/test_objspace.py (original) +++ pypy/trunk/src/pypy/objspace/ann/test/test_objspace.py Wed Jul 2 00:23:06 2003 @@ -1,6 +1,6 @@ import autopath from pypy.tool import test -from pypy.objspace.ann.objspace import W_Object, W_Anything, W_Integer +from pypy.objspace.ann.objspace import W_Object, W_Anything, W_Integer, W_Constant from pypy.objspace.ann.objspace import AnnotationObjSpace from pypy.interpreter import baseobjspace, pyframe @@ -111,14 +111,14 @@ 'f', []) self.assertEquals(self.space.unwrap(x), 3) - def dont_test_assign_local_w_flow_control(self): + def test_assign_local_w_flow_control(self): # XXX This test doesn't work any more -- disabled for now code = """ def f(n): total = 0 for i in range(n): - total = total + 1 - return n + total = total + 2 + return total """ x = self.codetest(code, 'f', [self.space.wrap(3)]) self.assertEquals(type(x), W_Integer) Modified: pypy/trunk/src/pypy/objspace/ann/wrapper.py ============================================================================== --- pypy/trunk/src/pypy/objspace/ann/wrapper.py (original) +++ pypy/trunk/src/pypy/objspace/ann/wrapper.py Wed Jul 2 00:23:06 2003 @@ -130,9 +130,13 @@ def __init__(self, seq, start=0): self.seq = seq self.start = start + self.changed = False def argsrepr(self): - return "%r, %r" % (self.seq, self.start) + return "%r, %r, chg=%r" % (self.seq, self.start,self.changed) + + def __eq__(self,other): + return self is other def clone(self): return W_ConstantIterator(self.seq, self.start) @@ -142,6 +146,7 @@ value = self.seq[self.start] except IndexError: raise StopIteration + self.changed = True self.start += 1 return value @@ -217,14 +222,13 @@ for i in range(n): v1 = s1[i] v2 = s2[i] - if v1 != v2: - u = union(v1, v2) - if v1 != u: - c1 = True - s1[i] = u - if v2 != u: - c2 = True - s2[i] = u + u = union(v1, v2) + if v1 != u: + c1 = True + s1[i] = u + if v2 != u: + c2 = True + s2[i] = u # Compare locals. # XXX This uses the fast locals now and ignores w_locals. @@ -285,6 +289,8 @@ def union(r1, r2): """Return the union of two wrappers.""" if r1 is r2: + if isinstance(r1,W_ConstantIterator): + if r1.changed: return r1.clone() return r1 if r1 is None: return r2 From pedronis at codespeak.net Wed Jul 2 00:52:41 2003 From: pedronis at codespeak.net (pedronis at codespeak.net) Date: Wed, 2 Jul 2003 00:52:41 +0200 (MEST) Subject: [pypy-svn] rev 1078 - pypy/trunk/src/pypy/objspace/ann Message-ID: <20030701225241.1742B5BC10@thoth.codespeak.net> Author: pedronis Date: Wed Jul 2 00:52:41 2003 New Revision: 1078 Modified: pypy/trunk/src/pypy/objspace/ann/wrapper.py Log: proper behavior for W_ConstantIterator,changed flag and clone Modified: pypy/trunk/src/pypy/objspace/ann/wrapper.py ============================================================================== --- pypy/trunk/src/pypy/objspace/ann/wrapper.py (original) +++ pypy/trunk/src/pypy/objspace/ann/wrapper.py Wed Jul 2 00:52:41 2003 @@ -127,10 +127,10 @@ class W_ConstantIterator(W_Object): - def __init__(self, seq, start=0): + def __init__(self, seq, start=0, changed=False): self.seq = seq self.start = start - self.changed = False + self.changed = changed def argsrepr(self): return "%r, %r, chg=%r" % (self.seq, self.start,self.changed) @@ -138,8 +138,10 @@ def __eq__(self,other): return self is other - def clone(self): - return W_ConstantIterator(self.seq, self.start) + def clone(self, changed=None): + if changed is None: + changed = self.changed + return W_ConstantIterator(self.seq, self.start, changed) def next(self): try: @@ -290,7 +292,7 @@ """Return the union of two wrappers.""" if r1 is r2: if isinstance(r1,W_ConstantIterator): - if r1.changed: return r1.clone() + if r1.changed: return r1.clone(changed=False) return r1 if r1 is None: return r2 From ale at codespeak.net Thu Jul 3 18:39:57 2003 From: ale at codespeak.net (ale at codespeak.net) Date: Thu, 3 Jul 2003 18:39:57 +0200 (MEST) Subject: [pypy-svn] rev 1082 - pypy/trunk/doc Message-ID: <20030703163957.4C79C5BC42@thoth.codespeak.net> Author: ale Date: Thu Jul 3 18:39:57 2003 New Revision: 1082 Modified: pypy/trunk/doc/oscon2003-paper.txt Log: corrected a spellling error Modified: pypy/trunk/doc/oscon2003-paper.txt ============================================================================== --- pypy/trunk/doc/oscon2003-paper.txt (original) +++ pypy/trunk/doc/oscon2003-paper.txt Thu Jul 3 18:39:57 2003 @@ -372,7 +372,7 @@ implementations. The convertion can give a result of a different type (e.g. int -> float) or of the same type (e.g. W_VeryLongString -> str). There is a global table of delegators. We should not rely on the -delegators to be tried in any particlar order, or at all (e.g. the int +delegators to be tried in any particular order, or at all (e.g. the int -> float delegator could be ignored when we know that no registered function will accept a float anyway). @@ -463,3 +463,4 @@ Some multimethods can also be sliced along their second argument, e.g. for __radd__(). + \ No newline at end of file From ale at codespeak.net Thu Jul 3 16:42:57 2003 From: ale at codespeak.net (ale at codespeak.net) Date: Thu, 3 Jul 2003 16:42:57 +0200 (MEST) Subject: [pypy-svn] rev 1081 - pypy/trunk/doc/EU funding Message-ID: <20030703144257.1360B5BC42@thoth.codespeak.net> Author: ale Date: Thu Jul 3 16:42:56 2003 New Revision: 1081 Added: pypy/trunk/doc/EU funding/ pypy/trunk/doc/EU funding/FP6-2003-IST_PartB_IP_030604.rtf Log: Added: pypy/trunk/doc/EU funding/FP6-2003-IST_PartB_IP_030604.rtf ============================================================================== --- (empty file) +++ pypy/trunk/doc/EU funding/FP6-2003-IST_PartB_IP_030604.rtf Thu Jul 3 16:42:56 2003 @@ -0,0 +1,1716 @@ +{\rtf1\ansi\ansicpg1252\uc1 \deff0\deflang1033\deflangfe1033{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f1\fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;} +{\f2\fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;}{\f3\froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}{\f4\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times;} +{\f5\fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Helvetica;}{\f6\fmodern\fcharset0\fprq1{\*\panose 00000000000000000000}Courier;}{\f7\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Geneva;} +{\f8\froman\fcharset0\fprq2{\*\panose 00000000000000000000}Tms Rmn;}{\f9\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Helv;}{\f10\froman\fcharset0\fprq2{\*\panose 00000000000000000000}MS Serif;} +{\f11\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}MS Sans Serif;}{\f12\froman\fcharset0\fprq2{\*\panose 00000000000000000000}New York;}{\f13\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}System;} +{\f14\fnil\fcharset2\fprq2{\*\panose 05000000000000000000}Wingdings;}{\f15\fswiss\fcharset0\fprq2{\*\panose 020b0604030504040204}Tahoma;}{\f16\fnil\fcharset2\fprq2{\*\panose 00000000000000000000}Marlett;} +{\f17\fmodern\fcharset0\fprq1{\*\panose 020b0609040504020204}Lucida Console;}{\f18\fswiss\fcharset0\fprq2{\*\panose 020b0602030504020204}Lucida Sans Unicode;}{\f19\froman\fcharset2\fprq2{\*\panose 05050102010205020202}MT Extra;} +{\f20\fnil\fcharset2\fprq2{\*\panose 01010601010101010101}Monotype Sorts;}{\f21\froman\fcharset0\fprq2{\*\panose 00050102010706020507}Map Symbols;}{\f22\froman\fcharset2\fprq2{\*\panose 05050102010706020507}Bookshelf Symbol 3;} +{\f23\froman\fcharset0\fprq2{\*\panose 02040602050305030304}Book Antiqua;}{\f24\fswiss\fcharset0\fprq2{\*\panose 020b0506020202030204}Arial Narrow;}{\f25\fswiss\fcharset0\fprq2{\*\panose 020b0a04020102020204}Arial Black;} +{\f26\froman\fcharset0\fprq2{\*\panose 02050604050505020204}Bookman Old Style;}{\f27\fscript\fcharset0\fprq2{\*\panose 030f0702030302020204}Comic Sans MS;}{\f28\froman\fcharset0\fprq2{\*\panose 02020404030301010803}Garamond;} +{\f29\fswiss\fcharset0\fprq2{\*\panose 020b0502020202020204}Century Gothic;}{\f30\fswiss\fcharset0\fprq2{\*\panose 020b0706040902060204}Haettenschweiler;}{\f31\fswiss\fcharset0\fprq2{\*\panose 020b0806030902050204}Impact;} +{\f32\fscript\fcharset0\fprq2{\*\panose 03010101010201010101}Monotype Corsiva;}{\f33\fswiss\fcharset0\fprq2{\*\panose 020b0603020202020204}Trebuchet MS;}{\f34\fswiss\fcharset0\fprq2{\*\panose 020b0604030504040204}Verdana;} +{\f35\froman\fcharset2\fprq2{\*\panose 05030102010509060703}Webdings;}{\f36\froman\fcharset0\fprq2{\*\panose 02040502050405020303}Georgia;}{\f37\fmodern\fcharset0\fprq1{\*\panose 020b0509000000000004}Andale Mono;} +{\f38\fnil\fcharset2\fprq2{\*\panose 05000000000000000000}MS Outlook;}{\f39\fswiss\fcharset0\fprq2{\*\panose 020b0603050302020204}Code 39;}{\f40\fswiss\fcharset0\fprq2{\*\panose 020b0602030504020204}Lucida Sans{\*\falt Lucida Sans Unicode};} +{\f41\froman\fcharset0\fprq2{\*\panose 00000000000000000000}Arial Unicode MS;}{\f42\froman\fcharset0\fprq0{\*\panose 00000000000000000000}(normal text);}{\f43\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}CG Omega;} +{\f44\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Antique Olive;}{\f45\fnil\fcharset0\fprq0{\*\panose 00000000000000000000}Swiss;}{\f46\fswiss\fcharset0\fprq2{\*\panose 020b0500000000000000}TerWinal 993 New{\*\falt Andale Mono};} +{\f47\froman\fcharset0\fprq2{\*\panose 00000000000000000000}Garmond (W1);}{\f48\froman\fcharset238\fprq2{\*\panose 00000000000000000000}TIMES CE;}{\f49\froman\fcharset204\fprq2{\*\panose 00000000000000000000}TIMES Cyr;} +{\f50\froman\fcharset161\fprq2{\*\panose 00000000000000000000}TIMES Greek;}{\f51\froman\fcharset162\fprq2{\*\panose 00000000000000000000}TIMES Tur;}{\f52\froman\fcharset186\fprq2{\*\panose 00000000000000000000}TIMES Baltic;} +{\f53\fswiss\fcharset238\fprq2{\*\panose 00000000000000000000}HELVETICA CE;}{\f54\fswiss\fcharset204\fprq2{\*\panose 00000000000000000000}HELVETICA Cyr;}{\f55\fswiss\fcharset161\fprq2{\*\panose 00000000000000000000}HELVETICA Greek;} +{\f56\fswiss\fcharset162\fprq2{\*\panose 00000000000000000000}HELVETICA Tur;}{\f57\fswiss\fcharset186\fprq2{\*\panose 00000000000000000000}HELVETICA Baltic;}{\f58\froman\fcharset238\fprq2 Times New Roman CE;} +{\f59\froman\fcharset204\fprq2 Times New Roman Cyr;}{\f61\froman\fcharset161\fprq2 Times New Roman Greek;}{\f62\froman\fcharset162\fprq2 Times New Roman Tur;}{\f63\froman\fcharset186\fprq2 Times New Roman Baltic;}{\f64\fswiss\fcharset238\fprq2 Arial CE;} +{\f65\fswiss\fcharset204\fprq2 Arial Cyr;}{\f67\fswiss\fcharset161\fprq2 Arial Greek;}{\f68\fswiss\fcharset162\fprq2 Arial Tur;}{\f69\fswiss\fcharset186\fprq2 Arial Baltic;}{\f70\fmodern\fcharset238\fprq1 Courier New CE;} +{\f71\fmodern\fcharset204\fprq1 Courier New Cyr;}{\f73\fmodern\fcharset161\fprq1 Courier New Greek;}{\f74\fmodern\fcharset162\fprq1 Courier New Tur;}{\f75\fmodern\fcharset186\fprq1 Courier New Baltic;}{\f148\fswiss\fcharset238\fprq2 Tahoma CE;} +{\f149\fswiss\fcharset204\fprq2 Tahoma Cyr;}{\f151\fswiss\fcharset161\fprq2 Tahoma Greek;}{\f152\fswiss\fcharset162\fprq2 Tahoma Tur;}{\f153\fswiss\fcharset186\fprq2 Tahoma Baltic;}{\f160\fmodern\fcharset238\fprq1 Lucida Console CE;} +{\f161\fmodern\fcharset204\fprq1 Lucida Console Cyr;}{\f163\fmodern\fcharset161\fprq1 Lucida Console Greek;}{\f164\fmodern\fcharset162\fprq1 Lucida Console Tur;}{\f166\fswiss\fcharset238\fprq2 Lucida Sans Unicode CE;} +{\f167\fswiss\fcharset204\fprq2 Lucida Sans Unicode Cyr;}{\f169\fswiss\fcharset161\fprq2 Lucida Sans Unicode Greek;}{\f170\fswiss\fcharset162\fprq2 Lucida Sans Unicode Tur;}{\f196\froman\fcharset238\fprq2 Book Antiqua CE;} +{\f197\froman\fcharset204\fprq2 Book Antiqua Cyr;}{\f199\froman\fcharset161\fprq2 Book Antiqua Greek;}{\f200\froman\fcharset162\fprq2 Book Antiqua Tur;}{\f201\froman\fcharset186\fprq2 Book Antiqua Baltic;}{\f202\fswiss\fcharset238\fprq2 Arial Narrow CE;} +{\f203\fswiss\fcharset204\fprq2 Arial Narrow Cyr;}{\f205\fswiss\fcharset161\fprq2 Arial Narrow Greek;}{\f206\fswiss\fcharset162\fprq2 Arial Narrow Tur;}{\f207\fswiss\fcharset186\fprq2 Arial Narrow Baltic;}{\f208\fswiss\fcharset238\fprq2 Arial Black CE;} +{\f209\fswiss\fcharset204\fprq2 Arial Black Cyr;}{\f211\fswiss\fcharset161\fprq2 Arial Black Greek;}{\f212\fswiss\fcharset162\fprq2 Arial Black Tur;}{\f213\fswiss\fcharset186\fprq2 Arial Black Baltic;}{\f214\froman\fcharset238\fprq2 Bookman Old Style CE;} +{\f215\froman\fcharset204\fprq2 Bookman Old Style Cyr;}{\f217\froman\fcharset161\fprq2 Bookman Old Style Greek;}{\f218\froman\fcharset162\fprq2 Bookman Old Style Tur;}{\f219\froman\fcharset186\fprq2 Bookman Old Style Baltic;} +{\f220\fscript\fcharset238\fprq2 Comic Sans MS CE;}{\f221\fscript\fcharset204\fprq2 Comic Sans MS Cyr;}{\f223\fscript\fcharset161\fprq2 Comic Sans MS Greek;}{\f224\fscript\fcharset162\fprq2 Comic Sans MS Tur;} +{\f225\fscript\fcharset186\fprq2 Comic Sans MS Baltic;}{\f226\froman\fcharset238\fprq2 Garamond CE;}{\f227\froman\fcharset204\fprq2 Garamond Cyr;}{\f229\froman\fcharset161\fprq2 Garamond Greek;}{\f230\froman\fcharset162\fprq2 Garamond Tur;} +{\f231\froman\fcharset186\fprq2 Garamond Baltic;}{\f232\fswiss\fcharset238\fprq2 Century Gothic CE;}{\f233\fswiss\fcharset204\fprq2 Century Gothic Cyr;}{\f235\fswiss\fcharset161\fprq2 Century Gothic Greek;} +{\f236\fswiss\fcharset162\fprq2 Century Gothic Tur;}{\f237\fswiss\fcharset186\fprq2 Century Gothic Baltic;}{\f238\fswiss\fcharset238\fprq2 Haettenschweiler CE;}{\f239\fswiss\fcharset204\fprq2 Haettenschweiler Cyr;} +{\f241\fswiss\fcharset161\fprq2 Haettenschweiler Greek;}{\f242\fswiss\fcharset162\fprq2 Haettenschweiler Tur;}{\f243\fswiss\fcharset186\fprq2 Haettenschweiler Baltic;}{\f244\fswiss\fcharset238\fprq2 Impact CE;}{\f245\fswiss\fcharset204\fprq2 Impact Cyr;} +{\f247\fswiss\fcharset161\fprq2 Impact Greek;}{\f248\fswiss\fcharset162\fprq2 Impact Tur;}{\f249\fswiss\fcharset186\fprq2 Impact Baltic;}{\f250\fscript\fcharset238\fprq2 Monotype Corsiva CE;}{\f251\fscript\fcharset204\fprq2 Monotype Corsiva Cyr;} +{\f253\fscript\fcharset161\fprq2 Monotype Corsiva Greek;}{\f254\fscript\fcharset162\fprq2 Monotype Corsiva Tur;}{\f255\fscript\fcharset186\fprq2 Monotype Corsiva Baltic;}{\f256\fswiss\fcharset238\fprq2 Trebuchet MS CE;} +{\f260\fswiss\fcharset162\fprq2 Trebuchet MS Tur;}{\f262\fswiss\fcharset238\fprq2 Verdana CE;}{\f263\fswiss\fcharset204\fprq2 Verdana Cyr;}{\f265\fswiss\fcharset161\fprq2 Verdana Greek;}{\f266\fswiss\fcharset162\fprq2 Verdana Tur;} +{\f267\fswiss\fcharset186\fprq2 Verdana Baltic;}{\f274\froman\fcharset238\fprq2 Georgia CE;}{\f275\froman\fcharset204\fprq2 Georgia Cyr;}{\f277\froman\fcharset161\fprq2 Georgia Greek;}{\f278\froman\fcharset162\fprq2 Georgia Tur;} +{\f279\froman\fcharset186\fprq2 Georgia Baltic;}{\f280\fmodern\fcharset238\fprq1 Andale Mono CE;}{\f281\fmodern\fcharset204\fprq1 Andale Mono Cyr;}{\f283\fmodern\fcharset161\fprq1 Andale Mono Greek;}{\f284\fmodern\fcharset162\fprq1 Andale Mono Tur;} +{\f285\fmodern\fcharset186\fprq1 Andale Mono Baltic;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255; +\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\stylesheet{\widctlpar\adjustright \lang1036\cgrid \snext0 Normal;}{ +\s1\qj\sb240\sa60\keepn\widctlpar\adjustright \b\fs28\lang2057\kerning28\cgrid \sbasedon0 \snext0 heading 1;}{\s2\sb240\sa60\keepn\widctlpar\outlinelevel1\adjustright \b\i\f1\lang2057\cgrid \sbasedon0 \snext0 heading 2;}{ +\s3\fi-720\li720\sb240\sa60\keepn\widctlpar\jclisttab\tx720\ls654\ilvl2\outlinelevel2\adjustright \f1\lang2057\cgrid \sbasedon0 \snext0 heading 3;}{\s4\fi-864\li864\sb240\sa60\keepn\widctlpar\jclisttab\tx864\ls654\ilvl3\outlinelevel3\adjustright +\b\f1\lang2057\cgrid \sbasedon0 \snext0 heading 4;}{\s5\fi-1008\li1008\sb240\sa60\widctlpar\jclisttab\tx1008\ls654\ilvl4\outlinelevel4\adjustright \fs22\lang2057\cgrid \sbasedon0 \snext0 heading 5;}{\s6\fi-1152\li1152\sb240\sa60\widctlpar +\jclisttab\tx1152\ls654\ilvl5\outlinelevel5\adjustright \i\fs22\lang2057\cgrid \sbasedon0 \snext0 heading 6;}{\s7\qj\fi-708\li4748\sb240\sa60\widctlpar\ls175\ilvl6\outlinelevel6\adjustright \f1\fs20\lang2057\cgrid \sbasedon0 \snext0 heading 7;}{ +\s8\qj\fi-708\li5456\sb240\sa60\widctlpar\ls175\ilvl7\outlinelevel7\adjustright \i\f1\fs20\lang2057\cgrid \sbasedon0 \snext0 heading 8;}{\s9\qj\fi-708\li6164\sb240\sa60\widctlpar\ls175\ilvl8\outlinelevel8\adjustright \i\f1\fs18\lang2057\cgrid +\sbasedon0 \snext0 heading 9;}{\*\cs10 \additive Default Paragraph Font;}{\s15\qj\fi-360\li360\sb240\sa60\keepn\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls666\pnrnot0\pndec }\ls666\outlinelevel0\adjustright \b\kerning28 \sbasedon1 \snext15 +numparg;}{\*\cs16 \additive \super \sbasedon10 footnote reference;}{\s17\qj\sb120\sa120\widctlpar\adjustright \fs32\lang2057\cgrid \sbasedon0 \snext17 box;}{\s18\qj\widctlpar\adjustright \fs20\lang2057\cgrid \sbasedon0 \snext18 footnote text;}{ +\s19\qj\widctlpar\tqc\tx4153\tqr\tx8306\adjustright \fs20\lang2057\cgrid \sbasedon0 \snext19 header;}{\*\cs20 \additive \sbasedon10 page number;}{\s21\qj\widctlpar\tqc\tx4153\tqr\tx8306\adjustright \fs22\lang2057\cgrid \sbasedon0 \snext21 footer;}{ +\s22\qj\sa240\widctlpar\adjustright \lang2057\cgrid \sbasedon0 \snext22 \sautoupd List Bullet;}{\s23\qj\ri85\nowidctlpar\adjustright \f1\lang2057 \sbasedon0 \snext24 Z_Com;}{\s24\qj\ri85\nowidctlpar\adjustright \f1\fs16\lang2057 \sbasedon0 \snext24 +Z_DGName;}{\s25\qj\li1440\sa240\widctlpar\tx2161\adjustright \lang2057\cgrid \sbasedon0 \snext25 Text 4;}{\*\cs26 \additive \b\ul \sbasedon10 Added;}{\s27\fi-357\li357\sb240\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls799\pnrnot0\pndec } +\ls799\adjustright \b\f1 \sbasedon0 \snext27 Numbered paragraph;}{\s28\sb120\sa120\widctlpar\adjustright \b\caps\fs20\lang1036\cgrid \sbasedon0 \snext0 \sautoupd toc 1;}{\s29\li240\widctlpar\adjustright \scaps\fs20\lang1036\cgrid +\sbasedon0 \snext0 \sautoupd toc 2;}{\s30\li480\widctlpar\adjustright \i\fs20\lang1036\cgrid \sbasedon0 \snext0 \sautoupd toc 3;}{\s31\li720\widctlpar\adjustright \fs18\lang1036\cgrid \sbasedon0 \snext0 \sautoupd toc 4;}{\s32\li960\widctlpar\adjustright +\fs18\lang1036\cgrid \sbasedon0 \snext0 \sautoupd toc 5;}{\s33\li1200\widctlpar\adjustright \fs18\lang1036\cgrid \sbasedon0 \snext0 \sautoupd toc 6;}{\s34\li1440\widctlpar\adjustright \fs18\lang1036\cgrid \sbasedon0 \snext0 \sautoupd toc 7;}{ +\s35\li1680\widctlpar\adjustright \fs18\lang1036\cgrid \sbasedon0 \snext0 \sautoupd toc 8;}{\s36\li1920\widctlpar\adjustright \fs18\lang1036\cgrid \sbasedon0 \snext0 \sautoupd toc 9;}}{\*\listtable{\list\listtemplateid-577888740\listsimple{\listlevel +\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li1492\jclisttab\tx1492 }{\listname ;}\listid-132}{\list\listtemplateid-1116965162\listsimple{\listlevel\levelnfc0\leveljc0 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li1209\jclisttab\tx1209 }{\listname ;}\listid-131}{\list\listtemplateid-1618345704\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1 +\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li926\jclisttab\tx926 }{\listname ;}\listid-130}{\list\listtemplateid113421898\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0 +{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li643\jclisttab\tx643 }{\listname ;}\listid-129}{\list\listtemplateid2054353556\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li1492\jclisttab\tx1492 }{\listname ;}\listid-128}{\list\listtemplateid-1465099802\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li1209\jclisttab\tx1209 }{\listname ;}\listid-127}{\list\listtemplateid-239942496\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li926\jclisttab\tx926 }{\listname ;}\listid-126}{\list\listtemplateid-212711094\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li643\jclisttab\tx643 }{\listname ;}\listid-125}{\list\listtemplateid-970279938\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid-120}{\list\listtemplateid-46898746\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;} +\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid-119}{\list\listtemplateid-1{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent480{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-480\li482 }{\listlevel +\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent720{\leveltext\'04\'00.\'01.;}{\levelnumbers\'01\'03;}\fi-720\li1202 }{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent720 +{\leveltext\'06\'00.\'01.\'02.;}{\levelnumbers\'01\'03\'05;}\fi-720\li1984 }{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent720{\leveltext\'08\'00.\'01.\'02.\'03.;}{\levelnumbers\'01\'03\'05\'07;}\fi-720\li1984 +}{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat0\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}}{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat0\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}}{\listlevel +\levelnfc255\leveljc0\levelfollow0\levelstartat0\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\s7}{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat0\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\s8}{\listlevel\levelnfc255 +\leveljc0\levelfollow0\levelstartat0\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\s9}{\listname ;}\listid-5}{\list\listtemplateid-1\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat0\levelspace0\levelindent0{\leveltext +\'01*;}{\levelnumbers;}}{\listname ;}\listid-2}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 } +{\listname ;}\listid477093}{\list\listtemplateid134807553\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname +;}\listid1250247}{\list\listtemplateid1574084690\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat29\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1470208} +{\list\listtemplateid-1408886842\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\cf0\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid2123833} +{\list\listtemplateid1858007554\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid4522310}{\list\listtemplateid67698689 +\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid5519880}{\list\listtemplateid337141060\listsimple +{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid8723638}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid13073637}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid17433431}{\list\listtemplateid-1101249076\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat26 +\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid20477423}{\list\listtemplateid1811837974\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0 +{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid30812802}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid31153956}{\list\listtemplateid67698703\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid32779230}{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;} +\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid33778634}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360 +\jclisttab\tx360 }{\listname ;}\listid36393443}{\list\listtemplateid-315165656\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-4051 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 +}{\listname ;}\listid39287342}{\list\listtemplateid67698695\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3983 ?;}{\levelnumbers;}\f14\fs16\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname +;}\listid46146928}{\list\listtemplateid67698715\listsimple{\listlevel\levelnfc2\leveljc2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-216\li504\jclisttab\tx504 }{\listname ;}\listid47455237} +{\list\listtemplateid1779605314\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid50542153} +{\list\listtemplateid-58393734\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat6\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid50934127}{\list\listtemplateid67698695 +\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3983 ?;}{\levelnumbers;}\f14\fs16\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid51971317}{\list\listtemplateid-636175644\listsimple +{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid58984065}{\list\listtemplateid336122456\listsimple{\listlevel +\levelnfc0\leveljc0\levelfollow0\levelstartat58\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid59597208}{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid63381083}{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1 +\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid66077834}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0 +{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid68622271}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid70665487}{\list\listtemplateid1001701206\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent360{\leveltext +\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360 }{\listname ;}\listid71172216}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 +\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid72750551}{\list\listtemplateid1263808316\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283 +\jclisttab\tx283 }{\listname ;}\listid73623638}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 } +{\listname ;}\listid77605392}{\list\listtemplateid67698703\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid84157674} +{\list\listtemplateid67698699\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3880 ?;}{\levelnumbers;}\f14\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid96028515} +{\list\listtemplateid-598462250\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid102923557} +{\list\listtemplateid67698703\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid104620690} +{\list\listtemplateid-636175644\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid108357030} +{\list\listtemplateid26767292\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat29\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid115104456}{\list\listtemplateid67698695 +\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3983 ?;}{\levelnumbers;}\f14\fs16\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid115490675}{\list\listtemplateid280546856\listsimple +{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid116532366}{\list\listtemplateid-618355648\listsimple{\listlevel\levelnfc23 +\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid121461348}{\list\listtemplateid1309068208\listsimple{\listlevel\levelnfc23\leveljc0 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fs28\cf0\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid122118213}{\list\listtemplateid-15448400\listsimple{\listlevel\levelnfc23\leveljc0 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid123501169}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid123667284}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1 +\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid126556324}{\list\listtemplateid-1990919712\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat0\levelspace0 +\levelindent0{\leveltext\'01-;}{\levelnumbers;}\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid129371127}{\list\listtemplateid637858240\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat48\levelspace0\levelindent0{\leveltext +\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid130558331}{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;} +\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid130943120}{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283 +\jclisttab\tx283 }{\listname ;}\listid133064563}{\list\listtemplateid67698703\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname +;}\listid134224711}{\list\listtemplateid1442890444\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fs28\cf0\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname +;}\listid137693251}{\list\listtemplateid-315165656\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-4051 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname +;}\listid137696945}{\list\listtemplateid-2072631006\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-283\li283 }{\listname ;}\listid147553036} +{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid149097100} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid152912675} +{\list\listtemplateid-323422960\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid152915767} +{\list\listtemplateid992141840\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid153255427} +{\list\listtemplateid1811837974\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid160700374} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid161509331} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid161510923} +{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid162942638} +{\list\listtemplateid1811837974\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid164247596} +{\list\listtemplateid1811837974\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid170412347} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid174539860} +{\list\listtemplateid1706446590\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-4051 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid179585427} +{\list\listtemplateid1309068208\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fs28\cf0\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid181090800} +{\list\listtemplateid-2121901066\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid185799765} +{\list\listtemplateid1134990122\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid187333649} +{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid187724893} +{\list\listtemplateid102634026\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid191068789} +{\list\listtemplateid438105568\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid197276166} +{\list\listtemplateid-1520136950\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat31\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid197277204} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid198319268} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid201216963} +{\list\listtemplateid67698693\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f14\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid212084355} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid213321763} +{\list\listtemplateid476732704\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid213733415} +{\list\listtemplateid-743793696\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid213784626} +{\list\listtemplateid1811837974\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid214704075} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid214976919} +{\list\listtemplateid67698699\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3880 ?;}{\levelnumbers;}\f14\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid215556906} +{\list\listtemplateid-2121901066\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid217014257} +{\list\listtemplateid-2090973752\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat51\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid219443252} +{\list\listtemplateid1067467456\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid224461027} +{\list\listtemplateid120365072\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat10\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid224681041} +{\list\listtemplateid-1578489402\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'00;}{\levelnumbers\'01;}\b\i0\f1\fs24\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid225535374} +{\list\listtemplateid1004327964\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid232857063} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid234902370} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid241374501} +{\list\listtemplateid-1735517470\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid246887073} +{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid248318148} +{\list\listtemplateid1133777456\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid258756913} +{\list\listtemplateid1811837974\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid261841734} +{\list\listtemplateid-2121901066\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid266666994} +{\list\listtemplateid67698695\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3983 ?;}{\levelnumbers;}\f14\fs16\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid267087453} +{\list\listtemplateid-64464678\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid270475065}{\list\listtemplateid67698701 +\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3844 ?;}{\levelnumbers;}\f14\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid272516598}{\list\listtemplateid1136313960\listsimple +{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid278952078}{\list\listtemplateid-161696450\listsimple{\listlevel\levelnfc4 +\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'03(\'00);}{\levelnumbers\'02;}\fbias0 \fi-360\li786\jclisttab\tx786 }{\listname ;}\listid279727366}{\list\listtemplateid1198968034\listsimple{\listlevel\levelnfc23\leveljc0 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid282855356}{\list\listtemplateid67698701\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1 +\levelspace0\levelindent0{\leveltext\'01\u-3844 ?;}{\levelnumbers;}\f14\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid284436168}{\list\listtemplateid-1016970764\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat12\levelspace0 +\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid290134272}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid298191534}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid300425285}{\list\listtemplateid-1735517470\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid304286295}{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;} +\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid308051190}{\list\listtemplateid929089242\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3 \fi-283\li283 +\jclisttab\tx283 }{\listname ;}\listid310064512}{\list\listtemplateid-15448400\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3 \fi-283\li283\jclisttab\tx283 } +{\listname ;}\listid314379776}{\list\listtemplateid67698701\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3844 ?;}{\levelnumbers;}\f14\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname +;}\listid317467467}{\list\listtemplateid646722114\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid319191411} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid321129143} +{\list\listtemplateid208850436\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat0\levelspace0\levelindent0{\leveltext\'01-;}{\levelnumbers;}\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid324165469} +{\list\listtemplateid-315165656\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-4051 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid327484175} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid331765495} +{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid331956721} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid332417272} +{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid332683910} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid333727972} +{\list\listtemplateid1134990122\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid338583485} +{\list\listtemplateid67698699\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3880 ?;}{\levelnumbers;}\f14\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid345063485} +{\list\listtemplateid-2121901066\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid346489404} +{\list\listtemplateid1779605314\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid359598809} +{\list\listtemplateid67698701\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3844 ?;}{\levelnumbers;}\f14\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid362246690} +{\list\listtemplateid343842850\listsimple{\listlevel\levelnfc3\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283{\leveltext\'02\'00);}{\levelnumbers\'01;}\fi-283\li284 }{\listname ;}\listid371658649}{\list\listtemplateid67698699 +\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3880 ?;}{\levelnumbers;}\f14\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid371996935}{\list\listtemplateid1134990122\listsimple +{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid377976139}{\list\listtemplateid535861184\listsimple{\listlevel\levelnfc23 +\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid378212572}{\list\listtemplateid2138763994\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'00;}{\levelnumbers\'01;}\b\i0\f1\fs24\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid383255768}{\list\listtemplateid-2071794902\listsimple{\listlevel\levelnfc4\leveljc0\levelfollow0 +\levelstartat2\levelspace0\levelindent0{\leveltext\'03(\'00);}{\levelnumbers\'02;}\fbias0 \fi-420\li420\jclisttab\tx420 }{\listname ;}\listid385029005}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1 +\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid391540251}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid396363903}{\list\listtemplateid1811837974\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0 +{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid397021148}{\list\listtemplateid67698703\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid411585973}{\list\listtemplateid1718243814\listsimple{\listlevel\levelnfc4\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'03(\'00);}{\levelnumbers +\'02;}\fbias0 \fi-870\li1437\jclisttab\tx1437 }{\listname ;}\listid412629788}{\list\listtemplateid-1332677760\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3 +\fi-283\li283\jclisttab\tx283 }{\listname ;}\listid416024257}{\list\listtemplateid-1166760936\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-283\li567 +\jclisttab\tx644 }{\listname ;}\listid416679247}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 } +{\listname ;}\listid417217341}{\list\listtemplateid-1166760936\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-283\li567\jclisttab\tx644 }{\listname +;}\listid420639718}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid427582522 +}{\list\listtemplateid67698699\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3880 ?;}{\levelnumbers;}\f14\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid429593330} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid431123093} +{\list\listtemplateid1811837974\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid431322857} +{\list\listtemplateid1957212742\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3928 ?;}{\levelnumbers;}\f3\cf0\fbias0 \fi-283\li567\jclisttab\tx644 }{\listname ;}\listid436295916} +{\list\listtemplateid-15448400\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid437145739} +{\list\listtemplateid67698699\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3880 ?;}{\levelnumbers;}\f14\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid441998209} +{\list\listtemplateid1260714432\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid442455911} +{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid446659219} +{\list\listtemplateid1718243814\listsimple{\listlevel\levelnfc4\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'03(\'00);}{\levelnumbers\'02;}\fbias0 \fi-870\li1437\jclisttab\tx1437 }{\listname ;}\listid447428111} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid448089943} +{\list\listtemplateid-1735517470\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid450317675} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid456223540} +{\list\listtemplateid476732704\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid461919506} +{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid463961204} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid467864974} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid470102336} +{\list\listtemplateid-315165656\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-4051 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid472793436} +{\list\listtemplateid314226994\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat0\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid479931402} +{\list\listtemplateid1067467456\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid481655572} +{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid483354292} +{\list\listtemplateid-64464678\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid488062301} +{\list\listtemplateid469805634\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid489829227} +{\list\listtemplateid67698699\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3880 ?;}{\levelnumbers;}\f14\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid490605879} +{\list\listtemplateid1706446590\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-4051 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid495540841} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid495809011} +{\list\listtemplateid-502641104{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'03(\'00);}{\levelnumbers\'02;}\fi-709\li709\jclisttab\tx709 }{\listlevel\levelnfc4\leveljc0\levelfollow0\levelstartat1 +\levelspace0\levelindent0{\leveltext\'03(\'01);}{\levelnumbers\'02;}\fi-708\li1417\jclisttab\tx1417 }{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-709\li2126 +\jclisttab\tx2126 }{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3 \fi-709\li2835\jclisttab\tx2835 }{\listlevel\levelnfc4\leveljc0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'03(\'04);}{\levelnumbers\'02;}\fi-360\li1800\jclisttab\tx1800 }{\listlevel\levelnfc2\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'03(\'05);}{\levelnumbers\'02;}\fi-360\li2160\jclisttab\tx2160 } +{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'06.;}{\levelnumbers\'01;}\fi-360\li2520\jclisttab\tx2520 }{\listlevel\levelnfc4\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'02\'07.;}{\levelnumbers\'01;}\fi-360\li2880\jclisttab\tx2880 }{\listlevel\levelnfc2\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'08.;}{\levelnumbers\'01;}\fi-360\li3240\jclisttab\tx3240 }{\listname ;}\listid502164173} +{\list\listtemplateid1811837974\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid505899235} +{\list\listtemplateid1198968034\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid506485813} +{\list\listtemplateid-320325074{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent709{\leveltext\'03(\'00);}{\levelnumbers\'02;}\fi-709\li709 }{\listlevel\levelnfc4\leveljc0\levelfollow0\levelstartat1\levelold +\levelspace120\levelindent708{\leveltext\'03(\'01);}{\levelnumbers\'02;}\fi-708\li1417 }{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent709{\leveltext\'01\'96;}{\levelnumbers;}\fi-709\li2126 }{\listlevel +\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent709{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-709\li2835 }{\listlevel\levelnfc4\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent360 +{\leveltext\'03(\'04);}{\levelnumbers\'02;}\fi-360\li3195 }{\listlevel\levelnfc2\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent360{\leveltext\'03(\'05);}{\levelnumbers\'02;}\fi-360\li3555 }{\listlevel\levelnfc0\leveljc0 +\levelfollow0\levelstartat1\levelold\levelspace120\levelindent360{\leveltext\'02\'06.;}{\levelnumbers\'01;}\fi-360\li3915 }{\listlevel\levelnfc4\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent360{\leveltext\'02\'07.;}{\levelnumbers +\'01;}\fi-360\li4275 }{\listlevel\levelnfc2\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent360{\leveltext\'02\'08.;}{\levelnumbers\'01;}\fi-360\li4635 }{\listname ;}\listid510417882}{\list\listtemplateid1883135326\listsimple +{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid510993466}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23 +\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid511922355}{\list\listtemplateid1811837974\listsimple{\listlevel\levelnfc23\leveljc0 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid521553040}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1 +\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid525338010}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid526480460}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0 +{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid527834172}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid530847902}{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid530918960}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers +;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid532183969}{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283 +\jclisttab\tx283 }{\listname ;}\listid533272793}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 } +{\listname ;}\listid534929872}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname +;}\listid535002642}{\list\listtemplateid67698699\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3880 ?;}{\levelnumbers;}\f14\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname +;}\listid536695973}{\list\listtemplateid1683938568\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid536696905} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid537159260} +{\list\listtemplateid67698701\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3844 ?;}{\levelnumbers;}\f14\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid538132525} +{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid542249679} +{\list\listtemplateid67698703\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid543102344} +{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid546837203} +{\list\listtemplateid1109945320\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\b0\i0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid547183254} +{\list\listtemplateid-1100943062\listsimple{\listlevel\levelnfc3\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283{\leveltext\'02\'00);}{\levelnumbers\'01;}\fi-283\li283 }{\listname ;}\listid547450405}{\list\listtemplateid964718374 +\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid549654799}{\list\listtemplateid67698689\listsimple{\listlevel +\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid549924171}{\list\listtemplateid67698703\listsimple{\listlevel\levelnfc0 +\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid552622483}{\list\listtemplateid-636175644\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid560412518}{\list\listtemplateid-973046244\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat24 +\levelold\levelspace0\levelindent360{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360 }{\listname ;}\listid561251590}{\list\listtemplateid-1685813082\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0 +{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid562567143}{\list\listtemplateid-1332202020\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid575017278}{\list\listtemplateid-315165656\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\u-4051 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid575435326}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid576061941}{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid578251520}{\list\listtemplateid67698691\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3928 ?;}{\levelnumbers +;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid579943066}{\list\listtemplateid-1629613880\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat9\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360 +\jclisttab\tx360 }{\listname ;}\listid581375661}{\list\listtemplateid-743793696\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 } +{\listname ;}\listid593781955}{\list\listtemplateid1374981982\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname +;}\listid596602197}{\list\listtemplateid1134990122\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid596989429} +{\list\listtemplateid-233141870\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid603269484} +{\list\listtemplateid-2121901066\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid605619719} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid613052065} +{\list\listtemplateid-2121901066\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid615061506} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid615915944} +{\list\listtemplateid67698693\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f14\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid619529369} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid622078979} +{\list\listtemplateid1811837974\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid622226627} +{\list\listtemplateid208850436\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat0\levelspace0\levelindent0{\leveltext\'01-;}{\levelnumbers;}\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid629677106} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid635379746} +{\list\listtemplateid67698693\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f14\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid636226881} +{\list\listtemplateid-7426698\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01-;}{\levelnumbers;}\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid636884605} +{\list\listtemplateid280546856\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid642932210} +{\list\listtemplateid1811837974\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid644626527} +{\list\listtemplateid-2116506772\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid662121134} +{\list\listtemplateid67698695\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3983 ?;}{\levelnumbers;}\f14\fs16\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid663583162} +{\list\listtemplateid67698699\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3880 ?;}{\levelnumbers;}\f14\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid664087181} +{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid666639099} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid666711897} +{\list\listtemplateid906665106\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid667052967} +{\list\listtemplateid67698695\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3983 ?;}{\levelnumbers;}\f14\fs16\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid670059199} +{\list\listtemplateid208850436\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat0\levelspace0\levelindent0{\leveltext\'01-;}{\levelnumbers;}\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid671763493} +{\list\listtemplateid1198968034\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid679771490} +{\list\listtemplateid1761258370\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat46\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid685599993} +{\list\listtemplateid-1581745500\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid687752123} +{\list\listtemplateid1811837974\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid691300833} +{\list\listtemplateid1718243814\listsimple{\listlevel\levelnfc4\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'03(\'00);}{\levelnumbers\'02;}\fbias0 \fi-870\li1437\jclisttab\tx1437 }{\listname ;}\listid699816373} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid701053735} +{\list\listtemplateid1811837974\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid702748596} +{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid703940250} +{\list\listtemplateid67698699\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3880 ?;}{\levelnumbers;}\f14\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid706687028} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid706950125} +{\list\listtemplateid67698699\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3880 ?;}{\levelnumbers;}\f14\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid710420397} +{\list\listtemplateid182491814\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat16\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid710806132} +{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid711854213} +{\list\listtemplateid1685866452\listsimple{\listlevel\levelnfc4\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00);}{\levelnumbers\'01;}\fbias0 \fi-360\li927\jclisttab\tx927 }{\listname ;}\listid711924848} +{\list\listtemplateid564313324\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid712080375}{\list\listtemplateid67698701 +\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3844 ?;}{\levelnumbers;}\f14\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid714349630}{\list\listtemplateid67698689\listsimple +{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid721750442}{\list\listtemplateid1718243814\listsimple{\listlevel +\levelnfc4\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'03(\'00);}{\levelnumbers\'02;}\fbias0 \fi-870\li1437\jclisttab\tx1437 }{\listname ;}\listid729547106}{\list\listtemplateid-636175644\listsimple{\listlevel\levelnfc23 +\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid729622629}{\list\listtemplateid-636175644\listsimple{\listlevel\levelnfc23\leveljc0 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid730734374}{\list\listtemplateid67698693\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f14\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid731389351}{\list\listtemplateid19322\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1 +\levelold\levelspace0\levelindent360{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360 }{\listname ;}\listid735856671}{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0 +{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid738290266}{\list\listtemplateid1811837974\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid739520843}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers +;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid750587485}{\list\listtemplateid1858007554\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283 +\jclisttab\tx283 }{\listname ;}\listid752623186}{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 } +{\listname ;}\listid756439868}{\list\listtemplateid1811837974\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname +;}\listid758408625}{\list\listtemplateid67698701\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3844 ?;}{\levelnumbers;}\f14\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname +;}\listid758522339}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid759788910 +}{\list\listtemplateid-1641098632\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid763301677} +{\list\listtemplateid-47906918\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent360{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360 }{\listname ;}\listid763771386}{\list\listtemplateid1718243814 +\listsimple{\listlevel\levelnfc4\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'03(\'00);}{\levelnumbers\'02;}\fbias0 \fi-870\li1437\jclisttab\tx1437 }{\listname ;}\listid764346488}{\list\listtemplateid67698701\listsimple +{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3844 ?;}{\levelnumbers;}\f14\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid768699124}{\list\listtemplateid1271449866\listsimple{\listlevel +\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid769817672}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid770666510}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid772438372}{\list\listtemplateid1811837974\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1 +\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid774981308}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0 +{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid780881129}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid790827665}{\list\listtemplateid102634026\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid792288212}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers +;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid794375401}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 +\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid797646109}{\list\listtemplateid267834158\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283 +\jclisttab\tx283 }{\listname ;}\listid801120892}{\list\listtemplateid1811837974\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 } +{\listname ;}\listid806901284}{\list\listtemplateid1718243814\listsimple{\listlevel\levelnfc4\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'03(\'00);}{\levelnumbers\'02;}\fbias0 \fi-870\li1437\jclisttab\tx1437 }{\listname +;}\listid810824703}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid816217358 +}{\list\listtemplateid-1175016210\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid818763456} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid821001750} +{\list\listtemplateid281024632\listsimple{\listlevel\levelnfc2\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'03(\'00);}{\levelnumbers\'02;}\fbias0 \fi-720\li1287\jclisttab\tx1287 }{\listname ;}\listid826172966} +{\list\listtemplateid1198968034\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid826825514} +{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid828713434} +{\list\listtemplateid365483606\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat57\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid831990923} +{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid838814220} +{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid840775303} +{\list\listtemplateid557990320\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid845249177} +{\list\listtemplateid964718374\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid850148991} +{\list\listtemplateid67698695\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3983 ?;}{\levelnumbers;}\f14\fs16\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid854461714} +{\list\listtemplateid1718243814\listsimple{\listlevel\levelnfc4\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'03(\'00);}{\levelnumbers\'02;}\fbias0 \fi-870\li1437\jclisttab\tx1437 }{\listname ;}\listid861672369} +{\list\listtemplateid1183483770\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid862593805} +{\list\listtemplateid-636175644\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid864027828} +{\list\listtemplateid67698703\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid871501660} +{\list\listtemplateid1263808316\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid876116051} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid876963678} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid878787261} +{\list\listtemplateid659742184{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'04\'00.\'01.;}{\levelnumbers\'01\'03;}\fi-432\li792\jclisttab\tx792 }{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'06\'00.\'01.\'02.;}{\levelnumbers\'01\'03\'05;}\fi-504\li1224 +\jclisttab\tx1440 }{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'08\'00.\'01.\'02.\'03.;}{\levelnumbers\'01\'03\'05\'07;}\fi-648\li1728\jclisttab\tx1800 }{\listlevel\levelnfc0\leveljc0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'0a\'00.\'01.\'02.\'03.\'04.;}{\levelnumbers\'01\'03\'05\'07\'09;}\fi-792\li2232\jclisttab\tx2520 }{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'0c\'00.\'01.\'02.\'03.\'04.\'05.;}{\levelnumbers\'01\'03\'05\'07\'09\'0b;}\fi-936\li2736\jclisttab\tx2880 }{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'0e\'00.\'01.\'02.\'03.\'04.\'05.\'06.;}{\levelnumbers\'01\'03\'05\'07\'09\'0b\'0d;}\fi-1080\li3240\jclisttab\tx3600 }{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'10\'00.\'01.\'02.\'03.\'04.\'05.\'06.\'07.;}{\levelnumbers\'01\'03\'05\'07\'09\'0b\'0d\'0f;}\fi-1224\li3744\jclisttab\tx3960 }{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'12\'00.\'01.\'02.\'03.\'04.\'05.\'06.\'07.\'08.;}{\levelnumbers\'01\'03\'05\'07\'09\'0b\'0d\'0f\'11;}\fi-1440\li4320\jclisttab\tx4680 }{\listname ;}\listid880364132}{\list\listtemplateid1811837974\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid883712585}{\list\listtemplateid67698703\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid892352274}{\list\listtemplateid1718243814\listsimple{\listlevel\levelnfc4\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'03(\'00);}{\levelnumbers\'02;}\fbias0 \fi-870\li1437\jclisttab\tx1437 }{\listname ;}\listid893155724}{\list\listtemplateid-1488921842\listsimple{\listlevel\levelnfc4\leveljc0\levelfollow0\levelstartat4\levelspace0\levelindent0{\leveltext +\'03(\'00);}{\levelnumbers\'02;}\fbias0 \fi-720\li720\jclisttab\tx720 }{\listname ;}\listid894781803}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid894852705}{\list\listtemplateid1134990122\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid896166138}{\list\listtemplateid508191334\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;} +\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid898436783}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360 +\jclisttab\tx360 }{\listname ;}\listid900673066}{\list\listtemplateid-2116506772\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 } +{\listname ;}\listid902062987}{\list\listtemplateid-15448400\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3 \fi-283\li283\jclisttab\tx283 }{\listname +;}\listid905845909}{\list\listtemplateid67698703\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid910236388} +{\list\listtemplateid337141060\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid910701220} +{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid912274536} +{\list\listtemplateid1222270036\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid914434057} +{\list\listtemplateid67698703\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid914626889}{\list\listtemplateid67698689 +\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid916597450}{\list\listtemplateid267834158\listsimple +{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid920605486}{\list\listtemplateid-1096385878\listsimple{\listlevel\levelnfc23 +\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-284\li284\jclisttab\tx360 }{\listname ;}\listid921641951}{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid923877044}{\list\listtemplateid1878132374\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat55 +\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid927351704}{\list\listtemplateid557990320\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0 +{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid931014543}{\list\listtemplateid-1551976480\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat40\levelold\levelspace0\levelindent360 +{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360 }{\listname ;}\listid932933190}{\list\listtemplateid67698703\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;} +\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid933317471}{\list\listtemplateid-766985146\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283 +\jclisttab\tx283 }{\listname ;}\listid935553153}{\list\listtemplateid-636175644\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360 +\jclisttab\tx360 }{\listname ;}\listid938563841}{\list\listtemplateid-2121901066\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 } +{\listname ;}\listid941111910}{\list\listtemplateid-1579417550\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname +;}\listid941956641}{\list\listtemplateid-1735517470\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid945380735} +{\list\listtemplateid1198968034\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid961575549} +{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid961837727} +{\list\listtemplateid1134990122\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid962424012} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid962542841} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid963344442} +{\list\listtemplateid476732704\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid964701866}{\list\listtemplateid67698699 +\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3880 ?;}{\levelnumbers;}\f14\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid966815872}{\list\listtemplateid1811837974\listsimple +{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid968514467}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23 +\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid968633674}{\list\listtemplateid-1420544484{\listlevel\levelnfc0\leveljc0\levelfollow0 +\levelstartat1\levelold\levelspace120\levelindent709{\leveltext\'03(\'00);}{\levelnumbers\'02;}\fi-709\li709 }{\listlevel\levelnfc4\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent708{\leveltext\'03(\'01);}{\levelnumbers\'02;} +\fi-708\li1417 }{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent709{\leveltext\'01\'96;}{\levelnumbers;}\fi-709\li2126 }{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120 +\levelindent709{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-709\li2835 }{\listlevel\levelnfc4\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent360{\leveltext\'03(\'04);}{\levelnumbers\'02;}\fi-360\li3195 }{\listlevel +\levelnfc2\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent360{\leveltext\'03(\'05);}{\levelnumbers\'02;}\fi-360\li3555 }{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent360{\leveltext +\'02\'06.;}{\levelnumbers\'01;}\fi-360\li3915 }{\listlevel\levelnfc4\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent360{\leveltext\'02\'07.;}{\levelnumbers\'01;}\fi-360\li4275 }{\listlevel\levelnfc2\leveljc0\levelfollow0 +\levelstartat1\levelold\levelspace120\levelindent360{\leveltext\'02\'08.;}{\levelnumbers\'01;}\fi-360\li4635 }{\listname ;}\listid974985095}{\list\listtemplateid1641320882\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat33\levelspace0 +\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid979579707}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid982343807}{\list\listtemplateid-497784270\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\u-3913 ?;}{\levelnumbers;}\f3 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid984116367}{\list\listtemplateid67698695\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\u-3983 ?;}{\levelnumbers;}\f14\fs16\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid984814182}{\list\listtemplateid646722114\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid985401592}{\list\listtemplateid-2116506772\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;} +\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid986861164}{\list\listtemplateid67698701\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3844 ?;}{\levelnumbers;}\f14\fbias0 \fi-360\li360 +\jclisttab\tx360 }{\listname ;}\listid988437075}{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 } +{\listname ;}\listid991300765}{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname +;}\listid992177671}{\list\listtemplateid2130752496\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat19\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid993484579} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid995305383} +{\list\listtemplateid208850436\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat0\levelspace0\levelindent0{\leveltext\'01-;}{\levelnumbers;}\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid999389215} +{\list\listtemplateid1811837974\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1009604204} +{\list\listtemplateid267834158\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1013804417} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1015500468} +{\list\listtemplateid-598462250\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1018117266} +{\list\listtemplateid67698703\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1025519469} +{\list\listtemplateid-636175644\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1032655956} +{\list\listtemplateid1811837974\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1035428925} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1037241603} +{\list\listtemplateid67698701\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3844 ?;}{\levelnumbers;}\f14\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1037395187} +{\list\listtemplateid1206843002\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat32\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1040399167} +{\list\listtemplateid364959236\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1040790192} +{\list\listtemplateid-1929722676\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1041129181} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1041322367} +{\list\listtemplateid-340129808\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat30\levelold\levelspace0\levelindent360{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360 }{\listname ;}\listid1041440051}{\list\listtemplateid-15448400 +\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1048187837}{\list\listtemplateid67698689\listsimple{\listlevel +\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1048844020}{\list\listtemplateid1811837974\listsimple{\listlevel\levelnfc23 +\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1049962533}{\list\listtemplateid-24859456\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\cf0\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1054044360}{\list\listtemplateid-188428538{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1 +\levelspace0\levelindent0{\leveltext\'03(\'00);}{\levelnumbers\'02;}\fi-709\li709\jclisttab\tx709 }{\listlevel\levelnfc4\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'03(\'01);}{\levelnumbers\'02;}\fi-708\li1417 +\jclisttab\tx1417 }{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-709\li2126\jclisttab\tx2126 }{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3 \fi-709\li2835\jclisttab\tx2835 }{\listlevel\levelnfc4\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'03(\'04);}{\levelnumbers\'02;}\fi-360\li1800\jclisttab\tx1800 } +{\listlevel\levelnfc2\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'03(\'05);}{\levelnumbers\'02;}\fi-360\li2160\jclisttab\tx2160 }{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'02\'06.;}{\levelnumbers\'01;}\fi-360\li2520\jclisttab\tx2520 }{\listlevel\levelnfc4\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'07.;}{\levelnumbers\'01;}\fi-360\li2880\jclisttab\tx2880 }{\listlevel\levelnfc2\leveljc0 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'08.;}{\levelnumbers\'01;}\fi-360\li3240\jclisttab\tx3240 }{\listname ELList;}\listid1054965332}{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1056396560}{\list\listtemplateid67698701\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'01\u-3844 ?;}{\levelnumbers;}\f14\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1057242833}{\list\listtemplateid-636175644\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0 +{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1057514957}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1058169666}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1063213948}{\list\listtemplateid-1581745500\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1064983456}{\list\listtemplateid-2121901066\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;} +\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1065496784}{\list\listtemplateid-901119584\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283 +\jclisttab\tx283 }{\listname ;}\listid1065883555}{\list\listtemplateid67698701\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3844 ?;}{\levelnumbers;}\f14\fbias0 \fi-360\li360 +\jclisttab\tx360 }{\listname ;}\listid1073352955}{\list\listtemplateid1607090122\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3 \fi-283\li283\jclisttab\tx283 } +{\listname ;}\listid1075585216}{\list\listtemplateid-174557976\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3 \fi-283\li283\jclisttab\tx283 }{\listname +;}\listid1079400195}{\list\listtemplateid67698701\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3844 ?;}{\levelnumbers;}\f14\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname +;}\listid1084376475}{\list\listtemplateid-1\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent360{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360 }{\listname ;}\listid1091581218} +{\list\listtemplateid67698693\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f14\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1092315139} +{\list\listtemplateid267834158\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1094322505} +{\list\listtemplateid1811837974\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1100486467} +{\list\listtemplateid964718374\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1102533338} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1104956293} +{\list\listtemplateid1155432424\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1108700165} +{\list\listtemplateid535861184\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1113941182} +{\list\listtemplateid67698693\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f14\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1117025279} +{\list\listtemplateid-766985146\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1122386223} +{\list\listtemplateid1811837974\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1125081522} +{\list\listtemplateid469805634\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1127310475} +{\list\listtemplateid-161696450\listsimple{\listlevel\levelnfc4\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'03(\'00);}{\levelnumbers\'02;}\fbias0 \fi-360\li786\jclisttab\tx786 }{\listname ;}\listid1128821101} +{\list\listtemplateid-1096385878\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-284\li284\jclisttab\tx360 }{\listname ;}\listid1130787306} +{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1130824195} +{\list\listtemplateid67698695\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3983 ?;}{\levelnumbers;}\f14\fs16\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1133596454} +{\list\listtemplateid67698725{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'00;}{\levelnumbers\'01;}\fi-432\li432\jclisttab\tx432 }{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'03\'00.\'01;}{\levelnumbers\'01\'03;}\fi-576\li576\jclisttab\tx576 }{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'05\'00.\'01.\'02;}{\levelnumbers\'01\'03\'05;}\s3\fi-720\li720 +\jclisttab\tx720 }{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'07\'00.\'01.\'02.\'03;}{\levelnumbers\'01\'03\'05\'07;}\s4\fi-864\li864\jclisttab\tx864 }{\listlevel\levelnfc0\leveljc0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'09\'00.\'01.\'02.\'03.\'04;}{\levelnumbers\'01\'03\'05\'07\'09;}\s5\fi-1008\li1008\jclisttab\tx1008 }{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'0b\'00.\'01.\'02.\'03.\'04.\'05;}{\levelnumbers\'01\'03\'05\'07\'09\'0b;}\s6\fi-1152\li1152\jclisttab\tx1152 }{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'0d\'00.\'01.\'02.\'03.\'04.\'05.\'06;}{\levelnumbers\'01\'03\'05\'07\'09\'0b\'0d;}\fi-1296\li1296\jclisttab\tx1296 }{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'0f\'00.\'01.\'02.\'03.\'04.\'05.\'06.\'07;}{\levelnumbers\'01\'03\'05\'07\'09\'0b\'0d\'0f;}\fi-1440\li1440\jclisttab\tx1440 }{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'11\'00.\'01.\'02.\'03.\'04.\'05.\'06.\'07.\'08;}{\levelnumbers\'01\'03\'05\'07\'09\'0b\'0d\'0f\'11;}\fi-1584\li1584\jclisttab\tx1584 }{\listname ;}\listid1133715277}{\list\listtemplateid-1143803526\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0 +\levelstartat23\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1133981035}{\list\listtemplateid-315165656\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1 +\levelspace0\levelindent0{\leveltext\'01\u-4051 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1136217166}{\list\listtemplateid267834158\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1139151785}{\list\listtemplateid1811837974\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1140878218}{\list\listtemplateid67698703\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers +\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1147629896}{\list\listtemplateid1811837974\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283 +\jclisttab\tx283 }{\listname ;}\listid1148210394}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 +}{\listname ;}\listid1152336426}{\list\listtemplateid-1408886842\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\cf0\fbias0 \fi-360\li360\jclisttab\tx360 } +{\listname ;}\listid1153985285}{\list\listtemplateid1811837974\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname +;}\listid1155802176}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname +;}\listid1155998456}{\list\listtemplateid-1431796508\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1158501419} +{\list\listtemplateid-233141870\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1163087830} +{\list\listtemplateid67698699\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3880 ?;}{\levelnumbers;}\f14\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1164707690} +{\list\listtemplateid-2121901066\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1171988852} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1172380726} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1172912095} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1177695859} +{\list\listtemplateid67698699\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3880 ?;}{\levelnumbers;}\f14\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1179349448} +{\list\listtemplateid-315165656\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-4051 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1182016185} +{\list\listtemplateid67698695\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3983 ?;}{\levelnumbers;}\f14\fs16\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1182357065} +{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1182739296} +{\list\listtemplateid-997168766\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1184320117} +{\list\listtemplateid890776796\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat0\levelspace0\levelindent0{\leveltext\'01-;}{\levelnumbers;}\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1186213230} +{\list\listtemplateid1805046934\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1188329398} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1189948271} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1190947469} +{\list\listtemplateid1134990122\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1192185748} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1195802150} +{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1196429002} +{\list\listtemplateid-636175644\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1198160744} +{\list\listtemplateid-719180230\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1198857840} +{\list\listtemplateid281698092\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat23\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1202671050} +{\list\listtemplateid-2121901066\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1206025504} +{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1212376514} +{\list\listtemplateid383386762\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat8\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1214392375} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1218325368} +{\list\listtemplateid-2116506772\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1220823509} +{\list\listtemplateid2025226264\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1224218058} +{\list\listtemplateid-315165656\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-4051 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1224828205} +{\list\listtemplateid67698703\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1227036071}{\list\listtemplateid67698703 +\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1228224285}{\list\listtemplateid67698689\listsimple{\listlevel +\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1230385722}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23 +\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1230965478}{\list\listtemplateid640613018\listsimple{\listlevel\levelnfc23\leveljc0 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1237007470}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1 +\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1238055810}{\list\listtemplateid67698701\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'01\u-3844 ?;}{\levelnumbers;}\f14\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1240018608}{\list\listtemplateid-2121901066\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0 +{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1244532790}{\list\listtemplateid67698699\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\u-3880 ?;}{\levelnumbers;}\f14\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1248266183}{\list\listtemplateid-1240300088\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1249540426}{\list\listtemplateid1718243814\listsimple{\listlevel\levelnfc4\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'03(\'00);}{\levelnumbers +\'02;}\fbias0 \fi-870\li1437\jclisttab\tx1437 }{\listname ;}\listid1250312096}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 +\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1254624591}{\list\listtemplateid1832651850\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat51\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360 +\jclisttab\tx360 }{\listname ;}\listid1256522644}{\list\listtemplateid-47906918\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent360{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360 }{\listname +;}\listid1260135786}{\list\listtemplateid67698703\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1260485927} +{\list\listtemplateid67698695\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3983 ?;}{\levelnumbers;}\f14\fs16\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1261335060} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1269004208} +{\list\listtemplateid1811837974\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1271887905} +{\list\listtemplateid964718374\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1272398056} +{\list\listtemplateid-1166760936\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-283\li567\jclisttab\tx644 }{\listname ;}\listid1273823855} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1273855290} +{\list\listtemplateid67698699\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3880 ?;}{\levelnumbers;}\f14\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1274290608} +{\list\listtemplateid67698711\listsimple{\listlevel\levelnfc4\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00);}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1278567111}{\list\listtemplateid67698689 +\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1279021951}{\list\listtemplateid67698695\listsimple +{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3983 ?;}{\levelnumbers;}\f14\fs16\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1288048387}{\list\listtemplateid67698693\listsimple{\listlevel +\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f14\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1290357802}{\list\listtemplateid-2006271338\listsimple{\listlevel\levelnfc0 +\leveljc0\levelfollow0\levelstartat56\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1292787287}{\list\listtemplateid1811837974\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1294555064}{\list\listtemplateid-1332202020\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1295679333}{\list\listtemplateid1811837974\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1296135391}{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;} +\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1297301589}{\list\listtemplateid67698699\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3880 ?;}{\levelnumbers;}\f14\fbias0 +\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1298030096}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360 +\jclisttab\tx360 }{\listname ;}\listid1300961821}{\list\listtemplateid1827555422\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3 \fi-283\li283\jclisttab\tx283 } +{\listname ;}\listid1301689147}{\list\listtemplateid-161696450\listsimple{\listlevel\levelnfc4\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'03(\'00);}{\levelnumbers\'02;}\fbias0 \fi-360\li786\jclisttab\tx786 }{\listname +;}\listid1306086824}{\list\listtemplateid-1163466560\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1308168927} +{\list\listtemplateid-1163466560\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1308897579} +{\list\listtemplateid67698699\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3880 ?;}{\levelnumbers;}\f14\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1316758068} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1322155937} +{\list\listtemplateid-768209880{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-480\li480\jclisttab\tx480 }{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'04\'00.\'01.;}{\levelnumbers\'01\'03;}\fi-600\li1080\jclisttab\tx1080 }{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'06\'00.\'01.\'02.;}{\levelnumbers\'01\'03\'05;}\fi-840\li1920 +\jclisttab\tx1920 }{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'08\'00.\'01.\'02.\'03.;}{\levelnumbers\'01\'03\'05\'07;}\fi-960\li2880\jclisttab\tx2880 }{\listlevel\levelnfc4\leveljc0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'03(\'04);}{\levelnumbers\'02;}\fi-360\li1800\jclisttab\tx1800 }{\listlevel\levelnfc2\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'03(\'05);}{\levelnumbers\'02;}\fi-360\li2160 +\jclisttab\tx2160 }{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'06.;}{\levelnumbers\'01;}\fi-360\li2520\jclisttab\tx2520 }{\listlevel\levelnfc4\leveljc0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'02\'07.;}{\levelnumbers\'01;}\fi-360\li2880\jclisttab\tx2880 }{\listlevel\levelnfc2\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'08.;}{\levelnumbers\'01;}\fi-360\li3240\jclisttab\tx3240 } +{\listname ;}\listid1324353058}{\list\listtemplateid-1735517470\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname +;}\listid1330409383}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname +;}\listid1333409609}{\list\listtemplateid67698695\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3983 ?;}{\levelnumbers;}\f14\fs16\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname +;}\listid1333532133}{\list\listtemplateid612267676\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1335304787} +{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1338919292} +{\list\listtemplateid67698699\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3880 ?;}{\levelnumbers;}\f14\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1340499527} +{\list\listtemplateid67698701\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3844 ?;}{\levelnumbers;}\f14\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1341784462} +{\list\listtemplateid1309068208\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fs28\cf0\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1343971384} +{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1345864340} +{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1353145135} +{\list\listtemplateid-1735517470\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1354922369} +{\list\listtemplateid1309068208\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fs28\cf0\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1355419310} +{\list\listtemplateid1713548666{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent709{\leveltext\'03(\'00);}{\levelnumbers\'02;}\fi-709\li709 }{\listlevel\levelnfc4\leveljc0\levelfollow0\levelstartat1\levelold +\levelspace120\levelindent708{\leveltext\'03(\'01);}{\levelnumbers\'02;}\fi-708\li1417 }{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent709{\leveltext\'01\'96;}{\levelnumbers;}\fi-709\li2126 }{\listlevel +\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent709{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-709\li2835 }{\listlevel\levelnfc4\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent360 +{\leveltext\'03(\'04);}{\levelnumbers\'02;}\fi-360\li3195 }{\listlevel\levelnfc2\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent360{\leveltext\'03(\'05);}{\levelnumbers\'02;}\fi-360\li3555 }{\listlevel\levelnfc0\leveljc0 +\levelfollow0\levelstartat1\levelold\levelspace120\levelindent360{\leveltext\'02\'06.;}{\levelnumbers\'01;}\fi-360\li3915 }{\listlevel\levelnfc4\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent360{\leveltext\'02\'07.;}{\levelnumbers +\'01;}\fi-360\li4275 }{\listlevel\levelnfc2\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent360{\leveltext\'02\'08.;}{\levelnumbers\'01;}\fi-360\li4635 }{\listname ;}\listid1360081437}{\list\listtemplateid67698689\listsimple +{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1361276905}{\list\listtemplateid67698689\listsimple{\listlevel +\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1361513530}{\list\listtemplateid631775840\listsimple{\listlevel\levelnfc0 +\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\b\i0\f0\fs24\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1362514038}{\list\listtemplateid161136708\listsimple{\listlevel\levelnfc0 +\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\s15\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1362976166}{\list\listtemplateid-2116506772\listsimple{\listlevel\levelnfc23\leveljc0 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1364134006}{\list\listtemplateid67698699\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1 +\levelspace0\levelindent0{\leveltext\'01\u-3880 ?;}{\levelnumbers;}\f14\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1364404868}{\list\listtemplateid1718243814\listsimple{\listlevel\levelnfc4\leveljc0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'03(\'00);}{\levelnumbers\'02;}\fbias0 \fi-870\li1437\jclisttab\tx1437 }{\listname ;}\listid1366130198}{\list\listtemplateid1201295208\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0 +{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1368339419}{\list\listtemplateid1561599664\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat48\levelspace0\levelindent0{\leveltext +\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1368606142}{\list\listtemplateid1759798138\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\u-3913 ?;}{\levelnumbers;}\f3 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1370685510}{\list\listtemplateid67698699\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\u-3880 ?;}{\levelnumbers;}\f14\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1370884334}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1372874476}{\list\listtemplateid-636175644\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1376193165}{\list\listtemplateid-749706682\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent360{\leveltext +\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360 }{\listname ;}\listid1379402670}{\list\listtemplateid964718374\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3 +\fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1381588019}{\list\listtemplateid-1735517470\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283 +\jclisttab\tx283 }{\listname ;}\listid1382972683}{\list\listtemplateid1706446590\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-4051 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360 +\jclisttab\tx360 }{\listname ;}\listid1383553687}{\list\listtemplateid67698701\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3844 ?;}{\levelnumbers;}\f14\fbias0 \fi-360\li360 +\jclisttab\tx360 }{\listname ;}\listid1385518091}{\list\listtemplateid-1735517470\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 } +{\listname ;}\listid1387337272}{\list\listtemplateid1718243814\listsimple{\listlevel\levelnfc4\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'03(\'00);}{\levelnumbers\'02;}\fbias0 \fi-870\li1437\jclisttab\tx1437 }{\listname +;}\listid1390378968}{\list\listtemplateid-1066237640\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1392070581} +{\list\listtemplateid1374981982\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1395736086} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1398089233} +{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1400128178} +{\list\listtemplateid-488074916\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1400985144} +{\list\listtemplateid-636175644\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1403600430} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1403672269} +{\list\listtemplateid1100618258\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat5\levelold\levelspace0\levelindent720{\leveltext\'02\'00.;}{\levelnumbers\'01;}\b \fi-720\li720 }{\listname ;}\listid1406226814} +{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1408843950} +{\list\listtemplateid2096761582{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent709{\leveltext\'03(\'00);}{\levelnumbers\'02;}\fi-709\li709 }{\listlevel\levelnfc4\leveljc0\levelfollow0\levelstartat1\levelold +\levelspace120\levelindent708{\leveltext\'03(\'01);}{\levelnumbers\'02;}\fi-708\li1417 }{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent709{\leveltext\'01\'96;}{\levelnumbers;}\fi-709\li2126 }{\listlevel +\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent709{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-709\li2835 }{\listlevel\levelnfc4\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent360 +{\leveltext\'03(\'04);}{\levelnumbers\'02;}\fi-360\li3195 }{\listlevel\levelnfc2\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent360{\leveltext\'03(\'05);}{\levelnumbers\'02;}\fi-360\li3555 }{\listlevel\levelnfc0\leveljc0 +\levelfollow0\levelstartat1\levelold\levelspace120\levelindent360{\leveltext\'02\'06.;}{\levelnumbers\'01;}\fi-360\li3915 }{\listlevel\levelnfc4\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent360{\leveltext\'02\'07.;}{\levelnumbers +\'01;}\fi-360\li4275 }{\listlevel\levelnfc2\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent360{\leveltext\'02\'08.;}{\levelnumbers\'01;}\fi-360\li4635 }{\listname ;}\listid1411656718}{\list\listtemplateid67698699\listsimple +{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3880 ?;}{\levelnumbers;}\f14\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1424885948}{\list\listtemplateid1198968034\listsimple{\listlevel +\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1428959622}{\list\listtemplateid-2121901066\listsimple{\listlevel\levelnfc23\leveljc0 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1431512511}{\list\listtemplateid-636175644\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1 +\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1433090429}{\list\listtemplateid1883135326\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1434132539}{\list\listtemplateid67698699\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\u-3880 ?;}{\levelnumbers;}\f14\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1450470162}{\list\listtemplateid1811837974\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1460415875}{\list\listtemplateid1198968034\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;} +\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1467888567}{\list\listtemplateid67698699\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3880 ?;}{\levelnumbers;}\f14\fbias0 +\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1468545089}{\list\listtemplateid1134990122\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283 +\jclisttab\tx283 }{\listname ;}\listid1468670081}{\list\listtemplateid1811837974\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 } +{\listname ;}\listid1471904703}{\list\listtemplateid-635928302{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent709{\leveltext\'03(\'00);}{\levelnumbers\'02;}\fi-709\li709 }{\listlevel\levelnfc4\leveljc0 +\levelfollow0\levelstartat1\levelold\levelspace120\levelindent708{\leveltext\'03(\'01);}{\levelnumbers\'02;}\fi-708\li1417 }{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent709{\leveltext +\'01\'96;}{\levelnumbers;}\fi-709\li2126 }{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent709{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-709\li2835 }{\listlevel\levelnfc4\leveljc0\levelfollow0 +\levelstartat1\levelold\levelspace120\levelindent360{\leveltext\'03(\'04);}{\levelnumbers\'02;}\fi-360\li3195 }{\listlevel\levelnfc2\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent360{\leveltext\'03(\'05);}{\levelnumbers\'02;} +\fi-360\li3555 }{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent360{\leveltext\'02\'06.;}{\levelnumbers\'01;}\fi-360\li3915 }{\listlevel\levelnfc4\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120 +\levelindent360{\leveltext\'02\'07.;}{\levelnumbers\'01;}\fi-360\li4275 }{\listlevel\levelnfc2\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent360{\leveltext\'02\'08.;}{\levelnumbers\'01;}\fi-360\li4635 }{\listname +;}\listid1472478878}{\list\listtemplateid67698695\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3983 ?;}{\levelnumbers;}\f14\fs16\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname +;}\listid1476098780}{\list\listtemplateid-847768978\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat30\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1476609222} +{\list\listtemplateid-218192600\listsimple{\listlevel\levelnfc3\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent360{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li993 }{\listname ;}\listid1483308870}{\list\listtemplateid810686392 +{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent709{\leveltext\'03(\'00);}{\levelnumbers\'02;}\fi-709\li709 }{\listlevel\levelnfc4\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent708 +{\leveltext\'03(\'01);}{\levelnumbers\'02;}\fi-708\li1417 }{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent709{\leveltext\'01\'96;}{\levelnumbers;}\fi-709\li2126 }{\listlevel\levelnfc255\leveljc0\levelfollow0 +\levelstartat1\levelold\levelspace120\levelindent709{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-709\li2835 }{\listlevel\levelnfc4\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent360{\leveltext\'03(\'04);}{\levelnumbers +\'02;}\fi-360\li3195 }{\listlevel\levelnfc2\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent360{\leveltext\'03(\'05);}{\levelnumbers\'02;}\fi-360\li3555 }{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold +\levelspace120\levelindent360{\leveltext\'02\'06.;}{\levelnumbers\'01;}\fi-360\li3915 }{\listlevel\levelnfc4\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent360{\leveltext\'02\'07.;}{\levelnumbers\'01;}\fi-360\li4275 }{\listlevel +\levelnfc2\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent360{\leveltext\'02\'08.;}{\levelnumbers\'01;}\fi-360\li4635 }{\listname ;}\listid1484273404}{\list\listtemplateid1029623412\listsimple{\listlevel\levelnfc0\leveljc0 +\levelfollow0\levelstartat7\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1485508755}{\list\listtemplateid1811837974\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1489129491}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1491676281}{\list\listtemplateid67698699\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0 +{\leveltext\'01\u-3880 ?;}{\levelnumbers;}\f14\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1493524917}{\list\listtemplateid-2116506772\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1500073409}{\list\listtemplateid1811837974\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;} +\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1502159875}{\list\listtemplateid1199601114\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'03(e);}{\levelnumbers;}\fbias0 \fi-360\li786 +\jclisttab\tx786 }{\listname ;}\listid1502355567}{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 } +{\listname ;}\listid1511218574}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname +;}\listid1511262683}{\list\listtemplateid-1175016210\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1513686347} +{\list\listtemplateid-1166760936\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-283\li567\jclisttab\tx644 }{\listname ;}\listid1514029584} +{\list\listtemplateid67698703\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1514949834} +{\list\listtemplateid-2121901066\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1516387026} +{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1522089581} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1522433178} +{\list\listtemplateid-463726138\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat55\levelold\levelspace0\levelindent360{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360 }{\listname ;}\listid1524783773}{\list\listtemplateid67698689 +\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1528835898}{\list\listtemplateid1832651850\listsimple +{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat51\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1530218932}{\list\listtemplateid1672774598\listsimple{\listlevel\levelnfc23 +\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1530530303}{\list\listtemplateid1312991032\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0 +\levelstartat3\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1532187495}{\list\listtemplateid-1125365228\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat4\levelspace0 +\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fbias0 \fi-720\li720\jclisttab\tx720 }{\listname ;}\listid1532953858}{\list\listtemplateid-2121901066\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0 +{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1533106235}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1533609628}{\list\listtemplateid557990320\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1533612646}{\list\listtemplateid-1376455496\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat60\levelspace0\levelindent0{\leveltext +\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1535650286}{\list\listtemplateid-1629607578\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat59\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers +\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1535968134}{\list\listtemplateid-1226269746\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283 +\jclisttab\tx283 }{\listname ;}\listid1535996800}{\list\listtemplateid-1735517470\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 } +{\listname ;}\listid1539466041}{\list\listtemplateid267834158\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname +;}\listid1540628709}{\list\listtemplateid1811837974\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1543981994} +{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1545215804} +{\list\listtemplateid-188428538{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'03(\'00);}{\levelnumbers\'02;}\fi-709\li709\jclisttab\tx709 }{\listlevel\levelnfc4\leveljc0\levelfollow0\levelstartat1 +\levelspace0\levelindent0{\leveltext\'03(\'01);}{\levelnumbers\'02;}\fi-708\li1417\jclisttab\tx1417 }{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-709\li2126 +\jclisttab\tx2126 }{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3 \fi-709\li2835\jclisttab\tx2835 }{\listlevel\levelnfc4\leveljc0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'03(\'04);}{\levelnumbers\'02;}\fi-360\li1800\jclisttab\tx1800 }{\listlevel\levelnfc2\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'03(\'05);}{\levelnumbers\'02;}\fi-360\li2160\jclisttab\tx2160 } +{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'06.;}{\levelnumbers\'01;}\fi-360\li2520\jclisttab\tx2520 }{\listlevel\levelnfc4\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'02\'07.;}{\levelnumbers\'01;}\fi-360\li2880\jclisttab\tx2880 }{\listlevel\levelnfc2\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'08.;}{\levelnumbers\'01;}\fi-360\li3240\jclisttab\tx3240 }{\listname ;}\listid1546017650} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1550141604} +{\list\listtemplateid67698695\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3983 ?;}{\levelnumbers;}\f14\fs16\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1554730976} +{\list\listtemplateid-15448400\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1556818823} +{\list\listtemplateid67698701\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3844 ?;}{\levelnumbers;}\f14\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1559586582} +{\list\listtemplateid-1685813082\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1564832864} +{\list\listtemplateid1308138718\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat47\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1567108241} +{\list\listtemplateid1957212742\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3928 ?;}{\levelnumbers;}\f3\cf0\fbias0 \fi-283\li567\jclisttab\tx644 }{\listname ;}\listid1570144064} +{\list\listtemplateid314226994\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat0\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1579092791} +{\list\listtemplateid-47906918\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent360{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360 }{\listname ;}\listid1585069188}{\list\listtemplateid1811837974 +\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1590238551}{\list\listtemplateid67698689\listsimple{\listlevel +\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1590507743}{\list\listtemplateid-959007098\listsimple{\listlevel\levelnfc23 +\leveljc0\levelfollow0\levelstartat0\levelspace0\levelindent0{\leveltext\'01-;}{\levelnumbers;}\fbias0 \fi-360\li1080\jclisttab\tx1080 }{\listname ;}\listid1592004757}{\list\listtemplateid1260714432\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1594778213}{\list\listtemplateid1706446590\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'01\u-4051 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1598292567}{\list\listtemplateid1364343886\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat24\levelspace0\levelindent0 +{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1602910460}{\list\listtemplateid-1579417550\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1604150763}{\list\listtemplateid-447600574\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'03(\'00);}{\levelnumbers +\'02;}\fbias0 \fi-960\li1442\jclisttab\tx1442 }{\listname ;}\listid1604875664}{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 +\fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1606965342}{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283 +\jclisttab\tx283 }{\listname ;}\listid1608848528}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 +}{\listname ;}\listid1609266390}{\list\listtemplateid727892198\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3 \fi-283\li283\jclisttab\tx283 }{\listname +;}\listid1619754758}{\list\listtemplateid-2116506772\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1620986347} +{\list\listtemplateid-1\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent360{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360 }{\listname ;}\listid1621381093} +{\list\listtemplateid67698695\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3983 ?;}{\levelnumbers;}\f14\fs16\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1624728164} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1626501410} +{\list\listtemplateid-1016970764\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat12\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1632058775} +{\list\listtemplateid1134990122\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1636449058} +{\list\listtemplateid1270675050\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1637027539} +{\list\listtemplateid-618355648\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1655138215} +{\list\listtemplateid-1166760936\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-283\li567\jclisttab\tx644 }{\listname ;}\listid1662079494} +{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1663124724} +{\list\listtemplateid67698695\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3983 ?;}{\levelnumbers;}\f14\fs16\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1666737241} +{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1668895775} +{\list\listtemplateid-1340058684\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1669404562} +{\list\listtemplateid-47906918\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent360{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360 }{\listname ;}\listid1675722665}{\list\listtemplateid67698689 +\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1680739433}{\list\listtemplateid1706446590\listsimple +{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-4051 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1696348315}{\list\listtemplateid67698689\listsimple{\listlevel +\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1696953811}{\list\listtemplateid-1718948360\listsimple{\listlevel\levelnfc23 +\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1697270459}{\list\listtemplateid1309068208\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fs28\cf0\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1699501258}{\list\listtemplateid921228850\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0 +\levelstartat53\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1700466107}{\list\listtemplateid67698701\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'01\u-3844 ?;}{\levelnumbers;}\f14\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1703356549}{\list\listtemplateid964718374\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0 +{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1704474215}{\list\listtemplateid-636175644\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1708792644}{\list\listtemplateid67698703\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1709449988}{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;} +\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1713069456}{\list\listtemplateid1309068208\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fs28\cf0\fbias0 +\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1713571758}{\list\listtemplateid1622729042\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283 +\jclisttab\tx283 }{\listname ;}\listid1716082402}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 +}{\listname ;}\listid1719890918}{\list\listtemplateid727892198\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3 \fi-283\li283\jclisttab\tx283 }{\listname +;}\listid1723599761}{\list\listtemplateid-291593812\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat3\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1730028832} +{\list\listtemplateid1183483770\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1730693339} +{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1732120429} +{\list\listtemplateid992141840\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1736313143} +{\list\listtemplateid-24859456\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\cf0\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1743408648} +{\list\listtemplateid1811837974\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1744721776} +{\list\listtemplateid-618355648\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1745492194} +{\list\listtemplateid-315165656\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-4051 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1755587049} +{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1756709111} +{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1758286388} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1759517807} +{\list\listtemplateid612267676\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1761026335} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1761297327} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1770614163} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1771772532} +{\list\listtemplateid-901119584\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1773932787} +{\list\listtemplateid-607729792\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat49\levelold\levelspace0\levelindent360{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360 }{\listname ;}\listid1778913720}{\list\listtemplateid557990320 +\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1782913116}{\list\listtemplateid67698695\listsimple +{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3983 ?;}{\levelnumbers;}\f14\fs16\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1783105786}{\list\listtemplateid67698689\listsimple{\listlevel +\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1784109154}{\list\listtemplateid1811837974\listsimple{\listlevel\levelnfc23 +\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1785729162}{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1786463243}{\list\listtemplateid208850436\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat0\levelspace0 +\levelindent0{\leveltext\'01-;}{\levelnumbers;}\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1791050833}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1792626969}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1793087057}{\list\listtemplateid-636175644\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1794399324}{\list\listtemplateid-1863804604\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat49\levelspace0\levelindent0{\leveltext +\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1801339822}{\list\listtemplateid-1543353772\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\u-3913 ?;}{\levelnumbers;}\f3 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1801605844}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1807504818}{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1810709954}{\list\listtemplateid67698699\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3880 ?;}{\levelnumbers +;}\f14\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1811819359}{\list\listtemplateid-1929722676\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 +\fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1813672426}{\list\listtemplateid-488074916\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283 +\jclisttab\tx283 }{\listname ;}\listid1814133055}{\list\listtemplateid-161696450\listsimple{\listlevel\levelnfc4\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'03(\'00);}{\levelnumbers\'02;}\fbias0 \fi-360\li786\jclisttab\tx786 } +{\listname ;}\listid1816559255}{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname +;}\listid1820657071}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname +;}\listid1824081756}{\list\listtemplateid-1340058684\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1825195327} +{\list\listtemplateid1811837974\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1828979692} +{\list\listtemplateid476732704\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1829244130} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1836917029} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1840657934} +{\list\listtemplateid-915088686\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat34\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1841432533} +{\list\listtemplateid1198968034\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1841847045} +{\list\listtemplateid206227054\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat46\levelold\levelspace0\levelindent360{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360 }{\listname ;}\listid1842741621}{\list\listtemplateid67698715 +\listsimple{\listlevel\levelnfc2\leveljc2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-216\li504\jclisttab\tx504 }{\listname ;}\listid1847819470}{\list\listtemplateid-636175644\listsimple{\listlevel +\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1856379965}{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23 +\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1858811694}{\list\listtemplateid1136313960\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1860924848}{\list\listtemplateid67698703\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1862543847}{\list\listtemplateid208850436\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat0\levelspace0\levelindent0{\leveltext +\'01-;}{\levelnumbers;}\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1871146038}{\list\listtemplateid67698695\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\u-3983 ?;}{\levelnumbers;}\f14\fs16\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1879780202}{\list\listtemplateid67698695\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\u-3983 ?;}{\levelnumbers;}\f14\fs16\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1881016190}{\list\listtemplateid-1096385878\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-284\li284\jclisttab\tx360 }{\listname ;}\listid1883325610}{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1885830206}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers +;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1889300597}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 +\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1893954455}{\list\listtemplateid508191334\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283 +\jclisttab\tx283 }{\listname ;}\listid1893954932}{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 } +{\listname ;}\listid1897550242}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname +;}\listid1898129874}{\list\listtemplateid1198968034\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1899048036} +{\list\listtemplateid-1066237640\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1903448358} +{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1905870008} +{\list\listtemplateid67698695\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3983 ?;}{\levelnumbers;}\f14\fs16\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1907766761} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1911882153} +{\list\listtemplateid1811837974\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1915433600} +{\list\listtemplateid-296205868\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1917278601} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1920599717} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1921137672} +{\list\listtemplateid-1226269746\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1922910626} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1923952894} +{\list\listtemplateid-636175644\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1928885388} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1928997213} +{\list\listtemplateid-2116506772\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1932275756} +{\list\listtemplateid-719180230\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1937907576} +{\list\listtemplateid1211150258\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1943099382} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1943802994} +{\list\listtemplateid-1425103240\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fs28\cf0\fbias0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1950045989} +{\list\listtemplateid-1240300088\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1951090032} +{\list\listtemplateid1001701206\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent360{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360 }{\listname ;}\listid1952087881}{\list\listtemplateid67698689 +\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1955013866}{\list\listtemplateid67698689\listsimple +{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1957984340}{\list\listtemplateid67698689\listsimple{\listlevel +\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1960138481}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23 +\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1960837545}{\list\listtemplateid67698701\listsimple{\listlevel\levelnfc23\leveljc0 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3844 ?;}{\levelnumbers;}\f14\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1961564590}{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1962611038}{\list\listtemplateid1718243814\listsimple{\listlevel\levelnfc4\leveljc0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'03(\'00);}{\levelnumbers\'02;}\fbias0 \fi-870\li1437\jclisttab\tx1437 }{\listname ;}\listid1964069053}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0 +{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1965231777}{\list\listtemplateid67698699\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\u-3880 ?;}{\levelnumbers;}\f14\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1967000965}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1968272185}{\list\listtemplateid182491814\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat16\levelspace0\levelindent0{\leveltext +\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1981838713}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1984234079}{\list\listtemplateid1211150258\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1985234798}{\list\listtemplateid-636175644\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1990089201}{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid1993436880}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers +;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1995834717}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 +\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1999115743}{\list\listtemplateid-1\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent360{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 +\fi-360\li360 }{\listname ;}\listid1999504478}{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname +;}\listid1999578078}{\list\listtemplateid-315165656\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-4051 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname +;}\listid2004771746}{\list\listtemplateid1811837974\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid2006736073} +{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid2007246689} +{\list\listtemplateid-1641098632\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid2009208014} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid2009214239} +{\list\listtemplateid267834158\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid2010521940} +{\list\listtemplateid1811837974\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid2011979462} +{\list\listtemplateid1706446590\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-4051 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid2013481894} +{\list\listtemplateid-451089498\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat47\levelold\levelspace0\levelindent360{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360 }{\listname ;}\listid2019112736}{\list\listtemplateid67698689 +\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid2019498215}{\list\listtemplateid1004327964\listsimple +{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid2019576635}{\list\listtemplateid-315165656\listsimple{\listlevel\levelnfc23 +\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-4051 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid2021540122}{\list\listtemplateid-323422960\listsimple{\listlevel\levelnfc23\leveljc0 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid2027250953}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1 +\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid2027362078}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid2028407034}{\list\listtemplateid557990320\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0 +{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid2029674692}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid2030910761}{\list\listtemplateid364959236\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\u-3913 ?;}{\levelnumbers;}\f3 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid2032416727}{\list\listtemplateid-1166760936\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-283\li567\jclisttab\tx644 }{\listname ;}\listid2038003541}{\list\listtemplateid67698699\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\u-3880 ?;}{\levelnumbers;}\f14\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid2041978568}{\list\listtemplateid67698699\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\u-3880 ?;}{\levelnumbers;}\f14\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid2042196688}{\list\listtemplateid557990320\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid2043824529}{\list\listtemplateid-636175644\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid2044280526}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid2051489984}{\list\listtemplateid-636175644\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid2053385296}{\list\listtemplateid67698703\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid2056344654}{\list\listtemplateid67698701\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\u-3844 ?;}{\levelnumbers;}\f14\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid2062047589}{\list\listtemplateid-180431362{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent709{\leveltext +\'03(\'00);}{\levelnumbers\'02;}\fi-709\li709 }{\listlevel\levelnfc4\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent708{\leveltext\'03(\'01);}{\levelnumbers\'02;}\fi-708\li1417 }{\listlevel\levelnfc255\leveljc0\levelfollow0 +\levelstartat1\levelold\levelspace120\levelindent709{\leveltext\'01\'96;}{\levelnumbers;}\fi-709\li2126 }{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent709{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 +\fi-709\li2835 }{\listlevel\levelnfc4\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent360{\leveltext\'03(\'04);}{\levelnumbers\'02;}\fi-360\li3195 }{\listlevel\levelnfc2\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120 +\levelindent360{\leveltext\'03(\'05);}{\levelnumbers\'02;}\fi-360\li3555 }{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent360{\leveltext\'02\'06.;}{\levelnumbers\'01;}\fi-360\li3915 }{\listlevel\levelnfc4 +\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent360{\leveltext\'02\'07.;}{\levelnumbers\'01;}\fi-360\li4275 }{\listlevel\levelnfc2\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent360{\leveltext +\'02\'08.;}{\levelnumbers\'01;}\fi-360\li4635 }{\listname ;}\listid2064284893}{\list\listtemplateid67698693\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f14\fbias0 +\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid2066446967}{\list\listtemplateid1811837974\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283 +\jclisttab\tx283 }{\listname ;}\listid2066488303}{\list\listtemplateid1133777456\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 } +{\listname ;}\listid2066953565}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname +;}\listid2068871278}{\list\listtemplateid1805046934\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid2083020081} +{\list\listtemplateid67698695\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3983 ?;}{\levelnumbers;}\f14\fs16\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid2085489019} +{\list\listtemplateid-959007098\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat0\levelspace0\levelindent0{\leveltext\'01-;}{\levelnumbers;}\fbias0 \fi-360\li1080\jclisttab\tx1080 }{\listname ;}\listid2089232008} +{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid2090038036} +{\list\listtemplateid1271449866\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid2090271618} +{\list\listtemplateid1966237306\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid2090273625} +{\list\listtemplateid-997168766\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid2090420670} +{\list\listtemplateid67698695\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3983 ?;}{\levelnumbers;}\f14\fs16\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid2092970467} +{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid2093431334} +{\list\listtemplateid-636175644\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid2093770737} +{\list\listtemplateid67698703\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid2098280614}{\list\listtemplateid67698695 +\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3983 ?;}{\levelnumbers;}\f14\fs16\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid2107916363}{\list\listtemplateid-2116506772 +\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid2111121692}{\list\listtemplateid208850436\listsimple{\listlevel +\levelnfc23\leveljc0\levelfollow0\levelstartat0\levelspace0\levelindent0{\leveltext\'01-;}{\levelnumbers;}\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid2112120625}{\list\listtemplateid-1016970764\listsimple{\listlevel\levelnfc0\leveljc0 +\levelfollow0\levelstartat12\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid2112508603}{\list\listtemplateid1270675050\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid2117673860}{\list\listtemplateid103167520\listsimple{\listlevel\levelnfc3\leveljc0\levelfollow0\levelstartat1\levelold +\levelspace0\levelindent360{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li993 }{\listname ;}\listid2118719285}{\list\listtemplateid906665106\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\u-3913 ?;}{\levelnumbers;}\f3 \fi-283\li283\jclisttab\tx283 }{\listname ;}\listid2121141347}{\list\listtemplateid67698703\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers +\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid2124685628}{\list\listtemplateid1087961284\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3 \fi-283\li283 +\jclisttab\tx283 }{\listname ;}\listid2126845796}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 +}{\listname ;}\listid2127192152}{\list\listtemplateid476732704\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'96;}{\levelnumbers;}\f0 \fi-283\li283\jclisttab\tx283 }{\listname +;}\listid2127774908}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname +;}\listid2138404995}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname +;}\listid2139686240}}{\*\listoverridetable{\listoverride\listid-119\listoverridecount0\ls1}{\listoverride\listid-119\listoverridecount0\ls2}{\listoverride\listid-119\listoverridecount0\ls3}{\listoverride\listid-119\listoverridecount0\ls4} +{\listoverride\listid-119\listoverridecount0\ls5}{\listoverride\listid-119\listoverridecount0\ls6}{\listoverride\listid-119\listoverridecount0\ls7}{\listoverride\listid-119\listoverridecount0\ls8}{\listoverride\listid-119\listoverridecount0\ls9} +{\listoverride\listid-119\listoverridecount0\ls10}{\listoverride\listid-119\listoverridecount0\ls11}{\listoverride\listid-119\listoverridecount0\ls12}{\listoverride\listid-119\listoverridecount0\ls13}{\listoverride\listid-119\listoverridecount0\ls14} +{\listoverride\listid-119\listoverridecount0\ls15}{\listoverride\listid-119\listoverridecount0\ls16}{\listoverride\listid-119\listoverridecount0\ls17}{\listoverride\listid-119\listoverridecount0\ls18}{\listoverride\listid-119\listoverridecount0\ls19} +{\listoverride\listid-2\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent360{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360 }}\ls20} +{\listoverride\listid-2\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent360{\leveltext\'01\u-3880 ?;}{\levelnumbers;}\f14\fbias0 \fi-360\li360 }}\ls21} +{\listoverride\listid1514029584\listoverridecount0\ls22}{\listoverride\listid1662079494\listoverridecount0\ls23}{\listoverride\listid1570144064\listoverridecount0\ls24}{\listoverride\listid436295916\listoverridecount0\ls25}{\listoverride\listid147553036 +\listoverridecount0\ls26}{\listoverride\listid974985095\listoverridecount0\ls27}{\listoverride\listid974985095\listoverridecount9{\lfolevel\listoverrideformat{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent709 +{\leveltext\'03(\'00);}{\levelnumbers\'02;}\fi-709\li709 }}{\lfolevel\listoverrideformat{\listlevel\levelnfc4\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent708{\leveltext\'03(\'01);}{\levelnumbers\'02;}\fi-708\li1417 }}{\lfolevel +\listoverrideformat{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent709{\leveltext\'01\'96;}{\levelnumbers;}\fi-709\li2126 }}{\lfolevel\listoverrideformat{\listlevel\levelnfc255\leveljc0\levelfollow0 +\levelstartat1\levelold\levelspace120\levelindent709{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-709\li2835 }}{\lfolevel\listoverrideformat{\listlevel\levelnfc4\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent360 +{\leveltext\'03(\'04);}{\levelnumbers\'02;}\fi-360\li3195 }}{\lfolevel\listoverrideformat{\listlevel\levelnfc2\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent360{\leveltext\'03(\'05);}{\levelnumbers\'02;}\fi-360\li3555 }}{\lfolevel +\listoverrideformat{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent360{\leveltext\'02\'06.;}{\levelnumbers\'01;}\fi-360\li3915 }}{\lfolevel\listoverrideformat{\listlevel\levelnfc4\leveljc0\levelfollow0 +\levelstartat1\levelold\levelspace120\levelindent360{\leveltext\'02\'07.;}{\levelnumbers\'01;}\fi-360\li4275 }}{\lfolevel\listoverrideformat{\listlevel\levelnfc2\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent360{\leveltext +\'02\'08.;}{\levelnumbers\'01;}\fi-360\li4635 }}\ls28}{\listoverride\listid-2\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent360{\leveltext\'01\'96;}{\levelnumbers +;}\fi-360\li842 }}\ls29}{\listoverride\listid735856671\listoverridecount0\ls30}{\listoverride\listid772438372\listoverridecount0\ls31}{\listoverride\listid526480460\listoverridecount0\ls32}{\listoverride\listid615915944\listoverridecount0\ls33} +{\listoverride\listid331765495\listoverridecount0\ls34}{\listoverride\listid763771386\listoverridecount0\ls35}{\listoverride\listid561251590\listoverridecount0\ls36}{\listoverride\listid1041440051\listoverridecount0\ls37}{\listoverride\listid1842741621 +\listoverridecount0\ls38}{\listoverride\listid2019112736\listoverridecount0\ls39}{\listoverride\listid1778913720\listoverridecount0\ls40}{\listoverride\listid2118719285\listoverridecount0\ls41}{\listoverride\listid1524783773\listoverridecount0\ls42} +{\listoverride\listid71172216\listoverridecount0\ls43}{\listoverride\listid1952087881\listoverridecount0\ls44}{\listoverride\listid1476609222\listoverridecount0\ls45}{\listoverride\listid685599993\listoverridecount0\ls46}{\listoverride\listid1483308870 +\listoverridecount0\ls47}{\listoverride\listid932933190\listoverridecount0\ls48}{\listoverride\listid1567108241\listoverridecount0\ls49}{\listoverride\listid1801339822\listoverridecount0\ls50}{\listoverride\listid927351704\listoverridecount0\ls51} +{\listoverride\listid1602910460\listoverridecount0\ls52}{\listoverride\listid215556906\listoverridecount0\ls53}{\listoverride\listid96028515\listoverridecount0\ls54}{\listoverride\listid1960138481\listoverridecount0\ls55}{\listoverride\listid-2 +\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent644{\leveltext\'01\u-3928 ?;}{\levelnumbers;}\f3\fbias0 \fi-644\li1495 }}\ls56}{\listoverride\listid-2 +\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent360{\leveltext\'01\u-3928 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li1080 }}\ls57}{\listoverride\listid-2 +\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283{\leveltext\'01\u-3928 ?;}{\levelnumbers;}\f3\fbias0 \fi-283\li1134 }}\ls58}{\listoverride\listid5519880 +\listoverridecount0\ls59}{\listoverride\listid1117025279\listoverridecount0\ls60}{\listoverride\listid1290357802\listoverridecount0\ls61}{\listoverride\listid619529369\listoverridecount0\ls62}{\listoverride\listid1179349448\listoverridecount0\ls63} +{\listoverride\listid1493524917\listoverridecount0\ls64}{\listoverride\listid536695973\listoverridecount0\ls65}{\listoverride\listid2042196688\listoverridecount0\ls66}{\listoverride\listid1783105786\listoverridecount0\ls67}{\listoverride\listid2066446967 +\listoverridecount0\ls68}{\listoverride\listid1554730976\listoverridecount0\ls69}{\listoverride\listid46146928\listoverridecount0\ls70}{\listoverride\listid51971317\listoverridecount0\ls71}{\listoverride\listid1288048387\listoverridecount0\ls72} +{\listoverride\listid714349630\listoverridecount0\ls73}{\listoverride\listid758522339\listoverridecount0\ls74}{\listoverride\listid1248266183\listoverridecount0\ls75}{\listoverride\listid429593330\listoverridecount0\ls76}{\listoverride\listid2041978568 +\listoverridecount0\ls77}{\listoverride\listid2098280614\listoverridecount0\ls78}{\listoverride\listid32779230\listoverridecount0\ls79}{\listoverride\listid706687028\listoverridecount0\ls80}{\listoverride\listid1907766761\listoverridecount0\ls81} +{\listoverride\listid2092970467\listoverridecount0\ls82}{\listoverride\listid272516598\listoverridecount0\ls83}{\listoverride\listid1073352955\listoverridecount0\ls84}{\listoverride\listid538132525\listoverridecount0\ls85}{\listoverride\listid988437075 +\listoverridecount0\ls86}{\listoverride\listid1703356549\listoverridecount0\ls87}{\listoverride\listid1037395187\listoverridecount0\ls88}{\listoverride\listid284436168\listoverridecount0\ls89}{\listoverride\listid1961564590\listoverridecount0\ls90} +{\listoverride\listid1341784462\listoverridecount0\ls91}{\listoverride\listid1240018608\listoverridecount0\ls92}{\listoverride\listid1385518091\listoverridecount0\ls93}{\listoverride\listid1621381093\listoverridecount0\ls94}{\listoverride\listid1084376475 +\listoverridecount0\ls95}{\listoverride\listid1624728164\listoverridecount0\ls96}{\listoverride\listid1666737241\listoverridecount0\ls97}{\listoverride\listid1879780202\listoverridecount0\ls98}{\listoverride\listid731389351\listoverridecount0\ls99} +{\listoverride\listid1025519469\listoverridecount0\ls100}{\listoverride\listid411585973\listoverridecount0\ls101}{\listoverride\listid1709449988\listoverridecount0\ls102}{\listoverride\listid84157674\listoverridecount0\ls103} +{\listoverride\listid1862543847\listoverridecount0\ls104}{\listoverride\listid1227036071\listoverridecount0\ls105}{\listoverride\listid1228224285\listoverridecount0\ls106}{\listoverride\listid212084355\listoverridecount0\ls107} +{\listoverride\listid854461714\listoverridecount0\ls108}{\listoverride\listid1133596454\listoverridecount0\ls109}{\listoverride\listid663583162\listoverridecount0\ls110}{\listoverride\listid670059199\listoverridecount0\ls111} +{\listoverride\listid1333532133\listoverridecount0\ls112}{\listoverride\listid1147629896\listoverridecount0\ls113}{\listoverride\listid1182357065\listoverridecount0\ls114}{\listoverride\listid115490675\listoverridecount0\ls115} +{\listoverride\listid1881016190\listoverridecount0\ls116}{\listoverride\listid267087453\listoverridecount0\ls117}{\listoverride\listid984814182\listoverridecount0\ls118}{\listoverride\listid2085489019\listoverridecount0\ls119} +{\listoverride\listid1476098780\listoverridecount0\ls120}{\listoverride\listid768699124\listoverridecount0\ls121}{\listoverride\listid579943066\listoverridecount0\ls122}{\listoverride\listid2038003541\listoverridecount0\ls123} +{\listoverride\listid1273823855\listoverridecount0\ls124}{\listoverride\listid420639718\listoverridecount0\ls125}{\listoverride\listid416679247\listoverridecount0\ls126}{\listoverride\listid549924171\listoverridecount0\ls127}{\listoverride\listid797646109 +\listoverridecount0\ls128}{\listoverride\listid174539860\listoverridecount0\ls129}{\listoverride\listid219443252\listoverridecount0\ls130}{\listoverride\listid1292787287\listoverridecount0\ls131}{\listoverride\listid831990923\listoverridecount0\ls132} +{\listoverride\listid59597208\listoverridecount0\ls133}{\listoverride\listid1535968134\listoverridecount0\ls134}{\listoverride\listid535002642\listoverridecount0\ls135}{\listoverride\listid1893954455\listoverridecount0\ls136} +{\listoverride\listid1108700165\listoverridecount0\ls137}{\listoverride\listid1999504478\listoverridecount0\ls138}{\listoverride\listid1091581218\listoverridecount0\ls139}{\listoverride\listid13073637\listoverridecount0\ls140} +{\listoverride\listid534929872\listoverridecount0\ls141}{\listoverride\listid1092315139\listoverridecount0\ls142}{\listoverride\listid636226881\listoverridecount0\ls143}{\listoverride\listid1579092791\listoverridecount0\ls144} +{\listoverride\listid479931402\listoverridecount0\ls145}{\listoverride\listid1530218932\listoverridecount0\ls146}{\listoverride\listid1256522644\listoverridecount0\ls147}{\listoverride\listid1730028832\listoverridecount0\ls148} +{\listoverride\listid50934127\listoverridecount0\ls149}{\listoverride\listid1485508755\listoverridecount0\ls150}{\listoverride\listid1214392375\listoverridecount0\ls151}{\listoverride\listid581375661\listoverridecount0\ls152}{\listoverride\listid224681041 +\listoverridecount0\ls153}{\listoverride\listid2112508603\listoverridecount0\ls154}{\listoverride\listid1632058775\listoverridecount0\ls155}{\listoverride\listid290134272\listoverridecount0\ls156}{\listoverride\listid1981838713\listoverridecount0\ls157} +{\listoverride\listid20477423\listoverridecount0\ls158}{\listoverride\listid197277204\listoverridecount0\ls159}{\listoverride\listid1040399167\listoverridecount0\ls160}{\listoverride\listid979579707\listoverridecount0\ls161}{\listoverride\listid1841432533 +\listoverridecount0\ls162}{\listoverride\listid710806132\listoverridecount0\ls163}{\listoverride\listid993484579\listoverridecount0\ls164}{\listoverride\listid-119\listoverridecount0\ls165}{\listoverride\listid-125\listoverridecount0\ls166} +{\listoverride\listid-126\listoverridecount0\ls167}{\listoverride\listid-127\listoverridecount0\ls168}{\listoverride\listid-128\listoverridecount0\ls169}{\listoverride\listid-120\listoverridecount0\ls170}{\listoverride\listid-129\listoverridecount0\ls171} +{\listoverride\listid-130\listoverridecount0\ls172}{\listoverride\listid-131\listoverridecount0\ls173}{\listoverride\listid-132\listoverridecount0\ls174}{\listoverride\listid-5\listoverridecount0\ls175}{\listoverride\listid-2\listoverridecount1{\lfolevel +\listoverrideformat{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent360{\leveltext\'01\'96;}{\levelnumbers;}\fi-360\li360 }}\ls176}{\listoverride\listid371658649\listoverridecount0\ls177}{\listoverride\listid-2 +\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-283\li283 }}\ls178}{\listoverride\listid1411656718 +\listoverridecount0\ls179}{\listoverride\listid1411656718\listoverridecount9{\lfolevel\listoverrideformat{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent709{\leveltext\'03(\'00);}{\levelnumbers\'02;} +\fi-709\li709 }}{\lfolevel\listoverrideformat{\listlevel\levelnfc4\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent708{\leveltext\'03(\'01);}{\levelnumbers\'02;}\fi-708\li1417 }}{\lfolevel\listoverrideformat{\listlevel\levelnfc255 +\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent709{\leveltext\'01\'96;}{\levelnumbers;}\fi-709\li2126 }}{\lfolevel\listoverrideformat{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent709 +{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-709\li2835 }}{\lfolevel\listoverrideformat{\listlevel\levelnfc4\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent360{\leveltext\'03(\'04);}{\levelnumbers\'02;}\fi-360\li3195 }} +{\lfolevel\listoverrideformat{\listlevel\levelnfc2\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent360{\leveltext\'03(\'05);}{\levelnumbers\'02;}\fi-360\li3555 }}{\lfolevel\listoverrideformat{\listlevel\levelnfc0\leveljc0 +\levelfollow0\levelstartat1\levelold\levelspace120\levelindent360{\leveltext\'02\'06.;}{\levelnumbers\'01;}\fi-360\li3915 }}{\lfolevel\listoverrideformat{\listlevel\levelnfc4\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent360 +{\leveltext\'02\'07.;}{\levelnumbers\'01;}\fi-360\li4275 }}{\lfolevel\listoverrideformat{\listlevel\levelnfc2\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent360{\leveltext\'02\'08.;}{\levelnumbers\'01;}\fi-360\li4635 }}\ls180} +{\listoverride\listid1472478878\listoverridecount0\ls181}{\listoverride\listid2064284893\listoverridecount0\ls182}{\listoverride\listid2064284893\listoverridecount9{\lfolevel\listoverrideformat{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1 +\levelold\levelspace120\levelindent709{\leveltext\'03(\'00);}{\levelnumbers\'02;}\fi-709\li709 }}{\lfolevel\listoverrideformat{\listlevel\levelnfc4\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent708{\leveltext +\'03(\'01);}{\levelnumbers\'02;}\fi-708\li1417 }}{\lfolevel\listoverrideformat{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent709{\leveltext\'01\'96;}{\levelnumbers;}\fi-709\li2126 }}{\lfolevel +\listoverrideformat{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent709{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-709\li2835 }}{\lfolevel\listoverrideformat{\listlevel\levelnfc4\leveljc0 +\levelfollow0\levelstartat1\levelold\levelspace120\levelindent360{\leveltext\'03(\'04);}{\levelnumbers\'02;}\fi-360\li3195 }}{\lfolevel\listoverrideformat{\listlevel\levelnfc2\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent360 +{\leveltext\'03(\'05);}{\levelnumbers\'02;}\fi-360\li3555 }}{\lfolevel\listoverrideformat{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent360{\leveltext\'02\'06.;}{\levelnumbers\'01;}\fi-360\li3915 }}{\lfolevel +\listoverrideformat{\listlevel\levelnfc4\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent360{\leveltext\'02\'07.;}{\levelnumbers\'01;}\fi-360\li4275 }}{\lfolevel\listoverrideformat{\listlevel\levelnfc2\leveljc0\levelfollow0 +\levelstartat1\levelold\levelspace120\levelindent360{\leveltext\'02\'08.;}{\levelnumbers\'01;}\fi-360\li4635 }}\ls183}{\listoverride\listid596602197\listoverridecount0\ls184}{\listoverride\listid1395736086\listoverridecount0\ls185} +{\listoverride\listid562567143\listoverridecount0\ls186}{\listoverride\listid1564832864\listoverridecount0\ls187}{\listoverride\listid1406226814\listoverridecount0\ls188}{\listoverride\listid-2\listoverridecount1{\lfolevel\listoverrideformat{\listlevel +\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent360{\leveltext\'01\u-3983 ?;}{\levelnumbers;}\f14\fs16\fbias0 \fi-360\li360 }}\ls189}{\listoverride\listid1360081437\listoverridecount0\ls190}{\listoverride\listid1360081437 +\listoverridecount9{\lfolevel\listoverrideformat{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent709{\leveltext\'03(\'00);}{\levelnumbers\'02;}\fi-709\li709 }}{\lfolevel\listoverrideformat{\listlevel\levelnfc4 +\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent708{\leveltext\'03(\'01);}{\levelnumbers\'02;}\fi-708\li1417 }}{\lfolevel\listoverrideformat{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120 +\levelindent709{\leveltext\'01\'96;}{\levelnumbers;}\fi-709\li2126 }}{\lfolevel\listoverrideformat{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent709{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 +\fi-709\li2835 }}{\lfolevel\listoverrideformat{\listlevel\levelnfc4\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent360{\leveltext\'03(\'04);}{\levelnumbers\'02;}\fi-360\li3195 }}{\lfolevel\listoverrideformat{\listlevel\levelnfc2 +\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent360{\leveltext\'03(\'05);}{\levelnumbers\'02;}\fi-360\li3555 }}{\lfolevel\listoverrideformat{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120 +\levelindent360{\leveltext\'02\'06.;}{\levelnumbers\'01;}\fi-360\li3915 }}{\lfolevel\listoverrideformat{\listlevel\levelnfc4\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent360{\leveltext\'02\'07.;}{\levelnumbers\'01;}\fi-360\li4275 +}}{\lfolevel\listoverrideformat{\listlevel\levelnfc2\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent360{\leveltext\'02\'08.;}{\levelnumbers\'01;}\fi-360\li4635 }}\ls191}{\listoverride\listid1484273404\listoverridecount0\ls192} +{\listoverride\listid1484273404\listoverridecount9{\lfolevel\listoverrideformat{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent709{\leveltext\'03(\'00);}{\levelnumbers\'02;}\fi-709\li709 }}{\lfolevel +\listoverrideformat{\listlevel\levelnfc4\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent708{\leveltext\'03(\'01);}{\levelnumbers\'02;}\fi-708\li1417 }}{\lfolevel\listoverrideformat{\listlevel\levelnfc255\leveljc0\levelfollow0 +\levelstartat1\levelold\levelspace120\levelindent709{\leveltext\'01\'96;}{\levelnumbers;}\fi-709\li2126 }}{\lfolevel\listoverrideformat{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent709{\leveltext +\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-709\li2835 }}{\lfolevel\listoverrideformat{\listlevel\levelnfc4\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent360{\leveltext\'03(\'04);}{\levelnumbers\'02;}\fi-360\li3195 }}{\lfolevel +\listoverrideformat{\listlevel\levelnfc2\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent360{\leveltext\'03(\'05);}{\levelnumbers\'02;}\fi-360\li3555 }}{\lfolevel\listoverrideformat{\listlevel\levelnfc0\leveljc0\levelfollow0 +\levelstartat1\levelold\levelspace120\levelindent360{\leveltext\'02\'06.;}{\levelnumbers\'01;}\fi-360\li3915 }}{\lfolevel\listoverrideformat{\listlevel\levelnfc4\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent360{\leveltext +\'02\'07.;}{\levelnumbers\'01;}\fi-360\li4275 }}{\lfolevel\listoverrideformat{\listlevel\levelnfc2\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent360{\leveltext\'02\'08.;}{\levelnumbers\'01;}\fi-360\li4635 }}\ls193} +{\listoverride\listid442455911\listoverridecount0\ls194}{\listoverride\listid1594778213\listoverridecount0\ls195}{\listoverride\listid2066953565\listoverridecount0\ls196}{\listoverride\listid258756913\listoverridecount0\ls197} +{\listoverride\listid213784626\listoverridecount0\ls198}{\listoverride\listid593781955\listoverridecount0\ls199}{\listoverride\listid1249540426\listoverridecount0\ls200}{\listoverride\listid1951090032\listoverridecount0\ls201} +{\listoverride\listid481655572\listoverridecount0\ls202}{\listoverride\listid224461027\listoverridecount0\ls203}{\listoverride\listid1113941182\listoverridecount0\ls204}{\listoverride\listid378212572\listoverridecount0\ls205} +{\listoverride\listid1893954932\listoverridecount0\ls206}{\listoverride\listid898436783\listoverridecount0\ls207}{\listoverride\listid1943099382\listoverridecount0\ls208}{\listoverride\listid1985234798\listoverridecount0\ls209} +{\listoverride\listid319191411\listoverridecount0\ls210}{\listoverride\listid985401592\listoverridecount0\ls211}{\listoverride\listid1064983456\listoverridecount0\ls212}{\listoverride\listid687752123\listoverridecount0\ls213}{\listoverride\listid818763456 +\listoverridecount0\ls214}{\listoverride\listid1513686347\listoverridecount0\ls215}{\listoverride\listid752623186\listoverridecount0\ls216}{\listoverride\listid4522310\listoverridecount0\ls217}{\listoverride\listid8723638\listoverridecount0\ls218} +{\listoverride\listid910701220\listoverridecount0\ls219}{\listoverride\listid1335304787\listoverridecount0\ls220}{\listoverride\listid1761026335\listoverridecount0\ls221}{\listoverride\listid1813672426\listoverridecount0\ls222} +{\listoverride\listid1041129181\listoverridecount0\ls223}{\listoverride\listid73623638\listoverridecount0\ls224}{\listoverride\listid876116051\listoverridecount0\ls225}{\listoverride\listid1153985285\listoverridecount0\ls226}{\listoverride\listid2123833 +\listoverridecount0\ls227}{\listoverride\listid1362514038\listoverridecount0\ls228}{\listoverride\listid921641951\listoverridecount0\ls229}{\listoverride\listid790827665\listoverridecount0\ls230}{\listoverride\listid1771772532\listoverridecount0\ls231} +{\listoverride\listid2107916363\listoverridecount0\ls232}{\listoverride\listid1261335060\listoverridecount0\ls233}{\listoverride\listid1130787306\listoverridecount0\ls234}{\listoverride\listid1883325610\listoverridecount0\ls235} +{\listoverride\listid769817672\listoverridecount0\ls236}{\listoverride\listid2090271618\listoverridecount0\ls237}{\listoverride\listid792288212\listoverridecount0\ls238}{\listoverride\listid191068789\listoverridecount0\ls239} +{\listoverride\listid1065883555\listoverridecount0\ls240}{\listoverride\listid1773932787\listoverridecount0\ls241}{\listoverride\listid1860924848\listoverridecount0\ls242}{\listoverride\listid278952078\listoverridecount0\ls243} +{\listoverride\listid1018117266\listoverridecount0\ls244}{\listoverride\listid102923557\listoverridecount0\ls245}{\listoverride\listid1392070581\listoverridecount0\ls246}{\listoverride\listid1903448358\listoverridecount0\ls247} +{\listoverride\listid1922910626\listoverridecount0\ls248}{\listoverride\listid1535996800\listoverridecount0\ls249}{\listoverride\listid1054965332\listoverridecount0\ls250}{\listoverride\listid1546017650\listoverridecount0\ls251} +{\listoverride\listid1532953858\listoverridecount0\ls252}{\listoverride\listid547450405\listoverridecount0\ls253}{\listoverride\listid-2\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelold +\levelspace0\levelindent360{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li720 }}\ls254}{\listoverride\listid1163087830\listoverridecount0\ls255}{\listoverride\listid603269484\listoverridecount0\ls256}{\listoverride\listid1308897579 +\listoverridecount0\ls257}{\listoverride\listid1308168927\listoverridecount0\ls258}{\listoverride\listid-2\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent360 +{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li842 }}\ls259}{\listoverride\listid270475065\listoverridecount0\ls260}{\listoverride\listid488062301\listoverridecount0\ls261}{\listoverride\listid1379402670\listoverridecount0\ls262} +{\listoverride\listid116532366\listoverridecount0\ls263}{\listoverride\listid642932210\listoverridecount0\ls264}{\listoverride\listid510417882\listoverridecount0\ls265}{\listoverride\listid510417882\listoverridecount9{\lfolevel\listoverrideformat +{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent709{\leveltext\'03(\'00);}{\levelnumbers\'02;}\fi-709\li709 }}{\lfolevel\listoverrideformat{\listlevel\levelnfc4\leveljc0\levelfollow0\levelstartat1\levelold +\levelspace120\levelindent708{\leveltext\'03(\'01);}{\levelnumbers\'02;}\fi-708\li1417 }}{\lfolevel\listoverrideformat{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent709{\leveltext\'01\'96;}{\levelnumbers;} +\fi-709\li2126 }}{\lfolevel\listoverrideformat{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent709{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-709\li2835 }}{\lfolevel\listoverrideformat{\listlevel +\levelnfc4\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent360{\leveltext\'03(\'04);}{\levelnumbers\'02;}\fi-360\li3195 }}{\lfolevel\listoverrideformat{\listlevel\levelnfc2\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120 +\levelindent360{\leveltext\'03(\'05);}{\levelnumbers\'02;}\fi-360\li3555 }}{\lfolevel\listoverrideformat{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent360{\leveltext\'02\'06.;}{\levelnumbers\'01;} +\fi-360\li3915 }}{\lfolevel\listoverrideformat{\listlevel\levelnfc4\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent360{\leveltext\'02\'07.;}{\levelnumbers\'01;}\fi-360\li4275 }}{\lfolevel\listoverrideformat{\listlevel\levelnfc2 +\leveljc0\levelfollow0\levelstartat1\levelold\levelspace120\levelindent360{\leveltext\'02\'08.;}{\levelnumbers\'01;}\fi-360\li4635 }}\ls266}{\listoverride\listid1431512511\listoverridecount0\ls267}{\listoverride\listid1065496784\listoverridecount0\ls268} +{\listoverride\listid1206025504\listoverridecount0\ls269}{\listoverride\listid266666994\listoverridecount0\ls270}{\listoverride\listid217014257\listoverridecount0\ls271}{\listoverride\listid1516387026\listoverridecount0\ls272} +{\listoverride\listid1171988852\listoverridecount0\ls273}{\listoverride\listid185799765\listoverridecount0\ls274}{\listoverride\listid941111910\listoverridecount0\ls275}{\listoverride\listid615061506\listoverridecount0\ls276} +{\listoverride\listid1244532790\listoverridecount0\ls277}{\listoverride\listid346489404\listoverridecount0\ls278}{\listoverride\listid1533106235\listoverridecount0\ls279}{\listoverride\listid605619719\listoverridecount0\ls280} +{\listoverride\listid1604150763\listoverridecount0\ls281}{\listoverride\listid941956641\listoverridecount0\ls282}{\listoverride\listid213733415\listoverridecount0\ls283}{\listoverride\listid964701866\listoverridecount0\ls284} +{\listoverride\listid1829244130\listoverridecount0\ls285}{\listoverride\listid2127774908\listoverridecount0\ls286}{\listoverride\listid461919506\listoverridecount0\ls287}{\listoverride\listid1540628709\listoverridecount0\ls288} +{\listoverride\listid1013804417\listoverridecount0\ls289}{\listoverride\listid801120892\listoverridecount0\ls290}{\listoverride\listid920605486\listoverridecount0\ls291}{\listoverride\listid1139151785\listoverridecount0\ls292} +{\listoverride\listid2010521940\listoverridecount0\ls293}{\listoverride\listid1094322505\listoverridecount0\ls294}{\listoverride\listid310064512\listoverridecount0\ls295}{\listoverride\listid1301689147\listoverridecount0\ls296} +{\listoverride\listid1801605844\listoverridecount0\ls297}{\listoverride\listid197276166\listoverridecount0\ls298}{\listoverride\listid1079400195\listoverridecount0\ls299}{\listoverride\listid1370685510\listoverridecount0\ls300} +{\listoverride\listid1697270459\listoverridecount0\ls301}{\listoverride\listid984116367\listoverridecount0\ls302}{\listoverride\listid1122386223\listoverridecount0\ls303}{\listoverride\listid935553153\listoverridecount0\ls304} +{\listoverride\listid2027250953\listoverridecount0\ls305}{\listoverride\listid152915767\listoverridecount0\ls306}{\listoverride\listid1198857840\listoverridecount0\ls307}{\listoverride\listid1937907576\listoverridecount0\ls308} +{\listoverride\listid314379776\listoverridecount0\ls309}{\listoverride\listid1048187837\listoverridecount0\ls310}{\listoverride\listid1556818823\listoverridecount0\ls311}{\listoverride\listid123501169\listoverridecount0\ls312} +{\listoverride\listid437145739\listoverridecount0\ls313}{\listoverride\listid905845909\listoverridecount0\ls314}{\listoverride\listid2117673860\listoverridecount0\ls315}{\listoverride\listid1637027539\listoverridecount0\ls316} +{\listoverride\listid575017278\listoverridecount0\ls317}{\listoverride\listid1295679333\listoverridecount0\ls318}{\listoverride\listid232857063\listoverridecount0\ls319}{\listoverride\listid2019576635\listoverridecount0\ls320} +{\listoverride\listid1400985144\listoverridecount0\ls321}{\listoverride\listid1814133055\listoverridecount0\ls322}{\listoverride\listid1188329398\listoverridecount0\ls323}{\listoverride\listid2083020081\listoverridecount0\ls324} +{\listoverride\listid1604875664\listoverridecount0\ls325}{\listoverride\listid1736313143\listoverridecount0\ls326}{\listoverride\listid153255427\listoverridecount0\ls327}{\listoverride\listid763301677\listoverridecount0\ls328} +{\listoverride\listid2009208014\listoverridecount0\ls329}{\listoverride\listid1434132539\listoverridecount0\ls330}{\listoverride\listid510993466\listoverridecount0\ls331}{\listoverride\listid50542153\listoverridecount0\ls332}{\listoverride\listid359598809 +\listoverridecount0\ls333}{\listoverride\listid1669404562\listoverridecount0\ls334}{\listoverride\listid1825195327\listoverridecount0\ls335}{\listoverride\listid739520843\listoverridecount0\ls336}{\listoverride\listid1915433600\listoverridecount0\ls337} +{\listoverride\listid622226627\listoverridecount0\ls338}{\listoverride\listid1125081522\listoverridecount0\ls339}{\listoverride\listid968514467\listoverridecount0\ls340}{\listoverride\listid1049962533\listoverridecount0\ls341} +{\listoverride\listid1296135391\listoverridecount0\ls342}{\listoverride\listid1471904703\listoverridecount0\ls343}{\listoverride\listid431322857\listoverridecount0\ls344}{\listoverride\listid397021148\listoverridecount0\ls345} +{\listoverride\listid521553040\listoverridecount0\ls346}{\listoverride\listid2066488303\listoverridecount0\ls347}{\listoverride\listid1271887905\listoverridecount0\ls348}{\listoverride\listid1460415875\listoverridecount0\ls349} +{\listoverride\listid1155802176\listoverridecount0\ls350}{\listoverride\listid1785729162\listoverridecount0\ls351}{\listoverride\listid505899235\listoverridecount0\ls352}{\listoverride\listid758408625\listoverridecount0\ls353}{\listoverride\listid30812802 +\listoverridecount0\ls354}{\listoverride\listid2006736073\listoverridecount0\ls355}{\listoverride\listid1543981994\listoverridecount0\ls356}{\listoverride\listid170412347\listoverridecount0\ls357}{\listoverride\listid806901284\listoverridecount0\ls358} +{\listoverride\listid1828979692\listoverridecount0\ls359}{\listoverride\listid774981308\listoverridecount0\ls360}{\listoverride\listid1294555064\listoverridecount0\ls361}{\listoverride\listid1744721776\listoverridecount0\ls362} +{\listoverride\listid644626527\listoverridecount0\ls363}{\listoverride\listid1140878218\listoverridecount0\ls364}{\listoverride\listid1590238551\listoverridecount0\ls365}{\listoverride\listid1502159875\listoverridecount0\ls366} +{\listoverride\listid1148210394\listoverridecount0\ls367}{\listoverride\listid214704075\listoverridecount0\ls368}{\listoverride\listid2011979462\listoverridecount0\ls369}{\listoverride\listid164247596\listoverridecount0\ls370} +{\listoverride\listid702748596\listoverridecount0\ls371}{\listoverride\listid261841734\listoverridecount0\ls372}{\listoverride\listid1100486467\listoverridecount0\ls373}{\listoverride\listid160700374\listoverridecount0\ls374}{\listoverride\listid691300833 +\listoverridecount0\ls375}{\listoverride\listid1009604204\listoverridecount0\ls376}{\listoverride\listid883712585\listoverridecount0\ls377}{\listoverride\listid1489129491\listoverridecount0\ls378}{\listoverride\listid1035428925\listoverridecount0\ls379} +{\listoverride\listid961837727\listoverridecount0\ls380}{\listoverride\listid1999578078\listoverridecount0\ls381}{\listoverride\listid578251520\listoverridecount0\ls382}{\listoverride\listid828713434\listoverridecount0\ls383} +{\listoverride\listid1408843950\listoverridecount0\ls384}{\listoverride\listid463961204\listoverridecount0\ls385}{\listoverride\listid1212376514\listoverridecount0\ls386}{\listoverride\listid63381083\listoverridecount0\ls387}{\listoverride\listid912274536 +\listoverridecount0\ls388}{\listoverride\listid756439868\listoverridecount0\ls389}{\listoverride\listid1511218574\listoverridecount0\ls390}{\listoverride\listid1786463243\listoverridecount0\ls391}{\listoverride\listid711854213\listoverridecount0\ls392} +{\listoverride\listid332683910\listoverridecount0\ls393}{\listoverride\listid542249679\listoverridecount0\ls394}{\listoverride\listid1182739296\listoverridecount0\ls395}{\listoverride\listid1056396560\listoverridecount0\ls396} +{\listoverride\listid133064563\listoverridecount0\ls397}{\listoverride\listid1993436880\listoverridecount0\ls398}{\listoverride\listid1820657071\listoverridecount0\ls399}{\listoverride\listid703940250\listoverridecount0\ls400} +{\listoverride\listid991300765\listoverridecount0\ls401}{\listoverride\listid331956721\listoverridecount0\ls402}{\listoverride\listid1905870008\listoverridecount0\ls403}{\listoverride\listid483354292\listoverridecount0\ls404} +{\listoverride\listid1196429002\listoverridecount0\ls405}{\listoverride\listid308051190\listoverridecount0\ls406}{\listoverride\listid923877044\listoverridecount0\ls407}{\listoverride\listid1297301589\listoverridecount0\ls408} +{\listoverride\listid1345864340\listoverridecount0\ls409}{\listoverride\listid1663124724\listoverridecount0\ls410}{\listoverride\listid187724893\listoverridecount0\ls411}{\listoverride\listid1713069456\listoverridecount0\ls412} +{\listoverride\listid546837203\listoverridecount0\ls413}{\listoverride\listid1758286388\listoverridecount0\ls414}{\listoverride\listid1608848528\listoverridecount0\ls415}{\listoverride\listid2090038036\listoverridecount0\ls416} +{\listoverride\listid130943120\listoverridecount0\ls417}{\listoverride\listid530918960\listoverridecount0\ls418}{\listoverride\listid446659219\listoverridecount0\ls419}{\listoverride\listid533272793\listoverridecount0\ls420}{\listoverride\listid1810709954 +\listoverridecount0\ls421}{\listoverride\listid1962611038\listoverridecount0\ls422}{\listoverride\listid149097100\listoverridecount0\ls423}{\listoverride\listid1130824195\listoverridecount0\ls424}{\listoverride\listid1545215804\listoverridecount0\ls425} +{\listoverride\listid1858811694\listoverridecount0\ls426}{\listoverride\listid738290266\listoverridecount0\ls427}{\listoverride\listid1522089581\listoverridecount0\ls428}{\listoverride\listid248318148\listoverridecount0\ls429}{\listoverride\listid66077834 +\listoverridecount0\ls430}{\listoverride\listid838814220\listoverridecount0\ls431}{\listoverride\listid2007246689\listoverridecount0\ls432}{\listoverride\listid1606965342\listoverridecount0\ls433}{\listoverride\listid1338919292\listoverridecount0\ls434} +{\listoverride\listid1897550242\listoverridecount0\ls435}{\listoverride\listid162942638\listoverridecount0\ls436}{\listoverride\listid992177671\listoverridecount0\ls437}{\listoverride\listid1400128178\listoverridecount0\ls438} +{\listoverride\listid1885830206\listoverridecount0\ls439}{\listoverride\listid840775303\listoverridecount0\ls440}{\listoverride\listid666639099\listoverridecount0\ls441}{\listoverride\listid1353145135\listoverridecount0\ls442} +{\listoverride\listid1668895775\listoverridecount0\ls443}{\listoverride\listid33778634\listoverridecount0\ls444}{\listoverride\listid1732120429\listoverridecount0\ls445}{\listoverride\listid1756709111\listoverridecount0\ls446} +{\listoverride\listid2090273625\listoverridecount0\ls447}{\listoverride\listid862593805\listoverridecount0\ls448}{\listoverride\listid1730693339\listoverridecount0\ls449}{\listoverride\listid1127310475\listoverridecount0\ls450} +{\listoverride\listid489829227\listoverridecount0\ls451}{\listoverride\listid1040790192\listoverridecount0\ls452}{\listoverride\listid2032416727\listoverridecount0\ls453}{\listoverride\listid1619754758\listoverridecount0\ls454} +{\listoverride\listid1723599761\listoverridecount0\ls455}{\listoverride\listid1467888567\listoverridecount0\ls456}{\listoverride\listid826825514\listoverridecount0\ls457}{\listoverride\listid506485813\listoverridecount0\ls458} +{\listoverride\listid961575549\listoverridecount0\ls459}{\listoverride\listid1841847045\listoverridecount0\ls460}{\listoverride\listid282855356\listoverridecount0\ls461}{\listoverride\listid1428959622\listoverridecount0\ls462} +{\listoverride\listid679771490\listoverridecount0\ls463}{\listoverride\listid1899048036\listoverridecount0\ls464}{\listoverride\listid1382972683\listoverridecount0\ls465}{\listoverride\listid1539466041\listoverridecount0\ls466} +{\listoverride\listid1354922369\listoverridecount0\ls467}{\listoverride\listid246887073\listoverridecount0\ls468}{\listoverride\listid304286295\listoverridecount0\ls469}{\listoverride\listid1387337272\listoverridecount0\ls470} +{\listoverride\listid450317675\listoverridecount0\ls471}{\listoverride\listid1330409383\listoverridecount0\ls472}{\listoverride\listid945380735\listoverridecount0\ls473}{\listoverride\listid187333649\listoverridecount0\ls474} +{\listoverride\listid1636449058\listoverridecount0\ls475}{\listoverride\listid1192185748\listoverridecount0\ls476}{\listoverride\listid962424012\listoverridecount0\ls477}{\listoverride\listid377976139\listoverridecount0\ls478} +{\listoverride\listid338583485\listoverridecount0\ls479}{\listoverride\listid596989429\listoverridecount0\ls480}{\listoverride\listid1468670081\listoverridecount0\ls481}{\listoverride\listid896166138\listoverridecount0\ls482} +{\listoverride\listid1620986347\listoverridecount0\ls483}{\listoverride\listid1932275756\listoverridecount0\ls484}{\listoverride\listid1364134006\listoverridecount0\ls485}{\listoverride\listid1220823509\listoverridecount0\ls486} +{\listoverride\listid986861164\listoverridecount0\ls487}{\listoverride\listid1500073409\listoverridecount0\ls488}{\listoverride\listid902062987\listoverridecount0\ls489}{\listoverride\listid662121134\listoverridecount0\ls490} +{\listoverride\listid2111121692\listoverridecount0\ls491}{\listoverride\listid1184320117\listoverridecount0\ls492}{\listoverride\listid2090420670\listoverridecount0\ls493}{\listoverride\listid2124685628\listoverridecount0\ls494} +{\listoverride\listid1550141604\listoverridecount0\ls495}{\listoverride\listid1368606142\listoverridecount0\ls496}{\listoverride\listid1675722665\listoverridecount0\ls497}{\listoverride\listid1133981035\listoverridecount0\ls498} +{\listoverride\listid1470208\listoverridecount0\ls499}{\listoverride\listid130558331\listoverridecount0\ls500}{\listoverride\listid1700466107\listoverridecount0\ls501}{\listoverride\listid1585069188\listoverridecount0\ls502}{\listoverride\listid1535650286 +\listoverridecount0\ls503}{\listoverride\listid1260135786\listoverridecount0\ls504}{\listoverride\listid1202671050\listoverridecount0\ls505}{\listoverride\listid115104456\listoverridecount0\ls506}{\listoverride\listid1424885948\listoverridecount0\ls507} +{\listoverride\listid1967000965\listoverridecount0\ls508}{\listoverride\listid710420397\listoverridecount0\ls509}{\listoverride\listid1274290608\listoverridecount0\ls510}{\listoverride\listid1370884334\listoverridecount0\ls511} +{\listoverride\listid1450470162\listoverridecount0\ls512}{\listoverride\listid-2\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent426{\leveltext +\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-426\li426 }}\ls513}{\listoverride\listid-2\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283{\leveltext +\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-283\li284 }}\ls514}{\listoverride\listid759788910\listoverridecount0\ls515}{\listoverride\listid-2\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1 +\levelold\levelspace0\levelindent360{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li1440 }}\ls516}{\listoverride\listid2068871278\listoverridecount0\ls517}{\listoverride\listid448089943\listoverridecount0\ls518} +{\listoverride\listid511922355\listoverridecount0\ls519}{\listoverride\listid1995834717\listoverridecount0\ls520}{\listoverride\listid1889300597\listoverridecount0\ls521}{\listoverride\listid333727972\listoverridecount0\ls522} +{\listoverride\listid152912675\listoverridecount0\ls523}{\listoverride\listid1680739433\listoverridecount0\ls524}{\listoverride\listid1511262683\listoverridecount0\ls525}{\listoverride\listid1177695859\listoverridecount0\ls526} +{\listoverride\listid1807504818\listoverridecount0\ls527}{\listoverride\listid2121141347\listoverridecount0\ls528}{\listoverride\listid1965231777\listoverridecount0\ls529}{\listoverride\listid1269004208\listoverridecount0\ls530}{\listoverride\listid-2 +\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent709{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 }}\ls531}{\listoverride\listid880364132 +\listoverridecount0\ls532}{\listoverride\listid1361513530\listoverridecount0\ls533}{\listoverride\listid1522433178\listoverridecount0\ls534}{\listoverride\listid1793087057\listoverridecount0\ls535}{\listoverride\listid1172912095\listoverridecount0\ls536} +{\listoverride\listid317467467\listoverridecount0\ls537}{\listoverride\listid362246690\listoverridecount0\ls538}{\listoverride\listid241374501\listoverridecount0\ls539}{\listoverride\listid1911882153\listoverridecount0\ls540}{\listoverride\listid537159260 +\listoverridecount0\ls541}{\listoverride\listid332417272\listoverridecount0\ls542}{\listoverride\listid495809011\listoverridecount0\ls543}{\listoverride\listid995305383\listoverridecount0\ls544}{\listoverride\listid1928997213\listoverridecount0\ls545} +{\listoverride\listid441998209\listoverridecount0\ls546}{\listoverride\listid636884605\listoverridecount0\ls547}{\listoverride\listid345063485\listoverridecount0\ls548}{\listoverride\listid490605879\listoverridecount0\ls549}{\listoverride\listid966815872 +\listoverridecount0\ls550}{\listoverride\listid664087181\listoverridecount0\ls551}{\listoverride\listid667052967\listoverridecount0\ls552}{\listoverride\listid137693251\listoverridecount0\ls553}{\listoverride\listid876963678\listoverridecount0\ls554} +{\listoverride\listid1015500468\listoverridecount0\ls555}{\listoverride\listid213321763\listoverridecount0\ls556}{\listoverride\listid1398089233\listoverridecount0\ls557}{\listoverride\listid576061941\listoverridecount0\ls558} +{\listoverride\listid1316758068\listoverridecount0\ls559}{\listoverride\listid1468545089\listoverridecount0\ls560}{\listoverride\listid1364404868\listoverridecount0\ls561}{\listoverride\listid1298030096\listoverridecount0\ls562} +{\listoverride\listid1340499527\listoverridecount0\ls563}{\listoverride\listid1811819359\listoverridecount0\ls564}{\listoverride\listid371996935\listoverridecount0\ls565}{\listoverride\listid1224218058\listoverridecount0\ls566} +{\listoverride\listid1075585216\listoverridecount0\ls567}{\listoverride\listid1102533338\listoverridecount0\ls568}{\listoverride\listid914434057\listoverridecount0\ls569}{\listoverride\listid1530530303\listoverridecount0\ls570} +{\listoverride\listid527834172\listoverridecount0\ls571}{\listoverride\listid1533609628\listoverridecount0\ls572}{\listoverride\listid1218325368\listoverridecount0\ls573}{\listoverride\listid549654799\listoverridecount0\ls574} +{\listoverride\listid1355419310\listoverridecount0\ls575}{\listoverride\listid1713571758\listoverridecount0\ls576}{\listoverride\listid1343971384\listoverridecount0\ls577}{\listoverride\listid181090800\listoverridecount0\ls578} +{\listoverride\listid1699501258\listoverridecount0\ls579}{\listoverride\listid122118213\listoverridecount0\ls580}{\listoverride\listid850148991\listoverridecount0\ls581}{\listoverride\listid1272398056\listoverridecount0\ls582} +{\listoverride\listid1381588019\listoverridecount0\ls583}{\listoverride\listid1704474215\listoverridecount0\ls584}{\listoverride\listid1950045989\listoverridecount0\ls585}{\listoverride\listid1761297327\listoverridecount0\ls586} +{\listoverride\listid502164173\listoverridecount0\ls587}{\listoverride\listid1324353058\listoverridecount0\ls588}{\listoverride\listid1368339419\listoverridecount0\ls589}{\listoverride\listid712080375\listoverridecount0\ls590} +{\listoverride\listid1917278601\listoverridecount0\ls591}{\listoverride\listid1278567111\listoverridecount0\ls592}{\listoverride\listid2126845796\listoverridecount0\ls593}{\listoverride\listid1716082402\listoverridecount0\ls594} +{\listoverride\listid536696905\listoverridecount0\ls595}{\listoverride\listid416024257\listoverridecount0\ls596}{\listoverride\listid1158501419\listoverridecount0\ls597}{\listoverride\listid1237007470\listoverridecount0\ls598} +{\listoverride\listid1164707690\listoverridecount0\ls599}{\listoverride\listid1491676281\listoverridecount0\ls600}{\listoverride\listid1784109154\listoverridecount0\ls601}{\listoverride\listid1957984340\listoverridecount0\ls602} +{\listoverride\listid72750551\listoverridecount0\ls603}{\listoverride\listid1898129874\listoverridecount0\ls604}{\listoverride\listid427582522\listoverridecount0\ls605}{\listoverride\listid1273855290\listoverridecount0\ls606} +{\listoverride\listid1955013866\listoverridecount0\ls607}{\listoverride\listid1609266390\listoverridecount0\ls608}{\listoverride\listid161510923\listoverridecount0\ls609}{\listoverride\listid1230965478\listoverridecount0\ls610} +{\listoverride\listid1361276905\listoverridecount0\ls611}{\listoverride\listid123667284\listoverridecount0\ls612}{\listoverride\listid1279021951\listoverridecount0\ls613}{\listoverride\listid1984234079\listoverridecount0\ls614} +{\listoverride\listid613052065\listoverridecount0\ls615}{\listoverride\listid1759517807\listoverridecount0\ls616}{\listoverride\listid1921137672\listoverridecount0\ls617}{\listoverride\listid1189948271\listoverridecount0\ls618} +{\listoverride\listid1037241603\listoverridecount0\ls619}{\listoverride\listid161509331\listoverridecount0\ls620}{\listoverride\listid962542841\listoverridecount0\ls621}{\listoverride\listid2139686240\listoverridecount0\ls622} +{\listoverride\listid417217341\listoverridecount0\ls623}{\listoverride\listid1528835898\listoverridecount0\ls624}{\listoverride\listid2093431334\listoverridecount0\ls625}{\listoverride\listid456223540\listoverridecount0\ls626} +{\listoverride\listid1824081756\listoverridecount0\ls627}{\listoverride\listid1172380726\listoverridecount0\ls628}{\listoverride\listid477093\listoverridecount0\ls629}{\listoverride\listid1048844020\listoverridecount0\ls630}{\listoverride\listid1372874476 +\listoverridecount0\ls631}{\listoverride\listid900673066\listoverridecount0\ls632}{\listoverride\listid1333409609\listoverridecount0\ls633}{\listoverride\listid878787261\listoverridecount0\ls634}{\listoverride\listid780881129\listoverridecount0\ls635} +{\listoverride\listid1923952894\listoverridecount0\ls636}{\listoverride\listid1300961821\listoverridecount0\ls637}{\listoverride\listid31153956\listoverridecount0\ls638}{\listoverride\listid770666510\listoverridecount0\ls639}{\listoverride\listid532183969 +\listoverridecount0\ls640}{\listoverride\listid701053735\listoverridecount0\ls641}{\listoverride\listid391540251\listoverridecount0\ls642}{\listoverride\listid1792626969\listoverridecount0\ls643}{\listoverride\listid2027362078\listoverridecount0\ls644} +{\listoverride\listid36393443\listoverridecount0\ls645}{\listoverride\listid750587485\listoverridecount0\ls646}{\listoverride\listid916597450\listoverridecount0\ls647}{\listoverride\listid1063213948\listoverridecount0\ls648}{\listoverride\listid1155998456 +\listoverridecount0\ls649}{\listoverride\listid1254624591\listoverridecount0\ls650}{\listoverride\listid1743408648\listoverridecount0\ls651}{\listoverride\listid1054044360\listoverridecount0\ls652}{\listoverride\listid1626501410\listoverridecount0\ls653} +{\listoverride\listid1133715277\listoverridecount0\ls654}{\listoverride\listid327484175\listoverridecount0\ls655}{\listoverride\listid39287342\listoverridecount0\ls656}{\listoverride\listid2004771746\listoverridecount0\ls657} +{\listoverride\listid2021540122\listoverridecount0\ls658}{\listoverride\listid1136217166\listoverridecount0\ls659}{\listoverride\listid575435326\listoverridecount0\ls660}{\listoverride\listid137696945\listoverridecount0\ls661} +{\listoverride\listid1224828205\listoverridecount0\ls662}{\listoverride\listid1182016185\listoverridecount0\ls663}{\listoverride\listid1755587049\listoverridecount0\ls664}{\listoverride\listid472793436\listoverridecount0\ls665} +{\listoverride\listid1362976166\listoverridecount0\ls666}{\listoverride\listid1152336426\listoverridecount0\ls667}{\listoverride\listid1559586582\listoverridecount0\ls668}{\listoverride\listid2062047589\listoverridecount0\ls669} +{\listoverride\listid1230385722\listoverridecount0\ls670}{\listoverride\listid321129143\listoverridecount0\ls671}{\listoverride\listid1999115743\listoverridecount0\ls672}{\listoverride\listid894852705\listoverridecount0\ls673}{\listoverride\listid17433431 +\listoverridecount0\ls674}{\listoverride\listid1186213230\listoverridecount0\ls675}{\listoverride\listid1058169666\listoverridecount0\ls676}{\listoverride\listid706950125\listoverridecount0\ls677}{\listoverride\listid2127192152\listoverridecount0\ls678} +{\listoverride\listid1104956293\listoverridecount0\ls679}{\listoverride\listid198319268\listoverridecount0\ls680}{\listoverride\listid2028407034\listoverridecount0\ls681}{\listoverride\listid70665487\listoverridecount0\ls682}{\listoverride\listid525338010 +\listoverridecount0\ls683}{\listoverride\listid666711897\listoverridecount0\ls684}{\listoverride\listid126556324\listoverridecount0\ls685}{\listoverride\listid431123093\listoverridecount0\ls686}{\listoverride\listid1920599717\listoverridecount0\ls687} +{\listoverride\listid396363903\listoverridecount0\ls688}{\listoverride\listid968633674\listoverridecount0\ls689}{\listoverride\listid982343807\listoverridecount0\ls690}{\listoverride\listid1041322367\listoverridecount0\ls691} +{\listoverride\listid1190947469\listoverridecount0\ls692}{\listoverride\listid1770614163\listoverridecount0\ls693}{\listoverride\listid298191534\listoverridecount0\ls694}{\listoverride\listid1590507743\listoverridecount0\ls695} +{\listoverride\listid201216963\listoverridecount0\ls696}{\listoverride\listid635379746\listoverridecount0\ls697}{\listoverride\listid2051489984\listoverridecount0\ls698}{\listoverride\listid1968272185\listoverridecount0\ls699} +{\listoverride\listid622078979\listoverridecount0\ls700}{\listoverride\listid2030910761\listoverridecount0\ls701}{\listoverride\listid121461348\listoverridecount0\ls702}{\listoverride\listid1655138215\listoverridecount0\ls703} +{\listoverride\listid721750442\listoverridecount0\ls704}{\listoverride\listid1960837545\listoverridecount0\ls705}{\listoverride\listid1719890918\listoverridecount0\ls706}{\listoverride\listid214976919\listoverridecount0\ls707} +{\listoverride\listid1836917029\listoverridecount0\ls708}{\listoverride\listid816217358\listoverridecount0\ls709}{\listoverride\listid1238055810\listoverridecount0\ls710}{\listoverride\listid2009214239\listoverridecount0\ls711} +{\listoverride\listid963344442\listoverridecount0\ls712}{\listoverride\listid1195802150\listoverridecount0\ls713}{\listoverride\listid910236388\listoverridecount0\ls714}{\listoverride\listid470102336\listoverridecount0\ls715}{\listoverride\listid794375401 +\listoverridecount0\ls716}{\listoverride\listid530847902\listoverridecount0\ls717}{\listoverride\listid1250247\listoverridecount0\ls718}{\listoverride\listid-2\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\leveljc0\levelfollow0 +\levelstartat1\levelold\levelspace0\levelindent567{\leveltext\'01\'96;}{\levelnumbers;}\fi-567\li567 }}\ls719}{\listoverride\listid-2\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelold +\levelspace0\levelindent567{\leveltext\'01\u-4051 ?;}{\levelnumbers;}\f3\fs28\fbias0 \fi-567\li567 }}\ls720}{\listoverride\listid2138404995\listoverridecount0\ls721}{\listoverride\listid-2\listoverridecount1{\lfolevel\listoverrideformat{\listlevel +\levelnfc23\leveljc0\levelfollow0\levelstartat0\levelold\levelspace0\levelindent420{\leveltext\'01-;}{\levelnumbers;}\fi-420\li420 }}\ls722}{\listoverride\listid1943802994\listoverridecount0\ls723}{\listoverride\listid1532187495\listoverridecount0\ls724} +{\listoverride\listid933317471\listoverridecount0\ls725}{\listoverride\listid999389215\listoverridecount0\ls726}{\listoverride\listid2112120625\listoverridecount0\ls727}{\listoverride\listid324165469\listoverridecount0\ls728}{\listoverride\listid914626889 +\listoverridecount0\ls729}{\listoverride\listid871501660\listoverridecount0\ls730}{\listoverride\listid1708792644\listoverridecount0\ls731}{\listoverride\listid1198160744\listoverridecount0\ls732}{\listoverride\listid547183254\listoverridecount0\ls733} +{\listoverride\listid108357030\listoverridecount0\ls734}{\listoverride\listid1433090429\listoverridecount0\ls735}{\listoverride\listid729622629\listoverridecount0\ls736}{\listoverride\listid1856379965\listoverridecount0\ls737} +{\listoverride\listid1322155937\listoverridecount0\ls738}{\listoverride\listid234902370\listoverridecount0\ls739}{\listoverride\listid1847819470\listoverridecount0\ls740}{\listoverride\listid58984065\listoverridecount0\ls741}{\listoverride\listid821001750 +\listoverridecount0\ls742}{\listoverride\listid1840657934\listoverridecount0\ls743}{\listoverride\listid77605392\listoverridecount0\ls744}{\listoverride\listid1696953811\listoverridecount0\ls745}{\listoverride\listid68622271\listoverridecount0\ls746} +{\listoverride\listid1057242833\listoverridecount0\ls747}{\listoverride\listid2056344654\listoverridecount0\ls748}{\listoverride\listid1745492194\listoverridecount0\ls749}{\listoverride\listid2053385296\listoverridecount0\ls750} +{\listoverride\listid1057514957\listoverridecount0\ls751}{\listoverride\listid864027828\listoverridecount0\ls752}{\listoverride\listid1403600430\listoverridecount0\ls753}{\listoverride\listid1032655956\listoverridecount0\ls754} +{\listoverride\listid1514949834\listoverridecount0\ls755}{\listoverride\listid826172966\listoverridecount0\ls756}{\listoverride\listid938563841\listoverridecount0\ls757}{\listoverride\listid47455237\listoverridecount0\ls758}{\listoverride\listid1376193165 +\listoverridecount0\ls759}{\listoverride\listid1791050833\listoverridecount0\ls760}{\listoverride\listid671763493\listoverridecount0\ls761}{\listoverride\listid1533612646\listoverridecount0\ls762}{\listoverride\listid2029674692\listoverridecount0\ls763} +{\listoverride\listid2089232008\listoverridecount0\ls764}{\listoverride\listid1592004757\listoverridecount0\ls765}{\listoverride\listid1306086824\listoverridecount0\ls766}{\listoverride\listid1816559255\listoverridecount0\ls767} +{\listoverride\listid764346488\listoverridecount0\ls768}{\listoverride\listid729547106\listoverridecount0\ls769}{\listoverride\listid893155724\listoverridecount0\ls770}{\listoverride\listid1366130198\listoverridecount0\ls771} +{\listoverride\listid1390378968\listoverridecount0\ls772}{\listoverride\listid1964069053\listoverridecount0\ls773}{\listoverride\listid412629788\listoverridecount0\ls774}{\listoverride\listid931014543\listoverridecount0\ls775} +{\listoverride\listid1128821101\listoverridecount0\ls776}{\listoverride\listid845249177\listoverridecount0\ls777}{\listoverride\listid279727366\listoverridecount0\ls778}{\listoverride\listid1502355567\listoverridecount0\ls779} +{\listoverride\listid1782913116\listoverridecount0\ls780}{\listoverride\listid861672369\listoverridecount0\ls781}{\listoverride\listid1250312096\listoverridecount0\ls782}{\listoverride\listid711924848\listoverridecount0\ls783} +{\listoverride\listid2043824529\listoverridecount0\ls784}{\listoverride\listid1794399324\listoverridecount0\ls785}{\listoverride\listid1871146038\listoverridecount0\ls786}{\listoverride\listid629677106\listoverridecount0\ls787} +{\listoverride\listid552622483\listoverridecount0\ls788}{\listoverride\listid385029005\listoverridecount0\ls789}{\listoverride\listid730734374\listoverridecount0\ls790}{\listoverride\listid447428111\listoverridecount0\ls791}{\listoverride\listid699816373 +\listoverridecount0\ls792}{\listoverride\listid2044280526\listoverridecount0\ls793}{\listoverride\listid894781803\listoverridecount0\ls794}{\listoverride\listid560412518\listoverridecount0\ls795}{\listoverride\listid1990089201\listoverridecount0\ls796} +{\listoverride\listid810824703\listoverridecount0\ls797}{\listoverride\listid1928885388\listoverridecount0\ls798}{\listoverride\listid2093770737\listoverridecount0\ls799}{\listoverride\listid300425285\listoverridecount0\ls800} +{\listoverride\listid129371127\listoverridecount0\ls801}{\listoverride\listid1260485927\listoverridecount0\ls802}{\listoverride\listid467864974\listoverridecount0\ls803}{\listoverride\listid134224711\listoverridecount0\ls804}{\listoverride\listid543102344 +\listoverridecount0\ls805}{\listoverride\listid892352274\listoverridecount0\ls806}{\listoverride\listid2019498215\listoverridecount0\ls807}{\listoverride\listid-2\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\leveljc0\levelfollow0 +\levelstartat0\levelold\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fs40\fbias0 }}\ls808}{\listoverride\listid179585427\listoverridecount0\ls809}{\listoverride\listid1598292567\listoverridecount0\ls810} +{\listoverride\listid2013481894\listoverridecount0\ls811}{\listoverride\listid1696348315\listoverridecount0\ls812}{\listoverride\listid1383553687\listoverridecount0\ls813}{\listoverride\listid104620690\listoverridecount0\ls814} +{\listoverride\listid1403672269\listoverridecount0\ls815}{\listoverride\listid495540841\listoverridecount0\ls816}{\listoverride\listid383255768\listoverridecount0\ls817}{\listoverride\listid225535374\listoverridecount0\ls818}}{\info +{\title Instructions for preparing proposal Part B for Integrated Projects in the IST Priority}{\author kinlath}{\operator kinlath}{\creatim\yr2003\mo6\dy3\hr16\min36}{\revtim\yr2003\mo6\dy5\hr14\min17}{\printim\yr2003\mo1\dy17\hr17\min17}{\version12} +{\edmins17}{\nofpages32}{\nofwords2015}{\nofchars11489}{\*\company }{\nofcharsws0}{\vern113}}\paperw11907\paperh16840\margl1134\margr1134\margt1134\margb1134 \widowctrl\ftnbj\aenddoc\hyphcaps0\formshade\viewkind4\viewscale100\pgbrdrhead\pgbrdrfoot \fet0 +\sectd \linex0\headery709\footery709\colsx709\endnhere\pgbrdropt32\sectdefaultcl {\header \pard\plain \s19\qj\widctlpar\tqc\tx4153\tqr\tx8306\adjustright \fs20\lang2057\cgrid {Call identifier\tab \tab Integrated Project +\par \tab \tab [}{\f1 Proposal Acronym}{] +\par }}{\footer \pard\plain \s21\qc\widctlpar\tqc\tx4153\tqr\tx8306\adjustright \fs22\lang2057\cgrid {Proposal part B, page [x] of [y] +\par }}{\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta )}} +{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl8 +\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}\pard\plain \widctlpar\adjustright \lang1036\cgrid {\lang2057 +\par }\pard \qc\widctlpar\adjustright {\fs32\lang2057 +\par +\par Integrated Project +\par IST call 2 +\par }\pard \widctlpar\adjustright {\lang2057 +\par }\pard \qc\widctlpar\adjustright {\b\fs32\lang2057 [Proposal full title] +\par }\pard \widctlpar\adjustright {\lang2057 +\par +\par }\pard \qc\widctlpar\adjustright {\b\lang2057 [Proposal acronym] +\par }\pard \widctlpar\adjustright {\lang2057 +\par +\par }{\b\lang2057 Date of preparation}{\lang2057 : [Preparation date] +\par +\par +\par }\trowd \trgaph108\trleft-108\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10 \clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr +\brdrs\brdrw10 \cltxlrtb \cellx1701\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb \cellx6663\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr +\brdrs\brdrw10 \cltxlrtb \cellx9747\pard \widctlpar\intbl\adjustright {\b\lang2057 Participant no.\cell Participant name\cell Participant short name\cell }\pard \widctlpar\intbl\adjustright {\b\lang2057 \row }\trowd \trgaph108\trleft-108\trbrdrt +\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10 \clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb \cellx1701 +\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb \cellx6663\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb \cellx9747\pard +\widctlpar\intbl\adjustright {\lang2057 1 (coordinator)\cell \cell \cell }\pard \widctlpar\intbl\adjustright {\lang2057 \row }\pard \widctlpar\intbl\adjustright {\lang2057 2\cell \cell \cell }\pard \widctlpar\intbl\adjustright {\lang2057 \row }\pard +\widctlpar\intbl\adjustright {\lang2057 3\cell \cell \cell }\pard \widctlpar\intbl\adjustright {\lang2057 \row }\trowd \trgaph108\trleft-108\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 +\trbrdrv\brdrs\brdrw10 \clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb \cellx1701\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 +\cltxlrtb \cellx6663\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb \cellx9747\pard \widctlpar\intbl\adjustright {\lang2057 4\cell \cell \cell }\pard \widctlpar\intbl\adjustright {\lang2057 +\row }\pard \widctlpar\adjustright {\lang2057 etc. +\par +\par +\par +\par }{\b\lang2057 Name of the coordinating person}{\lang2057 : [Coordinator person name] +\par }{\b\lang2057 Coordinator organisation name}{\lang2057 : [Coordinator organisation name]}{\b\lang2057 +\par e-mail}{\lang2057 : [Coordinator email] +\par }{\b\lang2057 fax:}{\lang2057 [Coordinator fax] +\par +\par \page +\par }{\b\ul\lang2057 Table of contents +\par }\pard \fi720\widctlpar\adjustright {\lang2057 +\par +\par +\par [table of contents] +\par }\pard \widctlpar\adjustright {\lang2057 \page +\par }\pard \qc\widctlpar\adjustright {\b\fs32\ul\lang2057 Proposal summary page +\par }\pard \widctlpar\adjustright {\lang2057 +\par }{\b\lang2057 [Proposal full title] +\par [Proposal acronym] +\par }{\lang2057 +\par }\pard\plain \s1\qj\sb240\sa60\keepn\widctlpar\outlinelevel0\adjustright \b\fs28\lang2057\kerning28\cgrid {{\*\bkmkstart _Toc30245116}Strategic objectives addressed{\*\bkmkend _Toc30245116} +\par }\pard\plain \widctlpar\adjustright \lang1036\cgrid {\i\fs20\lang2057 (If more than one objective , indicate their order of importance to the project) +\par }{\lang2057 +\par [Strategic objective 1] +\par [Strategic objective 2] +\par +\par etc. +\par +\par }\pard\plain \s1\qj\sb240\sa60\keepn\widctlpar\outlinelevel0\adjustright \b\fs28\lang2057\kerning28\cgrid {{\*\bkmkstart _Toc30245117}Proposal abstract{\*\bkmkend _Toc30245117} +\par }\pard\plain \widctlpar\adjustright \lang1036\cgrid {\i\fs20\lang2057 (copied from Part A, if not in English, include an English translation) +\par }{\lang2057 +\par +\par [Proposal abstract] +\par +\par \page +\par }\pard\plain \s1\qj\sb240\sa60\keepn\widctlpar\outlinelevel0\adjustright \b\fs28\lang2057\kerning28\cgrid {{\*\bkmkstart _Toc30245118}B.1 Scientific and technological objectives of the project and state of the art{\*\bkmkend _Toc30245118} +\par }\pard\plain \widctlpar\adjustright \lang1036\cgrid {\lang2057 Recommended length \endash three pages +\par }{\i\fs20\lang2057 (Describe in detail the proposed project\rquote +s S&T objectives. The objectives should be those achievable within the project, not through subsequent development, and should be stated in a measurable and verifiable form. The progress of the project work will be measured against these goals in later re +views and assessments. Describe the state-of-the-art in the area concerned and how the proposed project will enhance the state-of-the-art in that area.) +\par }\pard \li720\widctlpar\adjustright {\lang2057 +\par +\par \page +\par }\pard\plain \s1\qj\sb240\sa60\keepn\widctlpar\outlinelevel0\adjustright \b\fs28\lang2057\kerning28\cgrid {{\*\bkmkstart _Toc30245119}B.2 Relevance to the objectives of the IST Priority{\*\bkmkend _Toc30245119} +\par }\pard\plain \widctlpar\adjustright \lang1036\cgrid {\lang2057 Recommended length \endash two pages +\par }{\i\fs20\lang2057 (Describe in detail the manner how the proposed project\rquote s objectives contribute to the scientific, technical, wider societal and policy objectives}{\i\fs20\ul\lang2057 of the IST Priority }{\i\fs20\lang2057 +in the areas concerned.)}{\lang2057 +\par +\par +\par \page +\par }\pard\plain \s1\qj\sb240\sa60\keepn\widctlpar\outlinelevel0\adjustright \b\fs28\lang2057\kerning28\cgrid {{\*\bkmkstart _Toc30245120}B.3 Potential impact{\*\bkmkend _Toc30245120} +\par }\pard\plain \widctlpar\adjustright \lang1036\cgrid {\lang2057 Recommended length \endash three pages}{\i\fs20\lang2057 +\par (Describe the strategic impact of the proposed project, for example in reinforcing competitiveness or on solving societal problems. Describe the innovation-related activities. Describe the exploitation and/or dissemination plans w +hich are foreseen to ensure use of the project results. Describe the added-value in carrying out the work at a European level. Indicate what account is taken of other national or international research activities.) +\par }{\lang2057 +\par +\par +\par +\par }{\b\lang2057 \page +\par }\pard\plain \s2\sb240\sa60\keepn\widctlpar\outlinelevel1\adjustright \b\i\f1\lang2057\cgrid {{\*\bkmkstart _Toc30245121}B.3.1 Contributions to standards{\*\bkmkend _Toc30245121} +\par }\pard\plain \widctlpar\adjustright \lang1036\cgrid {\lang2057 Recommended length \endash one page +\par }{\i\fs20\lang2057 (Describe contributions to national or international standards which may be made by the project, if any.) +\par }{\lang2057 +\par +\par +\par \page +\par }\pard\plain \s1\qj\sb240\sa60\keepn\widctlpar\outlinelevel0\adjustright \b\fs28\lang2057\kerning28\cgrid {{\*\bkmkstart _Toc30245122}B.4 Outline implementation plan{\*\bkmkend _Toc30245122} +\par }\pard\plain \widctlpar\adjustright \lang1036\cgrid {\lang2057 Recommended length \endash for the sections B4 and B.4.1-B.4.4 \endash twenty-five pages in total}{\i\fs20\lang2057 +\par (First describe the proposed S&T approach, and show how this approach will enable the project to achieve its objectives. Describe the overall implementation plan broken down to the level of +activities and the components of each of the activities. Show how this plan integrates the various components to a coherent project. Then complete sections B.4.1 \endash B.4.4) +\par }{\lang2057 +\par +\par +\par \page +\par }\pard\plain \s2\sb240\sa60\keepn\widctlpar\outlinelevel1\adjustright \b\i\f1\lang2057\cgrid {{\*\bkmkstart _Toc30245123}B.4.1 Research, technological development and innovation activities{\*\bkmkend _Toc30245123} +\par }\pard\plain \widctlpar\adjustright \lang1036\cgrid {\i\fs20\lang2057 +(Explain how the research/innovation effort of the project is comprised of a number of different components (major elements or blocks of work). Describe each of these components, identify who will carry out each. Show the relevance and contribu +tion of each to the project as a whole. The description of the innovation components should cover the plans for management of knowledge and of intellectual property; a description of the exploitation of results and a plan for disseminating of knowledge be +yond the consortium.) +\par }{\lang2057 +\par +\par +\par +\par \page +\par }\pard\plain \s2\sb240\sa60\keepn\widctlpar\outlinelevel1\adjustright \b\i\f1\lang2057\cgrid {{\*\bkmkstart _Toc30245124}B.4.2 Demonstration activities{\*\bkmkend _Toc30245124} +\par }\pard\plain \widctlpar\adjustright \lang1036\cgrid {\i\fs20\lang2057 (Describe each of these components, identify who will carry out each. Show the relevance and contribution of each to the research work elements of the project on which these + demonstrations are fully or partly based. Show contingency planning for unexpected outcomes of the research work.) +\par }{\fs22\lang2057 +\par +\par +\par }{\lang2057 \page +\par }\pard\plain \s2\sb240\sa60\keepn\widctlpar\outlinelevel1\adjustright \b\i\f1\lang2057\cgrid {{\*\bkmkstart _Toc30245125}B.4.3 Training activities{\*\bkmkend _Toc30245125} }{\i0\fs20 +\par }\pard\plain \widctlpar\adjustright \lang1036\cgrid {\i\fs20\lang2057 (Describe each of these components, identify who will carry out each. Show the relev +ance and contribution of each to the project as a whole, and their role in disseminating information that will raise awareness of the scientific work being undertaken both inside and outside the project.) +\par }{\lang2057 +\par +\par +\par +\par \page +\par }\pard\plain \s2\sb240\sa60\keepn\widctlpar\outlinelevel1\adjustright \b\i\f1\lang2057\cgrid {{\*\bkmkstart _Toc30245126}B.4.4 Consortium management activities{\*\bkmkend _Toc30245126} +\par }\pard\plain \widctlpar\adjustright \lang1036\cgrid {\i\fs20\lang2057 (Describe each of these components, identify who will carry out each. Show the relevance and contribution of each to the project management plans described in section B.6 below.) +\par }{\lang2057 +\par +\par +\par +\par \page +\par }\pard\plain \s1\qj\sb240\sa60\keepn\widctlpar\outlinelevel0\adjustright \b\fs28\lang2057\kerning28\cgrid {{\*\bkmkstart _Toc30245127}B.5 Description of the consortium{\*\bkmkend _Toc30245127} +\par }\pard\plain \widctlpar\adjustright \lang1036\cgrid {\lang2057 Recommended length \endash five pages}{\i\fs20\lang2057 +\par Describe the participants in the proposed project, including the role(s) of any participants which are not yet identified, and the main tasks attributed to them. Describe how the parti +cipants collectively constitute a consortium capable of achieving the project objectives, and how they are suited and are committed to the tasks assigned to them. Show complementarity between participants, describe the industrial/commercial involvement fo +reseen to ensure exploitation of the results. Show how the opportunity of involving SMEs has been addressed.}{\lang2057 +\par +\par +\par +\par \page +\par }\pard\plain \s2\sb240\sa60\keepn\widctlpar\outlinelevel1\adjustright \b\i\f1\lang2057\cgrid {{\*\bkmkstart _Toc30245128}B. 5.1 New participants{\*\bkmkend _Toc30245128} +\par }\pard\plain \widctlpar\adjustright \lang1036\cgrid {\lang2057 Recommended length \endash two pages +\par }{\i\fs20\lang2057 (If there are as-yet-unidentified participants in the project, the expected competences, the role of the potential partners and their integration into the running project should be described) +\par }{\lang2057 +\par +\par +\par +\par }\pard\plain \s2\sb240\sa60\keepn\widctlpar\outlinelevel1\adjustright \b\i\f1\lang2057\cgrid {\page {\*\bkmkstart _Toc30245129}B.5.2 Sub-contracting{\*\bkmkend _Toc30245129} +\par }\pard\plain \widctlpar\adjustright \lang1036\cgrid {\lang2057 Recommended length \endash one page}{\i\fs20\lang2057 +\par (If any part of the work is foreseen to be sub-contracted by the participant responsible for it, describe the work involved and explain why a sub-contract approach has been chosen for it.) +\par }{\lang2057 +\par +\par +\par }\pard\plain \s2\sb240\sa60\keepn\widctlpar\outlinelevel1\adjustright \b\i\f1\lang2057\cgrid {\page {\*\bkmkstart _Toc30245130}B.5.3 Other countries{\*\bkmkend _Toc30245130} +\par }\pard\plain \widctlpar\adjustright \lang1036\cgrid {\lang2057 Recommended length \endash one page}{\i\fs20\lang2057 +\par (If one or more of the participants is based outside of the EU Member and Associated states, explain in terms of the project\rquote +s objectives why this/these participants have been included, describe the level of importance of their contribution to the project.) +\par }{\lang2057 +\par +\par +\par \page +\par }\pard\plain \s1\qj\sb240\sa60\keepn\widctlpar\outlinelevel0\adjustright \b\fs28\lang2057\kerning28\cgrid {{\*\bkmkstart _Toc30245131}B.6 Description of project management{\*\bkmkend _Toc30245131} +\par }\pard\plain \widctlpar\adjustright \lang1036\cgrid {\lang2057 Recommended length \endash five pages}{\i\fs20\lang2057 +\par (Show how the project organisational structure and decision-making mechanisms is matched to the complexity of the project and to the degree of integration + required; show how the project management will enable the project to achieve its goals, and that there is a plan for the management of knowledge, of intellectual property and of other innovation-related activities arising in the project. If the addition +of participants during the lifetime of the project is foreseen, show how the management structure will adapt for this.)}{\lang2057 +\par +\par +\par +\par +\par +\par \page +\par }\pard\plain \s1\qj\sb240\sa60\keepn\widctlpar\outlinelevel0\adjustright \b\fs28\lang2057\kerning28\cgrid {{\*\bkmkstart _Toc30245132}B.7 Project resources{\*\bkmkend _Toc30245132} +\par }\pard\plain \li720\widctlpar\adjustright \lang1036\cgrid {\b\lang2057 \sect }\sectd \lndscpsxn\pgwsxn16840\pghsxn11907\psz9\linex0\headery709\footery709\colsx709\endnhere\pgbrdropt32\sectdefaultcl {\header \pard\plain \s19\qj\widctlpar +\tqc\tx4153\tqr\tx8306\adjustright \fs20\lang2057\cgrid {Call identifier\tab \tab \tab \tab \tab \tab \tab \tab Integrated Project +\par \tab \tab \tab \tab \tab \tab \tab \tab [}{\f1 Proposal Acronym}{] +\par }}\pard\plain \s2\sb240\sa60\keepn\widctlpar\outlinelevel1\adjustright \b\i\f1\lang2057\cgrid {{\*\bkmkstart _Toc30245133}B.7.1 IP Project Effort Form{\*\bkmkend _Toc30245133} +\par }\pard\plain \li720\widctlpar\adjustright \lang1036\cgrid {\i\fs20\lang2057 (Complete an IP Project Effort Form (given below) to show the person-months per partner associated with each activity identified in the sections above.) +\par }\pard \qc\widctlpar\adjustright {\b\lang2057 IP Project Effort Form +\par Full duration of project +\par }{\lang2057 (insert person-months for activities in which partners are involved)}{\b\lang2057 +\par }\pard \widctlpar\adjustright {\fs20\lang2057 +\par }\trowd \trgaph108\trleft-108\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw15 \trbrdrv\brdrs\brdrw15 \clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr +\brdrs\brdrw15 \cltxlrtb \cellx2552\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx4253\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw10 \clbrdrr +\brdrs\brdrw15 \cltxlrtb \cellx5954\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx7655\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw10 \clbrdrr +\brdrs\brdrw15 \cltxlrtb \cellx9356\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx11057\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw10 \clbrdrr +\brdrs\brdrw15 \cltxlrtb \cellx12758\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb \cellx14459\pard \qc\widctlpar\intbl\adjustright {\fs20\lang2057 \cell [Partner 1 short name]\cell +[Partner 2 short name]\cell [Partner 3 short name ]\cell [Partner 4 short name]\cell [Partner 5 short name]\cell etc\cell TOTAL PARTNERS\cell }\pard \widctlpar\intbl\adjustright {\fs20\lang2057 \row }\pard \widctlpar\adjustright {\fs20\lang2057 +\par }\trowd \trgaph108\trleft-108\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw15 \trbrdrv\brdrs\brdrw15 \clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw15 \clbrdrr +\brdrs\brdrw15 \clshdng1500\cltxlrtb \cellx2552\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \clshdng1500\cltxlrtb \cellx4253\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw15 \clbrdrb +\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \clshdng1500\cltxlrtb \cellx5954\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \clshdng1500\cltxlrtb \cellx7655\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \clshdng1500\cltxlrtb \cellx9356\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \clshdng1500\cltxlrtb \cellx11057\clvertalt\clbrdrt +\brdrs\brdrw10 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \clshdng1500\cltxlrtb \cellx12758\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw10 \clshdng1500\cltxlrtb \cellx14459 +\pard \widctlpar\intbl\adjustright {\fs20\lang2057 RTD/Innovation activities\cell \cell \cell \cell \cell \cell \cell \cell }\pard \widctlpar\intbl\adjustright {\fs20\lang2057 \row }\trowd \trgaph108\trleft-108\trbrdrt\brdrs\brdrw10 \trbrdrl +\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw15 \trbrdrv\brdrs\brdrw15 \clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx2552\clvertalt\clbrdrt +\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx4253\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx5954\clvertalt\clbrdrt +\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx7655\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx9356\clvertalt\clbrdrt +\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx11057\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx12758\clvertalt\clbrdrt +\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw10 \cltxlrtb \cellx14459\pard \widctlpar\intbl\adjustright {\fs20\lang2057 [Activity name]\cell \cell \cell \cell \cell \cell \cell \cell }\pard \widctlpar\intbl\adjustright +{\fs20\lang2057 \row }\pard \widctlpar\intbl\adjustright {\fs20\lang2057 [Activity name]\cell \cell \cell \cell \cell \cell \cell \cell }\pard \widctlpar\intbl\adjustright {\fs20\lang2057 \row }\pard \widctlpar\intbl\adjustright {\fs20\lang2057 +[Activity name]\cell \cell \cell \cell \cell \cell \cell \cell }\pard \widctlpar\intbl\adjustright {\fs20\lang2057 \row }\pard \widctlpar\intbl\adjustright {\fs20\lang2057 Etc\cell \cell \cell \cell \cell \cell \cell \cell }\pard +\widctlpar\intbl\adjustright {\fs20\lang2057 \row }\trowd \trgaph108\trleft-108\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw15 \trbrdrv\brdrs\brdrw15 \clvertalt\clbrdrt\brdrs\brdrw15 +\clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx2552\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx4253\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx5954\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx7655\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx9356\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx11057\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx12758\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb \cellx14459\pard \widctlpar\intbl\adjustright { +\fs20\lang2057 Total RTD/Innovation\cell \cell \cell \cell \cell \cell \cell \cell }\pard \widctlpar\intbl\adjustright {\fs20\lang2057 \row }\pard \widctlpar\adjustright {\fs20\lang2057 +\par }\trowd \trgaph108\trleft-108\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw15 \trbrdrv\brdrs\brdrw15 \clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw15 \clbrdrr +\brdrs\brdrw15 \clshdng1500\cltxlrtb \cellx2552\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \clshdng1500\cltxlrtb \cellx4253\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw15 \clbrdrb +\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \clshdng1500\cltxlrtb \cellx5954\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \clshdng1500\cltxlrtb \cellx7655\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \clshdng1500\cltxlrtb \cellx9356\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \clshdng1500\cltxlrtb \cellx11057\clvertalt\clbrdrt +\brdrs\brdrw10 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \clshdng1500\cltxlrtb \cellx12758\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw10 \clshdng1500\cltxlrtb \cellx14459 +\pard \widctlpar\intbl\adjustright {\fs20\lang2057 Demonstration activities\cell \cell \cell \cell \cell \cell \cell \cell }\pard \widctlpar\intbl\adjustright {\fs20\lang2057 \row }\trowd \trgaph108\trleft-108\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 +\trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw15 \trbrdrv\brdrs\brdrw15 \clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx2552\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx4253\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx5954\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx7655\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx9356\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx11057\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx12758\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw10 \cltxlrtb \cellx14459\pard \widctlpar\intbl\adjustright {\fs20\lang2057 [Activity name]\cell \cell \cell \cell \cell \cell \cell \cell }\pard \widctlpar\intbl\adjustright {\fs20\lang2057 \row +}\pard \widctlpar\intbl\adjustright {\fs20\lang2057 [Activity name]\cell \cell \cell \cell \cell \cell \cell \cell }\pard \widctlpar\intbl\adjustright {\fs20\lang2057 \row }\pard \widctlpar\intbl\adjustright {\fs20\lang2057 [Activity name]\cell \cell +\cell \cell \cell \cell \cell \cell }\pard \widctlpar\intbl\adjustright {\fs20\lang2057 \row }\pard \widctlpar\intbl\adjustright {\fs20\lang2057 Etc\cell \cell \cell \cell \cell \cell \cell \cell }\pard \widctlpar\intbl\adjustright {\fs20\lang2057 \row +}\trowd \trgaph108\trleft-108\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw15 \trbrdrv\brdrs\brdrw15 \clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr +\brdrs\brdrw15 \cltxlrtb \cellx2552\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx4253\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw10 \clbrdrr +\brdrs\brdrw15 \cltxlrtb \cellx5954\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx7655\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw10 \clbrdrr +\brdrs\brdrw15 \cltxlrtb \cellx9356\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx11057\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw10 \clbrdrr +\brdrs\brdrw15 \cltxlrtb \cellx12758\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb \cellx14459\pard \widctlpar\intbl\adjustright {\fs20\lang2057 Total demonstration\cell \cell \cell \cell +\cell \cell \cell \cell }\pard \widctlpar\intbl\adjustright {\fs20\lang2057 \row }\pard \widctlpar\adjustright {\fs20\lang2057 +\par }\trowd \trgaph108\trleft-108\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw15 \trbrdrv\brdrs\brdrw15 \clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw15 \clbrdrr +\brdrs\brdrw15 \clshdng1500\cltxlrtb \cellx2552\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \clshdng1500\cltxlrtb \cellx4253\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw15 \clbrdrb +\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \clshdng1500\cltxlrtb \cellx5954\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \clshdng1500\cltxlrtb \cellx7655\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \clshdng1500\cltxlrtb \cellx9356\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \clshdng1500\cltxlrtb \cellx11057\clvertalt\clbrdrt +\brdrs\brdrw10 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \clshdng1500\cltxlrtb \cellx12758\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw10 \clshdng1500\cltxlrtb \cellx14459 +\pard \widctlpar\intbl\adjustright {\fs20\lang2057 Training activities\cell \cell \cell \cell \cell \cell \cell \cell }\pard \widctlpar\intbl\adjustright {\fs20\lang2057 \row }\trowd \trgaph108\trleft-108\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 +\trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw15 \trbrdrv\brdrs\brdrw15 \clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx2552\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx4253\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx5954\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx7655\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx9356\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx11057\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx12758\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw10 \cltxlrtb \cellx14459\pard \widctlpar\intbl\adjustright {\fs20\lang2057 [Activity name]\cell \cell \cell \cell \cell \cell \cell \cell }\pard \widctlpar\intbl\adjustright {\fs20\lang2057 \row +}\pard \widctlpar\intbl\adjustright {\fs20\lang2057 [Activity name]\cell \cell \cell \cell \cell \cell \cell \cell }\pard \widctlpar\intbl\adjustright {\fs20\lang2057 \row }\pard \widctlpar\intbl\adjustright {\fs20\lang2057 Etc\cell \cell \cell \cell +\cell \cell \cell \cell }\pard \widctlpar\intbl\adjustright {\fs20\lang2057 \row }\trowd \trgaph108\trleft-108\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw15 \trbrdrv\brdrs\brdrw15 +\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx2552\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx4253\clvertalt +\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx5954\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx7655\clvertalt\clbrdrt +\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx9356\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx11057\clvertalt\clbrdrt +\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx12758\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb \cellx14459\pard +\widctlpar\intbl\adjustright {\fs20\lang2057 Total training\cell \cell \cell \cell \cell \cell \cell \cell }\pard \widctlpar\intbl\adjustright {\fs20\lang2057 \row }\pard \widctlpar\adjustright {\fs20\lang2057 +\par }\trowd \trgaph108\trleft-108\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw15 \trbrdrv\brdrs\brdrw15 \clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw15 \clbrdrr +\brdrs\brdrw15 \clshdng1500\cltxlrtb \cellx2552\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \clshdng1500\cltxlrtb \cellx4253\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw15 \clbrdrb +\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \clshdng1500\cltxlrtb \cellx5954\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \clshdng1500\cltxlrtb \cellx7655\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \clshdng1500\cltxlrtb \cellx9356\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \clshdng1500\cltxlrtb \cellx11057\clvertalt\clbrdrt +\brdrs\brdrw10 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \clshdng1500\cltxlrtb \cellx12758\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw10 \clshdng1500\cltxlrtb \cellx14459 +\pard \widctlpar\intbl\adjustright {\fs20\lang2057 Consortium management activities\cell \cell \cell \cell \cell \cell \cell \cell }\pard \widctlpar\intbl\adjustright {\fs20\lang2057 \row }\trowd \trgaph108\trleft-108\trbrdrt\brdrs\brdrw10 \trbrdrl +\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw15 \trbrdrv\brdrs\brdrw15 \clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx2552\clvertalt\clbrdrt +\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx4253\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx5954\clvertalt\clbrdrt +\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx7655\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx9356\clvertalt\clbrdrt +\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx11057\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx12758\clvertalt\clbrdrt +\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw10 \cltxlrtb \cellx14459\pard \widctlpar\intbl\adjustright {\fs20\lang2057 [Activity name]\cell \cell \cell \cell \cell \cell \cell \cell }\pard \widctlpar\intbl\adjustright +{\fs20\lang2057 \row }\pard \widctlpar\intbl\adjustright {\fs20\lang2057 [Activity name]\cell \cell \cell \cell \cell \cell \cell \cell }\pard \widctlpar\intbl\adjustright {\fs20\lang2057 \row }\pard \widctlpar\intbl\adjustright {\fs20\lang2057 Etc\cell +\cell \cell \cell \cell \cell \cell \cell }\pard \widctlpar\intbl\adjustright {\fs20\lang2057 \row }\trowd \trgaph108\trleft-108\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw15 \trbrdrv +\brdrs\brdrw15 \clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx2552\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw15 \cltxlrtb +\cellx4253\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx5954\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx7655 +\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx9356\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx11057\clvertalt +\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx12758\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb \cellx14459\pard +\widctlpar\intbl\adjustright {\fs20\lang2057 Total consortium management\cell \cell \cell \cell \cell \cell \cell \cell }\pard \widctlpar\intbl\adjustright {\fs20\lang2057 \row }\pard \widctlpar\adjustright {\fs20\lang2057 +\par }\trowd \trgaph108\trleft-108\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw15 \trbrdrv\brdrs\brdrw15 \clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr +\brdrs\brdrw15 \cltxlrtb \cellx2552\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx4253\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw10 \clbrdrr +\brdrs\brdrw15 \cltxlrtb \cellx5954\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx7655\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw10 \clbrdrr +\brdrs\brdrw15 \cltxlrtb \cellx9356\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx11057\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw10 \clbrdrr +\brdrs\brdrw15 \cltxlrtb \cellx12758\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb \cellx14459\pard \widctlpar\intbl\adjustright {\fs20\lang2057 TOTAL ACTIVITIES\cell \cell \cell \cell +\cell \cell \cell \cell }\pard \widctlpar\intbl\adjustright {\fs20\lang2057 \row }\pard \li720\widctlpar\adjustright {\b\lang2057 \sect }\sectd +\pgwsxn11906\pghsxn16838\marglsxn1800\margrsxn1800\margtsxn1440\margbsxn1440\linex0\headery709\footery709\colsx709\endnhere\sectdefaultcl {\header \pard\plain \s19\qj\widctlpar\tqc\tx4153\tqr\tx8306\adjustright \fs20\lang2057\cgrid {Call identifier\tab +\tab Integrated Project +\par \tab \tab [}{\f1 Proposal Acronym}{] +\par +\par }}\pard\plain \li720\widctlpar\adjustright \lang1036\cgrid {\b\lang2057 +\par }\pard\plain \s2\sb240\sa60\keepn\widctlpar\outlinelevel1\adjustright \b\i\f1\lang2057\cgrid {{\*\bkmkstart _Toc30245134}B.7.2 IP management level justification of resources and budget{\*\bkmkend _Toc30245134} +\par }\pard\plain \widctlpar\adjustright \lang1036\cgrid {\lang2057 Recommended length \endash three pages}{\i\fs20\lang2057 +\par (Describe the resources needed to carry out the project in terms of resources needed to carry out the project (personnel, equipment, finance\'85 +). Demonstrate how the project will mobilise the critical mass of resources necessary for success; how the resources will be integrated to form a coherent project, and show that the overall financial plan for the project is adequate.)}{\lang2057 +\par +\par +\par +\par \page +\par }\pard\plain \s1\qj\sb240\sa60\keepn\widctlpar\outlinelevel0\adjustright \b\fs28\lang2057\kerning28\cgrid {{\*\bkmkstart _Toc30245135}B.8 Detailed implementation plan \endash first 18 months{\*\bkmkend _Toc30245135} +\par }\pard\plain \widctlpar\adjustright \lang1036\cgrid {\i\fs20\lang2057 (This s +ection describes in detail the work planned to achieve the objectives of the proposed project up to its first 18 months in operation. The recommended length, excluding the forms specified below, is up to 15 pages. An introduction should explain the struct +u +re of this 18-month detailed implementation plan and how the plan will lead the participants to achieve the objectives aimed for by that time. It should also identify significant risks, and contingency plans for these. The plan must be broken down into wo +rkpackages (WPs) which should follow the logical phases of the project during this period, and include management of the project and assessment of progress and results to this point. +\par +\par The number and structure of workpackages used must be appropriate to the +complexity of the work and the overall value of the proposed project. Each workpackage should be a major sub-division of the proposed project and should also have a verifiable end-point - normally a deliverable or an important milestone in the overall pro +ject. The planning should be sufficiently detailed to justify the proposed effort and allow progress monitoring by the Commission \endash the day-to-day management of the project by the consortium may require a more detailed plan) +\par }\pard \li720\widctlpar\adjustright {\lang2057 +\par }\pard \widctlpar\adjustright {\b\i\fs20\lang2057 +\par }{\lang2057 a) Detailed implementation plan introduction +\par }{\i\fs20\lang2057 (explaining the structure of this plan and the overall methodology used to achieve the objectives of the first 18 months. Include a version of the form A3 which is used in Part A of the proposal, but covering just the first 18 months) + +\par }{\lang2057 +\par +\par +\par +\par +\par \sect }\sectd \lndscpsxn\pgwsxn16840\pghsxn11907\marglsxn1440\margrsxn1440\margtsxn1797\margbsxn1797\linex0\headery709\footery709\colsx709\endnhere\sectdefaultcl {\header \pard\plain \s19\qj\widctlpar\tqc\tx4153\tqr\tx8306\adjustright +\fs20\lang2057\cgrid {Call identifier\tab \tab \tab \tab \tab \tab Integrated Project +\par \tab \tab \tab \tab \tab \tab [}{\f1 Proposal Acronym}{] +\par +\par }}\pard\plain \widctlpar\adjustright \lang1036\cgrid {\lang2057 +\par }{\i\f1\fs20\lang2057 +\par }\trowd \trgaph108\trleft-108\trkeep\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10 \clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 +\clcbpat1\cltxlrtb \cellx14601\pard \qc\widctlpar\intbl\adjustright {\i\f1\fs20\cf8\lang2057 Financial Information (Integrated Project, first 18 months)\cell }\pard \widctlpar\intbl\adjustright {\i\f1\fs20\cf8\lang2057 \row }\trowd +\trgaph108\trleft-108\trkeep\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10 \clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr +\brdrs\brdrw10 \clcbpat8\clshdng1000\cltxlrtb \cellx567\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clcbpat8\clshdng1000\cltxlrtb \cellx1418\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw30 \clbrdrb\brdrs\brdrw10 +\clbrdrr\brdrs\brdrw30 \clcbpat8\clshdng1000\cltxlrtb \cellx3828\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \clcbpat8\clshdng1000\cltxlrtb \cellx6379\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb +\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \clcbpat8\clshdng1000\cltxlrtb \cellx8931\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw45 \clcbpat8\clshdng1000\cltxlrtb \cellx11482\clvertalt\clbrdrt +\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \clcbpat8\clshdng1000\cltxlrtb \cellx14601\pard \widctlpar\intbl\adjustright {\i\f1\fs20\lang2057 \cell \cell RTD and innovation-related activities\cell Demonstration activities\cell +Training activities\cell Consortium management\cell Total\cell }\pard \widctlpar\intbl\adjustright {\i\f1\fs20\lang2057 \row }\trowd \trgaph108\trleft-108\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh +\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10 \clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \clcbpat8\clshdng1000\cltxlrtb \cellx567\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 +\clcbpat8\clshdng1000\cltxlrtb \cellx1418\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw30 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \clcbpat8\clshdng1000\cltxlrtb \cellx2552\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb +\brdrs\brdrw10 \clbrdrr\brdrs\brdrw30 \clcbpat8\clshdng1000\cltxlrtb \cellx3828\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \clcbpat8\clshdng1000\cltxlrtb \cellx5103\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 +\clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \clcbpat8\clshdng1000\cltxlrtb \cellx6379\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \clcbpat8\clshdng1000\cltxlrtb \cellx7655\clvertalt\clbrdrt +\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \clcbpat8\clshdng1000\cltxlrtb \cellx8931\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 +\clcbpat8\clshdng1000\cltxlrtb \cellx10206\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw45 \clcbpat8\clshdng1000\cltxlrtb \cellx11482\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr +\brdrs\brdrw10 \clcbpat8\clshdng1000\cltxlrtb \cellx13041\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \clcbpat8\clshdng1000\cltxlrtb \cellx14601\pard \widctlpar\intbl\adjustright { +\i\f1\fs16\lang2057 Participant n\'b0 \cell Cost model\cell Costs \cell Requested grant to the budget\cell Costs\cell Requested grant to the budget\cell Costs\cell Requested grant to the budge\cell Costs\cell Requested grant to the budget\cell Costs\cell +Requested grant to the budget\cell }\pard \widctlpar\intbl\adjustright {\i\f1\fs16\lang2057 \row }\trowd \trgaph108\trleft-108\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv +\brdrs\brdrw10 \clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \clcbpat8\clshdng1000\cltxlrtb \cellx567\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \cltxlrtb \cellx1418\clvertalt\clbrdrt +\brdrs\brdrw10 \clbrdrl\brdrs\brdrw30 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb \cellx2552\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw30 \cltxlrtb \cellx3828\clvertalt\clbrdrt +\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb \cellx5103\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb \cellx6379\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl +\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb \cellx7655\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb \cellx8931\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl +\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb \cellx10206\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw45 \cltxlrtb \cellx11482\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrb +\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb \cellx13041\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb \cellx14601\pard \qc\widctlpar\intbl\adjustright {\f1\fs22\lang2057 1\cell }\pard +\widctlpar\intbl\adjustright {\f1\fs22\lang2057 \cell \cell \cell \cell \cell \cell \cell \cell \cell \cell \cell }\pard \widctlpar\intbl\adjustright {\f1\fs22\lang2057 \row }\trowd \trgaph108\trleft-108\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 +\trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10 \clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb \cellx567\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl +\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \cltxlrtb \cellx1418\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw30 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb \cellx2552\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb +\brdrs\brdrw10 \clbrdrr\brdrs\brdrw30 \cltxlrtb \cellx3828\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb \cellx5103\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr +\brdrs\brdrw10 \cltxlrtb \cellx6379\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb \cellx7655\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr +\brdrs\brdrw10 \cltxlrtb \cellx8931\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb \cellx10206\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr +\brdrs\brdrw45 \cltxlrtb \cellx11482\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb \cellx13041\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb +\cellx14601\pard \qc\widctlpar\intbl\adjustright {\f1\fs22\lang2057 \cell }\pard \widctlpar\intbl\adjustright {\f1\fs22\lang2057 \cell \cell \cell \cell \cell \cell \cell \cell \cell \cell \cell }\pard \widctlpar\intbl\adjustright {\f1\fs22\lang2057 \row +}\pard \qc\widctlpar\intbl\adjustright {\f1\fs22\lang2057 \cell }\pard \widctlpar\intbl\adjustright {\f1\fs22\lang2057 \cell \cell \cell \cell \cell \cell \cell \cell \cell \cell \cell }\pard \widctlpar\intbl\adjustright {\f1\fs22\lang2057 \row }\pard +\qc\widctlpar\intbl\adjustright {\f1\fs22\lang2057 \cell }\pard \widctlpar\intbl\adjustright {\f1\fs22\lang2057 \cell \cell \cell \cell \cell \cell \cell \cell \cell \cell \cell }\pard \widctlpar\intbl\adjustright {\f1\fs22\lang2057 \row }\pard +\qc\widctlpar\intbl\adjustright {\f1\fs22\lang2057 \cell }\pard \widctlpar\intbl\adjustright {\f1\fs22\lang2057 \cell \cell \cell \cell \cell \cell \cell \cell \cell \cell \cell }\pard \widctlpar\intbl\adjustright {\f1\fs22\lang2057 \row }\pard +\qc\widctlpar\intbl\adjustright {\f1\fs22\lang2057 \cell }\pard \widctlpar\intbl\adjustright {\f1\fs22\lang2057 \cell \cell \cell \cell \cell \cell \cell \cell \cell \cell \cell }\pard \widctlpar\intbl\adjustright {\f1\fs22\lang2057 \row }\pard +\qc\widctlpar\intbl\adjustright {\f1\fs22\lang2057 \cell }\pard \widctlpar\intbl\adjustright {\f1\fs22\lang2057 \cell \cell \cell \cell \cell \cell \cell \cell \cell \cell \cell }\pard \widctlpar\intbl\adjustright {\f1\fs22\lang2057 \row }\pard +\qc\widctlpar\intbl\adjustright {\f1\fs22\lang2057 \cell }\pard \widctlpar\intbl\adjustright {\f1\fs22\lang2057 \cell \cell \cell \cell \cell \cell \cell \cell \cell \cell \cell }\pard \widctlpar\intbl\adjustright {\f1\fs22\lang2057 \row }\pard +\qc\widctlpar\intbl\adjustright {\f1\fs22\lang2057 \cell }\pard \widctlpar\intbl\adjustright {\f1\fs22\lang2057 \cell \cell \cell \cell \cell \cell \cell \cell \cell \cell \cell }\pard \widctlpar\intbl\adjustright {\f1\fs22\lang2057 \row }\pard +\qc\widctlpar\intbl\adjustright {\f1\fs22\lang2057 \cell }\pard \widctlpar\intbl\adjustright {\f1\fs22\lang2057 \cell \cell \cell \cell \cell \cell \cell \cell \cell \cell \cell }\pard \widctlpar\intbl\adjustright {\f1\fs22\lang2057 \row }\pard +\qc\widctlpar\intbl\adjustright {\f1\fs22\lang2057 \cell }\pard \widctlpar\intbl\adjustright {\f1\fs22\lang2057 \cell \cell \cell \cell \cell \cell \cell \cell \cell \cell \cell }\pard \widctlpar\intbl\adjustright {\f1\fs22\lang2057 \row }\pard +\qc\widctlpar\intbl\adjustright {\f1\fs22\lang2057 \cell }\pard \widctlpar\intbl\adjustright {\f1\fs22\lang2057 \cell \cell \cell \cell \cell \cell \cell \cell \cell \cell \cell }\pard \widctlpar\intbl\adjustright {\f1\fs22\lang2057 \row }\pard +\qc\widctlpar\intbl\adjustright {\f1\fs22\lang2057 \cell }\pard \widctlpar\intbl\adjustright {\f1\fs22\lang2057 \cell \cell \cell \cell \cell \cell \cell \cell \cell \cell \cell }\pard \widctlpar\intbl\adjustright {\f1\fs22\lang2057 \row }\pard +\qc\widctlpar\intbl\adjustright {\f1\fs22\lang2057 \cell }\pard \widctlpar\intbl\adjustright {\f1\fs22\lang2057 \cell \cell \cell \cell \cell \cell \cell \cell \cell \cell \cell }\pard \widctlpar\intbl\adjustright {\f1\fs22\lang2057 \row }\pard +\qc\widctlpar\intbl\adjustright {\f1\fs22\lang2057 \cell }\pard \widctlpar\intbl\adjustright {\f1\fs22\lang2057 \cell \cell \cell \cell \cell \cell \cell \cell \cell \cell \cell }\pard \widctlpar\intbl\adjustright {\f1\fs22\lang2057 \row }\trowd +\trgaph108\trleft-108\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10 \clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb +\cellx567\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \cltxlrtb \cellx1418\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw30 \clbrdrr\brdrs\brdrw10 \cltxlrtb \cellx2552\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrr +\brdrs\brdrw30 \cltxlrtb \cellx3828\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb \cellx5103\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb \cellx6379\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl +\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb \cellx7655\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb \cellx8931\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb +\cellx10206\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrr\brdrs\brdrw45 \cltxlrtb \cellx11482\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb \cellx13041\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrr +\brdrs\brdrw10 \cltxlrtb \cellx14601\pard \widctlpar\intbl\adjustright {\f1\fs22\lang2057 \cell \cell \cell \cell \cell \cell \cell \cell \cell \cell \cell \cell }\pard \widctlpar\intbl\adjustright {\f1\fs22\lang2057 \row }\trowd +\trgaph108\trleft-108\trkeep\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10 \clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr +\brdrs\brdrw10 \clcbpat8\clshdng1000\cltxlrtb \cellx1418\clvertalt\clbrdrt\brdrs\brdrw45 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx2552\clvertalt\clbrdrt\brdrs\brdrw45 \clbrdrl\brdrs\brdrw15 \clbrdrb +\brdrs\brdrw10 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx3828\clvertalt\clbrdrt\brdrs\brdrw45 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx5103\clvertalt\clbrdrt\brdrs\brdrw45 \clbrdrl\brdrs\brdrw15 \clbrdrb +\brdrs\brdrw10 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx6379\clvertalt\clbrdrt\brdrs\brdrw45 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx7655\clvertalt\clbrdrt\brdrs\brdrw45 \clbrdrl\brdrs\brdrw15 \clbrdrb +\brdrs\brdrw10 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx8931\clvertalt\clbrdrt\brdrs\brdrw45 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx10206\clvertalt\clbrdrt\brdrs\brdrw45 \clbrdrl\brdrs\brdrw15 \clbrdrb +\brdrs\brdrw10 \clbrdrr\brdrs\brdrw45 \cltxlrtb \cellx11482\clvertalt\clbrdrt\brdrs\brdrw45 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx13041\clvertalt\clbrdrt\brdrs\brdrw45 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw10 \clbrdrr +\brdrs\brdrw10 \cltxlrtb \cellx14601\pard \qr\widctlpar\intbl\adjustright {\f1\fs20\lang2057 (Sub)-total\cell }\pard \widctlpar\intbl\adjustright {\f1\fs22\lang2057 \cell \cell \cell \cell \cell \cell \cell \cell \cell \cell }\pard +\widctlpar\intbl\adjustright {\f1\fs22\lang2057 \row }\pard \widctlpar\adjustright {\lang2057 +\par +\par +\par \sect }\sectd \pgwsxn11906\pghsxn16838\marglsxn1800\margrsxn1800\margtsxn1440\margbsxn1440\linex0\headery709\footery709\colsx709\endnhere\sectdefaultcl {\header \pard\plain \s19\qj\widctlpar\tqc\tx4153\tqr\tx8306\adjustright \fs20\lang2057\cgrid { +\par }}{\footer \pard\plain \s21\qj\widctlpar\tqc\tx4153\tqr\tx8306\adjustright \fs22\lang2057\cgrid { +\par }}\pard\plain \widctlpar\adjustright \lang1036\cgrid {\lang2057 +\par }\pard \qr\ri-108\widctlpar\adjustright {\b\i\fs20\lang2057 +\par }\pard \widctlpar\adjustright {\lang2057 b) Work planning, showing the timing of the different WPs and their tasks}{\i\fs20\lang2057 +\par (Insert Gantt chart or similar) +\par }{\lang2057 +\par +\par +\par +\par }\pard \ri-108\widctlpar\adjustright {\lang2057 \page +\par }\pard \widctlpar\adjustright {\lang2057 c) Graphical presentation of the components, showing their interdependencies}{\i\fs20\lang2057 +\par (Insert Pert diagram or similar) +\par }\pard \ri-108\widctlpar\adjustright {\fs20\lang2057 +\par +\par +\par +\par \page +\par }\pard \widctlpar\adjustright {\lang2057 d) Detailed work description broken down into workpackages: +\par }\pard \ri-108\widctlpar\adjustright {\lang2057 +\par }\pard \widctlpar\adjustright {\i\fs20\lang2057 (Workpackage list, use Workpackage list form below) +\par }\pard \ri-108\widctlpar\adjustright {\lang2057 +\par }\pard \qc\widctlpar\adjustright {\b\fs28\lang2057 Workpackage list (18 month plan) +\par }\pard \widctlpar\adjustright {\lang2057 +\par }\trowd \trgaph108\trleft-108\trkeep \clvertalt\clbrdrt\brdrs\brdrw45 \clbrdrl\brdrs\brdrw45 \clbrdrb\brdrs\brdrw45 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx1042\clvertalt\clbrdrt\brdrs\brdrw45 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw45 \clbrdrr +\brdrs\brdrw15 \cltxlrtb \cellx4253\clvertalt\clbrdrt\brdrs\brdrw45 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw45 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx5357\clvertalt\clbrdrt\brdrs\brdrw45 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw45 \clbrdrr +\brdrs\brdrw15 \cltxlrtb \cellx6379\clvertalt\clbrdrt\brdrs\brdrw45 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw45 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx7341\clvertalt\clbrdrt\brdrs\brdrw45 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw45 \clbrdrr +\brdrs\brdrw15 \cltxlrtb \cellx8226\clvertalt\clbrdrt\brdrs\brdrw45 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw45 \clbrdrr\brdrs\brdrw45 \cltxlrtb \cellx9076\pard\plain \s17\qc\sb120\sa120\widctlpar\intbl\adjustright \fs32\lang2057\cgrid {\b\fs18 +Work-package\line No}{\cs16\b\fs18\super \chftn {\footnote \pard\plain \s18\qj\widctlpar\adjustright \fs20\lang2057\cgrid {\cs16\super \chftn }{ Workpackage number: WP 1 \endash WP n.}}}{\b\fs18 \cell Workpackage title\cell Lead \line contractor\line No} +{\cs16\b\fs18\super \chftn {\footnote \pard\plain \s18\qj\widctlpar\adjustright \fs20\lang2057\cgrid {\cs16\super \chftn }{ Number of the contractor leading the work in this workpackage.}}}{\b\fs18 \cell Person-months}{\cs16\b\fs18\super \chftn +{\footnote \pard\plain \s18\qj\widctlpar\adjustright \fs20\lang2057\cgrid {\cs16\super \chftn }{ The total number of person-months allocated to each workpackage.}}}{\b\fs18 \cell Start\line month}{\cs16\b\fs18\super \chftn {\footnote \pard\plain +\s18\qj\widctlpar\adjustright \fs20\lang2057\cgrid {\cs16\super \chftn }{ Relative start date for the work in the specific workpackages, month 0 marking the start of the project, and all other start dates being relative to this start date.}}}{\b\fs18 +\cell End\line month}{\cs16\b\fs18\super \chftn {\footnote \pard\plain \s18\qj\widctlpar\adjustright \fs20\lang2057\cgrid {\cs16\super \chftn }{ Relative end date, month 0 marking the start of the project, and all ends da +tes being relative to this start date.}}}{\b\fs18 \cell Deliv-erable\line No}{\cs16\b\fs18\super \chftn {\footnote \pard\plain \s18\qj\widctlpar\adjustright \fs20\lang2057\cgrid {\cs16\super \chftn }{ + Deliverable number: Number for the deliverable(s)/result(s) mentioned in the workpackage: D1 - Dn.}}}{\b\fs18 \cell }\pard\plain \widctlpar\intbl\adjustright \lang1036\cgrid {\b\fs18\lang2057 \row }\trowd \trgaph108\trleft-108\trkeep \clvertalt\clbrdrl +\brdrs\brdrw45 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx1042\clvertalt\clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx4253\clvertalt\clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr +\brdrs\brdrw15 \cltxlrtb \cellx5357\clvertalt\clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx6379\clvertalt\clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx7341\clvertalt\clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx8226\clvertalt\clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw45 \cltxlrtb \cellx9076\pard\plain \s17\qj\sb120\sa120\widctlpar\intbl\adjustright +\fs32\lang2057\cgrid {\cell \cell \cell \cell \cell \cell \cell }\pard\plain \widctlpar\intbl\adjustright \lang1036\cgrid {\lang2057 \row }\trowd \trgaph108\trleft-108\trkeep \clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw45 \clbrdrb\brdrs\brdrw15 +\clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx1042\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx4253\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr +\brdrs\brdrw15 \cltxlrtb \cellx5357\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx6379\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr +\brdrs\brdrw15 \cltxlrtb \cellx7341\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx8226\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr +\brdrs\brdrw45 \cltxlrtb \cellx9076\pard\plain \s17\qj\sb120\sa120\widctlpar\intbl\adjustright \fs32\lang2057\cgrid {\cell \cell \cell \cell \cell \cell \cell }\pard\plain \widctlpar\intbl\adjustright \lang1036\cgrid {\lang2057 \row }\pard\plain +\s17\qj\sb120\sa120\widctlpar\intbl\adjustright \fs32\lang2057\cgrid {\cell \cell \cell \cell \cell \cell \cell }\pard\plain \widctlpar\intbl\adjustright \lang1036\cgrid {\lang2057 \row }\pard\plain \s17\qj\sb120\sa120\widctlpar\intbl\adjustright +\fs32\lang2057\cgrid {\cell \cell \cell \cell \cell \cell \cell }\pard\plain \widctlpar\intbl\adjustright \lang1036\cgrid {\lang2057 \row }\pard\plain \s17\qj\sb120\sa120\widctlpar\intbl\adjustright \fs32\lang2057\cgrid {\cell \cell \cell \cell \cell +\cell \cell }\pard\plain \widctlpar\intbl\adjustright \lang1036\cgrid {\lang2057 \row }\pard\plain \s17\qj\sb120\sa120\widctlpar\intbl\adjustright \fs32\lang2057\cgrid {\cell \cell \cell \cell \cell \cell \cell }\pard\plain \widctlpar\intbl\adjustright +\lang1036\cgrid {\lang2057 \row }\pard\plain \s17\qj\sb120\sa120\widctlpar\intbl\adjustright \fs32\lang2057\cgrid {\cell \cell \cell \cell \cell \cell \cell }\pard\plain \widctlpar\intbl\adjustright \lang1036\cgrid {\lang2057 \row }\pard\plain +\s17\qj\sb120\sa120\widctlpar\intbl\adjustright \fs32\lang2057\cgrid {\cell \cell \cell \cell \cell \cell \cell }\pard\plain \widctlpar\intbl\adjustright \lang1036\cgrid {\lang2057 \row }\pard\plain \s17\qj\sb120\sa120\widctlpar\intbl\adjustright +\fs32\lang2057\cgrid {\cell \cell \cell \cell \cell \cell \cell }\pard\plain \widctlpar\intbl\adjustright \lang1036\cgrid {\lang2057 \row }\trowd \trgaph108\trleft-108\trkeep \clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw45 \clbrdrr\brdrs\brdrw15 +\cltxlrtb \cellx1042\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx4253\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx5357\clvertalt\clbrdrt\brdrs\brdrw15 +\clbrdrl\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx6379\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx7341\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb +\cellx8226\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrr\brdrs\brdrw45 \cltxlrtb \cellx9076\pard\plain \s17\qj\sb120\sa120\widctlpar\intbl\adjustright \fs32\lang2057\cgrid {\cell \cell \cell \cell \cell \cell \cell }\pard\plain +\widctlpar\intbl\adjustright \lang1036\cgrid {\lang2057 \row }\trowd \trgaph108\trleft-108\trkeep \clvertalt\clbrdrt\brdrs\brdrw45 \clbrdrl\brdrs\brdrw45 \clbrdrb\brdrs\brdrw45 \clbrdrr\brdrs\brdrw15 \clcbpat8\clshdng3750\cltxlrtb \cellx1042\clvertalt +\clbrdrt\brdrs\brdrw45 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw45 \cltxlrtb \cellx4253\clvertalt\clbrdrt\brdrs\brdrw45 \clbrdrl\brdrs\brdrw45 \clbrdrb\brdrs\brdrw45 \clbrdrr\brdrs\brdrw15 \clcbpat8\clshdng3750\cltxlrtb \cellx5357\clvertalt\clbrdrt +\brdrs\brdrw45 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw45 \cltxlrtb \cellx6379\clvertalt\clbrdrt\brdrs\brdrw45 \clbrdrl\brdrs\brdrw45 \clbrdrb\brdrs\brdrw45 \clbrdrr\brdrs\brdrw15 \clcbpat8\clshdng3750\cltxlrtb \cellx7341\clvertalt\clbrdrt +\brdrs\brdrw45 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw45 \clbrdrr\brdrs\brdrw15 \clcbpat8\clshdng3750\cltxlrtb \cellx8226\clvertalt\clbrdrt\brdrs\brdrw45 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw45 \clbrdrr\brdrs\brdrw15 +\clcbpat8\clshdng3750\cltxlrtb \cellx9076\pard\plain \s17\qj\sb120\sa120\widctlpar\intbl\adjustright \fs32\lang2057\cgrid {\cell TOTAL\cell \cell \cell }\pard \s17\qj\ri-324\sb120\sa120\widctlpar\intbl\adjustright {\cell \cell \cell }\pard\plain +\widctlpar\intbl\adjustright \lang1036\cgrid {\lang2057 \row }\pard \sb60\sa60\widctlpar\adjustright {\lang2057 +\par \page +\par }\pard \widctlpar\adjustright {\i\fs20\lang2057 (Deliverables list, use Deliverables list form below)}{\lang2057 +\par }\pard \ri-108\widctlpar\adjustright {\lang2057 +\par }\pard \qc\sb60\sa60\widctlpar\adjustright {\b\fs28\lang2057 Deliverables list (18 month plan)}{\lang2057 +\par }\pard \sb60\sa60\widctlpar\adjustright {\lang2057 +\par }\trowd \trgaph108\trleft-108\trkeep \clvertalt\clbrdrt\brdrs\brdrw45 \clbrdrl\brdrs\brdrw45 \clbrdrb\brdrs\brdrw45 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx1305\clvertalt\clbrdrt\brdrs\brdrw45 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw45 \clbrdrr +\brdrs\brdrw15 \cltxlrtb \cellx5954\clvertalt\clbrdrt\brdrs\brdrw45 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw45 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx7088\clvertalt\clbrdrt\brdrs\brdrw45 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw45 \clbrdrr +\brdrs\brdrw15 \cltxlrtb \cellx8080\clvertalt\clbrdrt\brdrs\brdrw45 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw45 \clbrdrr\brdrs\brdrw45 \cltxlrtb \cellx9498\pard\plain \s17\qc\sb120\sa120\widctlpar\intbl\adjustright \fs32\lang2057\cgrid {\b\fs18 +Deliverable\line No}{\cs16\b\fs18\super \chftn {\footnote \pard\plain \s18\qj\widctlpar\adjustright \fs20\lang2057\cgrid {\cs16\super \chftn }{ Deliverable numbers in order of delivery dates: D1 \endash Dn}}}{\b\fs18 \cell Deliverable title\cell +Delivery \line date\line }{\cs16\b\fs18\super \chftn {\footnote \pard\plain \s18\qj\widctlpar\adjustright \fs20\lang2057\cgrid {\cs16\super \chftn }{ Month in which the deliverables will be available. Month + 0 marking the start of the project, and all delivery dates being relative to this start date.}}}{\b\fs18 \cell Nature\line \line }{\cs16\b\fs18\super \chftn {\footnote \pard\plain \s18\qj\widctlpar\adjustright \fs20\lang2057\cgrid {\cs16\super \chftn }{ + Please indicate the nature of the deliverable using one of the following codes: +\par \tab }{\b R}{ = Report +\par \tab }{\b P}{ = Prototype +\par \tab }{\b D}{ = Demonstrator +\par \tab }{\b O}{ = Other}}}{\b\fs18 \cell Dissemination\line level\line }{\cs16\b\fs18\super \chftn {\footnote \pard\plain \s18\qj\widctlpar\adjustright \fs20\lang2057\cgrid {\cs16\super \chftn }{ + Please indicate the dissemination level using one of the following codes: +\par \tab }{\b PU}{ = Public +\par \tab }{\b PP}{ = Restricted to other programme participants (including the Commission Services). +\par \tab }{\b RE}{ = Restricted to a group specified by the consortium (including the Commission Services). +\par \tab }{\b CO}{ = Confidential, only for members of the consortium (including the Commission Services).}}}{\b\fs18 \cell }\pard\plain \widctlpar\intbl\adjustright \lang1036\cgrid {\b\fs18\lang2057 \row }\trowd \trgaph108\trleft-108\trkeep \clvertalt +\clbrdrl\brdrs\brdrw45 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx1305\clvertalt\clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx5954\clvertalt\clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr +\brdrs\brdrw15 \cltxlrtb \cellx7088\clvertalt\clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx8080\clvertalt\clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw45 \cltxlrtb \cellx9498\pard\plain +\s17\qj\sb120\sa120\widctlpar\intbl\adjustright \fs32\lang2057\cgrid {\cell \cell \cell \cell \cell }\pard\plain \widctlpar\intbl\adjustright \lang1036\cgrid {\lang2057 \row }\trowd \trgaph108\trleft-108\trkeep \clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl +\brdrs\brdrw45 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx1305\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx5954\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx7088\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx8080\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw45 \cltxlrtb \cellx9498\pard\plain \s17\qj\sb120\sa120\widctlpar\intbl\adjustright \fs32\lang2057\cgrid {\cell \cell \cell \cell \cell }\pard\plain \widctlpar\intbl\adjustright \lang1036\cgrid { +\lang2057 \row }\pard\plain \s17\qj\sb120\sa120\widctlpar\intbl\adjustright \fs32\lang2057\cgrid {\cell \cell \cell \cell \cell }\pard\plain \widctlpar\intbl\adjustright \lang1036\cgrid {\lang2057 \row }\pard\plain +\s17\qj\sb120\sa120\widctlpar\intbl\adjustright \fs32\lang2057\cgrid {\cell \cell \cell \cell \cell }\pard\plain \widctlpar\intbl\adjustright \lang1036\cgrid {\lang2057 \row }\pard\plain \s17\qj\sb120\sa120\widctlpar\intbl\adjustright +\fs32\lang2057\cgrid {\cell \cell \cell \cell \cell }\pard\plain \widctlpar\intbl\adjustright \lang1036\cgrid {\lang2057 \row }\pard\plain \s17\qj\sb120\sa120\widctlpar\intbl\adjustright \fs32\lang2057\cgrid {\cell \cell \cell \cell \cell }\pard\plain +\widctlpar\intbl\adjustright \lang1036\cgrid {\lang2057 \row }\pard\plain \s17\qj\sb120\sa120\widctlpar\intbl\adjustright \fs32\lang2057\cgrid {\cell \cell \cell \cell \cell }\pard\plain \widctlpar\intbl\adjustright \lang1036\cgrid {\lang2057 \row +}\pard\plain \s17\qj\sb120\sa120\widctlpar\intbl\adjustright \fs32\lang2057\cgrid {\cell \cell \cell \cell \cell }\pard\plain \widctlpar\intbl\adjustright \lang1036\cgrid {\lang2057 \row }\pard\plain \s17\qj\sb120\sa120\widctlpar\intbl\adjustright +\fs32\lang2057\cgrid {\cell \cell \cell \cell \cell }\pard\plain \widctlpar\intbl\adjustright \lang1036\cgrid {\lang2057 \row }\trowd \trgaph108\trleft-108\trkeep \clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw45 \clbrdrb\brdrs\brdrw45 \clbrdrr +\brdrs\brdrw15 \cltxlrtb \cellx1305\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw45 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx5954\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw45 \clbrdrr +\brdrs\brdrw15 \cltxlrtb \cellx7088\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw45 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx8080\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw45 \clbrdrr +\brdrs\brdrw45 \cltxlrtb \cellx9498\pard\plain \s17\qj\sb120\sa120\widctlpar\intbl\adjustright \fs32\lang2057\cgrid {\cell \cell \cell \cell \cell }\pard\plain \widctlpar\intbl\adjustright \lang1036\cgrid {\lang2057 \row }\pard +\sb60\sa60\widctlpar\adjustright {\lang2057 +\par }\pard \ri-108\widctlpar\adjustright {\lang2057 \page }{\i\fs20\lang2057 (Description of }{\i\fs20\ul\lang2057 each}{\i\fs20\lang2057 workpackage, use Workpackage description form below, one per workpackage) +\par }\pard \widctlpar\adjustright {\b\lang2057 +\par }\pard \qc\sb60\sa60\widctlpar\adjustright {\b\fs28\lang2057 Workpackage description (18 month plan)}{\lang2057 +\par }\pard \sb60\sa60\widctlpar\adjustright {\lang2057 +\par }\trowd \trgaph108\trleft-108\trkeep\trbrdrt\brdrs\brdrw15\brdrcf1 \trbrdrl\brdrs\brdrw15\brdrcf1 \trbrdrb\brdrs\brdrw15\brdrcf1 \trbrdrr\brdrs\brdrw15\brdrcf1 \clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \cltxlrtb \cellx2552 +\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \cltxlrtb \cellx3828\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \cltxlrtb \cellx7537\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \cltxlrtb \cellx9072\pard \widctlpar\intbl\adjustright { +\b\lang2057 Workpackage number \cell }{\lang2057 \cell }{\b\lang2057 Start date or starting event:}{\lang2057 \cell \cell }\pard \widctlpar\intbl\adjustright {\lang2057 \row }\trowd \trgaph108\trleft-108\trkeep\trbrdrt\brdrs\brdrw15\brdrcf1 \trbrdrl +\brdrs\brdrw15\brdrcf1 \trbrdrb\brdrs\brdrw15\brdrcf1 \trbrdrr\brdrs\brdrw15\brdrcf1 \clvertalt\clbrdrl\brdrs\brdrw15\brdrcf1 \cltxlrtb \cellx3119\clvertalt\cltxlrtb \cellx3822\clvertalt\cltxlrtb \cellx4809\clvertalt\cltxlrtb \cellx5796 +\clvertalt\cltxlrtb \cellx6784\clvertalt\cltxlrtb \cellx7655\clvertalt\cltxlrtb \cellx8505\clvertalt\clbrdrr\brdrs\brdrw15\brdrcf1 \cltxlrtb \cellx9072\pard \widctlpar\intbl\adjustright {\b\lang2057 Participant id\cell }{\lang2057 \cell \cell \cell \cell +\cell \cell \cell }\pard \widctlpar\intbl\adjustright {\lang2057 \row }\trowd \trgaph108\trleft-108\trkeep\trbrdrt\brdrs\brdrw15\brdrcf1 \trbrdrl\brdrs\brdrw15\brdrcf1 \trbrdrb\brdrs\brdrw15\brdrcf1 \trbrdrr\brdrs\brdrw15\brdrcf1 \clvertalt\clbrdrl +\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \cltxlrtb \cellx3119\clvertalt\clbrdrb\brdrs\brdrw15\brdrcf1 \cltxlrtb \cellx3822\clvertalt\clbrdrb\brdrs\brdrw15\brdrcf1 \cltxlrtb \cellx4809\clvertalt\clbrdrb\brdrs\brdrw15\brdrcf1 \cltxlrtb +\cellx5796\clvertalt\clbrdrb\brdrs\brdrw15\brdrcf1 \cltxlrtb \cellx6784\clvertalt\clbrdrb\brdrs\brdrw15\brdrcf1 \cltxlrtb \cellx7655\clvertalt\clbrdrb\brdrs\brdrw15\brdrcf1 \cltxlrtb \cellx8505\clvertalt\clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr +\brdrs\brdrw15\brdrcf1 \cltxlrtb \cellx9072\pard \ri-817\widctlpar\intbl\adjustright {\b\lang2057 Person-months per participant:\cell }\pard \widctlpar\intbl\adjustright {\lang2057 \cell \cell \cell \cell \cell \cell \cell }\pard +\widctlpar\intbl\adjustright {\lang2057 \row }\pard \sb60\sa60\widctlpar\adjustright {\lang2057 +\par }\trowd \trgaph108\trleft-108\trbrdrt\brdrs\brdrw15\brdrcf1 \trbrdrl\brdrs\brdrw15\brdrcf1 \trbrdrb\brdrs\brdrw15\brdrcf1 \trbrdrr\brdrs\brdrw15\brdrcf1 \trbrdrh\brdrs\brdrw15\brdrcf1 \trbrdrv\brdrs\brdrw15\brdrcf1 \clvertalt\clbrdrt +\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \cltxlrtb \cellx9072\pard \sb60\sa60\widctlpar\intbl\adjustright {\b\lang2057 Objectives}{\lang2057 +\par +\par +\par +\par +\par \cell }\pard \widctlpar\intbl\adjustright {\lang2057 \row }\pard \sb60\sa60\widctlpar\adjustright {\lang2057 +\par }\pard \sb60\sa60\widctlpar\intbl\adjustright {\b\lang2057 Description of work}{\lang2057 +\par +\par +\par +\par \cell }\pard \widctlpar\intbl\adjustright {\lang2057 \row }\pard \sb60\sa60\widctlpar\adjustright {\lang2057 +\par }\pard \sb60\sa60\widctlpar\intbl\adjustright {\b\lang2057 Deliverables}{\lang2057 +\par +\par +\par +\par \cell }\pard \widctlpar\intbl\adjustright {\lang2057 \row }\pard \sb60\sa60\widctlpar\adjustright {\lang2057 +\par }\pard \sb60\sa60\widctlpar\intbl\adjustright {\b\lang2057 Milestones}{\cs16\b\lang2057\super \chftn {\footnote \pard\plain \s18\qj\widctlpar\adjustright \fs20\lang2057\cgrid {\cs16\super \chftn }{ + Milestones are control points at which decisions are needed; for example concerning which of several technologies will be adopted as the basis for the next phase of the project.}}}{\lang2057 }{\b\lang2057 and expected result }{\lang2057 +\par +\par +\par +\par +\par \cell }\pard \widctlpar\intbl\adjustright {\lang2057 \row }\pard \widctlpar\adjustright {\b\lang2057 +\par +\par }\pard\plain \s1\qj\sb240\sa60\keepn\widctlpar\outlinelevel0\adjustright \b\fs28\lang2057\kerning28\cgrid {{\*\bkmkstart _Toc30245136}B.9 Other issues{\*\bkmkend _Toc30245136} +\par }\pard\plain \widctlpar\adjustright \lang1036\cgrid {\lang2057 No recommended length \endash depends on the number of such other issues which the project involves}{\i\fs20\lang2057 +\par }\pard\plain \s2\sb240\sa60\keepn\widctlpar\outlinelevel1\adjustright \b\i\f1\lang2057\cgrid {B.9.1 Ethical issues +\par }\pard\plain \widctlpar\adjustright \lang1036\cgrid {\i\fs20\lang2057 (If there are ethical issues associated with the subject of the proposal, show they h +ave been adequately taken into account - indicate which national and international regulations are applicable and explain how they will be respected. Explore potential ethical aspects of the implementation of project results.}{\i\fs20\lang2057\cgrid0 + Include the Ethical issues form See Annex 3 of the Guide for Proposers for more information on ethical issues.)}{\cs16\i\fs20\lang2057\super }{\i\fs20\lang2057 +\par }{\lang2057 +\par +\par +\par +\par \page +\par }\pard \qc\widctlpar\outlinelevel0\adjustright {\b\fs28\lang2057 Ethical issues form +\par }\pard \widctlpar\outlinelevel0\adjustright {\b\lang2057 +\par +\par A. Proposers are requested to fill in the following table +\par }{\lang2057 +\par }\trowd \trgaph108\trleft-108\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10 \clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr +\brdrs\brdrw10 \cltxlrtb \cellx5103\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb \cellx6804\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr +\brdrs\brdrw10 \cltxlrtb \cellx8412\pard \widctlpar\intbl\adjustright {\b\lang2057 Does your proposed research raise sensitive ethical questions related to: \cell }\pard \qc\widctlpar\intbl\adjustright {\b\lang2057 YES\cell NO\cell }\pard +\widctlpar\intbl\adjustright {\b\lang2057 \row }\trowd \trgaph108\trrh565\trleft-108\trkeep\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10 \clvertalt\clbrdrt +\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb \cellx5103\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb \cellx6804\clvertalt\clbrdrt +\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb \cellx8412\pard\plain \s22\qj\sa240\widctlpar\intbl\adjustright \lang2057\cgrid {Human beings\cell }\pard\plain \widctlpar\intbl\adjustright \lang1036\cgrid { +\lang2057 \cell \cell }\pard \widctlpar\intbl\adjustright {\lang2057 \row }\trowd \trgaph108\trrh559\trleft-108\trkeep\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv +\brdrs\brdrw10 \clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb \cellx5103\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb +\cellx6804\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb \cellx8412\pard\plain \s22\qj\sa240\widctlpar\intbl\adjustright \lang2057\cgrid {Human biological samples \cell }\pard\plain +\widctlpar\intbl\adjustright \lang1036\cgrid {\lang2057 \cell \cell }\pard \widctlpar\intbl\adjustright {\lang2057 \row }\trowd \trgaph108\trrh651\trleft-108\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 +\trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10 \clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb \cellx5103\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr +\brdrs\brdrw10 \cltxlrtb \cellx6804\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb \cellx8412\pard\plain \s22\qj\sa240\widctlpar\intbl\adjustright \lang2057\cgrid { +Personal data (whether identified by name or not)\cell }\pard\plain \widctlpar\intbl\adjustright \lang1036\cgrid {\lang2057 \cell \cell }\pard \widctlpar\intbl\adjustright {\lang2057 \row }\trowd \trgaph108\trleft-108\trbrdrt\brdrs\brdrw10 \trbrdrl +\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10 \clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb \cellx5103\clvertalt\clbrdrt +\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb \cellx6804\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb \cellx8412\pard\plain +\s22\qj\sa240\widctlpar\intbl\adjustright \lang2057\cgrid {Genetic information\cell }\pard\plain \widctlpar\intbl\adjustright \lang1036\cgrid {\lang2057 \cell \cell }\pard \widctlpar\intbl\adjustright {\lang2057 \row }\trowd +\trgaph108\trrh459\trleft-108\trkeep\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10 \clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 +\clbrdrr\brdrs\brdrw10 \cltxlrtb \cellx5103\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb \cellx6804\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr +\brdrs\brdrw10 \cltxlrtb \cellx8412\pard\plain \s22\qj\sa240\widctlpar\intbl\adjustright \lang2057\cgrid {Animals\cell }\pard\plain \widctlpar\intbl\adjustright \lang1036\cgrid {\lang2057 \cell \cell }\pard \widctlpar\intbl\adjustright {\lang2057 \row +}\pard \widctlpar\adjustright {\lang2057 +\par }\pard \widctlpar\outlinelevel0\adjustright {\b\lang2057 B. Proposers are requested to confirm that the proposed research does not involve}{\lang2057 : +\par +\par }\pard\plain \s22\qj\sa240\widctlpar\adjustright \lang2057\cgrid {Research activity aimed at human cloning for reproductive purposes, +\par Research activity intended to modify the genetic heritage of human beings which could make such changes heritable}{\cs16\super \chftn {\footnote \pard\plain \s18\qj\widctlpar\adjustright \fs20\lang2057\cgrid {\cs16\super \chftn }{ + Research relating to cancer treatment of the gonads can be financed}}}{ +\par Research activity intended to create human embryos solely for the purpose of research or for the purpose of stem cell procurement, including by means of somatic cell nuclear transfer}{\cgrid0 ; +\par Research involving the use of human embryos or embryonic stem cells with the exception of banked or isolated human embryonic stem cells in culture.}{\cs16\super\cgrid0 \chftn {\footnote \pard\plain \s18\qj\widctlpar\adjustright \fs20\lang2057\cgrid { +\cs16\super \chftn }{ }{\lang1036 Applicants should note that the Council and the Commission have agreed that detailed implementing + provisions concerning research activities involving the use of human embryos and human embryonic stem cells which may be funded under the 6}{\lang1036\super th}{\lang1036 + Framework Programme shall be established by 31 December 2003. The Commission has stated that, during that period +and pending establishment of the detailed implementing provisions, it will not propose to fund such research, with the exception of the study of banked or isolated human embryonic stem cells in culture.}}}{\cgrid0 +\par }\trowd \trgaph108\trleft-108\trkeep\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10 \clvmgf\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb +\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb \cellx5103\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb \cellx6804\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb +\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb \cellx8412\pard\plain \widctlpar\intbl\adjustright \lang1036\cgrid {\b\lang2057 Confirmation : the proposed research involves none of the issues listed in section B\cell }\pard +\qc\widctlpar\intbl\adjustright {\b\lang2057 YES\cell NO\cell }\pard \widctlpar\intbl\adjustright {\b\lang2057 \row }\trowd \trgaph108\trrh565\trleft-108\trkeep\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 +\trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10 \clvmrg\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb \cellx5103\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 +\clbrdrr\brdrs\brdrw10 \cltxlrtb \cellx6804\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb \cellx8412\pard\plain \s22\qj\sa240\widctlpar\intbl\adjustright \lang2057\cgrid {\cell }\pard\plain +\widctlpar\intbl\adjustright \lang1036\cgrid {\lang2057 \cell \cell }\pard \widctlpar\intbl\adjustright {\lang2057 \row }\pard \widctlpar\adjustright {\lang2057\cgrid0 +\par +\par }{\i\fs20\lang2057\cgrid0 (Further information on ethics requirements and rules are given in annex 1 and at the science and ethics website at }{\i\fs20\lang2057 http://europa.eu.int/comm/research/science-society/ethics/ethics_en.html}{ +\i\f34\fs20\lang2057\cgrid0 .) +\par }{\lang2057 \page +\par }\pard\plain \s2\sb240\sa60\keepn\widctlpar\outlinelevel1\adjustright \b\i\f1\lang2057\cgrid {B.9.2 Other EC-policy related issues +\par }\pard\plain \widctlpar\adjustright \lang1036\cgrid {\i\fs20\lang2057 + (Are there other EC-policy related issues, and are they taken into account? Demonstrate a readiness to engage with actors beyond the research to help spread awareness and knowledge and to explore the wider societal imp +lications of the proposed work; if relevant set out synergies with education at all levels.) +\par }{\lang2057 +\par +\par +\par \page +\par }\pard\plain \s1\qj\sb240\sa60\keepn\widctlpar\outlinelevel0\adjustright \b\fs28\lang2057\kerning28\cgrid {{\*\bkmkstart _Toc30245137}B.10 Gender issues{\*\bkmkend _Toc30245137} +\par }\pard\plain \s2\sb240\sa60\keepn\widctlpar\outlinelevel1\adjustright \b\i\f1\lang2057\cgrid {{\*\bkmkstart _Toc30245138}B.10.1. Gender Action plan{\*\bkmkend _Toc30245138} +\par }\pard\plain \widctlpar\adjustright \lang1036\cgrid {\lang2057 Recommended length - one page}{\i\fs20\lang2057 +\par (Write an action plan indicating actions and activities that will be developed to promote gender equality in all forms within your project. See Annex 4 of the Guide for Proposers for more information on gender issues) +\par }{\lang2057 +\par +\par +\par +\par }{\b\lang2057 \page }{\lang2057 +\par }\pard\plain \s2\sb240\sa60\keepn\widctlpar\outlinelevel1\adjustright \b\i\f1\lang2057\cgrid {{\*\bkmkstart _Toc30245139}B.10.2. Gender issues.{\*\bkmkend _Toc30245139} +\par }\pard\plain \widctlpar\adjustright \lang1036\cgrid {\lang2057 Recommended length - one page}{\i\fs20\lang2057 +\par (If there are gender issues associated with the subject of the proposal, show how they have been adequately taken into account.) +\par }{\lang2057 +\par +\par +\par +\par +\par }} \ No newline at end of file From pedronis at codespeak.net Sat Jul 5 00:15:55 2003 From: pedronis at codespeak.net (pedronis at codespeak.net) Date: Sat, 5 Jul 2003 00:15:55 +0200 (MEST) Subject: [pypy-svn] rev 1084 - in pypy/trunk/src/pypy: interpreter objspace/ann Message-ID: <20030704221555.306455B34F@thoth.codespeak.net> Author: pedronis Date: Sat Jul 5 00:14:43 2003 New Revision: 1084 Modified: pypy/trunk/src/pypy/interpreter/executioncontext.py pypy/trunk/src/pypy/objspace/ann/cloningcontext.py pypy/trunk/src/pypy/objspace/ann/wrapper.py Log: fix me, break me, fix me, make me happy again. Modified: pypy/trunk/src/pypy/interpreter/executioncontext.py ============================================================================== --- pypy/trunk/src/pypy/interpreter/executioncontext.py (original) +++ pypy/trunk/src/pypy/interpreter/executioncontext.py Sat Jul 5 00:14:43 2003 @@ -226,12 +226,6 @@ def empty(self): return not self.items - def clone(self): - s = Stack() - s.items = self.items[:] - return s - - # installing the excepthook for OperationErrors def operr_excepthook(exctype, value, traceback): if issubclass(exctype, OperationError): Modified: pypy/trunk/src/pypy/objspace/ann/cloningcontext.py ============================================================================== --- pypy/trunk/src/pypy/objspace/ann/cloningcontext.py (original) +++ pypy/trunk/src/pypy/objspace/ann/cloningcontext.py Sat Jul 5 00:14:43 2003 @@ -1,4 +1,4 @@ -from pypy.interpreter.executioncontext import ExecutionContext +from pypy.interpreter.executioncontext import ExecutionContext, Stack from pypy.interpreter.pyframe \ import ControlFlowException, ExitFrame, PyFrame, Cell from pypy.objspace.ann.wrapper \ @@ -118,8 +118,8 @@ def clone_frame(self, frame): f = PyFrame(self.space, frame.bytecode, frame.w_globals, frame.w_locals) - f.valuestack = frame.valuestack.clone() - f.blockstack = frame.blockstack.clone() + f.valuestack = clonevaluestack(frame.valuestack) + f.blockstack = cloneblockstack(frame.blockstack) f.last_exception = frame.last_exception f.next_instr = frame.next_instr f.localcells = clonecells(frame.localcells) @@ -141,6 +141,21 @@ f.key = frame.key return f +def cloneblockstack(stk): + newstk = Stack() + newstk.items = stk.items[:] + return newstk + +def clonevaluestack(stk): + newstk = Stack() + for item in stk.items: + try: + newitem = item.clone() + except AttributeError: + newitem = item + newstk.push(newitem) + return newstk + def clonecells(cells): """Clone a list of cells.""" newcells = [] Modified: pypy/trunk/src/pypy/objspace/ann/wrapper.py ============================================================================== --- pypy/trunk/src/pypy/objspace/ann/wrapper.py (original) +++ pypy/trunk/src/pypy/objspace/ann/wrapper.py Sat Jul 5 00:14:43 2003 @@ -79,6 +79,8 @@ self.value[key] = value def clone(self): + if type(self.value) is type(lambda:0): # XXX + return W_Constant(self.value) return W_Constant(copy.deepcopy(self.value)) class W_KnownKeysContainer(W_Object): @@ -127,21 +129,18 @@ class W_ConstantIterator(W_Object): - def __init__(self, seq, start=0, changed=False): + def __init__(self, seq, start=0): # XXX should we copy seq, and roll our own definition of identity? self.seq = seq self.start = start - self.changed = changed def argsrepr(self): - return "%r, %r, chg=%r" % (self.seq, self.start,self.changed) + return "%r, %r" % (self.seq, self.start) def __eq__(self,other): - return self is other + return type(self) is type(other) and self.seq is other.seq and self.start == other.start - def clone(self, changed=None): - if changed is None: - changed = self.changed - return W_ConstantIterator(self.seq, self.start, changed) + def clone(self): + return W_ConstantIterator(self.seq, self.start) def next(self): try: @@ -291,8 +290,6 @@ def union(r1, r2): """Return the union of two wrappers.""" if r1 is r2: - if isinstance(r1,W_ConstantIterator): - if r1.changed: return r1.clone(changed=False) return r1 if r1 is None: return r2 @@ -311,6 +308,10 @@ isinstance(r2, W_KnownKeysContainer) and r1.args_w == r2.args_w): return W_KnownKeysContainer(r1.args_w) + if (isinstance(r1, W_ConstantIterator) and + isinstance(r2, W_ConstantIterator) and + r1.seq is r2.seq): + return W_ConstantIterator(r1.seq,max(r1.start,r2.start)) # XXX Could do more cases. # XXX This will blow up as we add more types. Refactor when that happens. return W_Anything() From lac at codespeak.net Sun Jul 6 18:11:12 2003 From: lac at codespeak.net (lac at codespeak.net) Date: Sun, 6 Jul 2003 18:11:12 +0200 (MEST) Subject: [pypy-svn] rev 1087 - pypy/trunk/doc/devel Message-ID: <20030706161112.163355B06A@thoth.codespeak.net> Author: lac Date: Sun Jul 6 18:11:11 2003 New Revision: 1087 Modified: pypy/trunk/doc/devel/howtosvn.txt Log: Added the exact what I needed to do under linux to get a client before I forget again. Modified: pypy/trunk/doc/devel/howtosvn.txt ============================================================================== --- pypy/trunk/doc/devel/howtosvn.txt (original) +++ pypy/trunk/doc/devel/howtosvn.txt Sun Jul 6 18:11:11 2003 @@ -18,7 +18,7 @@ (See Microsoft website_ if you have .DLL issues.) -+ Windows Installer file for GUI_ ++ Windows Installer file for Tortoise SVN (like Tortoise CVS) GUI_ (See Win_ 2000, NT if you have problems loading it.) @@ -36,6 +36,10 @@ **Download and install the appropriate installation file of subversion above.** +For linux: + +download the tarball. unzip and untar it. Then type *./configure*. Then, as root, *make* followed by *make install*. Voil? ... a subversion client. + You can then go look at the files online_ with your browser, located at: http://codespeak.net/svn/pypy/trunk But, you'll want to check out your own local copies to work on. From lac at codespeak.net Sun Jul 6 20:37:34 2003 From: lac at codespeak.net (lac at codespeak.net) Date: Sun, 6 Jul 2003 20:37:34 +0200 (MEST) Subject: [pypy-svn] rev 1089 - pypy/trunk/doc Message-ID: <20030706183734.3D6AB5B06A@thoth.codespeak.net> Author: lac Date: Sun Jul 6 20:37:33 2003 New Revision: 1089 Modified: pypy/trunk/doc/oscon2003-paper.txt Log: Converted the paper to use ReST, got nearly all of the markup correct. Now to make sunstantive changes to the text to reflect what has changed since LLN. I give this talk Wednesday, so comments and suggestions, while welcome at any time, are especially welcome soonest. :-) Modified: pypy/trunk/doc/oscon2003-paper.txt ============================================================================== --- pypy/trunk/doc/oscon2003-paper.txt (original) +++ pypy/trunk/doc/oscon2003-paper.txt Sun Jul 6 20:37:33 2003 @@ -1,58 +1,65 @@ -Implementing Python in Python -- A report from the PyPy project - -The PyPython project aims at producing a simple runtime-system for the -Python language, written in Python itself. Sooner or later, this -happens to most interesting computer languages. The temptation is -great. Each significant computer language has a certain -expressiveness and power, and it is frustrating to not be able to use -that expressiveness and power when writing the language itself. Thus -we have Scheme, Lisp-written-in-Lisp, and Squeak, -Smalltalk-written-in-Smalltalk. So why not Python-written-in-Python? - -Besides using the expressiveness of Python to write Python, we also -aim to produce a minimal core which is Simple and Flexible, and no -longer dependent on CPython. We will take care that PyPy will integrate -easily with PSYCO and Stackless -- goals that are attainable with both -Armin Rigo (author of PSYCO) and Christian Tismer (author of Stackless) -on the team. Samuele Pedroni, catches us when we unwittingly make -C-ish assumptions. By keeping things Simple and Flexible we can -produce code that has attractions for both industry and academia. -Academics will find that this Python is even easier to teach concepts -of language design with. And ending the dependence on CPython means -that we can produce a Python with a smaller footprint. Eventually, -we would like to produce a faster Python. We are very far from that -now, since we have spent no effort on speed and have only worked on -Simple and Flexible. - -1. How have we set about it. - -Most of you know what happens if you type - -'import this' - -at your favourite Python prompt. You get 'The Zen of Python', -by Tim Peters. It starts - - Beautiful is better than ugly. - Explicit is better than implicit. - Simple is better than complex. - -and ends with: - - Namespaces are one honking great idea -- let's do more of those! - -What would 'doing more of those' mean? Here is one approach. - - In a Python-like language, a running interpreter has three main parts: - - * the main loop, which suffles data around and calls the operations - defined in the object library according to the bytecode. - - * the compiler, which represents the static optimization of the - source code into an intermediate format, the bytecode; - - * the object library, implementing the various types of objects - and their semantics; +============================== +Implementing Python in Python +============================== +A report from the PyPy project +------------------------------ + +The PyPy_ [#]_ project aims at producing a simple runtime-system for +the Python_ language, written in Python_ itself. **C** and **Lisp** +are elder examples of languages which are self-hosting. More +recently, we have seen implementations of **Scheme** in Scheme_, [#]_ +and **Squeak**, [#]_ [#]_ a Smalltalk_ implementation of Smalltalk_. +The desire to implement your favourite language *in* your +favourite language is quite understandable. Every significant +computer language has a certain expressiveness and power, and it is +frustrating to not be able to use that expressiveness and power when +writing the language itself. + +Thus we aim to produce a minimal core which is *simple* and +*flexible*, and no longer dependent on CPython [#]_. This should make +PyPy_ easier than CPython to analyze, change and debug. We will take +care that PyPy will integrate easily with Psyco_ [#]_ and Stackless_, [#]_ +while trying to avoid unwitting C dependencies in our thinking. +We should be able to produce different versions of PyPy which run +on different architectures, for instance one that runs on the +Java Virtual Machine, much as **Jython** [#]_ does today. By keeping +things *simple* and *flexible* we can produce code that has +attractions for both industry and academia. Academics will find that +this Python_ is even easier to teach concepts of language design with. +Industry will be pleased to know that ending the dependence on CPython +means that we can produce a Python_ with a smaller footprint. +Eventually, we would like to produce a faster Python_ , which should +please all. We are very far from that now, because speed is a distant +goal. So far we have only worked on making PyPy_ *simple* and +*flexible*. + +How have we set about it +------------------------ + +Most of you know what happens if you type:: + + import this + +at your favourite Python_ prompt. You get *The Zen of Python*, [#]_ +written by Tim Peters. It starts:: + + Beautiful is better than ugly. + Explicit is better than implicit. + +and ends with:: + + Namespaces are one honking great idea -- let's do more of those! + +This raises an interesting question. What would *doing more of those* +mean? The PyPy_ project takes one approach. + +Background +---------- + +In a Python-like language, a running interpreter has three main parts: + * the main loop, which suffles data around and calls the operations defined in the object library according to the bytecode. + * the compiler, which represents the static optimization of the source code into an intermediate format, the bytecode; + * the object library, implementing the various types of objects and their semantics; In PyPy, the three parts are clearly separated and can be replaced independently. The main loop generally assumes little about the semantics @@ -63,8 +70,8 @@ loop into explicit concepts (yet), because we have been concentrating on making separable object libraries. -We call the separable object library, an Object Space. -We call Wrapped Objects the black boxes of an Object Space. +We call the separable object library, an *Object Space*. +We call *Wrapped Objects* the black boxes of an Object Space. But the exciting thing is that while existing languages implement _one_ Object Space, by separating things we have produced an architecture @@ -73,9 +80,8 @@ So let us dream for a bit. -First dream: How do you get computer science concepts in language design -more effectively into student brains? - +First dream: How do you get computer science concepts in language design more effectively into student brains? +************************************************************************************************************** Traditionally, academics come up with interesting new ideas and concepts, but, to the extent that they are truly new end up creating another language to express these ideas in. Unfortunately, many @@ -89,15 +95,15 @@ Space which obeys the new rules we have thought up, and drop it into an existing language. Comparisons between other ways of doing things would also be a lot simpler. Finally, we could reasonably ask our -students to implement these ideas in Python and let them drop them in, +students to implement these ideas in Python_ and let them drop them in, leaving all the other bits, irrelevant for our educational purposes as they already are written. There is no better way to learn about compiler writing, than writing compilers, but a lot of todays education in compiler writing leaves a huge gap between 'the theory that is in the book which the student is expected to learn' and 'what is reasonable for a student to implement as coursework'. Students can -spend all semester overcoming difficulties in _actually getting the IO -to work_, and _interfacing with the runtime libraries_, while only +spend all semester overcoming difficulties in *actually getting the IO +to work*, and *interfacing with the runtime libraries*, while only spending a fraction of the time on the concepts which you are trying to teach. @@ -105,13 +111,15 @@ concepts we wish to teach and the code written to implement just that. Dream number Two: A Slimmer Python +********************************** People who write code for handhelds and other embedded devices often wish that they could have a much smaller footprint. Now they can ask for a Tiny Object Space which only implements the behaviour which they need, and skips the parts that they do not. -Dream number Three -- What is the best way to implement a dict? +Dream number Three -- Multiple, Dynamically changing Implementations of a single type +************************************************************************************* This depends on how much data you intend to store in your dict. If you never expect your dict to have more than a half dozen items, a really @@ -121,10 +129,10 @@ nothing to stop your interpreter from keeping statistics on how it is being used, and to move from strategy to strategy at runtime. -Dream number Four -- How would you like your operators to work today? - +Dream number Four -- You might want to change how operators work, as well +************************************************************************* Consider y = int(x). How would you like this to work when x is 4.2, -4.5, -4.2 and -4.5? Currently Python says 4, 4, -4 and -4, truncating +4.5, -4.2 and -4.5? Currently Python_ says 4, 4, -4 and -4, truncating towards zero. But for certain applications, this is not what is desired. You would prefer round behaviour 4, 5, -4 -5 -- rounding away from zero. Or you would like to always return the larger integer 5 5 -4 -4. Sometimes @@ -134,10 +142,12 @@ Changing the behaviour and seeing how the results change ought to be straight-forward, simple, and easy. -Dream number Five -- Running different Object Spaces on different processors -of the same machine. +Dream number Five -- Running different Object Spaces on different processors of the same machine. +************************************************************************************************* +Put text in here. Dream number Six -- Running different Object Spaces on different machines. +************************************************************************** This is one of the unrealised dreams of distributed computing. It would often be convenient to allow the various machines on a network to share @@ -147,16 +157,17 @@ forward the computation to a machine with more computational power. Dream number Seven -- A Smarter, more Dynamic Interpreter +********************************************************* -There is no reason why your Python interpreter could not keep statistics +There is no reason why your Python_ interpreter could not keep statistics of how it is being used, and automatically select from a collection of algorithms the one which is best suited for the data at hand. -Dream number Eight -- How to avoid painful conversion of your code base -to new versions of the language. +Dream number Eight -- How to avoid painful conversion of your code base to new versions of the language. +******************************************************************************************************** This dream is a bit far-fetched, but it is worth investigating. Right -now, whenever a new release of Python comes out, existing Python +now, whenever a new release of Python_ comes out, existing Python_ programs have to be modified whenever there are conflicts. Thus there is a trade off between getting the new features which contribute to increased productivity in program design, and having to fix piles of @@ -169,15 +180,17 @@ and leave the old ones alone. Dream number Nine: faster Python +********************************* While we are writing an adaptive, smarter compiler, we ought to be able -to make it faster. We think faster than C Python is a realistic goal, +to make it faster. We think faster than CPython is a realistic goal, eventually. When faster algorithms are discovered, we will be able to quickly place them in the interpreter, because the components are more or less independent. This is something that Armin Rigo and Christian Tismer know a lot about, and I know very little. -Dream number Ten: world domination and .... +Dream number Ten: world domination and all that ... +**************************************************** (Well, if we can pull off Dreams 1-9, this should just drop out of the design...) @@ -186,19 +199,19 @@ But away from the dreams and back to what do we currently have? -We currently implement (or partially implement) two Object Spaces, and -have plans to implement a third in short order. +We currently have three object spaces partially implemented. -1. The Trivial Object Space +The Trivial Object Space +++++++++++++++++++++++++ A PyPy interpreter using the TrivialObjectSpace is an interpreter with -its own main loop (written in Python), and nothing else. This main -loop manipulates real Python objects and all operations are done -directly on the Python objects. For example, "1" really means "1" and +its own main loop (written in Python_), and nothing else. This main +loop manipulates real Python_ objects and all operations are done +directly on the Python_ objects. For example, "1" really means "1" and when the interpreter encounters the BINARY_ADD bytecode instructions -the TrivialObjectSpace will just add two real Python objects together -using Python's "+". The same for lists, dictionaries, classes... We -just use Python's own. +the TrivialObjectSpace will just add two real Python_ objects together +using Python_'s "+". The same for lists, dictionaries, classes... We +just use Python_'s own. This Object Space is only useful for testing the concept of Object Spaces, and our interpreter, or even interpreting different kinds of bytecodes. @@ -209,10 +222,11 @@ It demonstrated that our Object Space Concept was viable, and that our interpreter worked. -2. The Standard Object Space +The Standard Object Space +++++++++++++++++++++++++++ The Standard Object Space is the object space that works just like -Python's, that is, the object space whose black boxes are real Python +Python_'s, that is, the object space whose black boxes are real Python_ objects that work as expected. This is where the bulk of the work in PyPy has been done to date. Getting the Standard Object Space to work was a goal of the Gothenburg Sprint May 24 - 31. @@ -225,104 +239,63 @@ to run. We needed types and builtins to work. This ran, slowly. Then we added strings. Getting this code to work was the second -goal. +goal.:: -### a trivial program to test strings, lists, functions and methods ### + ### a trivial program to test strings, lists, functions and methods ### -def addstr(s1,s2): + def addstr(s1,s2): return s1 + s2 -str = "an interesting string" -str2 = 'another::string::xxx::y:aa' -str3 = addstr(str,str2) -arr = [] -for word in str.split(): + str = "an interesting string" + str2 = 'another::string::xxx::y:aa' + str3 = addstr(str,str2) + arr = []oscon2003-paper.txt + for word in str.split(): if word in str2.split('::'): arr.append(word) -print ''.join(arr) -print "str + str2 = ", str3 + print ''.join(arr) + print "str + str2 = ", str3 This we accomplished by mid-week. -By the end of the Sprint we produced our first Python program that +By the end of the Sprint we produced our first Python_ program that ran under PyPy which simply 'did something we wanted to do' and wasn't an artificial goal. Specifically, it calculated the share in foodbill for each of the 9 Sprint participants. +:: +### the first use of PyPy as a tool to do something else ### slips=[(1, 'Kals MatMarkn', 6150, 'Chutney for Curry', 'dinner Saturday'), (2, 'Kals MatMarkn', 32000, 'Spaghetti, Beer', 'dinner Monday'), (2, 'Kals MatMarkn', -810, 'Deposit on Beer Bottles', 'various'), (3, 'Fram', 7700, 'Rice and Curry Spice', 'dinner Saturday'), - (4, 'Kals MatMarkn', 25000, 'Alcohol-Free Beer, sundries', 'various'), - (4, 'Kals MatMarkn', -1570, "Michael's toothpaste", 'none'), - (4, 'Kals MatMarkn', -1690, "Laura's toothpaste", 'none'), - (4, 'Kals MatMarkn', -720, 'Deposit on Beer Bottles', 'various'), - (4, 'Kals MatMarkn', -60, 'Deposit on another Beer Bottle', 'various'), - (5, 'Kals MatMarkn', 26750, 'lunch bread meat cheese', 'lunch Monday'), - (6, 'Kals MatMarkn', 15950, 'various', 'dinner Tuesday and Thursday'), - (7, 'Kals MatMarkn', 3650, 'Drottningsylt, etc.', 'dinner Thursday'), - (8, 'Kals MatMarkn', 26150, 'Chicken and Mushroom Sauce', 'dinner Wed'), - (8, 'Kals MatMarkn', -2490, 'Jacob and Laura -- juice', 'dinner Wed'), - (8, 'Kals MatMarkn', -2990, "Chicken we didn't cook", 'dinner Wednesday'), - (9, 'Kals MatMarkn', 1380, 'fruit for Curry', 'dinner Saturday'), - (9, 'Kals MatMarkn', 1380, 'fruit for Curry', 'dinner Saturday'), - (10, 'Kals MatMarkn', 26900, 'Jansons Frestelse', 'dinner Sunday'), - (10, 'Kals MatMarkn', -540, 'Deposit on Beer Bottles', 'dinner Sunday'), - (11, 'Kals MatMarkn', 22650, 'lunch bread meat cheese', 'lunch Thursday'), - (11, 'Kals MatMarkn', -2190, 'Jacob and Laura -- juice', 'lunch Thursday'), - (11, 'Kals MatMarkn', -2790, 'Jacob and Laura -- cereal', 'lunch Thurs'), - (11, 'Kals MatMarkn', -760, 'Jacob and Laura -- milk', 'lunch Thursday'), - (12, 'Kals MatMarkn', 18850, 'lunch bread meat cheese', 'lunch Friday'), - (13, 'Kals MatMarkn', 18850, 'lunch bread meat cheese', 'guestimate Sun'), - (14, 'Kals MatMarkn', 18850, 'lunch bread meat cheese', 'guestimate Tues'), - (15, 'Kals MatMarkn', 20000, 'lunch bread meat cheese', 'guestimate Wed'), - (16, 'Kals MatMarkn', 42050, 'grillfest', 'dinner Friday'), - (16, 'Kals MatMarkn', -1350, 'Deposit on Beer Bottles', 'dinner Friday'), - (17, 'System Bolaget', 15500, 'Cederlunds Caloric', 'dinner Thursday'), - (17, 'System Bolaget', 22400, '4 x Farnese Sangiovese 56SEK', 'various'), - (17, 'System Bolaget', 22400, '4 x Farnese Sangiovese 56SEK', 'various'), - (17, 'System Bolaget', 13800, '2 x Jacobs Creek 69SEK', 'various'), - (18, 'J and Ls winecabinet', 10800, '2 x Parrotes 54SEK', 'various'), - (18, 'J and Ls winecabinet', 14700, '3 x Saint Paulin 49SEK', 'various'), - (18, 'J and Ls winecabinet', 10400, '2 x Farnese Sangioves 52SEK','cheaper when we bought it'), - (18, 'J and Ls winecabinet', 17800, '2 x Le Poiane 89SEK', 'various'), - (18, 'J and Ls winecabinet', 9800, '2 x Something Else 49SEK', 'various'), - (19, 'Konsum', 26000, 'Saturday Bread and Fruit', 'Slip MISSING'), - (20, 'Konsum', 15245, 'Mooseburgers', 'found slip'), - (21, 'Kals MatMarkn', 20650, 'Grilling', 'Friday dinner'), - (22, 'J and Ls freezer', 21000, 'Meat for Curry, grilling', ''), - (22, 'J and Ls cupboard', 3000, 'Rice', ''), - (22, 'J and Ls cupboard', 4000, 'Charcoal', ''), (23, 'Fram', 2975, 'Potatoes', '3.5 kg @ 8.50SEK'), (23, 'Fram', 1421, 'Peas', 'Thursday dinner'), - (24, 'Kals MatMarkn', 20650, 'Grilling', 'Friday dinner'), - (24, 'Kals MatMarkn', -2990, 'TP', 'None'), - (24, 'Kals MatMarkn', -2320, 'T-Gul', 'None') + ... ] -print [t[2] for t in slips] -print (reduce(lambda x, y: x+y, [t[2] for t in slips], 0))/900 +print (reduce(lambda x, y: x+y, [t[2] for t in slips], 0))/900 [#]_ Pypy said: 603. Dinner for a week cost 603 Swedish Krona -- or approximately 50$ US. So if we can't have world domination, or get our Object Space to work, a new career in Sprint cost control beckons. :-) -3. The Translate Object Space +3. The Annotate Object Space -The Translate Object Space is the next goal. It is an example of an +The Annotate Object Space is the next goal. It is an example of an ObjectSpace that differs a lot from StandardObjectSpace. We have to -translate the Python code we have into C code. This is the sine qua +translate the Python_ code we have into C code. This is the sine qua non condition for our work to be actually usable. Quite unexpectedly, the major piece of the translator is itself an object space, the -TranslateObjectSpace. Its goal is to run any Python code and produce C +AnnotateObjectSpace. Its goal is to run any Python_ code and produce C code in the background as it does so. -Specifically, we take our PyPy interpreter with the Translate Object +Specifically, we take our PyPy interpreter with the Annotate Object Space instead of the Standard Object Space, and run that, asking it to interpret our generated bytecode. A wrapped object is now the name of a variable in the C program we are emitting, for example: - The add method in the Translate Object Space takes two variable +The add method in the Annotate Object Space takes two variable names, x and y, and emits the C code z = x + y; where z is a new variable name which is returned as the result of add. (We will actually need to make the wrapped objects a bit more elaborate so that we can also record, @@ -372,7 +345,7 @@ implementations. The convertion can give a result of a different type (e.g. int -> float) or of the same type (e.g. W_VeryLongString -> str). There is a global table of delegators. We should not rely on the -delegators to be tried in any particular order, or at all (e.g. the int +delegators to be tried in any particlar order, or at all (e.g. the int -> float delegator could be ignored when we know that no registered function will accept a float anyway). @@ -463,4 +436,116 @@ Some multimethods can also be sliced along their second argument, e.g. for __radd__(). - \ No newline at end of file + +.. [#] The PyPy homespage: http://www.codespeak.net/pypy/ +.. [#] See for instance, *lunacy* http://www.nightmare.com/~rushing/lunacy/ +.. [#] The Squeak homespage: http://www.squeak.org/ +.. [#] See *Back to the Future The Story of Squeak, A Practical + Smalltalk Written in Itself* ftp://st.cs.uiuc.edu/Smalltalk/Squeak/docs/OOPSLA.Squeak.html +.. [#] CPython is what we call the commonly available Python_ which you + can download from http://www.python.org . This is to distinguish it + from other implementations of the Python_ language, such as + Jython_, which is written for the Java virtual machine. +.. [#] The Psyco homespage: http://psyco.sourceforge.net/ +.. [#] The Stackless homespage: http://www.stackless.com/ +.. [#] The Jython homespage: http://www.jython.org/ +.. [#] The complete text is as follows: + +.. line-block:: + + *The Zen of Python* + + by Tim Peters + +.. line-block:: + + *Beautiful is better than ugly. + Explicit is better than implicit. + Simple is better than complex. + Complex is better than complicated. + Flat is better than nested. + Sparse is better than dense. + Readability counts. + Special cases aren't special enough to break the rules. + Although practicality beats purity. + Errors should never pass silently. + Unless explicitly silenced. + In the face of ambiguity, refuse the temptation to guess. + There should be one-- and preferably only one --obvious way to do it. + Although that way may not be obvious at first unless you're Dutch. + Now is better than never. + Although never is often better than **right** now. + If the implementation is hard to explain, it's a bad idea. + If the implementation is easy to explain, it may be a good idea. + Namespaces are one honking great idea -- let's do more of those!* + +.. [#] The full text for historians and other curious people is: + +.. line-block:: + + slips=[ + (1, 'Kals MatMarkn', 6150, 'Chutney for Curry', 'dinner Saturday'), + (2, 'Kals MatMarkn', 32000, 'Spaghetti, Beer', 'dinner Monday'), + (2, 'Kals MatMarkn', -810, 'Deposit on Beer Bottles', 'various'), + (3, 'Fram', 7700, 'Rice and Curry Spice', 'dinner Saturday'), + (4, 'Kals MatMarkn', 25000, 'Alcohol-Free Beer, sundries', 'various'), + (4, 'Kals MatMarkn', -1570, "Michael's toothpaste", 'none'), + (4, 'Kals MatMarkn', -1690, "Laura's toothpaste", 'none'), + (4, 'Kals MatMarkn', -720, 'Deposit on Beer Bottles', 'various'), + (4, 'Kals MatMarkn', -60, 'Deposit on another Beer Bottle', 'various'), + (5, 'Kals MatMarkn', 26750, 'lunch bread meat cheese', 'lunch Monday'), + (6, 'Kals MatMarkn', 15950, 'various', 'dinner Tuesday and Thursday'), + (7, 'Kals MatMarkn', 3650, 'Drottningsylt, etc.', 'dinner Thursday'), + (8, 'Kals MatMarkn', 26150, 'Chicken and Mushroom Sauce', 'dinner Wed'), + (8, 'Kals MatMarkn', -2490, 'Jacob and Laura -- juice', 'dinner Wed'), + (8, 'Kals MatMarkn', -2990, "Chicken we didn't cook", 'dinner Wednesday'), + (9, 'Kals MatMarkn', 1380, 'fruit for Curry', 'dinner Saturday'), + (9, 'Kals MatMarkn', 1380, 'fruit for Curry', 'dinner Saturday'), + (10, 'Kals MatMarkn', 26900, 'Jansons Frestelse', 'dinner Sunday'), + (10, 'Kals MatMarkn', -540, 'Deposit on Beer Bottles', 'dinner Sunday'), + (11, 'Kals MatMarkn', 22650, 'lunch bread meat cheese', 'lunch Thursday'), + (11, 'Kals MatMarkn', -2190, 'Jacob and Laura -- juice', 'lunch Thursday'), + (11, 'Kals MatMarkn', -2790, 'Jacob and Laura -- cereal', 'lunch Thurs'), + (11, 'Kals MatMarkn', -760, 'Jacob and Laura -- milk', 'lunch Thursday'), + (12, 'Kals MatMarkn', 18850, 'lunch bread meat cheese', 'lunch Friday'), + (13, 'Kals MatMarkn', 18850, 'lunch bread meat cheese', 'guestimate Sun'), + (14, 'Kals MatMarkn', 18850, 'lunch bread meat cheese', 'guestimate Tues'), + (15, 'Kals MatMarkn', 20000, 'lunch bread meat cheese', 'guestimate Wed'), + (16, 'Kals MatMarkn', 42050, 'grillfest', 'dinner Friday'), + (16, 'Kals MatMarkn', -1350, 'Deposit on Beer Bottles', 'dinner Friday'), + (17, 'System Bolaget', 15500, 'Cederlunds Caloric', 'dinner Thursday'), + (17, 'System Bolaget', 22400, '4 x Farnese Sangiovese 56SEK', 'various'), + (17, 'System Bolaget', 22400, '4 x Farnese Sangiovese 56SEK', 'various'), + (17, 'System Bolaget', 13800, '2 x Jacobs Creek 69SEK', 'various'), + (18, 'J and Ls winecabinet', 10800, '2 x Parrotes 54SEK', 'various'), + (18, 'J and Ls winecabinet', 14700, '3 x Saint Paulin 49SEK', 'various'), + (18, 'J and Ls winecabinet', 10400, '2 x Farnese Sangioves 52SEK','cheaper when we bought it'), + (18, 'J and Ls winecabinet', 17800, '2 x Le Poiane 89SEK', 'various'), + (18, 'J and Ls winecabinet', 9800, '2 x Something Else 49SEK', 'various'), + (19, 'Konsum', 26000, 'Saturday Bread and Fruit', 'Slip MISSING'), + (20, 'Konsum', 15245, 'Mooseburgers', 'found slip'), + (21, 'Kals MatMarkn', 20650, 'Grilling', 'Friday dinner'), + (22, 'J and Ls freezer', 21000, 'Meat for Curry, grilling', ''), + (22, 'J and Ls cupboard', 3000, 'Rice', ''), + (22, 'J and Ls cupboard', 4000, 'Charcoal', ''), + (23, 'Fram', 2975, 'Potatoes', '3.5 kg @ 8.50SEK'), + (23, 'Fram', 1421, 'Peas', 'Thursday dinner'), + (24, 'Kals MatMarkn', 20650, 'Grilling', 'Friday dinner'), + (24, 'Kals MatMarkn', -2990, 'TP', 'None'), + (24, 'Kals MatMarkn', -2320, 'T-Gul', 'None') + ] + + print [t[2] for t in slips] + print (reduce(lambda x, y: x+y, [t[2] for t in slips], 0))/900 + +.. [#] and the reason I used reduce instead of just a list comprehension + is that I had just finished writing unit tests for reduce -- Laura + +.. _Python: http://www.python.org/.. +.. _Squeak: http://www.squeak.org +.. _Smalltalk: http://www.smalltalk.org/ +.. _Scheme: http://www.swiss.ai.mit.edu/projects/scheme/ +.. _PyPy: http://www.codespeak.net/pypy/ +.. _Jython: http://www.jython.org/ +.. _Psyco: http://psyco.sourceforge.net/ +.. _Stackless: http://www.stackless.com/ \ No newline at end of file From lac at codespeak.net Sun Jul 6 23:35:43 2003 From: lac at codespeak.net (lac at codespeak.net) Date: Sun, 6 Jul 2003 23:35:43 +0200 (MEST) Subject: [pypy-svn] rev 1090 - pypy/trunk/doc Message-ID: <20030706213543.E6BDF5B069@thoth.codespeak.net> Author: lac Date: Sun Jul 6 23:35:43 2003 New Revision: 1090 Modified: pypy/trunk/doc/oscon2003-paper.txt Log: Improved the text. Still cannot get headings that I like. I would like lots of my headings to be a lot smaller than what we get now. Goals could be big, but I want the small headings small. And this is hard going. I will see if sleep improves me. Modified: pypy/trunk/doc/oscon2003-paper.txt ============================================================================== --- pypy/trunk/doc/oscon2003-paper.txt (original) +++ pypy/trunk/doc/oscon2003-paper.txt Sun Jul 6 23:35:43 2003 @@ -1,8 +1,8 @@ -============================== Implementing Python in Python ============================== + A report from the PyPy project ------------------------------- +****************************** The PyPy_ [#]_ project aims at producing a simple runtime-system for the Python_ language, written in Python_ itself. **C** and **Lisp** @@ -31,10 +31,7 @@ Eventually, we would like to produce a faster Python_ , which should please all. We are very far from that now, because speed is a distant goal. So far we have only worked on making PyPy_ *simple* and -*flexible*. - -How have we set about it ------------------------- +*flexible*. Most of you know what happens if you type:: @@ -53,12 +50,13 @@ This raises an interesting question. What would *doing more of those* mean? The PyPy_ project takes one approach. -Background ----------- +Terminology +*********** In a Python-like language, a running interpreter has three main parts: + * the main loop, which suffles data around and calls the operations defined in the object library according to the bytecode. - * the compiler, which represents the static optimization of the source code into an intermediate format, the bytecode; + * the compiler, which represents the static optimization of the source code into an intermediate format, the bytecode; and * the object library, implementing the various types of objects and their semantics; In PyPy, the three parts are clearly separated and can be replaced @@ -73,32 +71,73 @@ We call the separable object library, an *Object Space*. We call *Wrapped Objects* the black boxes of an Object Space. -But the exciting thing is that while existing languages implement _one_ +One exciting thing is that while existing languages implement _one_ Object Space, by separating things we have produced an architecture which will enable us to run more than one Object Space in the same -interpreter at the same time. This idea has some exciting implications. +interpreter at the same time. This idea has some interesting implications. + +But first let us dream for a bit. (Aside from having fun, why should +we spend our time writing PyPy? + +Goals: +++++++ +or Dreams, if you prefer + +A Slimmer Python +**************** + +People who write code for handhelds and other embedded devices often wish +that they could have a much smaller footprint. Now they can ask for a +Tiny Object Space which only implements the behaviour which they need, +and skips the parts that they do not. + +A Smarter, more Dynamic Interpreter +*********************************** + +There is no reason why your Python_ interpreter could not keep statistics +of how it is being used, and automatically select from a collection of +algorithms the one which is best suited for the data at hand. -So let us dream for a bit. +Multiple, Dynamically changing Implementations of a single type +*************************************************************** -First dream: How do you get computer science concepts in language design more effectively into student brains? -************************************************************************************************************** -Traditionally, academics come up with interesting new ideas and -concepts, but, to the extent that they are truly new end up creating -another language to express these ideas in. Unfortunately, many -languages end up merely as a vehicle for too few new ideas. We end up -force-feeding our poor students with too many computer languages, too -quickly -- each language designed to teach a particular point. And -many of our languages are particularly weak on everything _but_ the -point we wish to make. +Consider the question: *What is the best way to implement a dict*? + +The answer depends on how much data you intend to store in your dict. +If you never expect your dict to have more than a half dozen items, a +really fast list may be best. Larger dicts might best be implemented +as hashes. And for storing enormous amounts of data, a binary tree +might be just what you desire. In principle, there is +nothing to stop your interpreter from keeping statistics on how it is +being used, and to move from strategy to strategy at runtime. You +could implement this in CPython, but we intend to make it a lot +*easier* to do this in PyPy_ to encourage such experimentation. + +A better teaching vehicle +************************* +Academic computer science is littered with tiny teaching languages. +Every time we get a few new ideas in language design or pedagogical +theory we itch to create a language to express these ideas. While +understandable, this is wasteful. Many languages are implemented which +are more novel than useful, and too many are begun with insufficient +new ideas. We end up force-feeding our poor students with too many +computer languages, too quickly -- each language designed to teach a +particular point. And many of our languages are particularly weak on +everything *except* the point we wish to make. + +In reaction, many students desire to only learn **commercially +successful** languages. While they avoid trivial languages, some of them +avoid learning Computer Science altogether. They learn how to program, +but that is about it. There has got to be a better way. Things would go a lot more smoothly if we could only create an Object -Space which obeys the new rules we have thought up, and drop it into -an existing language. Comparisons between other ways of doing things -would also be a lot simpler. Finally, we could reasonably ask our -students to implement these ideas in Python_ and let them drop them in, -leaving all the other bits, irrelevant for our educational purposes as -they already are written. There is no better way to learn about -compiler writing, than writing compilers, but a lot of todays +Space which obeys the new rules we have thought up, and drop it into a +successful existing language. Comparisons between other ways of doing +things would also be a lot simpler. Finally, we could reasonably ask +our students to **implement** these ideas in Python_ modifying the +interpreter but leaving all the other bits, irrelevant for our educational +purposes as they already are. There is no better way to learn +about compiler writing, than writing compilers, but a lot of todays education in compiler writing leaves a huge gap between 'the theory that is in the book which the student is expected to learn' and 'what is reasonable for a student to implement as coursework'. Students can @@ -110,24 +149,8 @@ Object Spaces will provide a better fit between the the abstract concepts we wish to teach and the code written to implement just that. -Dream number Two: A Slimmer Python -********************************** - -People who write code for handhelds and other embedded devices often wish -that they could have a much smaller footprint. Now they can ask for a -Tiny Object Space which only implements the behaviour which they need, -and skips the parts that they do not. -Dream number Three -- Multiple, Dynamically changing Implementations of a single type -************************************************************************************* -This depends on how much data you intend to store in your dict. If you -never expect your dict to have more than a half dozen items, a really -fast list may be best. Larger dicts might best be implemented as -hashes. And for storing enormous amounts of data, a binary tree -might be just what you would be interested in. In principel, there is -nothing to stop your interpreter from keeping statistics on how it is -being used, and to move from strategy to strategy at runtime. Dream number Four -- You might want to change how operators work, as well ************************************************************************* @@ -156,12 +179,6 @@ that the computation was too strenuous for such a device, and automatically forward the computation to a machine with more computational power. -Dream number Seven -- A Smarter, more Dynamic Interpreter -********************************************************* - -There is no reason why your Python_ interpreter could not keep statistics -of how it is being used, and automatically select from a collection of -algorithms the one which is best suited for the data at hand. Dream number Eight -- How to avoid painful conversion of your code base to new versions of the language. ******************************************************************************************************** @@ -263,7 +280,7 @@ an artificial goal. Specifically, it calculated the share in foodbill for each of the 9 Sprint participants. :: -### the first use of PyPy as a tool to do something else ### +### the first use of PyPy as a tool to do something else ### [#]_ slips=[(1, 'Kals MatMarkn', 6150, 'Chutney for Curry', 'dinner Saturday'), (2, 'Kals MatMarkn', 32000, 'Spaghetti, Beer', 'dinner Monday'), @@ -474,7 +491,7 @@ There should be one-- and preferably only one --obvious way to do it. Although that way may not be obvious at first unless you're Dutch. Now is better than never. - Although never is often better than **right** now. + Although never is often better than _right_ now. If the implementation is hard to explain, it's a bad idea. If the implementation is easy to explain, it may be a good idea. Namespaces are one honking great idea -- let's do more of those!* From lac at codespeak.net Mon Jul 7 13:34:57 2003 From: lac at codespeak.net (lac at codespeak.net) Date: Mon, 7 Jul 2003 13:34:57 +0200 (MEST) Subject: [pypy-svn] rev 1094 - pypy/trunk/doc Message-ID: <20030707113457.33A995B069@thoth.codespeak.net> Author: lac Date: Mon Jul 7 13:34:56 2003 New Revision: 1094 Modified: pypy/trunk/doc/oscon2003-paper.txt Log: Many improvements to the text. More coming. Modified: pypy/trunk/doc/oscon2003-paper.txt ============================================================================== --- pypy/trunk/doc/oscon2003-paper.txt (original) +++ pypy/trunk/doc/oscon2003-paper.txt Mon Jul 7 13:34:56 2003 @@ -5,7 +5,7 @@ ****************************** The PyPy_ [#]_ project aims at producing a simple runtime-system for -the Python_ language, written in Python_ itself. **C** and **Lisp** +the Python_ language, written in Python itself. **C** and **Lisp** are elder examples of languages which are self-hosting. More recently, we have seen implementations of **Scheme** in Scheme_, [#]_ and **Squeak**, [#]_ [#]_ a Smalltalk_ implementation of Smalltalk_. @@ -15,29 +15,42 @@ frustrating to not be able to use that expressiveness and power when writing the language itself. +.. _PyPy: http://www.codespeak.net/pypy/ +.. _Python: http://www.python.org/.. +.. _Scheme: http://www.swiss.ai.mit.edu/projects/scheme/ +.. _Squeak: http://www.squeak.org +.. _Smalltalk: http://www.smalltalk.org/ + Thus we aim to produce a minimal core which is *simple* and *flexible*, and no longer dependent on CPython [#]_. This should make PyPy_ easier than CPython to analyze, change and debug. We will take care that PyPy will integrate easily with Psyco_ [#]_ and Stackless_, [#]_ while trying to avoid unwitting C dependencies in our thinking. + +.. _Psyco: http://psyco.sourceforge.net/ +.. _Stackless: http://www.stackless.com/ + We should be able to produce different versions of PyPy which run on different architectures, for instance one that runs on the -Java Virtual Machine, much as **Jython** [#]_ does today. By keeping -things *simple* and *flexible* we can produce code that has +Java Virtual Machine, much as **Jython** [#]_ does today. + +.. _Jython: http://www.jython.org/ + +By keeping things *simple* and *flexible* we can produce code that has attractions for both industry and academia. Academics will find that -this Python_ is even easier to teach concepts of language design with. +this Python is even easier to teach concepts of language design with. Industry will be pleased to know that ending the dependence on CPython -means that we can produce a Python_ with a smaller footprint. -Eventually, we would like to produce a faster Python_ , which should +means that we can produce a Python with a smaller footprint. +Eventually, we would like to produce a faster Python , which should please all. We are very far from that now, because speed is a distant -goal. So far we have only worked on making PyPy_ *simple* and -*flexible*. +goal. So far we have only worked on making PyPy *simple* and +*flexible*. Most of you know what happens if you type:: import this -at your favourite Python_ prompt. You get *The Zen of Python*, [#]_ +at your favourite Python prompt. You get *The Zen of Python*, [#]_ written by Tim Peters. It starts:: Beautiful is better than ugly. @@ -48,10 +61,10 @@ Namespaces are one honking great idea -- let's do more of those! This raises an interesting question. What would *doing more of those* -mean? The PyPy_ project takes one approach. +mean? The PyPy project takes one approach. -Terminology -*********** +Terminology (a short digression) +******************************** In a Python-like language, a running interpreter has three main parts: @@ -69,7 +82,7 @@ on making separable object libraries. We call the separable object library, an *Object Space*. -We call *Wrapped Objects* the black boxes of an Object Space. +We call the black boxes of an Object Space *Wrapped Objects*. One exciting thing is that while existing languages implement _one_ Object Space, by separating things we have produced an architecture @@ -77,158 +90,195 @@ interpreter at the same time. This idea has some interesting implications. But first let us dream for a bit. (Aside from having fun, why should -we spend our time writing PyPy? +we spend our time writing PyPy?) Goals: ++++++ or Dreams, if you prefer A Slimmer Python -**************** - -People who write code for handhelds and other embedded devices often wish -that they could have a much smaller footprint. Now they can ask for a -Tiny Object Space which only implements the behaviour which they need, -and skips the parts that they do not. - -A Smarter, more Dynamic Interpreter -*********************************** - -There is no reason why your Python_ interpreter could not keep statistics -of how it is being used, and automatically select from a collection of -algorithms the one which is best suited for the data at hand. +++++++++++++++++ +People who write code for handhelds and other embedded devices often +wish that they could have a much smaller footprint. With PyPy it +would be possible to load a Tiny Object Space which only implements +the behaviour which they need, and skips the parts that they do not. + +A Native Reference Language ++++++++++++++++++++++++++++ +Currently, we have two widely-used implementations of Python, CPython, +and Jython. Whenever they differ, the question always comes up: Is +Jython *wrong*? By this, people mean, is this behaviour which exists +in CPython, a matter of the language definition, which Jython ought to +support, or is it instead an irrelevant detail, the historical +accident of how things happened to be implemented in CPython, which +Jython is free to ignore? It would be useful to have an independent +Reference Language, written in Python itself to stand as the model of +what is compliant Python. A PyPy Object Space will provide this. +Moreover, people who would like to experiment with a proposed Python +language change will have an easier task. New language features, such +as the *2.3 sets* could have profitted from first being written in +PyPy so that more people could use, comment, and modify them before +final approval or rejection. + +Getting better use of machines with multiple CPUs +++++++++++++++++++++++++++++++++++++++++++++++++++ +(Also known as *Killing the Global Interpreter Lock*). We believe +that we have barely scratched the surface of what can be done with +the new hardware architectures we have created. The old idea of +*one machine, one CPU* persists, so it is difficult to partition the +work in such a way to keep all the CPUs occupied. We hope to be able +to design our interpreter so that each CPU could be busy with its own +Object Space. + +Running different Object Spaces on different machines ++++++++++++++++++++++++++++++++++++++++++++++++++++++ +Well, why not? Whenever the time needed to do the calculating exceeds +the time needed to communicate between the various calculators, you +will benefit by adding more CPUS. Thus PyPy will provide you with an +alternative way to write a Cluster. (`The Beowulf Cluster`_ is +probaby the most famous of Cluster architectures). Right now 'network +computing' is in its infancy. We don't know how to take advantage of +the resources we have. Ideally, one could begin a computation on a +small device, say a mobile phone, and have the interpreter notice that +the device is underpowered for such a computation and transparantly +forward the computation to a machine with more computational power. +You could have *peak computing machines* in the same way that +electrical utilities have plants which are expensive to +run and only come on-line when demand is extremely high. As computers +become ubiquitous, we will *need* such demand based load sharing. -Multiple, Dynamically changing Implementations of a single type -*************************************************************** +.. _The Beowulf Cluster: http://www.beowulf-underground.org/index.html +Multiple, Dynamically Changing Implementations of a Single Type ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Consider the question: *What is the best way to implement a dict*? -The answer depends on how much data you intend to store in your dict. -If you never expect your dict to have more than a half dozen items, a +How one answers depends on how much data one intends to store. +If the dict is never expcted to have more than a half dozen items, a really fast list may be best. Larger dicts might best be implemented -as hashes. And for storing enormous amounts of data, a binary tree +as hashes. For storing enormous amounts of data, a binary tree might be just what you desire. In principle, there is nothing to stop your interpreter from keeping statistics on how it is being used, and to move from strategy to strategy at runtime. You could implement this in CPython, but we intend to make it a lot -*easier* to do this in PyPy_ to encourage such experimentation. +*easier* to do this in PyPy to encourage such experimentation. A better teaching vehicle -************************* -Academic computer science is littered with tiny teaching languages. -Every time we get a few new ideas in language design or pedagogical -theory we itch to create a language to express these ideas. While -understandable, this is wasteful. Many languages are implemented which -are more novel than useful, and too many are begun with insufficient -new ideas. We end up force-feeding our poor students with too many -computer languages, too quickly -- each language designed to teach a -particular point. And many of our languages are particularly weak on -everything *except* the point we wish to make. - -In reaction, many students desire to only learn **commercially -successful** languages. While they avoid trivial languages, some of them -avoid learning Computer Science altogether. They learn how to program, -but that is about it. There has got to be a better way. - -Things would go a lot more smoothly if we could only create an Object -Space which obeys the new rules we have thought up, and drop it into a -successful existing language. Comparisons between other ways of doing -things would also be a lot simpler. Finally, we could reasonably ask -our students to **implement** these ideas in Python_ modifying the -interpreter but leaving all the other bits, irrelevant for our educational -purposes as they already are. There is no better way to learn -about compiler writing, than writing compilers, but a lot of todays -education in compiler writing leaves a huge gap between 'the theory -that is in the book which the student is expected to learn' and 'what -is reasonable for a student to implement as coursework'. Students can -spend all semester overcoming difficulties in *actually getting the IO -to work*, and *interfacing with the runtime libraries*, while only -spending a fraction of the time on the concepts which you are trying -to teach. ++++++++++++++++++++++++++ +Python has proven to be an excellent first programming language. +However, once the student develops a desire to see the nuts and bolts +of how one implements a language, when they look under the hood, they +find C, sometimes the sort of C one writes when speed optimisation is +of paramont importance. For pedagological purposes, one would prefer +a language implementation whose chief virtue is *clarity* so that the +concepts are illustrated cleanly. + +However, academic computer science is littered with tiny teaching +languages. Every time we get a few new ideas in language design or +pedagogical theory we itch to create a language to express these +ideas. While understandable, this is wasteful. Many languages are +implemented which are more novel than useful, and too many are begun +with insufficient new ideas. At one extreme, we end up force-feeding +our poor students with too many computer languages, too quickly -- +each language designed to teach a particular point. Alas, many of our +languages are particularly weak on everything *except* the point we +wish to make. + +At the other extreme, many students go to university and end up only +learning how to program in commercially successful languages. This +reduces university to a Giant Trade School, where it is possible to +avoid learning Computer Science altogether. What we need is a the +middle way, a Pythonic way between purity and practicality, theory and +practice. + +PyPy may be able to help. The separation should make leaving concepts +easier, and the ability to create one's own Object Spaces provides a +useful way to compare and contrast different techniques. Finally, we +could reasonably ask our students to **implement** interesting +theories in Python, producing slightly different Object Spaces which +could leave the bulk of the language implementation unchanged. + +There is no better way to learn about compiler writing, than writing +compilers, but much of today's education in compiler writing leaves a +huge gap between 'the theory that is in the book which the student is +expected to learn' and 'what is reasonable for a student to implement +as coursework'. Students can spend all semester overcoming +difficulties in *actually getting the IO to work*, and *interfacing +with the runtime libraries*, while only spending a fraction of the +time on the concepts which you are trying to teach. -Object Spaces will provide a better fit between the the abstract +Object Spaces could provide a better fit between the the abstract concepts we wish to teach and the code written to implement just that. +A Smarter, more Dynamic Interpreter ++++++++++++++++++++++++++++++++++++ - - -Dream number Four -- You might want to change how operators work, as well -************************************************************************* -Consider y = int(x). How would you like this to work when x is 4.2, -4.5, -4.2 and -4.5? Currently Python_ says 4, 4, -4 and -4, truncating -towards zero. But for certain applications, this is not what is desired. -You would prefer round behaviour 4, 5, -4 -5 -- rounding away from zero. -Or you would like to always return the larger integer 5 5 -4 -4. Sometimes -just running an existing program and changing such behaviour can reveal -interesting embedded assumptions of which the author may be unaware. - -Changing the behaviour and seeing how the results change ought to be -straight-forward, simple, and easy. - -Dream number Five -- Running different Object Spaces on different processors of the same machine. -************************************************************************************************* -Put text in here. - -Dream number Six -- Running different Object Spaces on different machines. -************************************************************************** - -This is one of the unrealised dreams of distributed computing. It would -often be convenient to allow the various machines on a network to share -cpu resources. Thus one could begin a computation on a small device, -say a mobile phone, or a PDA, and have the program automatically notice -that the computation was too strenuous for such a device, and automatically -forward the computation to a machine with more computational power. - - -Dream number Eight -- How to avoid painful conversion of your code base to new versions of the language. -******************************************************************************************************** - -This dream is a bit far-fetched, but it is worth investigating. Right -now, whenever a new release of Python_ comes out, existing Python_ -programs have to be modified whenever there are conflicts. Thus there -is a trade off between getting the new features which contribute to -increased productivity in program design, and having to fix piles of -old code that wasn't broken until the language changed. With this -approach it may be possible to save your cake and eat it too. You -could demand that all your old modules use PyPy Object Space Nov 16 -2004, while immediately have your new modules use the brand new PyPy -Object Space which was defined yesterday. You could update any old -modules that would particularily benefit from having the new features, -and leave the old ones alone. - -Dream number Nine: faster Python -********************************* - +A Virtual Machine written in Python, should be easier to maintain and +optimise. By recording statistics and analysing the bytecodes that are +running through the machine, it is possible to find a shorter, and +faster way to run a script - the essence of optimisation. Native code +compilers do it all the time, but obviously only once at compilation +time. Interpreters can optimise in exactly same way, but at *run +time*. `The Hotspot Java Virtual Machine`_ already does this. + +.. _The Hotspot Java Virtual Machine: http://java.sun.com/products/hotspot/docs/whitepaper/Java_Hotspot_v1.4.1/Java_HSpot_WP_v1.4.1_1002_1.html + +Faster Python ++++++++++++++ +(Okay, you've caught us ...) While we are writing an adaptive, smarter compiler, we ought to be able -to make it faster. We think faster than CPython is a realistic goal, -eventually. When faster algorithms are discovered, we will be able to -quickly place them in the interpreter, because the components are -more or less independent. This is something that Armin Rigo -and Christian Tismer know a lot about, and I know very little. - -Dream number Ten: world domination and all that ... -**************************************************** -(Well, if we can pull off Dreams 1-9, this should just drop out of the -design...) +to make it faster. We think we can produce a Just-In-Time compiler which +is faster than C Python without destroying the clarity in our architecture. +Indeed, the ability to run different object spaces at the same time, in the +same interpreter will be most useful in this application. + +Speaking of Running different Object Spaces at the Same Time +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +This dream is a bit far-fetched, but it is worth investigating. Code +migration currently involves going through one's entire codebase +looking for conflicts. This makes converting to newer versions of the +language both expensive and difficult. There is a trade-off between +getting the new features which contribute to increased productivity in +program design, and having to fix piles of old code that wasn't broken +until the language changed. With multiple Object Spaces approach it +may be possible to have your cake and eat it too. + +You could load your existing modules with the Object Space they were +developed for while immediately using new features in new code that +you develop. It would be up to the PyPy interpreter to see that these +Object Spaces communicate with each other transparantly. Only modules +that would particularily benefit from having the new features, would +be modified. The rest could sleep peacefully, unchanged. + +This leads to: +World Domination +++++++++++++++++ And if we don't pull this off, we will have at least learned a lot. This in itself makes the project worth doing. Plus it's fun... But away from the dreams and back to what do we currently have? -We currently have three object spaces partially implemented. +We now have a pretty good working interpreter which implements +advanced language features such as nested scopes, generators and +metaclasses. Most **types** and **builtins** are either completely +implemented or nearly there. We have extensive unit tests, since we +believe in test driven design, even though we don't always practice +it. + +We currently have three object spaces at least partially implemented. The Trivial Object Space ++++++++++++++++++++++++ A PyPy interpreter using the TrivialObjectSpace is an interpreter with -its own main loop (written in Python_), and nothing else. This main -loop manipulates real Python_ objects and all operations are done -directly on the Python_ objects. For example, "1" really means "1" and +its own main loop (written in Python), and nothing else. This main +loop manipulates real Python objects and all operations are done +directly on the Python objects. For example, "1" really means "1" and when the interpreter encounters the BINARY_ADD bytecode instructions -the TrivialObjectSpace will just add two real Python_ objects together -using Python_'s "+". The same for lists, dictionaries, classes... We -just use Python_'s own. +the TrivialObjectSpace will just add two real Python objects together +using Python's "+". The same for lists, dictionaries, classes... We +just use Python's own. This Object Space is only useful for testing the concept of Object Spaces, and our interpreter, or even interpreting different kinds of bytecodes. @@ -243,7 +293,7 @@ ++++++++++++++++++++++++++ The Standard Object Space is the object space that works just like -Python_'s, that is, the object space whose black boxes are real Python_ +Python's, that is, the object space whose black boxes are real Python objects that work as expected. This is where the bulk of the work in PyPy has been done to date. Getting the Standard Object Space to work was a goal of the Gothenburg Sprint May 24 - 31. @@ -275,7 +325,7 @@ This we accomplished by mid-week. -By the end of the Sprint we produced our first Python_ program that +By the end of the Sprint we produced our first Python program that ran under PyPy which simply 'did something we wanted to do' and wasn't an artificial goal. Specifically, it calculated the share in foodbill for each of the 9 Sprint participants. @@ -301,10 +351,10 @@ The Annotate Object Space is the next goal. It is an example of an ObjectSpace that differs a lot from StandardObjectSpace. We have to -translate the Python_ code we have into C code. This is the sine qua +translate the Python code we have into C code. This is the sine qua non condition for our work to be actually usable. Quite unexpectedly, the major piece of the translator is itself an object space, the -AnnotateObjectSpace. Its goal is to run any Python_ code and produce C +AnnotateObjectSpace. Its goal is to run any Python code and produce C code in the background as it does so. Specifically, we take our PyPy interpreter with the Annotate Object @@ -558,11 +608,3 @@ .. [#] and the reason I used reduce instead of just a list comprehension is that I had just finished writing unit tests for reduce -- Laura -.. _Python: http://www.python.org/.. -.. _Squeak: http://www.squeak.org -.. _Smalltalk: http://www.smalltalk.org/ -.. _Scheme: http://www.swiss.ai.mit.edu/projects/scheme/ -.. _PyPy: http://www.codespeak.net/pypy/ -.. _Jython: http://www.jython.org/ -.. _Psyco: http://psyco.sourceforge.net/ -.. _Stackless: http://www.stackless.com/ \ No newline at end of file From arigo at codespeak.net Mon Jul 7 14:12:48 2003 From: arigo at codespeak.net (arigo at codespeak.net) Date: Mon, 7 Jul 2003 14:12:48 +0200 (MEST) Subject: [pypy-svn] rev 1097 - pypy/trunk/doc Message-ID: <20030707121248.514235B069@thoth.codespeak.net> Author: arigo Date: Mon Jul 7 14:12:48 2003 New Revision: 1097 Modified: pypy/trunk/doc/readme.txt Log: gave the name of the required Debian package Modified: pypy/trunk/doc/readme.txt ============================================================================== --- pypy/trunk/doc/readme.txt (original) +++ pypy/trunk/doc/readme.txt Mon Jul 7 14:12:48 2003 @@ -50,7 +50,7 @@ Go to sourceforge and download the ``snapshot`` version. Install it. -*Note to Debian users:* Be sure you have ``distutils`` installed and working before trying to install ``docutils``. +*Note to Debian users:* Be sure you installed ``python2.2-dev``, which includes ``distutils``, before trying to install ``docutils``. Once you have ``docutils`` installed, you can use it go to your shell and use it like this:: From arigo at codespeak.net Mon Jul 7 14:16:17 2003 From: arigo at codespeak.net (arigo at codespeak.net) Date: Mon, 7 Jul 2003 14:16:17 +0200 (MEST) Subject: [pypy-svn] rev 1098 - pypy/trunk/doc/sprintinfo Message-ID: <20030707121617.23FC45B069@thoth.codespeak.net> Author: arigo Date: Mon Jul 7 14:16:16 2003 New Revision: 1098 Modified: pypy/trunk/doc/sprintinfo/LouvainLaNeuveReport.txt Log: broken link fixed Modified: pypy/trunk/doc/sprintinfo/LouvainLaNeuveReport.txt ============================================================================== --- pypy/trunk/doc/sprintinfo/LouvainLaNeuveReport.txt (original) +++ pypy/trunk/doc/sprintinfo/LouvainLaNeuveReport.txt Mon Jul 7 14:16:16 2003 @@ -74,5 +74,5 @@ .. _userobject: http://codespeak.net/pipermail/pypy-svn/2003-June/000449.html .. _dictobject: http://codespeak.net/pipermail/pypy-svn/2003-June/000515.html .. _intobject: http://codespeak.net/pipermail/pypy-svn/2003-June/000443.html -.. _iterobject: http://codespeak.net/pipermail/pypy-svn/2003-June/000999.html +.. _iterobject: http://codespeak.net/pipermail/pypy-svn/2003-June/000529.html From lac at codespeak.net Mon Jul 7 14:56:31 2003 From: lac at codespeak.net (lac at codespeak.net) Date: Mon, 7 Jul 2003 14:56:31 +0200 (MEST) Subject: [pypy-svn] rev 1099 - pypy/trunk/doc Message-ID: <20030707125631.9F58E5B069@thoth.codespeak.net> Author: lac Date: Mon Jul 7 14:56:31 2003 New Revision: 1099 Modified: pypy/trunk/doc/oscon2003-paper.txt Log: More fixes. Now what to say about Annotate Space ?! Modified: pypy/trunk/doc/oscon2003-paper.txt ============================================================================== --- pypy/trunk/doc/oscon2003-paper.txt (original) +++ pypy/trunk/doc/oscon2003-paper.txt Mon Jul 7 14:56:31 2003 @@ -270,20 +270,20 @@ The Trivial Object Space ++++++++++++++++++++++++ - -A PyPy interpreter using the TrivialObjectSpace is an interpreter with -its own main loop (written in Python), and nothing else. This main -loop manipulates real Python objects and all operations are done -directly on the Python objects. For example, "1" really means "1" and -when the interpreter encounters the BINARY_ADD bytecode instructions -the TrivialObjectSpace will just add two real Python objects together -using Python's "+". The same for lists, dictionaries, classes... We -just use Python's own. +A PyPy interpreter using the Trivial Object Space is an +interpreter with its own main loop (written in Python), and nothing +else. This main loop manipulates real Python objects and all +operations are done directly on the Python objects. For example, "1" +really means "1" and when the interpreter encounters the BINARY_ADD +bytecode instructions the Trivial Object Space will just add two real +Python objects together using Python's "+". The same for lists, +dictionaries, classes ... we just use Python's own. Delegate Object +Space might have been a better name for this Object Space. This Object Space is only useful for testing the concept of Object Spaces, and our interpreter, or even interpreting different kinds of bytecodes. -This is already done; it is funny to watch "dis.dis" disassembling itself -painfully slowly. +This is already implemented; it is funny to watch *dis.dis* disassembling +itself painfully slowly. Getting this to work was a goal of the Hildesheim Sprint February 16-23. It demonstrated that our Object Space Concept was viable, and that our @@ -291,34 +291,46 @@ The Standard Object Space ++++++++++++++++++++++++++ - The Standard Object Space is the object space that works just like Python's, that is, the object space whose black boxes are real Python -objects that work as expected. This is where the bulk of the work in -PyPy has been done to date. Getting the Standard Object Space to +objects that work as expected. Getting the Standard Object Space to work was a goal of the Gothenburg Sprint May 24 - 31. -Specifically we needed to get this code: +The Standard Object Space defines an abstract parent class, W_Object, +and a bunch of subclasses like W_IntObject, W_ListObject, and so on. A +wrapped object (a *black box* for the interpreter main loop) is thus +an instance of one of these classes. When the main loop invokes an +operation, say the addition, between two wrapped objects w1 and w2, +the StandardObjectSpace does some internal dispatching (similar to +"Object/ abstract.c" in CPython) and invokes a method of the proper +W_XyzObject class that can do the operation. The operation itself is +done with the primitives allowed by Restricted Python. The result is +constructed as a wrapped object again. + +The following was our first trivial program:: -aStr = 'hello world' -print len(aStr) + ### our first trivial program ### + + aStr = 'hello world' + print len(aStr) to run. We needed types and builtins to work. This ran, slowly. -Then we added strings. Getting this code to work was the second -goal.:: +We began testing and adding types and builtins. - ### a trivial program to test strings, lists, functions and methods ### +Getting this code to work was the second goal.:: + ### a trivial program to test strings, lists, functions and methods ### + def addstr(s1,s2): - return s1 + s2 + return s1 + s2 str = "an interesting string" str2 = 'another::string::xxx::y:aa' str3 = addstr(str,str2) - arr = []oscon2003-paper.txt + arr = [] for word in str.split(): - if word in str2.split('::'): + if word in str2.split('::'): arr.append(word) print ''.join(arr) print "str + str2 = ", str3 @@ -327,64 +339,41 @@ By the end of the Sprint we produced our first Python program that ran under PyPy which simply 'did something we wanted to do' and wasn't -an artificial goal. Specifically, it calculated the share in foodbill -for each of the 9 Sprint participants. -:: -### the first use of PyPy as a tool to do something else ### [#]_ +an artificial goal. It calculated the week long foodbill, and divided +the result by the 9 Sprint participants.:: -slips=[(1, 'Kals MatMarkn', 6150, 'Chutney for Curry', 'dinner Saturday'), - (2, 'Kals MatMarkn', 32000, 'Spaghetti, Beer', 'dinner Monday'), - (2, 'Kals MatMarkn', -810, 'Deposit on Beer Bottles', 'various'), - (3, 'Fram', 7700, 'Rice and Curry Spice', 'dinner Saturday'), - (23, 'Fram', 2975, 'Potatoes', '3.5 kg @ 8.50SEK'), - (23, 'Fram', 1421, 'Peas', 'Thursday dinner'), - ... - ] - -print (reduce(lambda x, y: x+y, [t[2] for t in slips], 0))/900 [#]_ - -Pypy said: 603. Dinner for a week cost 603 Swedish Krona -- or approximately -50$ US. So if we can't have world domination, or get our Object Space -to work, a new career in Sprint cost control beckons. :-) - -3. The Annotate Object Space - -The Annotate Object Space is the next goal. It is an example of an -ObjectSpace that differs a lot from StandardObjectSpace. We have to -translate the Python code we have into C code. This is the sine qua -non condition for our work to be actually usable. Quite unexpectedly, -the major piece of the translator is itself an object space, the -AnnotateObjectSpace. Its goal is to run any Python code and produce C -code in the background as it does so. - -Specifically, we take our PyPy interpreter with the Annotate Object -Space instead of the Standard Object Space, and run that, asking it to -interpret our generated bytecode. A wrapped object is now the name of -a variable in the C program we are emitting, for example: - -The add method in the Annotate Object Space takes two variable -names, x and y, and emits the C code z = x + y; where z is a new variable -name which is returned as the result of add. (We will actually need to -make the wrapped objects a bit more elaborate so that we can also record, -besides the C variable name, its basic type). - -At the time of this writing, it is not clear whether this is too -ambitious a goal for the Third Sprint, held in Louvain-la-Neuve, -Belgium (near Brussels), June 21 - 24 . + ### the first real PyPy Program ### [#]_ ------------- + slips=[(1, 'Kals MatMarkn', 6150, 'Chutney for Curry', 'dinner Saturday'), + (2, 'Kals MatMarkn', 32000, 'Spaghetti, Beer', 'dinner Monday'), + (2, 'Kals MatMarkn', -810, 'Deposit on Beer Bottles', 'various'), + (3, 'Fram', 7700, 'Rice and Curry Spice', 'dinner Saturday'), + ( ... ) + (23, 'Fram', 2975, 'Potatoes', '3.5 kg @ 8.50SEK'), + (23, 'Fram', 1421, 'Peas', 'Thursday dinner'),] + + print (reduce(lambda x, y: x+y, [t[2] for t in slips], 0))/900 [#]_ + +Pypy said: 603 SEK, or appoximately 50 USD. Don't believe people who +tell you that Sprints are too expensive to hold. + +The Annotation Object Space ++++++++++++++++++++++++++++ +Our third Sprint was held at Louvain-la-Neuve, Belgium (near +Brussels), June 21 - 24. Great progress was made with the The +Annotation Object Space, and began abstract, symbolic interpretation. -More details on how we actually do this stuff. - -A crucial concept is Multimethods (yanked from the wiki) +Current plans are to get the Annotation Object Space to emit Pyrex. +Multimethods +************ Interpreter-level classes correspond to implementations of application-level types. The hierarchy among the classes used for the implementations is convenient for implementation purposes. It is not related to any application-level type hierarchy. Dispatch - +++++++++ Multimethods dispatch by looking in a set of registered functions. Each registered function has a signature, which defines which object implementation classes are accepted at the corresponding @@ -399,7 +388,6 @@ argument. For example it should not be stored in a data structure, nor be queried for type, nor be used for another multimethod dispatch -- the only thing you should do is read and write its internal data. -[[FIXME: discuss w/Samuele & Armin]] For example, 'getattr(obj, attr)' is implemented with a W_StringObject second argument when all it needs is just the name of the attr, and @@ -407,6 +395,7 @@ obj.__dict__. Delegation +++++++++++ Delegation is a transparent convertion mechanism between object implementations. The convertion can give a result of a different type @@ -423,7 +412,7 @@ the process might require some work. Types - ++++++ Types are implemented by the class W_TypeObject. This is where inheritance and the Method Resolution Order are defined, and where attribute look-ups are done. @@ -440,7 +429,7 @@ W_UserObject -> int delegator. Specifics of multimethods - ++++++++++++++++++++++++++ Multimethods dispatch more-specific-first, left-to-right (i.e. if there is an exact match for the first argument it will always be tried first). @@ -457,7 +446,7 @@ they return an object of an already-seen class. Registration - +++++++++++++ The register() method of multimethods adds a function to its database of functions, with the given signature. A function that raises FailedToImplement causes the next match to be tried. @@ -472,7 +461,7 @@ A priority ordering between delegators is used. See objspace.PRIORITY_*. Translation - ++++++++++++ The code in multimethod.py is not supposed to be read by the translator-to-C. Special optimized code will be generated instead (typically some kind of precomputed dispatch tables). @@ -482,7 +471,7 @@ the chaining and loop detection can be done in advance. Multimethod slicing - ++++++++++++++++++++ Multimethods are visible to user code as (bound or unbound) methods defined for the corresponding types. (At some point built-in functions like len() and the operator.xxx() should really directly map to the @@ -504,6 +493,10 @@ Some multimethods can also be sliced along their second argument, e.g. for __radd__(). +Conclusions +=========== + + .. [#] The PyPy homespage: http://www.codespeak.net/pypy/ .. [#] See for instance, *lunacy* http://www.nightmare.com/~rushing/lunacy/ .. [#] The Squeak homespage: http://www.squeak.org/ From lac at codespeak.net Mon Jul 7 17:21:00 2003 From: lac at codespeak.net (lac at codespeak.net) Date: Mon, 7 Jul 2003 17:21:00 +0200 (MEST) Subject: [pypy-svn] rev 1100 - pypy/trunk/doc Message-ID: <20030707152100.8C5725B069@thoth.codespeak.net> Author: lac Date: Mon Jul 7 17:21:00 2003 New Revision: 1100 Modified: pypy/trunk/doc/oscon2003-paper.txt Log: More changes. Getting more tolerable. Modified: pypy/trunk/doc/oscon2003-paper.txt ============================================================================== --- pypy/trunk/doc/oscon2003-paper.txt (original) +++ pypy/trunk/doc/oscon2003-paper.txt Mon Jul 7 17:21:00 2003 @@ -66,6 +66,14 @@ Terminology (a short digression) ******************************** +In PyPy there is a distinction between **application level code**, which +is the world that PyPy is interpreting, and which can use the full features +of the language, and the **interpreter level code** which is the world +that CPython is interpreting. This needs to be written in a subset of Python. +(Currently you are mainly restricted to immutable objects; no dicts, you can +use globals but you cannot modify them. *What defines Restricted Python?* +is a matter of current debate. + In a Python-like language, a running interpreter has three main parts: * the main loop, which suffles data around and calls the operations defined in the object library according to the bytecode. @@ -96,6 +104,7 @@ ++++++ or Dreams, if you prefer + A Slimmer Python ++++++++++++++++ People who write code for handhelds and other embedded devices often @@ -115,10 +124,10 @@ Reference Language, written in Python itself to stand as the model of what is compliant Python. A PyPy Object Space will provide this. Moreover, people who would like to experiment with a proposed Python -language change will have an easier task. New language features, such -as the *2.3 sets* could have profitted from first being written in -PyPy so that more people could use, comment, and modify them before -final approval or rejection. +language change will have an easier task. Proposed new language +features, could profit from first being written in PyPy so that more +people could use, comment, and modify them before final approval or +rejection. Getting better use of machines with multiple CPUs ++++++++++++++++++++++++++++++++++++++++++++++++++ @@ -191,7 +200,7 @@ middle way, a Pythonic way between purity and practicality, theory and practice. -PyPy may be able to help. The separation should make leaving concepts +PyPy may be able to help. The separation should make learning concepts easier, and the ability to create one's own Object Spaces provides a useful way to compare and contrast different techniques. Finally, we could reasonably ask our students to **implement** interesting @@ -210,9 +219,22 @@ Object Spaces could provide a better fit between the the abstract concepts we wish to teach and the code written to implement just that. +Runtime Adaptation of C-Libraries and System-Calls +++++++++++++++++++++++++++++++++++++++++++++++++++ +Python is already widely used for integrating and driving C-libraries +(for numerical compuatation, 3D-modeling etc.). We dream +of introducing runtime mechanisms that allow PyPy to directly setup and +execute "native" calls on a machine. For this to work we need +"trampolin" (assembler-) functions that build a C-like stackframe +and trigger a call directly into e.g. the linux kernel or +any C-library without having to use a C-compiler. This technique +would clearly be of great value to embedded devices but also +to regular python applications that could more easily use C-libraries +once they obtain a pythonic description of the library (possibly +generated from ``.h`` files). + A Smarter, more Dynamic Interpreter +++++++++++++++++++++++++++++++++++ - A Virtual Machine written in Python, should be easier to maintain and optimise. By recording statistics and analysing the bytecodes that are running through the machine, it is possible to find a shorter, and @@ -230,7 +252,8 @@ to make it faster. We think we can produce a Just-In-Time compiler which is faster than C Python without destroying the clarity in our architecture. Indeed, the ability to run different object spaces at the same time, in the -same interpreter will be most useful in this application. +same interpreter will be most useful in this application. Psyco already +uses similar techniques to great effect. Speaking of Running different Object Spaces at the Same Time ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ @@ -352,7 +375,7 @@ (23, 'Fram', 2975, 'Potatoes', '3.5 kg @ 8.50SEK'), (23, 'Fram', 1421, 'Peas', 'Thursday dinner'),] - print (reduce(lambda x, y: x+y, [t[2] for t in slips], 0))/900 [#]_ + print (reduce(lambda x, y: x+y, [t[2] for t in slips], 0))/900 Pypy said: 603 SEK, or appoximately 50 USD. Don't believe people who tell you that Sprints are too expensive to hold. @@ -362,54 +385,59 @@ Our third Sprint was held at Louvain-la-Neuve, Belgium (near Brussels), June 21 - 24. Great progress was made with the The Annotation Object Space, and began abstract, symbolic interpretation. +(We also spent a lot of time firming up the Standard Object Space, and +trying to write documentation). -Current plans are to get the Annotation Object Space to emit Pyrex. +In the two object spaces so far, application-level objects are +represented in the interpreter as objects that represent a value. +This is so obvious as to not need pointing out, except for the fact +that the Annotation space does something completely different. + +Here the interpreter-level object corresponding to a application-level +variable does not describe the value of the variable, but rather the +state of knowledge about the contents of the variable. +For example, after the code:: + + x = 1 + y = 2 + z = x + y + +we know exactly what *x*, *y* and *z* contain: the integers *1*, *2* and *3* +respectively, and this is how the annotation object space represents +them: there is a class W_Constant that represents totally known values. + +However in:: + + def f(x, y): + z = x + y + + f(1, 2) + f(2, 3) + +we know less. We know that x and y only contain integers, but their +values are no longer entirely fixed. In this case, the annotation +object space could chose to represent the variable in the body of f +as *either* the constant *1* or the constant *2*, but at present it punts +and simply represents it as an instance of W_Integer. + +The eventual hope is to run all of the code that implements PyPy's +interpreter and the standard object space with the annotation object +space and gain sufficient knowledge of the values involved to generate +efficent code (in C, Pyrex_, O'Caml, Java or whatever) to do the same +job. + +If you're wondering how we expect to get a speed up of 20000 times by +this translation when a speed up of 100 or so times is all that +usually obtained by rewriting in C, you have to understand that the +main reason for the standard object space's current slowness is the +computation of which code to execute each time a multimethod is +called. The knowledge gathered by the Annontation Object Space should +be sufficient to remove or at lesat substantially reduce this computation +for most of the call sites. -Multimethods -************ -Interpreter-level classes correspond to implementations of -application-level types. The hierarchy among the classes used for the -implementations is convenient for implementation purposes. It is not -related to any application-level type hierarchy. +Current plans are to get the Annotation Object Space to emit Pyrex_. -Dispatch -++++++++ -Multimethods dispatch by looking in a set of registered -functions. Each registered function has a signature, which defines -which object implementation classes are accepted at the corresponding -argument position. - -The name 'W_ANY' is a synonym for 'W_Object' (currently, possibly -'object' later). As it accepts anything, it is the only way to -guarantee that the registered function will be called with exactly the -same object as was passed originally. ATTENTION: in all other cases -the argument received by the function may have been converted in some -way. It must thus not be considered to be 'id'entical to the original -argument. For example it should not be stored in a data structure, nor -be queried for type, nor be used for another multimethod dispatch -- -the only thing you should do is read and write its internal data. - -For example, 'getattr(obj, attr)' is implemented with a W_StringObject -second argument when all it needs is just the name of the attr, and -with a W_ANY when the 'attr' object could be used as a key in -obj.__dict__. - -Delegation -++++++++++ - -Delegation is a transparent convertion mechanism between object -implementations. The convertion can give a result of a different type -(e.g. int -> float) or of the same type (e.g. W_VeryLongString -> -str). There is a global table of delegators. We should not rely on the -delegators to be tried in any particlar order, or at all (e.g. the int --> float delegator could be ignored when we know that no registered -function will accept a float anyway). - -Delegation is also used to emulate inheritance between built-in types -(e.g. bool -> int). This is done by delegation because there is no -reason that a particular implementation of a sub-type can be trivially -typecast to some other particular implementation of the parent type; -the process might require some work. +.. _Pyrex: http://www.cosc.canterbury.ac.nz/~greg/python/Pyrex/ Types +++++ @@ -428,6 +456,16 @@ implement special methods like __int__() by calling them within a W_UserObject -> int delegator. +Multimethods +++++++++++++ +Interpreter-level classes correspond to implementations of +application-level types. The hierarchy among the classes used for the +implementations is convenient for implementation purposes. It is not +related to any application-level type hierarchy. Multimethods +dispatch by looking in a set of registered functions. Each registered +function has a signature, which defines which object implementation +classes are accepted at the corresponding argument position. + Specifics of multimethods +++++++++++++++++++++++++ Multimethods dispatch more-specific-first, left-to-right (i.e. if @@ -458,27 +496,15 @@ potentially be tried, and recursively on each other's results to do chaining. -A priority ordering between delegators is used. See objspace.PRIORITY_*. - -Translation -+++++++++++ -The code in multimethod.py is not supposed to be read by the -translator-to-C. Special optimized code will be generated instead -(typically some kind of precomputed dispatch tables). - -Delegation is special-cased too. Most delegators will be found to -return an object of a statically known class, which means that most of -the chaining and loop detection can be done in advance. - Multimethod slicing +++++++++++++++++++ Multimethods are visible to user code as (bound or unbound) methods defined for the corresponding types. (At some point built-in functions -like len() and the operator.xxx() should really directly map to the +like *len()* and the *operator.xxx()* should really directly map to the multimethods themselves, too.) -To build a method from a multimethod (e.g. as in 'l.append' or -'int.__add__'), the result is actually a "slice" of the whole +To build a method from a multimethod (e.g. as in *l.append* or +*int.__add__*), the result is actually a "slice" of the whole multimethod, i.e. a sub-multimethod in which the registration table has been trimmed down. (Delegation mechanisms are not restricted for sliced multimethods.) @@ -494,11 +520,24 @@ e.g. for __radd__(). Conclusions -=========== - ++++++++++++ +It is a little early for conclusions, but our architecture seems to +be working so far. Sprints are a lot of fun, and a great way to write +code, and meet interesting people. + +Thank you ++++++++++ +The members of the PyPy team are distinctly grateful to RyanAir_, without +which holding Sprints would be prohibitively expensive, and the +Subversion_ development team, without whom restructuring the entire universe +whenever we feel like it would have been close to impossible. + +.. _RyanAir: http://www.ryanair.com/ +.. _Subversion: http://subversion.tigris.org/ + .. [#] The PyPy homespage: http://www.codespeak.net/pypy/ -.. [#] See for instance, *lunacy* http://www.nightmare.com/~rushing/lunacy/ +.. [#] See for instance, Scheme48's PreScheme .. [#] The Squeak homespage: http://www.squeak.org/ .. [#] See *Back to the Future The Story of Squeak, A Practical Smalltalk Written in Itself* ftp://st.cs.uiuc.edu/Smalltalk/Squeak/docs/OOPSLA.Squeak.html @@ -596,8 +635,4 @@ ] print [t[2] for t in slips] - print (reduce(lambda x, y: x+y, [t[2] for t in slips], 0))/900 - -.. [#] and the reason I used reduce instead of just a list comprehension - is that I had just finished writing unit tests for reduce -- Laura - + print (reduce(lambda x, y: x+y, [t[2] for t in slips], 0))/900 \ No newline at end of file From hpk at codespeak.net Mon Jul 7 17:29:08 2003 From: hpk at codespeak.net (hpk at codespeak.net) Date: Mon, 7 Jul 2003 17:29:08 +0200 (MEST) Subject: [pypy-svn] rev 1101 - pypy/trunk/doc Message-ID: <20030707152908.621105B069@thoth.codespeak.net> Author: hpk Date: Mon Jul 7 17:29:08 2003 New Revision: 1101 Modified: pypy/trunk/doc/oscon2003-paper.txt Log: clarified the Pyrex-code generation bit Modified: pypy/trunk/doc/oscon2003-paper.txt ============================================================================== --- pypy/trunk/doc/oscon2003-paper.txt (original) +++ pypy/trunk/doc/oscon2003-paper.txt Mon Jul 7 17:29:08 2003 @@ -435,7 +435,8 @@ be sufficient to remove or at lesat substantially reduce this computation for most of the call sites. -Current plans are to get the Annotation Object Space to emit Pyrex_. +Current plans are to use the information gathered from the Annotation Object +Space to emit Pyrex_ code which itself will generate a CPython extension. .. _Pyrex: http://www.cosc.canterbury.ac.nz/~greg/python/Pyrex/ @@ -635,4 +636,4 @@ ] print [t[2] for t in slips] - print (reduce(lambda x, y: x+y, [t[2] for t in slips], 0))/900 \ No newline at end of file + print (reduce(lambda x, y: x+y, [t[2] for t in slips], 0))/900 From mwh at codespeak.net Mon Jul 7 17:56:52 2003 From: mwh at codespeak.net (mwh at codespeak.net) Date: Mon, 7 Jul 2003 17:56:52 +0200 (MEST) Subject: [pypy-svn] rev 1102 - in pypy/trunk/src/pypy: appspace/test interpreter interpreter/test module/test objspace/ann/test objspace/std/testtool Message-ID: <20030707155652.439FC5BC43@thoth.codespeak.net> Author: mwh Date: Mon Jul 7 17:56:51 2003 New Revision: 1102 Modified: pypy/trunk/src/pypy/appspace/test/autopath.py pypy/trunk/src/pypy/interpreter/autopath.py pypy/trunk/src/pypy/interpreter/test/autopath.py pypy/trunk/src/pypy/module/test/autopath.py pypy/trunk/src/pypy/objspace/ann/test/autopath.py pypy/trunk/src/pypy/objspace/std/test/autopath.py pypy/trunk/src/pypy/tool/autopath.py Log: Changes to autopath.py: make it work on Mac OS X (don't know what was wrong before, sorry, not that interested in finding out) remove directories that are inside the pypy tree from sys.path (reduces problems with 2.3 which expects to find a module called opcode in the std library) Modified: pypy/trunk/src/pypy/appspace/test/autopath.py ============================================================================== --- pypy/trunk/src/pypy/appspace/test/autopath.py (original) +++ pypy/trunk/src/pypy/appspace/test/autopath.py Mon Jul 7 17:56:51 2003 @@ -37,13 +37,15 @@ partdir = head head, tail = os.path.split(head) if tail == part: + sys.path = [p for p in sys.path if not p.startswith(head)] if head not in sys.path: sys.path.insert(0, head) return partdir, this_dir + raise EnvironmentError, "'%s' missing in '%r'" % (pathpart,this_path) def __clone(): - """ clone master version of autopath.y into all subdirs """ + """ clone master version of autopath.py into all subdirs """ from os.path import join, walk if not this_dir.endswith(join('pypy','tool')): raise EnvironmentError("can only clone master version " @@ -59,7 +61,7 @@ print "checkok", fn else: print "syncing", fn - f.seek(0) + f = open(fn, 'w') f.write(arg) finally: f.close() Modified: pypy/trunk/src/pypy/interpreter/autopath.py ============================================================================== --- pypy/trunk/src/pypy/interpreter/autopath.py (original) +++ pypy/trunk/src/pypy/interpreter/autopath.py Mon Jul 7 17:56:51 2003 @@ -37,13 +37,15 @@ partdir = head head, tail = os.path.split(head) if tail == part: + sys.path = [p for p in sys.path if not p.startswith(head)] if head not in sys.path: sys.path.insert(0, head) return partdir, this_dir + raise EnvironmentError, "'%s' missing in '%r'" % (pathpart,this_path) def __clone(): - """ clone master version of autopath.y into all subdirs """ + """ clone master version of autopath.py into all subdirs """ from os.path import join, walk if not this_dir.endswith(join('pypy','tool')): raise EnvironmentError("can only clone master version " @@ -59,7 +61,7 @@ print "checkok", fn else: print "syncing", fn - f.seek(0) + f = open(fn, 'w') f.write(arg) finally: f.close() Modified: pypy/trunk/src/pypy/interpreter/test/autopath.py ============================================================================== --- pypy/trunk/src/pypy/interpreter/test/autopath.py (original) +++ pypy/trunk/src/pypy/interpreter/test/autopath.py Mon Jul 7 17:56:51 2003 @@ -37,13 +37,15 @@ partdir = head head, tail = os.path.split(head) if tail == part: + sys.path = [p for p in sys.path if not p.startswith(head)] if head not in sys.path: sys.path.insert(0, head) return partdir, this_dir + raise EnvironmentError, "'%s' missing in '%r'" % (pathpart,this_path) def __clone(): - """ clone master version of autopath.y into all subdirs """ + """ clone master version of autopath.py into all subdirs """ from os.path import join, walk if not this_dir.endswith(join('pypy','tool')): raise EnvironmentError("can only clone master version " @@ -59,7 +61,7 @@ print "checkok", fn else: print "syncing", fn - f.seek(0) + f = open(fn, 'w') f.write(arg) finally: f.close() Modified: pypy/trunk/src/pypy/module/test/autopath.py ============================================================================== --- pypy/trunk/src/pypy/module/test/autopath.py (original) +++ pypy/trunk/src/pypy/module/test/autopath.py Mon Jul 7 17:56:51 2003 @@ -37,13 +37,15 @@ partdir = head head, tail = os.path.split(head) if tail == part: + sys.path = [p for p in sys.path if not p.startswith(head)] if head not in sys.path: sys.path.insert(0, head) return partdir, this_dir + raise EnvironmentError, "'%s' missing in '%r'" % (pathpart,this_path) def __clone(): - """ clone master version of autopath.y into all subdirs """ + """ clone master version of autopath.py into all subdirs """ from os.path import join, walk if not this_dir.endswith(join('pypy','tool')): raise EnvironmentError("can only clone master version " @@ -59,7 +61,7 @@ print "checkok", fn else: print "syncing", fn - f.seek(0) + f = open(fn, 'w') f.write(arg) finally: f.close() Modified: pypy/trunk/src/pypy/objspace/ann/test/autopath.py ============================================================================== --- pypy/trunk/src/pypy/objspace/ann/test/autopath.py (original) +++ pypy/trunk/src/pypy/objspace/ann/test/autopath.py Mon Jul 7 17:56:51 2003 @@ -37,13 +37,15 @@ partdir = head head, tail = os.path.split(head) if tail == part: + sys.path = [p for p in sys.path if not p.startswith(head)] if head not in sys.path: sys.path.insert(0, head) return partdir, this_dir + raise EnvironmentError, "'%s' missing in '%r'" % (pathpart,this_path) def __clone(): - """ clone master version of autopath.y into all subdirs """ + """ clone master version of autopath.py into all subdirs """ from os.path import join, walk if not this_dir.endswith(join('pypy','tool')): raise EnvironmentError("can only clone master version " @@ -59,7 +61,7 @@ print "checkok", fn else: print "syncing", fn - f.seek(0) + f = open(fn, 'w') f.write(arg) finally: f.close() Modified: pypy/trunk/src/pypy/objspace/std/test/autopath.py ============================================================================== --- pypy/trunk/src/pypy/objspace/std/test/autopath.py (original) +++ pypy/trunk/src/pypy/objspace/std/test/autopath.py Mon Jul 7 17:56:51 2003 @@ -37,13 +37,15 @@ partdir = head head, tail = os.path.split(head) if tail == part: + sys.path = [p for p in sys.path if not p.startswith(head)] if head not in sys.path: sys.path.insert(0, head) return partdir, this_dir + raise EnvironmentError, "'%s' missing in '%r'" % (pathpart,this_path) def __clone(): - """ clone master version of autopath.y into all subdirs """ + """ clone master version of autopath.py into all subdirs """ from os.path import join, walk if not this_dir.endswith(join('pypy','tool')): raise EnvironmentError("can only clone master version " @@ -59,7 +61,7 @@ print "checkok", fn else: print "syncing", fn - f.seek(0) + f = open(fn, 'w') f.write(arg) finally: f.close() Modified: pypy/trunk/src/pypy/tool/autopath.py ============================================================================== --- pypy/trunk/src/pypy/tool/autopath.py (original) +++ pypy/trunk/src/pypy/tool/autopath.py Mon Jul 7 17:56:51 2003 @@ -37,13 +37,15 @@ partdir = head head, tail = os.path.split(head) if tail == part: + sys.path = [p for p in sys.path if not p.startswith(head)] if head not in sys.path: sys.path.insert(0, head) return partdir, this_dir + raise EnvironmentError, "'%s' missing in '%r'" % (pathpart,this_path) def __clone(): - """ clone master version of autopath.y into all subdirs """ + """ clone master version of autopath.py into all subdirs """ from os.path import join, walk if not this_dir.endswith(join('pypy','tool')): raise EnvironmentError("can only clone master version " @@ -59,7 +61,7 @@ print "checkok", fn else: print "syncing", fn - f.seek(0) + f = open(fn, 'w') f.write(arg) finally: f.close() From mwh at codespeak.net Mon Jul 7 18:10:03 2003 From: mwh at codespeak.net (mwh at codespeak.net) Date: Mon, 7 Jul 2003 18:10:03 +0200 (MEST) Subject: [pypy-svn] rev 1103 - in pypy/trunk/src/pypy: interpreter tool Message-ID: <20030707161003.77CD35BEE7@thoth.codespeak.net> Author: mwh Date: Mon Jul 7 18:10:02 2003 New Revision: 1103 Added: pypy/trunk/src/pypy/tool/ppdb.py pypy/trunk/src/pypy/tool/testpm.py Modified: pypy/trunk/src/pypy/interpreter/unittest_w.py pypy/trunk/src/pypy/tool/option.py pypy/trunk/src/pypy/tool/test.py Log: Some fairly extensive changes to the test rig. There are two conceptual changes, but they are two textually entangled to be easily checked in separately :-( The first change is allowing a test to skip, by raising a pypy.tool.test.TestSkip exception. test.objspace() raises TestSkip if it is asked for a specific flavour of object space and that differs from the specific flavour of object space that is being tested (as controlled by command-line arguments). This change is all of the changes to interpreter/unittest_w.py and some of the work in tool/test.py. The other change is a new option (-k, for no good reason other than -i already being taken) that drops you into a interactive session when a test run has failures. From this you can list the errors ('l'), print tracebacks ('tb') and drop into a pdb session for each failure ('d'). Blank lines and 'q' quit. I've also added a sketal PyPy-specialized subclass of pdb.Pdb. Modified: pypy/trunk/src/pypy/interpreter/unittest_w.py ============================================================================== --- pypy/trunk/src/pypy/interpreter/unittest_w.py (original) +++ pypy/trunk/src/pypy/interpreter/unittest_w.py Mon Jul 7 18:10:02 2003 @@ -57,6 +57,52 @@ class IntTestCase(unittest.TestCase): """ enrich TestCase with wrapped-methods """ + def __init__(self, methodName='runTest'): + self.methodName = methodName + unittest.TestCase.__init__(self, methodName) + + def __call__(self, result=None): + from pypy.tool.test import TestSkip + if result is None: result = self.defaultTestResult() + result.startTest(self) + testMethod = getattr(self, self.methodName) + try: + try: + self.setUp() + except TestSkip: + result.addSkip(self) + return + except KeyboardInterrupt: + raise + except: + result.addError(self, self._TestCase__exc_info()) + return + + ok = 0 + try: + testMethod() + ok = 1 + except self.failureException, e: + result.addFailure(self, self._TestCase__exc_info()) + except TestSkip: + result.addSkip(self) + return + except KeyboardInterrupt: + raise + except: + result.addError(self, self._TestCase__exc_info()) + + try: + self.tearDown() + except KeyboardInterrupt: + raise + except: + result.addError(self, self._TestCase__exc_info()) + ok = 0 + if ok: result.addSuccess(self) + finally: + result.stopTest(self) + def failUnless_w(self, w_condition, msg=None): condition = self.space.is_true(w_condition) @@ -100,15 +146,11 @@ class AppTestCase(IntTestCase): - def __init__(self, methodName='runTest'): - self.methodName = methodName - unittest.TestCase.__init__(self, methodName) - def __call__(self, result=None): if type(getattr(self, self.methodName)) != WrappedFunc: setattr(self, self.methodName, WrappedFunc(self, getattr(self, self.methodName))) - return unittest.TestCase.__call__(self, result) + return IntTestCase.__call__(self, result) def setUp(self): from pypy.tool import test Modified: pypy/trunk/src/pypy/tool/option.py ============================================================================== --- pypy/trunk/src/pypy/tool/option.py (original) +++ pypy/trunk/src/pypy/tool/option.py Mon Jul 7 18:10:02 2003 @@ -40,8 +40,6 @@ op = optik.OptionParser() op.add_options(optionlist) options, args = op.parse_args(argv, input_options) - if not input_options.spaces: - input_options.spaces.append(os.environ.get('OBJSPACE', 'trivial')) return args def objspace(name='', _spacecache={}): @@ -49,12 +47,13 @@ this is configured via the environment variable OBJSPACE """ + if not name: - if hasattr(Options, 'spacename'): - name = Options.spacename - else: + if Options.spaces: name = Options.spaces[-1] - + else: + name = os.environ.get('OBJSPACE', 'trivial') + try: return _spacecache[name] except KeyError: Added: pypy/trunk/src/pypy/tool/ppdb.py ============================================================================== --- (empty file) +++ pypy/trunk/src/pypy/tool/ppdb.py Mon Jul 7 18:10:02 2003 @@ -0,0 +1,22 @@ +# it had to happen: a customized version of pdb for pypy; Py Py +# DeBugger, if you please. + +# i only plan to support post morterm debugging! my head hurts if my +# thoughts even go near any alternative! + +import pdb, sys + +class PPdb(pdb.Pdb): + def do_bta(self, line): + self.operr.print_application_traceback(self.space, sys.stdout) + +def post_mortem(space, t, operr): + # need app-level tb too? + p = PPdb() + p.reset() + p.space = space + p.operr = operr + while t.tb_next is not None: + t = t.tb_next + p.interaction(t.tb_frame, t) + Modified: pypy/trunk/src/pypy/tool/test.py ============================================================================== --- pypy/trunk/src/pypy/tool/test.py (original) +++ pypy/trunk/src/pypy/tool/test.py Mon Jul 7 18:10:02 2003 @@ -1,11 +1,10 @@ import autopath -import os, sys, unittest, re, warnings, unittest, traceback +import os, sys, unittest, re, warnings, unittest, traceback, StringIO from unittest import TestCase, TestLoader import pypy.interpreter.unittest_w from pypy.tool.optik import make_option -from pypy.tool import optik, option -from pypy.tool.option import objspace +from pypy.tool import optik, option, ppdb IntTestCase = pypy.interpreter.unittest_w.IntTestCase AppTestCase = pypy.interpreter.unittest_w.AppTestCase @@ -13,21 +12,13 @@ class MyTestSuite(unittest.TestSuite): def __call__(self, result): - """ execute the tests, invokes underlyning unittest.__call__""" + """ execute the tests, invokes underlying unittest.__call__""" - # XXX here is probably not the best place - # to check for test/objspace mismatch count = self.countTestCases() if not count: return result fm = getattr(self, 'frommodule','') - for spacename in ('std','trivial','ann'): - if fm and fm.startswith('pypy.objspace.' + spacename) and \ - Options.spacename != spacename: - sys.stderr.write("\n%s skip for objspace %r" % ( - fm, Options.spacename)) - return result if fm and Options.verbose==0: sys.stderr.write('\n%s [%d]' %(fm, count)) @@ -60,21 +51,10 @@ unittest.TestResult.addError(self, test, err) def addSuccess(self, test): self.successes.append(test) + def addSkip(self, test): + self.testsRun -= 1 class MyTextTestResult(unittest._TextTestResult): - - def munge(self, list, test, err): - import StringIO - from pypy.interpreter.baseobjspace import OperationError - text1 = list.pop()[1] - if isinstance(err[1], OperationError): - sio = StringIO.StringIO() - err[1].print_application_traceback(test.space, sio) - text2 = sio.getvalue() - - list.append((test, text1 + "\nand at app-level:\n\n" + text2)) - else: - list.append((test, text1)) def addError(self, test, err): from pypy.interpreter.baseobjspace import OperationError @@ -83,11 +63,71 @@ self.addFailure(test, err) return unittest._TextTestResult.addError(self, test, err) - self.munge(self.errors, test, err) + self.errors[-1] = (test, sys.exc_info()) def addFailure(self, test, err): unittest._TextTestResult.addFailure(self, test, err) - self.munge(self.failures, test, err) + self.failures[-1] = (test, sys.exc_info()) + + def addSkip(self, test): + self.testsRun -= 1 + if self.showAll: + self.stream.writeln("skipped") + elif self.dots: + self.stream.write('s') + + def interact(self): + efs = self.errors + self.failures + from pypy.tool.testpm import TestPM + c = TestPM(efs) + c.cmdloop() + return + def proc_input(input): + r = int(input) + if r < 0 or r >= len(efs): + raise ValueError + return r + while 1: + i = 0 + for t, e in efs: + print i, t.methodName + i += 1 + while 1: + input = raw_input('itr> ') + if not input: + return + try: + r = proc_input(input) + except ValueError: + continue + else: + break + s, (t, v, tb) = efs[r] + ppdb.post_mortem(s.space, tb, v) + + def printErrors(self): + if Options.interactive: + print + if self.errors or self.failures: + self.interact() + else: + unittest._TextTestResult.printErrors(self) + + def printErrorList(self, flavour, errors): + from pypy.interpreter.baseobjspace import OperationError + for test, err in errors: + self.stream.writeln(self.separator1) + self.stream.writeln("%s: %s" % (flavour,self.getDescription(test))) + self.stream.writeln(self.separator2) + t1 = self._exc_info_to_string(err) + t2 = '' + if isinstance(err[1], OperationError): + t2 = '\nand at app-level:\n\n' + sio = StringIO.StringIO() + err[1].print_application_traceback(test.space, sio) + t2 += sio.getvalue() + + self.stream.writeln("%s" % (t1 + t2,)) class CtsTestRunner: def run(self, test): @@ -197,11 +237,20 @@ testreldir = 0 runcts = 0 spacename = '' - individualtime=0 + individualtime = 0 + interactive = 0 def ensure_value(*args): return 0 ensure_value = staticmethod(ensure_value) +class TestSkip(Exception): + pass + +def objspace(name=''): + if name and Options.spacename and name != Options.spacename: + raise TestSkip + return option.objspace(name) + class RegexFilterFunc: """ stateful function to filter included/excluded strings via a Regular Expression. @@ -237,6 +286,9 @@ '-i', action="store_true", dest="individualtime", help="time each test individually")) options.append(make_option( + '-k', action="store_true", dest="interactive", + help="enter an interactive mode on failure or error")) + options.append(make_option( '-c', action="store_true", dest="runcts", help="run CtsTestRunner (catches stdout and prints report " "after testing) [unix only, for now]")) Added: pypy/trunk/src/pypy/tool/testpm.py ============================================================================== --- (empty file) +++ pypy/trunk/src/pypy/tool/testpm.py Mon Jul 7 18:10:02 2003 @@ -0,0 +1,79 @@ +# this file implements a little interactive loop that can be +# optionally entered at the end of a test run to allow inspection (and +# pdb-ing) of failures and/or errors. + +import autopath +from pypy.tool import ppdb +import cmd, traceback + +class TestPM(cmd.Cmd): + def __init__(self, efs): + cmd.Cmd.__init__(self) + self.efs = efs + self.prompt = 'tbi> ' + def emptyline(self): + return 1 + + def do_EOF(self, line): + return 1 + do_q = do_EOF + + def print_tb(self, ef): + from pypy.interpreter.baseobjspace import OperationError + err = ef[1] + print ''.join(traceback.format_exception(*err)) + if isinstance(err[1], OperationError): + print 'and at app-level:' + print + err[1].print_application_traceback(ef[0].space) + + def do_l(self, line): + i = 0 + for t, e in self.efs: + print i, t.__class__.__module__, t.__class__.__name__, t.methodName + i += 1 + + def do_tb(self, arg): + args = arg.split() + if len(args) == 0: + for x in self.efs: + t = x[0] + print t.__class__.__module__, t.__class__.__name__, t.methodName + print + self.print_tb(x) + print + elif len(args) == 1: + try: + tbi = int(args[0]) + except ValueError: + print "error2" + else: + if 0 <= tbi < len(self.efs): + self.print_tb(self.efs[tbi]) + else: + print "error3" + else: + print "error" + + def do_d(self, arg): + args = arg.split() + if len(args) == 1: + try: + efi = int(args[0]) + except ValueError: + print "error2" + else: + if 0 <= efi < len(self.efs): + s, (t, v, tb) = self.efs[efi] + ppdb.post_mortem(s.space, tb, v) + else: + print "error3" + else: + print "error" + + +if __name__ == '__main__': + # just for testing + c = TestPM([]) + c.cmdloop() + From mwh at codespeak.net Mon Jul 7 18:19:01 2003 From: mwh at codespeak.net (mwh at codespeak.net) Date: Mon, 7 Jul 2003 18:19:01 +0200 (MEST) Subject: [pypy-svn] rev 1104 - pypy/trunk/src/pypy/tool Message-ID: <20030707161901.C3B0F5BEE7@thoth.codespeak.net> Author: mwh Date: Mon Jul 7 18:19:01 2003 New Revision: 1104 Modified: pypy/trunk/src/pypy/tool/test.py Log: make the individualtime option -t make the interactive option -i (more like CPython) Modified: pypy/trunk/src/pypy/tool/test.py ============================================================================== --- pypy/trunk/src/pypy/tool/test.py (original) +++ pypy/trunk/src/pypy/tool/test.py Mon Jul 7 18:19:01 2003 @@ -283,10 +283,10 @@ '-r', action="store_true", dest="testreldir", help="gather only tests relative to current dir")) options.append(make_option( - '-i', action="store_true", dest="individualtime", + '-t', action="store_true", dest="individualtime", help="time each test individually")) options.append(make_option( - '-k', action="store_true", dest="interactive", + '-i', action="store_true", dest="interactive", help="enter an interactive mode on failure or error")) options.append(make_option( '-c', action="store_true", dest="runcts", From mwh at codespeak.net Mon Jul 7 18:30:39 2003 From: mwh at codespeak.net (mwh at codespeak.net) Date: Mon, 7 Jul 2003 18:30:39 +0200 (MEST) Subject: [pypy-svn] rev 1105 - pypy/trunk/src/pypy/interpreter Message-ID: <20030707163039.B72AE5BEE7@thoth.codespeak.net> Author: mwh Date: Mon Jul 7 18:30:39 2003 New Revision: 1105 Modified: pypy/trunk/src/pypy/interpreter/baseobjspace.py Log: fix arity of set multimethod Modified: pypy/trunk/src/pypy/interpreter/baseobjspace.py ============================================================================== --- pypy/trunk/src/pypy/interpreter/baseobjspace.py (original) +++ pypy/trunk/src/pypy/interpreter/baseobjspace.py Mon Jul 7 18:30:39 2003 @@ -163,6 +163,7 @@ w_objtype = self.type(w_obj) return self.issubtype(w_objtype, w_type) + ## Table describing the regular part of the interface of object spaces, ## namely all methods which only take w_ arguments and return a w_ result ## (if any). XXX Maybe we should say that these methods must be accessed @@ -230,7 +231,7 @@ ('iter', 'iter', 1, ['__iter__']), ('call', 'call', 3, ['__call__']), ('get', 'get', 3, ['__get__']), - ('set', 'set', 2, ['__set__']), + ('set', 'set', 3, ['__set__']), ('delete', 'delete', 2, ['__delete__']), ] From mwh at codespeak.net Mon Jul 7 18:32:13 2003 From: mwh at codespeak.net (mwh at codespeak.net) Date: Mon, 7 Jul 2003 18:32:13 +0200 (MEST) Subject: [pypy-svn] rev 1106 - pypy/trunk/src/pypy/interpreter Message-ID: <20030707163213.01B325BEE7@thoth.codespeak.net> Author: mwh Date: Mon Jul 7 18:32:13 2003 New Revision: 1106 Modified: pypy/trunk/src/pypy/interpreter/pyframe.py Log: make interpreter level tracebacks more useful, by preserving the interpreter traceback through SApplicationExceptions. Modified: pypy/trunk/src/pypy/interpreter/pyframe.py ============================================================================== --- pypy/trunk/src/pypy/interpreter/pyframe.py (original) +++ pypy/trunk/src/pypy/interpreter/pyframe.py Mon Jul 7 18:32:13 2003 @@ -54,7 +54,9 @@ executioncontext.exception_trace(e) # convert an OperationError into a control flow # exception - raise SApplicationException(e) + import sys + tb = sys.exc_info()[2] + raise SApplicationException(e, tb) # XXX some other exceptions could be caught here too, # like KeyboardInterrupt @@ -303,8 +305,8 @@ (i.e. an OperationException).""" def emptystack(self, frame): # propagate the exception to the caller - operationerr = self.args[0] - raise operationerr + operationerr, tb = self.args + raise operationerr.__class__, operationerr, tb class SBreakLoop(ControlFlowException): """Signals a 'break' statement.""" From mwh at codespeak.net Mon Jul 7 18:34:00 2003 From: mwh at codespeak.net (mwh at codespeak.net) Date: Mon, 7 Jul 2003 18:34:00 +0200 (MEST) Subject: [pypy-svn] rev 1107 - pypy/trunk/src/pypy/module Message-ID: <20030707163400.9389F5BEE7@thoth.codespeak.net> Author: mwh Date: Mon Jul 7 18:34:00 2003 New Revision: 1107 Modified: pypy/trunk/src/pypy/module/sysmodule.py Log: be less silly about import placement Modified: pypy/trunk/src/pypy/module/sysmodule.py ============================================================================== --- pypy/trunk/src/pypy/module/sysmodule.py (original) +++ pypy/trunk/src/pypy/module/sysmodule.py Mon Jul 7 18:34:00 2003 @@ -1,6 +1,6 @@ from pypy.interpreter.baseobjspace import OperationError from pypy.interpreter.extmodule import * -import sys +import sys, os, pypy class Sys(BuiltinModule): __pythonname__ = 'sys' @@ -8,8 +8,6 @@ def __init__(self, space): BuiltinModule.__init__(self, space) - import sys, os - import pypy opd = os.path.dirname From mwh at codespeak.net Mon Jul 7 18:35:39 2003 From: mwh at codespeak.net (mwh at codespeak.net) Date: Mon, 7 Jul 2003 18:35:39 +0200 (MEST) Subject: [pypy-svn] rev 1108 - pypy/trunk/src/pypy/objspace/ann/test Message-ID: <20030707163539.BD88C5BEE7@thoth.codespeak.net> Author: mwh Date: Mon Jul 7 18:35:39 2003 New Revision: 1108 Modified: pypy/trunk/src/pypy/objspace/ann/test/test_objspace.py Log: ask for an annotation object space from the test framework (means test gets skipped when testing other objspaces) Modified: pypy/trunk/src/pypy/objspace/ann/test/test_objspace.py ============================================================================== --- pypy/trunk/src/pypy/objspace/ann/test/test_objspace.py (original) +++ pypy/trunk/src/pypy/objspace/ann/test/test_objspace.py Mon Jul 7 18:35:39 2003 @@ -21,7 +21,7 @@ return self.space.call(w_func, w_args, w_kwds) def setUp(self): - self.space = AnnotationObjSpace() + self.space = test.objspace('ann') def test_any2any(self): x = self.codetest("def f(i):\n" From mwh at codespeak.net Mon Jul 7 18:36:43 2003 From: mwh at codespeak.net (mwh at codespeak.net) Date: Mon, 7 Jul 2003 18:36:43 +0200 (MEST) Subject: [pypy-svn] rev 1109 - pypy/trunk/src/pypy/objspace/std Message-ID: <20030707163643.49B615BEE7@thoth.codespeak.net> Author: mwh Date: Mon Jul 7 18:36:42 2003 New Revision: 1109 Modified: pypy/trunk/src/pypy/objspace/std/multimethod.py Log: very minor deobfuscation Modified: pypy/trunk/src/pypy/objspace/std/multimethod.py ============================================================================== --- pypy/trunk/src/pypy/objspace/std/multimethod.py (original) +++ pypy/trunk/src/pypy/objspace/std/multimethod.py Mon Jul 7 18:36:42 2003 @@ -77,7 +77,7 @@ result.append((currenttypes, func)) else: classtuple = initialtypes[len(currenttypes)] - for i, nexttype in zip(range(len(classtuple)), classtuple): + for nexttype in classtuple: self.internal_buildchoices(initialtypes, currenttypes + (nexttype,), result) From lac at codespeak.net Mon Jul 7 19:51:08 2003 From: lac at codespeak.net (lac at codespeak.net) Date: Mon, 7 Jul 2003 19:51:08 +0200 (MEST) Subject: [pypy-svn] rev 1110 - pypy/trunk/doc Message-ID: <20030707175108.CA3B95BC43@thoth.codespeak.net> Author: lac Date: Mon Jul 7 19:51:07 2003 New Revision: 1110 Modified: pypy/trunk/doc/oscon2003-paper.txt Log: This is close to what the paper will say in time for OSCON. But we can keep editiung it if we thing it is a useful introduction. I am going to make slides for some of the headings.... Our names look very silly. Strongly suggest for the web version you link to silly pictures of yourself or something. Modified: pypy/trunk/doc/oscon2003-paper.txt ============================================================================== --- pypy/trunk/doc/oscon2003-paper.txt (original) +++ pypy/trunk/doc/oscon2003-paper.txt Mon Jul 7 19:51:07 2003 @@ -4,6 +4,26 @@ A report from the PyPy project ****************************** +.. line-block:: + + Laura Creighton + Stephan Diehl + Dinu Gherman + Jacob Hall?n + Michael Hudson + G?nter Jantzen + Holger Krekel + Anders Lehmann + Jens-Uwe Mager + Alex Martelli + Tomek Meka + Rocco Morretti + Samuele Pedronis + Anna Ravencroft + Armin Rigo + Guido Van Rossum + Christian Tismer + The PyPy_ [#]_ project aims at producing a simple runtime-system for the Python_ language, written in Python itself. **C** and **Lisp** are elder examples of languages which are self-hosting. More @@ -63,16 +83,18 @@ This raises an interesting question. What would *doing more of those* mean? The PyPy project takes one approach. + Terminology (a short digression) ******************************** In PyPy there is a distinction between **application level code**, which is the world that PyPy is interpreting, and which can use the full features of the language, and the **interpreter level code** which is the world -that CPython is interpreting. This needs to be written in a subset of Python. +that CPython is interpreting. The interpreter level code +needs to be written in a restricted subset of Python. (Currently you are mainly restricted to immutable objects; no dicts, you can use globals but you cannot modify them. *What defines Restricted Python?* -is a matter of current debate. +is a matter of current debate.) In a Python-like language, a running interpreter has three main parts: @@ -291,6 +313,22 @@ We currently have three object spaces at least partially implemented. +A Word of History ++++++++++++++++++ + +The PyPy project was started in January of 2003 by Armin Rigo, +Christian Tismer and Holger Krekel. The latter organized the initial +Coding-Sprint in Hildesheim, Germany where the interpreter and the +Trivial Object Space were implemented and people first got together. +The second sprint in G?teborg, Sweden was organized by Jacob Hall?n and +Laura Creighton and it resulted in much of today's Standard Object Space +implementation. Benjamin Henrion and Godefroid Chapelle organized the +third sprint in Louvain-La-Neuve, Belgium which led to a pretty complete +Standard ObjectSpace and interpreter and the beginnings of Abstract +Interpretation (Annotation Object Space). These three coding +sprints in the course of half a year brought PyPy to existence, though +there was some off-sprint development and discussions going on. + The Trivial Object Space ++++++++++++++++++++++++ A PyPy interpreter using the Trivial Object Space is an @@ -377,7 +415,7 @@ print (reduce(lambda x, y: x+y, [t[2] for t in slips], 0))/900 -Pypy said: 603 SEK, or appoximately 50 USD. Don't believe people who +Pypy said: 603 SEK, or appoximately 75 USD. Don't believe people who tell you that Sprints are too expensive to hold. The Annotation Object Space @@ -386,7 +424,7 @@ Brussels), June 21 - 24. Great progress was made with the The Annotation Object Space, and began abstract, symbolic interpretation. (We also spent a lot of time firming up the Standard Object Space, and -trying to write documentation). +improving our documentation, and our documentation tools). In the two object spaces so far, application-level objects are represented in the interpreter as objects that represent a value. @@ -522,17 +560,31 @@ Conclusions +++++++++++ -It is a little early for conclusions, but our architecture seems to -be working so far. Sprints are a lot of fun, and a great way to write -code, and meet interesting people. +It is a little early for conclusions, but our architecture seems to be +working so far. Sprints are a lot of fun, and a great way to write +code, and meet interesting people. We're productively lazy, and so +have created a few tools that could possibly be useful to other +projects ... parts of our test rig, for example, and automatic ReST +processing on checkins. An Infastructure mini-Sprint, again at +Hildesheim, is planned which may produce tools good enough to package +and release separately. Thank you +++++++++ -The members of the PyPy team are distinctly grateful to RyanAir_, without -which holding Sprints would be prohibitively expensive, and the +As was to be expected we are using Python web applications (mailman_, +roundup_, moinmoin_) to host our project. + +.. _mailman: http://www.list.org/ +.. _roundup: http://roundup.sourceforge.net/ +.. _moinmoin: http://moin.sourceforge.net/ + +The members of the PyPy team are especiallly grateful to RyanAir_, without +which holding Sprints would be prohibitively expensive, freenode.net_ +which lets us communicate with each other on the #pypy channel, and the Subversion_ development team, without whom restructuring the entire universe whenever we feel like it would have been close to impossible. +.. _freenode.net: http://www.freenode.net/ .. _RyanAir: http://www.ryanair.com/ .. _Subversion: http://subversion.tigris.org/ From lac at codespeak.net Mon Jul 7 20:02:35 2003 From: lac at codespeak.net (lac at codespeak.net) Date: Mon, 7 Jul 2003 20:02:35 +0200 (MEST) Subject: [pypy-svn] rev 1111 - pypy/trunk/doc Message-ID: <20030707180235.6B19D5BC43@thoth.codespeak.net> Author: lac Date: Mon Jul 7 20:02:34 2003 New Revision: 1111 Modified: pypy/trunk/doc/oscon2003-paper.txt Log: Change the order of History and The Usual Suspects, as per Holger's suggestion. Modified: pypy/trunk/doc/oscon2003-paper.txt ============================================================================== --- pypy/trunk/doc/oscon2003-paper.txt (original) +++ pypy/trunk/doc/oscon2003-paper.txt Mon Jul 7 20:02:34 2003 @@ -3,27 +3,6 @@ A report from the PyPy project ****************************** - -.. line-block:: - - Laura Creighton - Stephan Diehl - Dinu Gherman - Jacob Hall?n - Michael Hudson - G?nter Jantzen - Holger Krekel - Anders Lehmann - Jens-Uwe Mager - Alex Martelli - Tomek Meka - Rocco Morretti - Samuele Pedronis - Anna Ravencroft - Armin Rigo - Guido Van Rossum - Christian Tismer - The PyPy_ [#]_ project aims at producing a simple runtime-system for the Python_ language, written in Python itself. **C** and **Lisp** are elder examples of languages which are self-hosting. More @@ -313,21 +292,6 @@ We currently have three object spaces at least partially implemented. -A Word of History -+++++++++++++++++ - -The PyPy project was started in January of 2003 by Armin Rigo, -Christian Tismer and Holger Krekel. The latter organized the initial -Coding-Sprint in Hildesheim, Germany where the interpreter and the -Trivial Object Space were implemented and people first got together. -The second sprint in G?teborg, Sweden was organized by Jacob Hall?n and -Laura Creighton and it resulted in much of today's Standard Object Space -implementation. Benjamin Henrion and Godefroid Chapelle organized the -third sprint in Louvain-La-Neuve, Belgium which led to a pretty complete -Standard ObjectSpace and interpreter and the beginnings of Abstract -Interpretation (Annotation Object Space). These three coding -sprints in the course of half a year brought PyPy to existence, though -there was some off-sprint development and discussions going on. The Trivial Object Space ++++++++++++++++++++++++ @@ -558,6 +522,45 @@ Some multimethods can also be sliced along their second argument, e.g. for __radd__(). +A Word of History ++++++++++++++++++ + +The PyPy project was started in January of 2003 by Armin Rigo, +Christian Tismer and Holger Krekel. The latter organized the initial +Coding-Sprint in Hildesheim, Germany where the interpreter and the +Trivial Object Space were implemented and people first got together. +The second sprint in G?teborg, Sweden was organized by Jacob Hall?n and +Laura Creighton and it resulted in much of today's Standard Object Space +implementation. Benjamin Henrion and Godefroid Chapelle organized the +third sprint in Louvain-La-Neuve, Belgium which led to a pretty complete +Standard ObjectSpace and interpreter and the beginnings of Abstract +Interpretation (Annotation Object Space). These three coding +sprints in the course of half a year brought PyPy to existence, though +there was some off-sprint development and discussions going on. + +The Usual Suspects +++++++++++++++++++ + +.. line-block:: + + Laura Creighton + Stephan Diehl + Dinu Gherman + Jacob Hall?n + Michael Hudson + G?nter Jantzen + Holger Krekel + Anders Lehmann + Jens-Uwe Mager + Alex Martelli + Tomek Meka + Rocco Morretti + Samuele Pedronis + Anna Ravencroft + Armin Rigo + Guido Van Rossum + Christian Tismer + Conclusions +++++++++++ It is a little early for conclusions, but our architecture seems to be From pedronis at codespeak.net Mon Jul 7 20:11:15 2003 From: pedronis at codespeak.net (pedronis at codespeak.net) Date: Mon, 7 Jul 2003 20:11:15 +0200 (MEST) Subject: [pypy-svn] rev 1112 - pypy/trunk/doc Message-ID: <20030707181115.59C2F5BC43@thoth.codespeak.net> Author: pedronis Date: Mon Jul 7 20:11:15 2003 New Revision: 1112 Modified: pypy/trunk/doc/oscon2003-paper.txt Log: the diff says it all. Modified: pypy/trunk/doc/oscon2003-paper.txt ============================================================================== --- pypy/trunk/doc/oscon2003-paper.txt (original) +++ pypy/trunk/doc/oscon2003-paper.txt Mon Jul 7 20:11:15 2003 @@ -555,7 +555,7 @@ Alex Martelli Tomek Meka Rocco Morretti - Samuele Pedronis + Samuele Pedroni Anna Ravencroft Armin Rigo Guido Van Rossum From hpk at codespeak.net Mon Jul 7 20:46:31 2003 From: hpk at codespeak.net (hpk at codespeak.net) Date: Mon, 7 Jul 2003 20:46:31 +0200 (MEST) Subject: [pypy-svn] rev 1113 - in pypy/trunk/src/pypy/objspace: ann/test std/test Message-ID: <20030707184631.B542C5BC43@thoth.codespeak.net> Author: hpk Date: Mon Jul 7 20:46:30 2003 New Revision: 1113 Modified: pypy/trunk/src/pypy/objspace/ann/test/test_objspace.py pypy/trunk/src/pypy/objspace/std/test/test_boolobject.py pypy/trunk/src/pypy/objspace/std/test/test_floatobject.py pypy/trunk/src/pypy/objspace/std/test/test_instmethobject.py pypy/trunk/src/pypy/objspace/std/test/test_intobject.py pypy/trunk/src/pypy/objspace/std/test/test_iterobject.py pypy/trunk/src/pypy/objspace/std/test/test_multimethod.py pypy/trunk/src/pypy/objspace/std/test/test_noneobject.py pypy/trunk/src/pypy/objspace/std/test/test_restricted_int.py pypy/trunk/src/pypy/objspace/std/test/test_sliceobject.py pypy/trunk/src/pypy/objspace/std/test/test_userobject.py Log: fixed tests to demand their appropriate object space to trigger the new TestSkip mechanism. Modified: pypy/trunk/src/pypy/objspace/ann/test/test_objspace.py ============================================================================== --- pypy/trunk/src/pypy/objspace/ann/test/test_objspace.py (original) +++ pypy/trunk/src/pypy/objspace/ann/test/test_objspace.py Mon Jul 7 20:46:30 2003 @@ -1,11 +1,13 @@ import autopath from pypy.tool import test from pypy.objspace.ann.objspace import W_Object, W_Anything, W_Integer, W_Constant -from pypy.objspace.ann.objspace import AnnotationObjSpace from pypy.interpreter import baseobjspace, pyframe class TestAnnotationObjSpace(test.TestCase): + def setUp(self): + self.space = test.objspace('ann') + def codetest(self, source, functionname, args_w): """Compile and run the given code string, and then call its function named by 'functionname' with a list of wrapped arguments 'args_w'. @@ -20,9 +22,6 @@ w_kwds = self.space.newdict([]) return self.space.call(w_func, w_args, w_kwds) - def setUp(self): - self.space = test.objspace('ann') - def test_any2any(self): x = self.codetest("def f(i):\n" " return i+1\n", Modified: pypy/trunk/src/pypy/objspace/std/test/test_boolobject.py ============================================================================== --- pypy/trunk/src/pypy/objspace/std/test/test_boolobject.py (original) +++ pypy/trunk/src/pypy/objspace/std/test/test_boolobject.py Mon Jul 7 20:46:30 2003 @@ -5,7 +5,7 @@ class TestW_BoolObject(test.TestCase): def setUp(self): - self.space = test.objspace() + self.space = test.objspace('std') self.true = self.space.w_True self.false = self.space.w_False self.wrap = self.space.wrap Modified: pypy/trunk/src/pypy/objspace/std/test/test_floatobject.py ============================================================================== --- pypy/trunk/src/pypy/objspace/std/test/test_floatobject.py (original) +++ pypy/trunk/src/pypy/objspace/std/test/test_floatobject.py Mon Jul 7 20:46:30 2003 @@ -2,6 +2,9 @@ from pypy.tool import test class FloatTestCase(test.AppTestCase): + def setUp(self): + self.space = test.objspace('std') + def test_float_callable(self): self.assertEquals(0.125, float(0.125)) Modified: pypy/trunk/src/pypy/objspace/std/test/test_instmethobject.py ============================================================================== --- pypy/trunk/src/pypy/objspace/std/test/test_instmethobject.py (original) +++ pypy/trunk/src/pypy/objspace/std/test/test_instmethobject.py Mon Jul 7 20:46:30 2003 @@ -19,6 +19,9 @@ class TestInstMethObjectApp(test.AppTestCase): + def setUp(self): + self.space = test.objspace('std') + def test_callBound(self): boundMethod = [1,2,3].__len__ self.assertEquals(boundMethod(), 3) Modified: pypy/trunk/src/pypy/objspace/std/test/test_intobject.py ============================================================================== --- pypy/trunk/src/pypy/objspace/std/test/test_intobject.py (original) +++ pypy/trunk/src/pypy/objspace/std/test/test_intobject.py Mon Jul 7 20:46:30 2003 @@ -7,7 +7,8 @@ class TestW_IntObject(test.TestCase): def setUp(self): - self.space = test.objspace('std') + # only run when testing StdObjSpace + test.objspace('std') def tearDown(self): pass @@ -287,6 +288,9 @@ self.assertEquals(self.space.unwrap(result), hex(x)) class AppIntTest(test.AppTestCase): + def setUp(self): + self.space = test.objspace('std') + def test_int_callable(self): self.assertEquals(42, int(42)) Modified: pypy/trunk/src/pypy/objspace/std/test/test_iterobject.py ============================================================================== --- pypy/trunk/src/pypy/objspace/std/test/test_iterobject.py (original) +++ pypy/trunk/src/pypy/objspace/std/test/test_iterobject.py Mon Jul 7 20:46:30 2003 @@ -45,6 +45,8 @@ self.body0(w_iter) class TestW_IterObjectApp(test.AppTestCase): + def setUp(self): + self.space = test.objspace('std') def test_user_iter(self): class C: Modified: pypy/trunk/src/pypy/objspace/std/test/test_multimethod.py ============================================================================== --- pypy/trunk/src/pypy/objspace/std/test/test_multimethod.py (original) +++ pypy/trunk/src/pypy/objspace/std/test/test_multimethod.py Mon Jul 7 20:46:30 2003 @@ -87,6 +87,8 @@ class TestMultiMethod(test.TestCase): def setUp(self): + # only run when testing stdobjectspace + test.objspace('std') self.space = FakeObjSpace() def test_non_delegate(self): Modified: pypy/trunk/src/pypy/objspace/std/test/test_noneobject.py ============================================================================== --- pypy/trunk/src/pypy/objspace/std/test/test_noneobject.py (original) +++ pypy/trunk/src/pypy/objspace/std/test/test_noneobject.py Mon Jul 7 20:46:30 2003 @@ -5,7 +5,7 @@ class TestW_NoneObject(test.TestCase): def setUp(self): - self.space = test.objspace() + self.space = test.objspace('std') def tearDown(self): pass Modified: pypy/trunk/src/pypy/objspace/std/test/test_restricted_int.py ============================================================================== --- pypy/trunk/src/pypy/objspace/std/test/test_restricted_int.py (original) +++ pypy/trunk/src/pypy/objspace/std/test/test_restricted_int.py Mon Jul 7 20:46:30 2003 @@ -6,7 +6,7 @@ class Test_r_int(test.TestCase): def setUp(self): - pass + space = test.objspace('std') def tearDown(self): pass @@ -63,10 +63,10 @@ cmp = f(left(larg), right(rarg)) self.assertEquals(res, cmp) -class Test_r_uint(unittest.TestCase): +class Test_r_uint(test.TestCase): def setUp(self): - pass + space = test.objspace('std') def tearDown(self): pass Modified: pypy/trunk/src/pypy/objspace/std/test/test_sliceobject.py ============================================================================== --- pypy/trunk/src/pypy/objspace/std/test/test_sliceobject.py (original) +++ pypy/trunk/src/pypy/objspace/std/test/test_sliceobject.py Mon Jul 7 20:46:30 2003 @@ -35,6 +35,9 @@ w_slice.indices, w(10)) class Test_SliceObject(test.AppTestCase): + def setUp(self): + self.space = test.objspace('std') + def test_new(self): def cmp_slice(sl1, sl2): for attr in "start", "stop", "step": Modified: pypy/trunk/src/pypy/objspace/std/test/test_userobject.py ============================================================================== --- pypy/trunk/src/pypy/objspace/std/test/test_userobject.py (original) +++ pypy/trunk/src/pypy/objspace/std/test/test_userobject.py Mon Jul 7 20:46:30 2003 @@ -2,6 +2,8 @@ from pypy.tool import test class TestUserObject(test.AppTestCase): + def setUp(self): + self.space = test.objspace('std') def test_emptyclass(self): class empty: pass From lac at codespeak.net Mon Jul 7 23:19:09 2003 From: lac at codespeak.net (lac at codespeak.net) Date: Mon, 7 Jul 2003 23:19:09 +0200 (MEST) Subject: [pypy-svn] rev 1114 - pypy/trunk/doc Message-ID: <20030707211909.A0CF75BC43@thoth.codespeak.net> Author: lac Date: Mon Jul 7 23:19:09 2003 New Revision: 1114 Modified: pypy/trunk/doc/oscon2003-paper.txt Log: Last minute tweaks, such as fixing Guido's name which is capitalised differently depending on whether it is FN or LN first ... Modified: pypy/trunk/doc/oscon2003-paper.txt ============================================================================== --- pypy/trunk/doc/oscon2003-paper.txt (original) +++ pypy/trunk/doc/oscon2003-paper.txt Mon Jul 7 23:19:09 2003 @@ -31,7 +31,7 @@ We should be able to produce different versions of PyPy which run on different architectures, for instance one that runs on the -Java Virtual Machine, much as **Jython** [#]_ does today. +Java Virtual Machine, much as Jython_ [#]_ does today. .. _Jython: http://www.jython.org/ @@ -362,12 +362,12 @@ This we accomplished by mid-week. -By the end of the Sprint we produced our first Python program that +By the end of the Sprint we produced our first Python program [#]_ that ran under PyPy which simply 'did something we wanted to do' and wasn't an artificial goal. It calculated the week long foodbill, and divided the result by the 9 Sprint participants.:: - ### the first real PyPy Program ### [#]_ + ### the first real PyPy Program ### slips=[(1, 'Kals MatMarkn', 6150, 'Chutney for Curry', 'dinner Saturday'), (2, 'Kals MatMarkn', 32000, 'Spaghetti, Beer', 'dinner Monday'), @@ -538,8 +538,8 @@ sprints in the course of half a year brought PyPy to existence, though there was some off-sprint development and discussions going on. -The Usual Suspects -++++++++++++++++++ +Participants +++++++++++++ .. line-block:: @@ -558,7 +558,7 @@ Samuele Pedroni Anna Ravencroft Armin Rigo - Guido Van Rossum + Guido van Rossum Christian Tismer Conclusions From hpk at codespeak.net Mon Jul 7 23:55:52 2003 From: hpk at codespeak.net (hpk at codespeak.net) Date: Mon, 7 Jul 2003 23:55:52 +0200 (MEST) Subject: [pypy-svn] rev 1115 - pypy/trunk/src/pypy/objspace/std/test Message-ID: <20030707215552.30E2D5BC43@thoth.codespeak.net> Author: hpk Date: Mon Jul 7 23:55:51 2003 New Revision: 1115 Modified: pypy/trunk/src/pypy/objspace/std/test/test_intobject.py Log: made the setUp function set the space instance attr of the TestCase Modified: pypy/trunk/src/pypy/objspace/std/test/test_intobject.py ============================================================================== --- pypy/trunk/src/pypy/objspace/std/test/test_intobject.py (original) +++ pypy/trunk/src/pypy/objspace/std/test/test_intobject.py Mon Jul 7 23:55:51 2003 @@ -7,8 +7,7 @@ class TestW_IntObject(test.TestCase): def setUp(self): - # only run when testing StdObjSpace - test.objspace('std') + self.space = test.objspace('std') def tearDown(self): pass From hpk at codespeak.net Tue Jul 8 00:00:21 2003 From: hpk at codespeak.net (hpk at codespeak.net) Date: Tue, 8 Jul 2003 00:00:21 +0200 (MEST) Subject: [pypy-svn] rev 1116 - pypy/trunk/src/pypy/tool Message-ID: <20030707220021.441455BC43@thoth.codespeak.net> Author: hpk Date: Tue Jul 8 00:00:20 2003 New Revision: 1116 Modified: pypy/trunk/src/pypy/tool/option.py Log: fix help message for "-w" option Modified: pypy/trunk/src/pypy/tool/option.py ============================================================================== --- pypy/trunk/src/pypy/tool/option.py (original) +++ pypy/trunk/src/pypy/tool/option.py Tue Jul 8 00:00:20 2003 @@ -30,7 +30,7 @@ help="verbose")) options.append(make_option( '-w', action="store_true", dest="showwarning", - help="something to do with warnings (ask Holger!)")) + help="enable warnings (disabled by default)")) return options From mwh at codespeak.net Tue Jul 8 13:51:26 2003 From: mwh at codespeak.net (mwh at codespeak.net) Date: Tue, 8 Jul 2003 13:51:26 +0200 (MEST) Subject: [pypy-svn] rev 1117 - in pypy/trunk/src/pypy/objspace/std: . test Message-ID: <20030708115126.32CB05BC41@thoth.codespeak.net> Author: mwh Date: Tue Jul 8 13:51:25 2003 New Revision: 1117 Modified: pypy/trunk/src/pypy/objspace/std/test/test_iterobject.py pypy/trunk/src/pypy/objspace/std/userobject.py Log: support falling back from __iter__ methods to __getitem__ methods Modified: pypy/trunk/src/pypy/objspace/std/test/test_iterobject.py ============================================================================== --- pypy/trunk/src/pypy/objspace/std/test/test_iterobject.py (original) +++ pypy/trunk/src/pypy/objspace/std/test/test_iterobject.py Tue Jul 8 13:51:25 2003 @@ -56,5 +56,19 @@ return self self.assertEquals(list(C()), []) + def test_iter_getitem(self): + class C: + def __getitem__(self, i): + return range(2)[i] + self.assertEquals(list(C()), range(2)) + + def test_iter_fail_noseq(self): + class C: + pass + self.assertRaises(TypeError, + iter, + C()) + + if __name__ == '__main__': test.main() Modified: pypy/trunk/src/pypy/objspace/std/userobject.py ============================================================================== --- pypy/trunk/src/pypy/objspace/std/userobject.py (original) +++ pypy/trunk/src/pypy/objspace/std/userobject.py Tue Jul 8 13:51:25 2003 @@ -163,6 +163,19 @@ "For __init__()." return self.internal_do_call(space, w_userobj, w_args, w_kwds) + def iter_call(self, space, *args_w): + try: + return self.do_call(space, args_w) + except FailedToImplement: + w_userobj = args_w[0] + try: + space.type(w_userobj).lookup(space.wrap('__getitem__')) + except KeyError: + raise FailedToImplement + else: + from iterobject import W_SeqIterObject + return W_SeqIterObject(space, args_w[0]) + import new for multimethod in typeobject.hack_out_multimethods(StdObjSpace): @@ -175,5 +188,6 @@ next__User = SpecialMethod('next').next_call is_true__User = SpecialMethod('nonzero').nonzero_call object_init__User_ANY_ANY = SpecialMethod('__init__').argskwds_call +iter__User = SpecialMethod('__iter__').iter_call register_all(vars()) From hpk at codespeak.net Thu Jul 10 15:27:21 2003 From: hpk at codespeak.net (hpk at codespeak.net) Date: Thu, 10 Jul 2003 15:27:21 +0200 (MEST) Subject: [pypy-svn] rev 1119 - in pypy/branch/builtinrefactor/pypy: interpreter module module/test Message-ID: <20030710132721.CCDFC5B06A@thoth.codespeak.net> Author: hpk Date: Thu Jul 10 15:27:20 2003 New Revision: 1119 Removed: pypy/branch/builtinrefactor/pypy/module/test/test_funtional.py pypy/branch/builtinrefactor/pypy/module/test/test_map.py Modified: pypy/branch/builtinrefactor/pypy/interpreter/baseobjspace.py pypy/branch/builtinrefactor/pypy/module/builtin.py pypy/branch/builtinrefactor/pypy/module/builtin_app.py pypy/branch/builtinrefactor/pypy/module/test/test_apply.py pypy/branch/builtinrefactor/pypy/module/test/test_builtin.py pypy/branch/builtinrefactor/pypy/module/test/test_filter.py pypy/branch/builtinrefactor/pypy/module/test/test_functional.py pypy/branch/builtinrefactor/pypy/module/test/test_minmax.py pypy/branch/builtinrefactor/pypy/module/test/test_range.py pypy/branch/builtinrefactor/pypy/module/test/test_reduce.py pypy/branch/builtinrefactor/pypy/module/test/test_vars.py pypy/branch/builtinrefactor/pypy/module/test/test_zip.py Log: Starting to refactor builtins / appspace<->interpreter-space interaction. Currently, only StdObjSpace and TrivialObjSpace work on this branch. AnnSpace horribly breaks (because it was relying on CPythonObjects IMO) and should be fixed later in the branch. "refactoring" fixes: - new builtin 'execfile' (not completly implemented) - builtin_app is now executed via execfile and not via AppFile anymore. - Now the the BltinModule doesn't have "cpythonobject" default bindings like "type, None, TypeError etc." but takes the defaults from the objspace (objspace.w_type etc.) - thus builtin functions (and classes) from builtin_app are no longer CPythonObject Instances - moved builtin testcases to AppTestCase. The former would directly *import* builtin_app and test in CPython which is not really a good test. Now the tests execute in AppSpace with pypy-builtins. Some tests broke (test_var because the vars/locals machinery is not quite right, and test_minmax because it required mixed comparisons which PyPy doesn't have on StdObjSpace) so i disabled some of them. - removed some mostly duplicate test-files (test_funtional/test_functional/test_map) Modified: pypy/branch/builtinrefactor/pypy/interpreter/baseobjspace.py ============================================================================== --- pypy/branch/builtinrefactor/pypy/interpreter/baseobjspace.py (original) +++ pypy/branch/builtinrefactor/pypy/interpreter/baseobjspace.py Thu Jul 10 15:27:20 2003 @@ -25,7 +25,21 @@ self.builtin = pypy.module.builtin.Builtin(self) self.w_builtin = self.builtin.wrap_base() self.w_builtins = self.getattr(self.w_builtin, self.wrap("__dict__")) - self.builtin.wrap_appfile(self.w_builtin) + + for name, value in self.__dict__.items(): + if name.startswith('w_'): + name = name[2:] + if name.startswith('builtin'): + continue + #print "setitem: space instance %-20s into builtins" % name + self.setitem(self.w_builtins, self.wrap(name), value) + + from pypy.module import __file__ as fn + import os + fn = os.path.join(os.path.dirname(fn), 'builtin_app.py') + w_args = self.newtuple([self.wrap(fn), self.w_builtins, self.w_builtins]) + w_execfile = self.getattr(self.w_builtin, self.wrap('execfile')) + self.call(w_execfile, w_args, self.newdict([])) def make_sys(self): import pypy.module.sysmodule Modified: pypy/branch/builtinrefactor/pypy/module/builtin.py ============================================================================== --- pypy/branch/builtinrefactor/pypy/module/builtin.py (original) +++ pypy/branch/builtinrefactor/pypy/module/builtin.py Thu Jul 10 15:27:20 2003 @@ -9,9 +9,9 @@ class Builtin(BuiltinModule): __pythonname__ = '__builtin__' - __appfile__ = appfile.AppFile(__name__, ["module"]) + #__appfile__ = appfile.AppFile(__name__, ["module"]) - __helper_appfile__ = appfile.AppFile('builtin_helper',["module"]) + #__helper_appfile__ = appfile.AppFile('builtin_helper',["module"]) # temporary hack, until we have a real tuple type for calling #def tuple(self, w_obj): @@ -20,16 +20,15 @@ # return w_res #tuple = appmethod(tuple) - def _actframe(self): - return self.space.getexecutioncontext().framestack.top() - + def _actframe(self, index=-1): + return self.space.getexecutioncontext().framestack.items[index] def globals(self): return self._actframe().w_globals globals = appmethod(globals) def locals(self): - return self._actframe().w_locals + return self._actframe().w_globals locals = appmethod(locals) @@ -94,6 +93,27 @@ return space.wrap(res) compile = appmethod(compile) + def execfile(self, w_filename, w_globals, w_locals): + space = self.space + #XXX why do i have to check against space.w_None instead of None? + # above the compile commands *does* check against None + if w_globals is None or w_globals is space.w_None: + w_globals = self._actframe().w_globals + if w_locals is None or w_globals is space.w_None: + w_locals = w_globals + + filename = space.unwrap(w_filename) + s = open(filename).read() + c = _b.compile(s, filename, 'exec', 4096) # XXX generators + res = pycode.PyByteCode() + res._from_code(c) + + res.eval_code(space, w_globals, w_locals) + return space.w_None + + execfile = appmethod(execfile) + + ####essentially implemented by the objectspace def abs(self, w_val): @@ -178,10 +198,8 @@ # we have None! But leave these at the bottom, otherwise the default # arguments of the above-defined functions will see this new None... - None = appdata(_b.None) - # XXX Add these for Ann space. - TypeError = appdata(_b.TypeError) - type = appdata(_b.type) + #None = appdata(_b.None) + ## False = appdata(_b.False) ## True = appdata(_b.True) ## dict = appdata(_b.dict) # XXX temporary Modified: pypy/branch/builtinrefactor/pypy/module/builtin_app.py ============================================================================== --- pypy/branch/builtinrefactor/pypy/module/builtin_app.py (original) +++ pypy/branch/builtinrefactor/pypy/module/builtin_app.py Thu Jul 10 15:27:20 2003 @@ -210,7 +210,7 @@ else: return 1 -def vars(*obj): +def _vars(*obj): """return a dictionary of all the attributes currently bound in obj. If called with no argument, return the variables bound in local scope.""" @@ -230,4 +230,34 @@ return True except AttributeError: return False - + +class xrange: + def __init__(self, x, y=None, step=1): + """ returns an xrange object, see range for more docs""" + + if y is None: + self.start = 0 + self.stop = x + else: + self.start = x + self.stop = y + + if step == 0: + raise ValueError, 'xrange() step-argument (arg 3) must not be zero' + + self.step = step + + def __iter__(self): + def gen(self): + start,stop,step = self.start,self.stop,self.step + i = start + if step > 0: + while i < stop: + yield i + i+=step + else: + while i > stop: + yield i + i+=step + + return gen(self) Modified: pypy/branch/builtinrefactor/pypy/module/test/test_apply.py ============================================================================== --- pypy/branch/builtinrefactor/pypy/module/test/test_apply.py (original) +++ pypy/branch/builtinrefactor/pypy/module/test/test_apply.py Thu Jul 10 15:27:20 2003 @@ -1,38 +1,31 @@ import autopath -from pypy.module.builtin_app import apply, min, max from pypy.tool import test -def myminmax(*arr, **dict): - # trivial function which has the signature *args, **kw - v = list(arr) + dict.values() - return min(v), max(v) - -class TestApply(test.TestCase): - - def setUp(self): - pass - - def tearDown(self): - pass - # This is a very trivial series of tests. If apply is subtlely broken, # we will have to find out some other way. - + +class TestApply(test.AppTestCase): + def test_trivial_listonly(self): - self.assertEqual(apply(myminmax, - [-1,-2,-3,-4]), - (-4, -1)) + def mymin(*args): + return min(list(args)) + + self.assertEqual(apply(mymin, [-1,-2,-3,-4]), -4) def test_trivial_dictonly(self): - self.assertEqual(apply(myminmax, + def mymin(*arr, **kwargs): + return min(list(arr) + kwargs.values()) + self.assertEqual(apply(mymin, [], {'null' : 0, 'one': 1, 'two' : 2}), - (0, 2)) + 0) def test_trivial(self): - self.assertEqual(apply(myminmax, + def mymin(*arr, **kwargs): + return min(list(arr) + kwargs.values()) + self.assertEqual(apply(mymin, [-1,-2,-3,-4], {'null' : 0, 'one': 1, 'two' : 2}), - (-4, 2)) + (-4)) if __name__ == '__main__': test.main() Modified: pypy/branch/builtinrefactor/pypy/module/test/test_builtin.py ============================================================================== --- pypy/branch/builtinrefactor/pypy/module/test/test_builtin.py (original) +++ pypy/branch/builtinrefactor/pypy/module/test/test_builtin.py Thu Jul 10 15:27:20 2003 @@ -1,46 +1,57 @@ import autopath -from pypy.module.builtin_app import cmp from pypy.tool import test +class TestBuiltinApp(test.AppTestCase): + def setUp(self): + self.space = test.objspace() + + def test_import(self): + import types + d = {} + m = __import__('quopri', d, d, []) + self.assertEquals(type(m), types.ModuleType) + + def test_chr(self): + self.assertEquals(chr(65), 'A') + self.assertRaises(ValueError, chr, -1) + self.assertRaises(TypeError, chr, 'a') + + def test_type_selftest(self): + self.assert_(type(type) is type) + + def test_xrange_args(self): + x = xrange(2) + self.assertEquals(x.start, 0) + self.assertEquals(x.stop, 2) + self.assertEquals(x.step, 1) + + x = xrange(2,10,2) + self.assertEquals(x.start, 2) + self.assertEquals(x.stop, 10) + self.assertEquals(x.step, 2) + + self.assertRaises(ValueError, xrange, 0, 1, 0) + + def test_xrange_up(self): + x = xrange(2) + self.assertEquals(x.start, 0) + self.assertEquals(x.stop, 2) + self.assertEquals(x.step, 1) + + iter_x = iter(x) + self.assertEquals(iter_x.next(), 0) + self.assertEquals(iter_x.next(), 1) + self.assertRaises(StopIteration, iter_x.next) + + def test_xrange_down(self): + x = xrange(4,2,-1) + + iter_x = iter(x) + self.assertEquals(iter_x.next(), 4) + self.assertEquals(iter_x.next(), 3) + self.assertRaises(StopIteration, iter_x.next) -class TestBuiltin(test.TestCase): - - def setUp(self): - self.space = test.objspace() - - def tearDown(self): - pass - - def get_builtin(self, name): - s = self.space - w_name = s.wrap(name) - w_bltin = s.getitem(s.w_builtins, w_name) - return w_bltin - - def test_chr(self): - s = self.space - w = s.wrap - w_chr = self.get_builtin('chr') - self.assertEqual_w(w(chr(65)), - s.call_function(w_chr, w(65))) - self.assertWRaises_w(s.w_ValueError, - w_chr, - w(-1)) - self.assertWRaises_w(s.w_TypeError, - w_chr, - w('a')) - - def test_import(self): - s = self.space - w = s.wrap - w_import = self.get_builtin('__import__') - w_dict = s.newdict([]) - w_fromlist = s.newlist([]) - # finding a module to import is an odd game; quopri is - # sufficiently simple - s.call_function(w_import, w('quopri'), w_dict, w_dict, w_fromlist) - class TestCmp(test.TestCase): def test_cmp(self): Modified: pypy/branch/builtinrefactor/pypy/module/test/test_filter.py ============================================================================== --- pypy/branch/builtinrefactor/pypy/module/test/test_filter.py (original) +++ pypy/branch/builtinrefactor/pypy/module/test/test_filter.py Thu Jul 10 15:27:20 2003 @@ -1,55 +1,41 @@ import autopath -from pypy.module.builtin_app import filter from pypy.tool import test # trivial functions for testing -def larger_than_three(x): - if x > 3: - return True - else: - return False - -def larger_than_a(c): - if c > 'a': - return True - else: - return False - -class TestFilter(test.TestCase): - - def test_filter_no_arguments(self): - self.assertRaises(TypeError, filter) +class TestFilter(test.AppTestCase): + def test_filter_no_arguments(self): + self.assertRaises(TypeError, filter) - def test_filter_no_function_no_seq(self): - self.assertRaises(TypeError, filter, None) + def test_filter_no_function_no_seq(self): + self.assertRaises(TypeError, filter, None) - def test_filter_function_no_seq(self): - self.assertRaises(TypeError, filter, larger_than_three) + def test_filter_function_no_seq(self): + self.assertRaises(TypeError, filter, lambda x: x>3) - def test_filter_function_too_many_args(self): - self.assertRaises(TypeError, filter, larger_than_three, [1], [2]) + def test_filter_function_too_many_args(self): + self.assertRaises(TypeError, filter, lambda x: x>3, [1], [2]) - def test_filter_no_function_list(self): + def test_filter_no_function_list(self): self.assertEqual(filter(None, [1, 2, 3]), [1, 2, 3]) - def test_filter_no_function_tuple(self): + def test_filter_no_function_tuple(self): self.assertEqual(filter(None, (1, 2, 3)), (1, 2, 3)) - def test_filter_no_function_string(self): + def test_filter_no_function_string(self): self.assertEqual(filter(None, 'mystring'), 'mystring') - def test_filter_no_function_with_bools(self): + def test_filter_no_function_with_bools(self): self.assertEqual(filter(None, (True, False, True)), (True, True)) - def test_filter_list(self): - self.assertEqual(filter(larger_than_three, [1, 2, 3, 4, 5]), [4, 5]) + def test_filter_list(self): + self.assertEqual(filter(lambda x: x>3, [1, 2, 3, 4, 5]), [4, 5]) - def test_filter_tuple(self): - self.assertEqual(filter(larger_than_three, (1, 2, 3, 4, 5)), (4, 5)) + def test_filter_tuple(self): + self.assertEqual(filter(lambda x: x>3, (1, 2, 3, 4, 5)), (4, 5)) - def test_filter_string(self): - self.assertEqual(filter(larger_than_a, 'xyzabcd'), 'xyzbcd') + def test_filter_string(self): + self.assertEqual(filter(lambda x: x>'a', 'xyzabcd'), 'xyzbcd') if __name__ == '__main__': test.main() Modified: pypy/branch/builtinrefactor/pypy/module/test/test_functional.py ============================================================================== --- pypy/branch/builtinrefactor/pypy/module/test/test_functional.py (original) +++ pypy/branch/builtinrefactor/pypy/module/test/test_functional.py Thu Jul 10 15:27:20 2003 @@ -1,27 +1,19 @@ import autopath -from pypy.module.builtin_app import map, filter, reduce, zip from pypy.tool import test -# trivial functions for testing - -def add_two(x): - return x + 2 - -def add_both(x, y): - return x + y - - -class TestMap(test.TestCase): +class TestMap(test.AppTestCase): def test_trivial_map_one_seq(self): - self.assertEqual(map(add_two, [1, 2, 3, 4]), [3, 4, 5, 6]) + self.assertEqual(map(lambda x: x+2, [1, 2, 3, 4]), [3, 4, 5, 6]) def test_trivial_map_two_seq(self): - self.assertEqual(map(add_both, [1, 2, 3, 4],[1, 2, 3, 4]), [2, 4, 6, 8]) + self.assertEqual(map(lambda x,y: x+y, + [1, 2, 3, 4],[1, 2, 3, 4]), + [2, 4, 6, 8]) def test_trivial_map_sizes_dont_match_and_should(self): - self.assertRaises(TypeError, map, add_both, [1, 2, 3, 4], [1, 2, 3]) + self.assertRaises(TypeError, map, lambda x,y: x+y, [1, 2, 3, 4], [1, 2, 3]) def test_trivial_map_no_arguments(self): self.assertRaises(TypeError, map) @@ -67,7 +59,7 @@ b = [] self.assertEqual(map(lambda x, y: x, a, b), a) -class TestZip(test.TestCase): +class TestZip(test.AppTestCase): def test_one_list(self): self.assertEqual(zip([1,2,3]), [(1,), (2,), (3,)]) @@ -86,7 +78,7 @@ self.assertEqual(reduce(lambda x, y: x-y, [10, 2, 8]), 0) self.assertEqual(reduce(lambda x, y: x-y, [2, 8], 10), 0) -class TestFilter(test.TestCase): +class TestFilter(test.AppTestCase): def test_None(self): self.assertEqual(filter(None, ['a', 'b', 1, 0, None]), ['a', 'b', 1]) Deleted: pypy/branch/builtinrefactor/pypy/module/test/test_funtional.py ============================================================================== --- pypy/branch/builtinrefactor/pypy/module/test/test_funtional.py Thu Jul 10 15:27:20 2003 +++ (empty file) @@ -1,74 +0,0 @@ -import autopath -from pypy.module.builtin_app import map, filter, reduce, zip - -from pypy.tool import test - -class TestMap(test.TestCase): - - def test_map_identity1(self): - a = ['1', 2, 3, 'b', None] - b = a[:] - self.assertEqual(map(lambda x: x, a), a) - self.assertEqual(a, b) - - def test_map_None1(self): - a = ['1', 2, 3, 'b', None] - b = a[:] - self.assertEqual(map(None, a), a) - self.assertEqual(a, b) - - def test_map_badoperation(self): - a = ['1', 2, 3, 'b', None] - self.assertRaises(TypeError, map, lambda x: x+1, a) - - def test_map_multiply_identity(self): - a = ['1', 2, 3, 'b', None] - b = [ 2, 3, 4, 5, 6] - self.assertEqual(map(None, a, b), [('1', 2), (2, 3), (3, 4), ('b', 5), (None, 6)]) - - def test_map_multiply(self): - a = [1, 2, 3, 4] - b = [0, 1, 1, 1] - self.assertEqual(map(lambda x, y: x+y, a, b), [1, 2, 4, 5]) - - def test_map_multiply(self): - a = [1, 2, 3, 4, 5] - b = [] - self.assertEqual(map(lambda x, y: x, a, b), a) - -class TestZip(test.TestCase): - def test_one_list(self): - self.assertEqual(zip([1,2,3]), [(1,), (2,), (3,)]) - - def test_three_lists(self): - self.assertEqual(zip([1,2,3], [1,2], [1,2,3]), [(1,1,1), (2,2,2)]) - -class TestReduce(test.TestCase): - def test_None(self): - self.assertRaises(TypeError, reduce, lambda x, y: x+y, [1,2,3], None) - - def test_sum(self): - self.assertEqual(reduce(lambda x, y: x+y, [1,2,3,4], 0), 10) - self.assertEqual(reduce(lambda x, y: x+y, [1,2,3,4]), 10) - - def test_minus(self): - self.assertEqual(reduce(lambda x, y: x-y, [10, 2, 8]), 0) - self.assertEqual(reduce(lambda x, y: x-y, [2, 8], 10), 0) - -class TestFilter(test.TestCase): - def test_None(self): - self.assertEqual(filter(None, ['a', 'b', 1, 0, None]), ['a', 'b', 1]) - - def test_return_type(self): - txt = "This is a test text" - self.assertEqual(filter(None, txt), txt) - tup = ("a", None, 0, [], 1) - self.assertEqual(filter(None, tup), ("a", 1)) - - def test_function(self): - self.assertEqual(filter(lambda x: x != "a", "a small text"), " smll text") - -if __name__ == '__main__': - test.main() - - Deleted: pypy/branch/builtinrefactor/pypy/module/test/test_map.py ============================================================================== --- pypy/branch/builtinrefactor/pypy/module/test/test_map.py Thu Jul 10 15:27:20 2003 +++ (empty file) @@ -1,83 +0,0 @@ -import autopath -from pypy.module.builtin_app import map -from pypy.tool import test - -# trivial functions for testing - -def add_two(x): - return x + 2 - -def add_both(x, y): - return x + y - -def add_both_with_none(x, y): - if y is None: - y = 1000 - return x + y - -class TestMap(test.TestCase): - - def test_map_no_arguments(self): - self.assertRaises(TypeError, map) - - def test_map_no_function_no_seq(self): - self.assertRaises(TypeError, map, None) - - def test_map_no_fuction_one_seq(self): - self.assertEqual(map(None, [1, 2, 3]), [1, 2, 3]) - - def test_map_no_function(self): - # test that None padding works - self.assertEqual(map(None, [1,2,3], [4,5,6], [7,8], [1]), - [(1, 4, 7, 1), (2, 5, 8, None), (3, 6, None, None)]) - - def test_map_one_seq(self): - self.assertEqual(map(add_two, [1, 2, 3, 4]), [3, 4, 5, 6]) - - def test_map_two_seq(self): - self.assertEqual(map(add_both, [1, 2, 3, 4],[1, 2, 3, 4]), [2, 4, 6, 8]) - - def test_map_sizes_dont_match_None_padded_unhappy(self): - # Test that None padding works, making add_both unhappy - self.assertRaises(TypeError, map, add_both, [1, 2, 3, 4], [1, 2, 3]) - - def test_map_sizes_dont_match_None_padded_happy(self): - # Test that None padding works, more work for add_both_with_none - self.assertEqual(map(add_both_with_none, [1, 2, 3, 4], [1, 2, 3]), - [2, 4, 6, 1004]) - - def test_map_identity1(self): - a = ['1', 2, 3, 'b', None] - b = a[:] - self.assertEqual(map(lambda x: x, a), a) - self.assertEqual(a, b) - - def test_map_None(self): - a = ['1', 2, 3, 'b', None] - b = a[:] - self.assertEqual(map(None, a), a) - self.assertEqual(a, b) - - def test_map_badoperation(self): - a = ['1', 2, 3, 'b', None] - self.assertRaises(TypeError, map, lambda x: x+1, a) - - def test_map_multiply_identity(self): - a = ['1', 2, 3, 'b', None] - b = [ 2, 3, 4, 5, 6] - self.assertEqual(map(None, a, b), [('1', 2), (2, 3), (3, 4), ('b', 5), (None, 6)]) - - def test_map_multiply(self): - a = [1, 2, 3, 4] - b = [0, 1, 1, 1] - self.assertEqual(map(lambda x, y: x+y, a, b), [1, 2, 4, 5]) - - def test_map_multiply(self): - a = [1, 2, 3, 4, 5] - b = [] - self.assertEqual(map(lambda x, y: x, a, b), a) - -if __name__ == '__main__': - test.main() - - Modified: pypy/branch/builtinrefactor/pypy/module/test/test_minmax.py ============================================================================== --- pypy/branch/builtinrefactor/pypy/module/test/test_minmax.py (original) +++ pypy/branch/builtinrefactor/pypy/module/test/test_minmax.py Thu Jul 10 15:27:20 2003 @@ -1,14 +1,7 @@ import autopath -from pypy.module.builtin_app import min, max from pypy.tool import test -class TestMin(test.TestCase): - - def setUp(self): - pass - - def tearDown(self): - pass +class TestMin(test.AppTestCase): def test_min_notseq(self): self.assertRaises(TypeError, min, 1) @@ -30,8 +23,9 @@ self.assertEqual(min('aaa', 'bbb', 'c'), 'aaa') # write an imaginary test when we have complex numbers - - def test_min_mixed(self): + + # XXX we have no mixed comparison operator yet on StdObjSpace + def _test_min_mixed(self): self.assertEqual(min('1', 2, 3, 'aa'), 2) def test_min_noargs(self): @@ -40,13 +34,7 @@ def test_min_empty(self): self.assertRaises(ValueError, min, []) -class TestMax(test.TestCase): - - def setUp(self): - pass - - def tearDown(self): - pass +class TestMax(test.AppTestCase): def test_max_notseq(self): self.assertRaises(TypeError, max, 1) @@ -69,7 +57,8 @@ # write an imaginary test when we have complex numbers - def test_max_mixed(self): + # XXX we have no mixed comparison operator yet on StdObjSpace + def _test_max_mixed(self): self.assertEqual(max('1', 2, 3, 'aa'), 'aa') def test_max_noargs(self): Modified: pypy/branch/builtinrefactor/pypy/module/test/test_range.py ============================================================================== --- pypy/branch/builtinrefactor/pypy/module/test/test_range.py (original) +++ pypy/branch/builtinrefactor/pypy/module/test/test_range.py Thu Jul 10 15:27:20 2003 @@ -1,14 +1,7 @@ import autopath -from pypy.module.builtin_app import range from pypy.tool import test -class TestRange(test.TestCase): - - def setUp(self): - pass - - def tearDown(self): - pass +class TestRange(test.AppTestCase): def test_range_toofew(self): self.assertRaises(TypeError, range) Modified: pypy/branch/builtinrefactor/pypy/module/test/test_reduce.py ============================================================================== --- pypy/branch/builtinrefactor/pypy/module/test/test_reduce.py (original) +++ pypy/branch/builtinrefactor/pypy/module/test/test_reduce.py Thu Jul 10 15:27:20 2003 @@ -1,8 +1,7 @@ import autopath -from pypy.module.builtin_app import reduce from pypy.tool import test -class TestReduce(test.TestCase): +class TestReduce(test.AppTestCase): def test_None(self): self.assertRaises(TypeError, reduce, lambda x, y: x+y, [1,2,3], None) Modified: pypy/branch/builtinrefactor/pypy/module/test/test_vars.py ============================================================================== --- pypy/branch/builtinrefactor/pypy/module/test/test_vars.py (original) +++ pypy/branch/builtinrefactor/pypy/module/test/test_vars.py Thu Jul 10 15:27:20 2003 @@ -1,33 +1,22 @@ import autopath -from pypy.module.builtin_app import map from pypy.tool import test -# trivial objects for testing +class TestVars(test.AppTestCase): -class TrivialObject: + def _test_vars_no_arguments(self): + self.assertEqual(vars(), locals()) - def __init__(self): - self.s1 = 'I am a string' + def _test_vars_too_many_arguments(self): + self.assertRaises(TypeError, vars, 0, 1) - def do_something(self): - self.s1 = "Now I am another string" - -t = TrivialObject() -t1 = TrivialObject() -t1.do_something() - -class TestVars(test.TestCase): - - def test_vars_no_arguments(self): - self.assertEqual(vars(), locals()) - - def test_vars_too_many_arguments(self): - self.assertRaises(TypeError, vars, t, t1) - - def test_vars_correct_arguments(self): - self.assertEqual(vars(t), t.__dict__) - self.assertEqual(vars(t1), t1.__dict__) - self.assertNotEqual(vars(t1), t.__dict__) + def _test_vars_correct_arguments(self): + class a: + def __init__(self): + self.res = 42 + self.assertEqual(vars(a), a.__dict__) + a1 = a() + self.assertEqual(vars(a1), a1.__dict__) + self.assertEqual(vars(a1).get('res'),42) if __name__ == '__main__': test.main() Modified: pypy/branch/builtinrefactor/pypy/module/test/test_zip.py ============================================================================== --- pypy/branch/builtinrefactor/pypy/module/test/test_zip.py (original) +++ pypy/branch/builtinrefactor/pypy/module/test/test_zip.py Thu Jul 10 15:27:20 2003 @@ -1,8 +1,7 @@ import autopath -from pypy.module.builtin_app import zip from pypy.tool import test -class TestZip(test.TestCase): +class TestZip(test.AppTestCase): def test_zip_no_arguments(self): self.assertRaises(TypeError, zip) From hpk at codespeak.net Thu Jul 10 15:33:09 2003 From: hpk at codespeak.net (hpk at codespeak.net) Date: Thu, 10 Jul 2003 15:33:09 +0200 (MEST) Subject: [pypy-svn] rev 1120 - pypy/branch/builtinrefactor/pypy/module Message-ID: <20030710133309.B9FDA5B06A@thoth.codespeak.net> Author: hpk Date: Thu Jul 10 15:33:09 2003 New Revision: 1120 Modified: pypy/branch/builtinrefactor/pypy/module/builtin.py Log: fixed a typo Modified: pypy/branch/builtinrefactor/pypy/module/builtin.py ============================================================================== --- pypy/branch/builtinrefactor/pypy/module/builtin.py (original) +++ pypy/branch/builtinrefactor/pypy/module/builtin.py Thu Jul 10 15:33:09 2003 @@ -28,7 +28,7 @@ globals = appmethod(globals) def locals(self): - return self._actframe().w_globals + return self._actframe().w_locals locals = appmethod(locals) From hpk at codespeak.net Sat Jul 12 11:50:54 2003 From: hpk at codespeak.net (hpk at codespeak.net) Date: Sat, 12 Jul 2003 11:50:54 +0200 (MEST) Subject: [pypy-svn] rev 1121 - in pypy/branch/builtinrefactor/pypy: interpreter module module/test Message-ID: <20030712095054.1BA185A31D@thoth.codespeak.net> Author: hpk Date: Sat Jul 12 11:50:52 2003 New Revision: 1121 Removed: pypy/branch/builtinrefactor/pypy/interpreter/pycode_app.py pypy/branch/builtinrefactor/pypy/interpreter/pyframe_app.py Modified: pypy/branch/builtinrefactor/pypy/interpreter/baseobjspace.py pypy/branch/builtinrefactor/pypy/interpreter/pycode.py pypy/branch/builtinrefactor/pypy/interpreter/pyframe.py pypy/branch/builtinrefactor/pypy/module/builtin.py pypy/branch/builtinrefactor/pypy/module/test/test_builtin.py Log: - got rid of pyframe_app, and pyframe_app by introducing a new mechanism for *exposing app-level defined methods at interp-level*. This is not really perfect but i begins to work so i check it in. the mechanism is invoked like so (it's not perfect, i know) class someclass: def app_method(self, fixed, number, of, args): # do app-level stuff, don't use 'self' for the time beeing # examples: decode_code_arguments, normalize_exception method = app2interp(app_method) def othermethod(self): # 'self.space' *must* contain an objectspace instance self.method(fixed, number, of, args) - there is a new (experimental, of course!) approach to executing code objects. Actually the "app2interp" method when called makes up an "AppBuiltinCode" instance which is a simple form of a code object. Instead of the whole "build_arguments" to-dict-locals- and-then-get-it-out-of-locals business it constructs arguments in a straightforward manner. Thus it's currently not possible to pass anything like the exact number of arguments (no defaults, etc.) It probably makes sense to extend argument-parsing by using Michael's extmodule's subclassing technique for handling various argument-passing cases. Not that AppBuiltinCode creates a new kind of frame called "AppFrame" which subclass PyFrame but has an easy initialization (see above) - moved tests to applevel and added one for execfile Modified: pypy/branch/builtinrefactor/pypy/interpreter/baseobjspace.py ============================================================================== --- pypy/branch/builtinrefactor/pypy/interpreter/baseobjspace.py (original) +++ pypy/branch/builtinrefactor/pypy/interpreter/baseobjspace.py Sat Jul 12 11:50:52 2003 @@ -1,6 +1,5 @@ from executioncontext import ExecutionContext, OperationError, NoValue -import pyframe, threadlocals -import pypy.module.builtin +import threadlocals __all__ = ['ObjSpace', 'OperationError', 'NoValue', 'PyPyError'] @@ -22,6 +21,7 @@ self.initialize() def make_builtins(self): + import pypy.module.builtin self.builtin = pypy.module.builtin.Builtin(self) self.w_builtin = self.builtin.wrap_base() self.w_builtins = self.getattr(self.w_builtin, self.wrap("__dict__")) Modified: pypy/branch/builtinrefactor/pypy/interpreter/pycode.py ============================================================================== --- pypy/branch/builtinrefactor/pypy/interpreter/pycode.py (original) +++ pypy/branch/builtinrefactor/pypy/interpreter/pycode.py Sat Jul 12 11:50:52 2003 @@ -16,15 +16,36 @@ # look at this if it makes sense # think of a proper base class??? -import baseobjspace, pyframe, executioncontext -import appfile - -appfile = appfile.AppFile(__name__, ["interpreter"]) +import baseobjspace, executioncontext CO_VARARGS = 0x0004 CO_VARKEYWORDS = 0x0008 +class app2interp(object): + """ this class exposes an app-level defined function at interpreter-level + + Assumption: the interp-level function will be called ala + + a.function(arg1, arg2, argn) + + with 'a' having an attribute 'space' which the app-level + code should run in. (might change in during the branch) + """ + + def __init__(self, func): + #print "making app2interp for", func + self.func = func + self._codecache = {} + def __get__(self, instance, cls=None): + space = instance.space + try: + return self._codecache[(space, instance, self)] + except KeyError: + c = AppBuiltinCode(space, self.func, instance) + self._codecache[(space, instance, self)] = c + return c + class PyBaseCode(object): def __init__(self): self.co_name = "" @@ -59,16 +80,104 @@ if w_defaults is None: w_defaults = space.newtuple([]) if w_closure is None: w_closure = space.newtuple([]) w_bytecode = space.wrap(co) - w_arguments = space.gethelper(appfile).call( - "decode_code_arguments", [w_arguments, w_kwargs, w_defaults, - w_bytecode]) - # we assume that decode_code_arguments() gives us a dictionary - # of the correct length. + + self.space = space + w_locals = self.decode_code_arguments(w_arguments, w_kwargs, + w_defaults, w_bytecode) if space.is_true(w_closure): l = zip(co.co_freevars, space.unpackiterable(w_closure)) for key, w_cell in l: - space.setitem(w_arguments, space.wrap(key), w_cell) - return w_arguments + space.setitem(w_locals, space.wrap(key), w_cell) + return w_locals + + def app_decode_code_arguments(self, args, kws, defs, codeobject): + """ + Assumptions: + args sequence of the normal actual parameters + kws dictionary of keyword actual parameters + defs sequence of defaults + codeobject our code object carrying argument info + """ + CO_VARARGS = 0x4 + CO_VARKEYWORDS = 0x8 + varargs = (codeobject.co_flags & CO_VARARGS) and 1 + varkeywords = (codeobject.co_flags & CO_VARKEYWORDS) and 1 + varargs_tuple = () + + argdict = {} + parameter_names = codeobject.co_varnames[:codeobject.co_argcount] + + # Normal arguments + for i in range(0, len(args), 1): # see comment above for ", 1" + if 0 <= i < len(parameter_names): # try + argdict[parameter_names[i]] = args[i] + else: # except IndexError: + # If varargs, put in tuple, else throw error + if varargs: + varargs_tuple = args[i:] + else: + raise TypeError, 'Too many parameters to callable object' + break + + # Put all suitable keywords into arglist + if kws: + if varkeywords: + # Allow all keywords + newkw = {} + for key in kws.keys(): + for name in parameter_names: + if name == key: + if key in argdict: + raise TypeError, 'Setting parameter %s twice.' % name + else: + argdict[key] = kws[key] + break # name found in parameter names + else: + newkw[key] = kws[key] + + else: + # Only allow formal parameter keywords + count = len(kws) + for name in parameter_names: + if name in kws: + count -= 1 + if name in argdict: + raise TypeError, 'Setting parameter %s twice.' % name + else: + argdict[name] = kws[name] + if count: + # XXX This should be improved to show the parameters that + # shouldn't be here. + raise TypeError('Setting keyword parameter that does ' + 'not exist in formal parameter list.') + else: + newkw = {} + + # Fill in with defaults, starting at argcount - defcount + if defs: + argcount = codeobject.co_argcount + defcount = len(defs) + for i in range(argcount - defcount, argcount, 1): # ", 1" comment above + if parameter_names[i] in argdict: + continue + argdict[parameter_names[i]] = defs[i - (argcount - defcount)] + + if len(argdict) < codeobject.co_argcount: + raise TypeError, 'Too few parameters to callable object' + + namepos = codeobject.co_argcount + if varargs: + name = codeobject.co_varnames[namepos] + argdict[name] = varargs_tuple + namepos += 1 + if varkeywords: + name = codeobject.co_varnames[namepos] + argdict[name] = newkw + + return argdict + + decode_code_arguments = app2interp(app_decode_code_arguments) + class PyByteCode(PyBaseCode): """Represents a code object for Python functions. @@ -115,12 +224,14 @@ self.co_consts = newconsts def eval_code(self, space, w_globals, w_locals): + from pypy.interpreter import pyframe frame = pyframe.PyFrame(space, self, w_globals, w_locals) ec = space.getexecutioncontext() w_ret = ec.eval_frame(frame) return w_ret def locals2cells(self, space, w_locals): + from pypy.interpreter import pyframe localcells = [] Cell = pyframe.Cell for name in self.co_varnames: @@ -145,3 +256,35 @@ cell = space.unwrap(w_cell) nestedcells.append(cell) return localcells, nestedcells + +class AppBuiltinCode: + """The code object implementing a app-level hook """ + + def __init__(self, space, func, instance=None): + assert func.func_code.co_flags & (CO_VARARGS|CO_VARKEYWORDS) == 0 + self.space = space + + #PyBaseCode.__init__(self) + co = func.func_code + + self.instance = instance + self.func = func + self.co_code = co.co_code + self.co_name = func.__name__ + self.co_consts = co.co_consts + self.co_flags = co.co_flags + self.co_varnames = tuple(co.co_varnames) + self.co_nlocals = co.co_nlocals + self.co_argcount = co.co_argcount + self.co_names = co.co_names + self.next_arg = self.co_argcount + + def __call__(self, *args_w): + from pypy.interpreter import pyframe + w_globals = self.space.newdict([]) + if self.instance: + args_w = (self.space.wrap(self.instance),) + args_w # effects untested + frame = pyframe.AppFrame(self.space, self, w_globals, args_w) + ec = self.space.getexecutioncontext() + w_ret = ec.eval_frame(frame) + return w_ret Deleted: pypy/branch/builtinrefactor/pypy/interpreter/pycode_app.py ============================================================================== --- pypy/branch/builtinrefactor/pypy/interpreter/pycode_app.py Sat Jul 12 11:50:52 2003 +++ (empty file) @@ -1,99 +0,0 @@ -# replacement for decode_frame_arguments -# -# ===== ATTENTION ===== -# -# This code is pretty fundamental to pypy and great care must be taken -# to avoid infinite recursion. In particular: -# -# - All calls here must be "easy", i.e. not involve default or keyword -# arguments. For example, all range() calls need three arguments. -# -# - You cannot *catch* any exceptions (raising is fine). -# -# (I wonder if the pain of writing this at interpreter level might be -# worth it...) - -def decode_code_arguments(args, kws, defs, codeobject): - """ - Assumptions: - args = sequence of the normal actual parameters - kws = dictionary of keyword actual parameters - defs = sequence of defaults - """ - CO_VARARGS = 0x4 - CO_VARKEYWORDS = 0x8 - varargs = (codeobject.co_flags & CO_VARARGS) and 1 - varkeywords = (codeobject.co_flags & CO_VARKEYWORDS) and 1 - varargs_tuple = () - - argdict = {} - parameter_names = codeobject.co_varnames[:codeobject.co_argcount] - - # Normal arguments - for i in range(0, len(args), 1): # see comment above for ", 1" - if 0 <= i < len(parameter_names): # try - argdict[parameter_names[i]] = args[i] - else: # except IndexError: - # If varargs, put in tuple, else throw error - if varargs: - varargs_tuple = args[i:] - else: - raise TypeError, 'Too many parameters to callable object' - break - - # Put all suitable keywords into arglist - if kws: - if varkeywords: - # Allow all keywords - newkw = {} - for key in kws.keys(): - for name in parameter_names: - if name == key: - if key in argdict: - raise TypeError, 'Setting parameter %s twice.' % name - else: - argdict[key] = kws[key] - break # name found in parameter names - else: - newkw[key] = kws[key] - - else: - # Only allow formal parameter keywords - count = len(kws) - for name in parameter_names: - if name in kws: - count -= 1 - if name in argdict: - raise TypeError, 'Setting parameter %s twice.' % name - else: - argdict[name] = kws[name] - if count: - # XXX This should be improved to show the parameters that - # shouldn't be here. - raise TypeError('Setting keyword parameter that does ' - 'not exist in formal parameter list.') - else: - newkw = {} - - # Fill in with defaults, starting at argcount - defcount - if defs: - argcount = codeobject.co_argcount - defcount = len(defs) - for i in range(argcount - defcount, argcount, 1): # ", 1" comment above - if parameter_names[i] in argdict: - continue - argdict[parameter_names[i]] = defs[i - (argcount - defcount)] - - if len(argdict) < codeobject.co_argcount: - raise TypeError, 'Too few parameters to callable object' - - namepos = codeobject.co_argcount - if varargs: - name = codeobject.co_varnames[namepos] - argdict[name] = varargs_tuple - namepos += 1 - if varkeywords: - name = codeobject.co_varnames[namepos] - argdict[name] = newkw - - return argdict Modified: pypy/branch/builtinrefactor/pypy/interpreter/pyframe.py ============================================================================== --- pypy/branch/builtinrefactor/pypy/interpreter/pyframe.py (original) +++ pypy/branch/builtinrefactor/pypy/interpreter/pyframe.py Sat Jul 12 11:50:52 2003 @@ -2,9 +2,8 @@ """ from pypy.interpreter.executioncontext import OperationError, Stack, NoValue -from pypy.interpreter.appfile import AppFile -appfile = AppFile(__name__, ["interpreter"]) +from pypy.interpreter.pycode import app2interp class PyFrame: @@ -229,8 +228,8 @@ ## import pdb ## pdb.set_trace() ## print w_type, `w_value`, frame.bytecode.co_name - w_res = s.gethelper(appfile).call( - "normalize_exception", [w_type, w_value]) + self.space = s # needed for the following call + w_res = self.normalize_exception(w_type, w_value) w_value = s.getitem(w_res, s.wrap(1)) frame.valuestack.push(w_value) @@ -238,6 +237,22 @@ frame.next_instr = self.handlerposition # jump to the handler raise StopUnrolling + def app_normalize_exception(self, etype, evalue): + # mistakes here usually show up as infinite recursion, which is fun. + if isinstance(evalue, etype): + return etype, evalue + if isinstance(etype, type) and issubclass(etype, Exception): + if evalue is None: + evalue = () + elif not isinstance(evalue, tuple): + evalue = (evalue,) + evalue = etype(*evalue) + else: + raise Exception, "?!" + return etype, evalue + normalize_exception = app2interp(app_normalize_exception) + + class FinallyBlock(FrameBlock): """A try:finally: block. Stores the position of the exception handler.""" @@ -370,3 +385,41 @@ else: return "%s(%s)" % (self.__class__.__name__, self.w_value) +class AppFrame(PyFrame): + """Represents a frame for a regular Python function + that needs to be interpreted. + + Public fields: + * 'space' is the object space this frame is running in + * 'w_locals' is the locals dictionary to use + * 'w_globals' is the attached globals dictionary + * 'w_builtins' is the attached built-ins dictionary + * 'valuestack', 'blockstack', 'next_instr' control the interpretation + """ + + def __init__(self, space, bytecode, w_globals, argtuple): + self.space = space + self.bytecode = bytecode # Misnomer; this is really like a code object + + # XXX we may want to have lazy access to interp-level through w_globals later + self.w_globals = w_globals + + # XXX construct self.w_locals + self.nestedcells = () + self.localcells = [ Cell(x) for x in argtuple ] + missing = self.bytecode.co_nlocals - len(self.localcells) + self.localcells.extend([ Cell() for x in range(missing)]) + + self.w_builtins = self.load_builtins() + self.valuestack = Stack() + self.blockstack = Stack() + self.last_exception = None + self.next_instr = 0 + #self._dump() + + def _dump(self): + print "AppFrame_dump" + print " space ", self.space + print " localcells", self.localcells + print " co_varnames ", self.bytecode.co_varnames + Deleted: pypy/branch/builtinrefactor/pypy/interpreter/pyframe_app.py ============================================================================== --- pypy/branch/builtinrefactor/pypy/interpreter/pyframe_app.py Sat Jul 12 11:50:52 2003 +++ (empty file) @@ -1,99 +0,0 @@ -# XXX -# This is deprecated. -# We use the same functionality,. but do it in -# pycode_app.py. -# the function is just fine, we just don't reduce the -# dictionary; it is the result. - -def decode_frame_arguments(args, kws, defs, closure, codeobject): - """ - Assumptions: - args = sequence of the normal actual parameters - kws = dictionary of keyword actual parameters - defs = sequence of defaults - """ - CO_VARARGS = 0x4 - CO_VARKEYWORDS = 0x8 - varargs = (codeobject.co_flags & CO_VARARGS) and 1 - varkeywords = (codeobject.co_flags & CO_VARKEYWORDS) and 1 - varargs_tuple = () - - argdict = {} - parameter_names = codeobject.co_varnames[:codeobject.co_argcount] - - # Normal arguments - for i in range(len(args)): - try: - argdict[parameter_names[i]] = args[i] - except IndexError: - # If varargs, put in tuple, else throw error - if varargs: - varargs_tuple = args[i:] - else: - raise TypeError, 'Too many parameters to callable object' - - # Put all suitable keywords into arglist - if kws: - if varkeywords: - # Allow all keywords - newkw = {} - for key in kws.keys(): - for name in parameter_names: - if name == key: - if argdict.has_key(key): - raise TypeError, 'Setting parameter %s twice.' % name - else: - argdict[key] = kws[key] - break # name found in parameter names - else: - newkw[key] = kws[key] - - else: - # Only allow formal parameter keywords - count = len(kws) - for name in parameter_names: - if kws.has_key(name): - count -= 1 - if argdict.has_key(name): - raise TypeError, 'Setting parameter %s twice.' % name - else: - argdict[name] = kws[name] - if count: - # XXX This should be improved to show the parameters that - # shouldn't be here. - raise TypeError, 'Setting keyword parameter that does not exist in formal parameter list.' - - # Fill in with defaults, starting at argcount - defcount - if defs: - argcount = codeobject.co_argcount - defcount = len(defs) - for i in range(argcount - defcount, argcount): - if argdict.has_key(parameter_names[i]): - continue - argdict[parameter_names[i]] = defs[i - (argcount - defcount)] - - if len(argdict) < codeobject.co_argcount: - raise TypeError, 'Too few paramteres to callable object' - - a = [argdict[name] for name in parameter_names] - if varargs: - a.append(varargs_tuple) - if varkeywords: - a.append(newkw) - return tuple(a) - -def normalize_exception(etype, evalue): - # mistakes here usually show up as infinite recursion, which is - # fun. - if isinstance(evalue, etype): - return etype, evalue - if isinstance(etype, type) and issubclass(etype, Exception): - if evalue is None: - evalue = () - elif not isinstance(evalue, tuple): - evalue = (evalue,) - evalue = etype(*evalue) - else: - raise Exception, "?!" - return etype, evalue - Modified: pypy/branch/builtinrefactor/pypy/module/builtin.py ============================================================================== --- pypy/branch/builtinrefactor/pypy/module/builtin.py (original) +++ pypy/branch/builtinrefactor/pypy/module/builtin.py Sat Jul 12 11:50:52 2003 @@ -9,16 +9,6 @@ class Builtin(BuiltinModule): __pythonname__ = '__builtin__' - #__appfile__ = appfile.AppFile(__name__, ["module"]) - - #__helper_appfile__ = appfile.AppFile('builtin_helper',["module"]) - - # temporary hack, until we have a real tuple type for calling - #def tuple(self, w_obj): - # lis = self.space.unpackiterable(w_obj) - # w_res = self.space.newtuple(lis) - # return w_res - #tuple = appmethod(tuple) def _actframe(self, index=-1): return self.space.getexecutioncontext().framestack.items[index] @@ -93,13 +83,13 @@ return space.wrap(res) compile = appmethod(compile) - def execfile(self, w_filename, w_globals, w_locals): + def execfile(self, w_filename, w_globals=None, w_locals=None): space = self.space #XXX why do i have to check against space.w_None instead of None? # above the compile commands *does* check against None - if w_globals is None or w_globals is space.w_None: + if w_globals is space.w_None: w_globals = self._actframe().w_globals - if w_locals is None or w_globals is space.w_None: + if w_locals is space.w_None: w_locals = w_globals filename = space.unwrap(w_filename) @@ -174,17 +164,14 @@ return self.space.ord(w_val) ord = appmethod(ord) - def pow(self, w_val): return self.space.pow(w_val) pow = appmethod(pow) - def repr(self, w_object): return self.space.repr(w_object) repr = appmethod(repr) - def setattr(self, w_object, w_name, w_val): return self.space.setattr(w_object, w_name, w_val) setattr = appmethod(setattr) Modified: pypy/branch/builtinrefactor/pypy/module/test/test_builtin.py ============================================================================== --- pypy/branch/builtinrefactor/pypy/module/test/test_builtin.py (original) +++ pypy/branch/builtinrefactor/pypy/module/test/test_builtin.py Sat Jul 12 11:50:52 2003 @@ -52,13 +52,42 @@ self.assertEquals(iter_x.next(), 3) self.assertRaises(StopIteration, iter_x.next) -class TestCmp(test.TestCase): - def test_cmp(self): - self.failUnless(cmp(9, 9) == 0) - self.failUnless(cmp(0,9) < 0) - self.failUnless(cmp(9,0) > 0) - + self.assertEquals(cmp(9,9), 0) + self.assert_(cmp(0,9) < 0) + self.assert_(cmp(9,0) > 0) + +class TestInternal(test.IntTestCase): + + def setUp(self): + self.space = space = test.objspace() + + def get_builtin(self, name): + w = self.space.wrap + w_builtins = self.space.w_builtins + w_obj = self.space.getitem(w_builtins, w(name)) + return w_obj + + def test_execfile(self): + # we need cpython's tempfile currently to test + from tempfile import mktemp + fn = mktemp() + f = open(fn, 'w') + print >>f, "i=42" + f.close() + + try: + w_execfile = self.get_builtin('execfile') + space = self.space + w_dict = space.newdict([]) + self.space.call(w_execfile, space.newtuple([ + space.wrap(fn), w_dict, space.w_None]), space.newdict([])) + w_value = space.getitem(w_dict, space.wrap('i')) + self.assertEqual_w(w_value, space.wrap(42)) + finally: + import os + os.remove(fn) + if __name__ == '__main__': test.main() From hpk at codespeak.net Sat Jul 12 15:10:36 2003 From: hpk at codespeak.net (hpk at codespeak.net) Date: Sat, 12 Jul 2003 15:10:36 +0200 (MEST) Subject: [pypy-svn] rev 1122 - pypy/branch/builtinrefactor/pypy/module Message-ID: <20030712131036.600FD5A31E@thoth.codespeak.net> Author: hpk Date: Sat Jul 12 15:10:36 2003 New Revision: 1122 Modified: pypy/branch/builtinrefactor/pypy/module/builtin.py Log: various little (cosmetical) cleanups to make the code more readable Modified: pypy/branch/builtinrefactor/pypy/module/builtin.py ============================================================================== --- pypy/branch/builtinrefactor/pypy/module/builtin.py (original) +++ pypy/branch/builtinrefactor/pypy/module/builtin.py Sat Jul 12 15:10:36 2003 @@ -1,11 +1,11 @@ from pypy.interpreter.extmodule import * -from pypy.interpreter import pycode, appfile, executioncontext +from pypy.interpreter import pycode, executioncontext ####################### #### __builtin__ #### ####################### -import __builtin__ as _b +import __builtin__ as cpy_builtin class Builtin(BuiltinModule): __pythonname__ = '__builtin__' @@ -77,7 +77,7 @@ dont_inherit = 0 #print (str, filename, startstr, supplied_flags, dont_inherit) - c = _b.compile(str, filename, startstr, supplied_flags, dont_inherit) + c = cpy_builtin.compile(str, filename, startstr, supplied_flags, dont_inherit) res = pycode.PyByteCode() res._from_code(c) return space.wrap(res) @@ -94,7 +94,7 @@ filename = space.unwrap(w_filename) s = open(filename).read() - c = _b.compile(s, filename, 'exec', 4096) # XXX generators + c = cpy_builtin.compile(s, filename, 'exec', 4096) # XXX generators res = pycode.PyByteCode() res._from_code(c) @@ -123,7 +123,6 @@ return self.space.delattr(w_object, w_name) delattr = appmethod(delattr) - def getattr(self, w_object, w_name): return self.space.getattr(w_object, w_name) getattr = appmethod(getattr) @@ -137,7 +136,6 @@ return self.space.oct(w_val) oct = appmethod(oct) - def hex(self, w_val): return self.space.hex(w_val) hex = appmethod(hex) @@ -147,15 +145,13 @@ return self.space.id(w_object) id = appmethod(id) - #XXX - #It works only for new-style classes. - #So we have to fix it, when we add support for - #the old-style classes + #XXX works only for new-style classes. + #So we have to fix it, when we add support for old-style classes def issubclass(self, w_cls1, w_cls2): return self.space.issubtype(w_cls1, w_cls2) issubclass = appmethod(issubclass) - #XXX the is also the second form of iter, we don't have implemented + #XXX missing: second form of iter (callable, sentintel) def iter(self, w_collection): return self.space.iter(w_collection) iter = appmethod(iter) @@ -175,20 +171,3 @@ def setattr(self, w_object, w_name, w_val): return self.space.setattr(w_object, w_name, w_val) setattr = appmethod(setattr) - - #XXX - #We don't have newunicode at the time - def unichr(self, w_val): - return self.space.newunicode([w_val]) - unichr = appmethod(unichr) - - - # we have None! But leave these at the bottom, otherwise the default - # arguments of the above-defined functions will see this new None... - #None = appdata(_b.None) - -## False = appdata(_b.False) -## True = appdata(_b.True) -## dict = appdata(_b.dict) # XXX temporary -## tuple = appdata(_b.tuple) # XXX temporary -## int = appdata(_b.int) # XXX temporary From arigo at codespeak.net Sun Jul 13 23:28:35 2003 From: arigo at codespeak.net (arigo at codespeak.net) Date: Sun, 13 Jul 2003 23:28:35 +0200 (MEST) Subject: [pypy-svn] rev 1131 - in pypy/trunk/src/pypy/objspace/std: . test Message-ID: <20030713212835.BA5905A411@thoth.codespeak.net> Author: arigo Date: Sun Jul 13 23:28:35 2003 New Revision: 1131 Modified: pypy/trunk/src/pypy/objspace/std/boolobject.py pypy/trunk/src/pypy/objspace/std/floatobject.py pypy/trunk/src/pypy/objspace/std/multimethod.py pypy/trunk/src/pypy/objspace/std/objectobject.py pypy/trunk/src/pypy/objspace/std/objspace.py pypy/trunk/src/pypy/objspace/std/test/test_multimethod.py pypy/trunk/src/pypy/objspace/std/userobject.py Log: Still some light refactoring of the multimethod mecanisms. Now we give enough static clues about the types to allow for a complete list of what-to-try-in-which-order to be built for each input argument types. This cleanly separates method selection from method call, as wished by mwh and Samuele. It should also speed up pypy a bit but not dramatically enough to notice I'm afraid. Modified: pypy/trunk/src/pypy/objspace/std/boolobject.py ============================================================================== --- pypy/trunk/src/pypy/objspace/std/boolobject.py (original) +++ pypy/trunk/src/pypy/objspace/std/boolobject.py Sun Jul 13 23:28:35 2003 @@ -27,6 +27,7 @@ # to an .intval one def delegate__Bool(space, w_bool): return intobject.W_IntObject(space, int(w_bool.boolval)) +delegate__Bool.result_class = intobject.W_IntObject delegate__Bool.priority = PRIORITY_PARENT_TYPE Modified: pypy/trunk/src/pypy/objspace/std/floatobject.py ============================================================================== --- pypy/trunk/src/pypy/objspace/std/floatobject.py (original) +++ pypy/trunk/src/pypy/objspace/std/floatobject.py Sun Jul 13 23:28:35 2003 @@ -28,6 +28,7 @@ # int-to-float delegation def delegate__Int(space, w_intobj): return W_FloatObject(space, float(w_intobj.intval)) +delegate__Int.result_class = W_FloatObject delegate__Int.priority = PRIORITY_CHANGE_TYPE Modified: pypy/trunk/src/pypy/objspace/std/multimethod.py ============================================================================== --- pypy/trunk/src/pypy/objspace/std/multimethod.py (original) +++ pypy/trunk/src/pypy/objspace/std/multimethod.py Sun Jul 13 23:28:35 2003 @@ -38,31 +38,184 @@ self.operatorsymbol = operatorsymbol self.dispatch_table = {} self.cache_table = {} + self.cache_delegator_key = None def register(self, function, *types): - for type in types: - if (hasattr(type, 'dispatchclass') and - 'dispatchclass' not in type.__dict__): - raise error, ('looks like you forgot to call\n' - 'registerimplementation(%r)' % type) - # W_ANY can be used as a placeholder to dispatch on any value. functions = self.dispatch_table.setdefault(types, []) if function not in functions: functions.append(function) self.cache_table.clear() + def compile_calllist(self, argclasses, delegate): + """Compile a list of calls to try for the given classes of the + arguments. Return a function that should be called with the + actual arguments.""" + if delegate.key is not self.cache_delegator_key: + self.cache_table.clear() + self.cache_delegator_key = delegate.key + try: + return self.cache_table[argclasses] + except KeyError: + calllist = [] + self.internal_buildcalllist(argclasses, delegate, calllist) + result = self.internal_compilecalllist(argclasses, calllist) + self.cache_table[argclasses] = result + return result + + def internal_compilecalllist(self, argclasses, calllist): + """Translate a call list into the source of a Python function + which is optimized and doesn't do repeated conversions on the + same arguments.""" + if len(calllist) == 1: + fn, conversions = calllist[0] + if conversions.count([]) == len(conversions): + # no conversion, just calling a single function: return + # that function directly + return fn + + #print '**** compile **** ', self.operatorsymbol, [ + # t.__name__ for t in argclasses] + arglist = ['a%d'%i for i in range(len(argclasses))] + ['*extraargs'] + source = ['def do(space,%s):' % ','.join(arglist)] + converted = [{(): 'a%d'%i} for i in range(len(argclasses))] + + def make_conversion(argi, convlist): + if tuple(convlist) in converted[argi]: + return converted[argi][tuple(convlist)] + else: + prev = make_conversion(argi, convlist[:-1]) + new = '%s_%d' % (prev, len(converted[argi])) + fname = all_functions.setdefault(convlist[-1], + 'd%d' % len(all_functions)) + source.append(' %s = %s(space,%s)' % (new, fname, prev)) + converted[argi][tuple(convlist)] = new + return new + + all_functions = {} + has_firstfailure = False + for fn, conversions in calllist: + # make the required conversions + fname = all_functions.setdefault(fn, 'f%d' % len(all_functions)) + arglist = [make_conversion(i, conversions[i]) + for i in range(len(argclasses))] + ['*extraargs'] + source.append( ' try:') + source.append( ' return %s(space,%s)' % ( + fname, ','.join(arglist))) + if has_firstfailure: + source.append(' except FailedToImplement:') + else: + source.append(' except FailedToImplement, firstfailure:') + has_firstfailure = True + source.append( ' pass') + + # complete exhaustion + if has_firstfailure: + source.append(' raise firstfailure') + else: + source.append(' raise FailedToImplement()') + source.append('') + + # compile the function + glob = {'FailedToImplement': FailedToImplement} + for fn, fname in all_functions.items(): + glob[fname] = fn + #for key, value in glob.items(): + # print key, '=', value + #for line in source: + # print line + exec '\n'.join(source) in glob + return glob['do'] + + def internal_buildcalllist(self, argclasses, delegate, calllist): + """Build a list of calls to try for the given classes of the + arguments. The list contains 'calls' of the following form: + (function-to-call, list-of-list-of-converters) + The list of converters contains a list of converter functions per + argument, with [] meaning that no conversion is needed for + that argument.""" + # look for an exact match first + arity = self.arity + assert arity == len(argclasses) + dispatchclasses = tuple([(c,) for c in argclasses]) + choicelist = self.buildchoices(dispatchclasses) + seen_functions = {} + no_conversion = [[]] * arity + for signature, function in choicelist: + calllist.append((function, no_conversion)) + seen_functions[function] = 1 + + # proceed by expanding the last argument by delegation, step by step + # until no longer possible, and then the previous argument, and so on. + expanded_args = () + expanded_dispcls = () + + for argi in range(arity-1, -1, -1): + # growing tuple of dispatch classes we can delegate to + curdispcls = dispatchclasses[argi] + assert len(curdispcls) == 1 + # maps each dispatch class to a list of converters + curargs = {curdispcls[0]: []} + # reduce dispatchclasses to the arguments before this one + # (on which no delegation has been tried yet) + dispatchclasses = dispatchclasses[:argi] + no_conversion = no_conversion[:argi] + + while 1: + choicelist = delegate.buildchoices((curdispcls,)) + # the list is sorted by priority + progress = False + for (t,), function in choicelist: + if function is None: + # this marks a decrease in the priority. + # Don't try delegators with lower priority if + # we have already progressed. + if progress: + break + else: + assert hasattr(function, 'result_class'), ( + "delegator %r must have a result_class" % function) + nt = function.result_class + if nt not in curargs: + curdispcls += (nt,) + srcconvs = curargs[t] + if not getattr(function, 'trivial_delegation',False): + srcconvs = srcconvs + [function] + curargs[nt] = srcconvs + progress = True + else: + if not progress: + break # no progress, and delegators list exhausted + + # progress: try again to dispatch with this new set of types + choicelist = self.buildchoices( + dispatchclasses + (curdispcls,) + expanded_dispcls) + for signature, function in choicelist: + if function not in seen_functions: + seen_functions[function] = 1 + # collect arguments: arguments after position argi... + after_argi = [expanded_args[j][signature[j]] + for j in range(argi+1-arity, 0)] # nb. j<0 + # collect arguments: argument argi... + arg_argi = curargs[signature[argi]] + # collect all arguments + newargs = no_conversion + [arg_argi] + after_argi + # record the call + calllist.append((function, newargs)) + # end of while 1: try on delegating the same argument i + + # proceed to the next argument + expanded_args = (curargs,) + expanded_args + expanded_dispcls = (curdispcls,) + expanded_dispcls + def buildchoices(self, allowedtypes): """Build a list of all possible implementations we can dispatch to, sorted best-first, ignoring delegation.""" # 'types' is a tuple of tuples of classes, one tuple of classes per - # argument. (Delegation needs to call buildchoice() with than one - # class for a single argument.) - try: - result = self.cache_table[allowedtypes] # try from the cache first - except KeyError: - result = self.cache_table[allowedtypes] = [] - self.internal_buildchoices(allowedtypes, (), result) - self.postprocessresult(allowedtypes, result) + # argument. (After delegation, we need to call buildchoice() with + # more than one possible class for a single argument.) + result = [] + self.internal_buildchoices(allowedtypes, (), result) + self.postprocessresult(allowedtypes, result) #print self.operatorsymbol, allowedtypes, result # the result is a list a tuples (function, signature). return result @@ -129,29 +282,33 @@ def __init__(self): MultiMethod.__init__(self, 'delegate', 1, []) - + self.key = object() + + def register(self, function, *types): + AbstractMultiMethod.register(self, function, *types) + self.key = object() # change the key to force recomputation + def postprocessresult(self, allowedtypes, result): - by_priority = {} # classify delegators by priority - - # add delegation from a class to its parent classes + # add delegation from a class to the *first* immediate parent class arg1types, = allowedtypes - parenttypes = [] for t in arg1types: - parenttypes += list(t.__bases__) - if parenttypes: - def delegate_to_parent_classes(space, a, parenttypes=parenttypes): - return [(t, a) for t in parenttypes - if issubclass(a.dispatchclass, t)] - # hard-wire it at priority 0 - by_priority[0] = [((t,), delegate_to_parent_classes) - for t in arg1types] + if t.__bases__: + base = t.__bases__[0] + def delegate_to_parent_class(space, a): + return a + delegate_to_parent_class.trivial_delegation = True + delegate_to_parent_class.result_class = base + delegate_to_parent_class.priority = 0 + # hard-wire it at priority 0 + result.append(((t,), delegate_to_parent_class)) # sort the results in priority order, and insert None marks # between jumps in the priority values. Higher priority values # first. + by_priority = {} # classify delegators by priority for signature, function in result: assert hasattr(function, 'priority'), ( - "delegator function must have a priority") + "delegator %r must have a priority" % function) sublist = by_priority.setdefault(function.priority, []) sublist.append((signature, function)) delegators = by_priority.items() @@ -220,7 +377,7 @@ raise OperationError(*e.args) else: # raise a TypeError for a FailedToImplement - initialtypes = [a.dispatchclass + initialtypes = [a.__class__ for a in args[:self.multimethod.arity]] if len(initialtypes) <= 1: plural = "" @@ -235,90 +392,10 @@ def perform_call(self, args): arity = self.multimethod.arity - extraargs = args[arity:] - -## if self.ASSERT_BASE_TYPE: -## for a in args[:arity]: -## assert issubclass(a.dispatchclass, self.ASSERT_BASE_TYPE), ( -## "multimethod '%s' call with non wrapped argument: %r" % -## (self.multimethod.operatorsymbol, a)) - - # look for an exact match first - firstfailure = None - types = tuple([(a.dispatchclass,) for a in args]) - choicelist = self.multimethod.buildchoices(types) - for signature, function in choicelist: - try: - return function(self.space, *args) - except FailedToImplement, e: - # we got FailedToImplement, record the first such error - firstfailure = firstfailure or e - - seen_functions = {} - for signature, function in choicelist: - seen_functions[function] = 1 - - # proceed by expanding the last argument by delegation, step by step - # until no longer possible, and then the previous argument, and so on. - expanded_args = () - expanded_types = () - delegate = self.space.delegate.multimethod - - for argi in range(arity-1, -1, -1): - curtypes = types[argi] # growing tuple of types we can delegate to - assert len(curtypes) == 1 - curobjs = {curtypes[0]: args[argi]} # maps them to actual objects - args = args[:argi] # initial segments of arguments before this one - types = types[:argi] # same with types (no deleg tried on them yet) - while 1: - choicelist = delegate.buildchoices((curtypes,)) - # the list is sorted by priority - progress = False - for (t,), function in choicelist: - if function is None: - # this marks a decrease in the priority. - # Don't try delegators with lower priority if - # we have already progressed. - if progress: - break - else: - converted = function(self.space, curobjs[t]) - if not isinstance(converted, list): - converted = [(converted.dispatchclass, - converted)] - for t, a in converted: - if t not in curobjs: - curtypes += (t,) - curobjs[t] = a - progress = True - else: - if not progress: - break # no progress, and delegators list exhausted - - # progress: try again to dispatch with this new set of types - choicelist = self.multimethod.buildchoices( - types + (curtypes,) + expanded_types) - for signature, function in choicelist: - if function not in seen_functions: - seen_functions[function] = 1 - # collect arguments: arguments after position i... - tail = [expanded_args[j][signature[j]] - for j in range(argi+1-arity, 0)] # nb. j<0 - # argments before and up to position i... - newargs= args + (curobjs[signature[argi]],) + tuple(tail) - try: - return function(self.space, *newargs+extraargs) - except FailedToImplement, e: - # record the first FailedToImplement - firstfailure = firstfailure or e - # end of while 1: try on delegating the same argument i - - # proceed to the next argument - expanded_args = (curobjs,) + expanded_args - expanded_types = (curtypes,) + expanded_types - - # complete exhaustion - raise firstfailure or FailedToImplement() + argclasses = tuple([a.__class__ for a in args[:arity]]) + delegate = self.space.delegate.multimethod + fn = self.multimethod.compile_calllist(argclasses, delegate) + return fn(self.space, *args) def is_empty(self): return self.multimethod.is_empty() Modified: pypy/trunk/src/pypy/objspace/std/objectobject.py ============================================================================== --- pypy/trunk/src/pypy/objspace/std/objectobject.py (original) +++ pypy/trunk/src/pypy/objspace/std/objectobject.py Sun Jul 13 23:28:35 2003 @@ -15,6 +15,7 @@ # any-to-object delegation is quite trivial, because W_ObjectObject is. def delegate__ANY(space, w_obj): return W_ObjectObject(space) +delegate__ANY.result_class = W_ObjectObject delegate__ANY.priority = PRIORITY_PARENT_TYPE def object_init__Object_ANY_ANY(space, w_object, w_args, w_kwds): Modified: pypy/trunk/src/pypy/objspace/std/objspace.py ============================================================================== --- pypy/trunk/src/pypy/objspace/std/objspace.py (original) +++ pypy/trunk/src/pypy/objspace/std/objspace.py Sun Jul 13 23:28:35 2003 @@ -37,7 +37,6 @@ # it may be modified to take 'statictype' instead of requiring it to be # stored in 'implcls' itself assert issubclass(implcls, W_Object) - implcls.__dict__.setdefault('dispatchclass', implcls) ################################################################## Modified: pypy/trunk/src/pypy/objspace/std/test/test_multimethod.py ============================================================================== --- pypy/trunk/src/pypy/objspace/std/test/test_multimethod.py (original) +++ pypy/trunk/src/pypy/objspace/std/test/test_multimethod.py Sun Jul 13 23:28:35 2003 @@ -15,15 +15,17 @@ def from_y_to_x(space, yinstance): return X(yinstance) +from_y_to_x.result_class = X from_y_to_x.priority = 2 -def from_x_to_str_sometimes(space, xinstance): - if xinstance.value: - return w('!' + repr(xinstance.value)) - else: - return [] +def from_x_to_str(space, xinstance): + #if xinstance.value: + return w('!' + repr(xinstance.value)) + #else: + # return [] -from_x_to_str_sometimes.priority = 2 +from_x_to_str.result_class = str +from_x_to_str.priority = 2 class Y: @@ -65,24 +67,27 @@ add.register(add_int_any, int, object) delegate = DelegateMultiMethod() - delegate.register(from_y_to_x, Y) - delegate.register(from_x_to_str_sometimes, X) + delegate.register(from_y_to_x, Y) + delegate.register(from_x_to_str, X) def wrap(self, x): return '' % (x,) w_TypeError = 'w_TypeError' -def w(x, cache={}): - if type(x) in cache: - Stub = cache[type(x)] - else: - Stub = type(type(x))('%s_stub' % type(x).__name__, (type(x),), {}) - Stub.dispatchclass = Stub - cache[type(x)] = Stub - return Stub(x) +##def w(x, cache={}): +## if type(x) in cache: +## Stub = cache[type(x)] +## else: +## Stub = type(type(x))('%s_stub' % type(x).__name__, (type(x),), {}) +## Stub.dispatchclass = Stub +## cache[type(x)] = Stub +## return Stub(x) -X.dispatchclass = X -Y.dispatchclass = Y +##X.dispatchclass = X +##Y.dispatchclass = Y + +def w(x): + return x class TestMultiMethod(test.TestCase): @@ -127,10 +132,10 @@ space = self.space self.assertRaises(OperationError, space.add, w([3]), w(4)) self.assertRaises(OperationError, space.add, w(3.0), w('bla')) - self.assertRaises(OperationError, space.add, X(0), w("spam")) - self.assertRaises(OperationError, space.add, Y(666), w("egg")) + #self.assertRaises(OperationError, space.add, X(0), w("spam")) + #self.assertRaises(OperationError, space.add, Y(666), w("egg")) - def test_delegate_x_to_str_sometimes(self): + def test_delegate_x_to_str(self): space = self.space r = space.add(X(42), w("spam")) self.assertEquals(repr(r), "('add_string_string', '!42', 'spam')") Modified: pypy/trunk/src/pypy/objspace/std/userobject.py ============================================================================== --- pypy/trunk/src/pypy/objspace/std/userobject.py (original) +++ pypy/trunk/src/pypy/objspace/std/userobject.py Sun Jul 13 23:28:35 2003 @@ -42,10 +42,17 @@ try: return _bltin_subclass_cache[cls] except: - subcls = type(W_Object)("%s_sub" % cls.__name__, (cls,), - {'statictype' : W_UserType, - 'bltbase' : cls, - 'dispatchclass': W_UserObject}) + subcls = type(W_Object)("%s_sub" % cls.__name__, (W_UserObject, cls), + {'statictype': W_UserType}) + + # W_UserObject-to-the-parent-builtin-type delegation + def delegate_to_parent_builtin(space, w_userobj): + return w_userobj + delegate_to_parent_builtin.trivial_delegation = True + delegate_to_parent_builtin.result_class = cls + delegate_to_parent_builtin.priority = PRIORITY_PARENT_TYPE + StdObjSpace.delegate.register(delegate_to_parent_builtin, subcls) + _bltin_subclass_cache[cls] = subcls return subcls @@ -73,14 +80,6 @@ return mostspecialized -# W_UserObject-to-the-parent-builtin-type delegation -# So far this is the only delegation that produces a result -# of a variable type. -def delegate__User(space, w_userobj): - return [(w_userobj.bltbase,w_userobj)] -delegate__User.priority = PRIORITY_PARENT_TYPE - - def type__User(space, w_userobj): return w_userobj.w_type From hpk at codespeak.net Mon Jul 14 15:47:14 2003 From: hpk at codespeak.net (hpk at codespeak.net) Date: Mon, 14 Jul 2003 15:47:14 +0200 (MEST) Subject: [pypy-svn] rev 1132 - pypy/branch/builtinrefactor/pypy/objspace Message-ID: <20030714134714.74D265A449@thoth.codespeak.net> Author: hpk Date: Mon Jul 14 15:47:13 2003 New Revision: 1132 Modified: pypy/branch/builtinrefactor/pypy/objspace/trivial.py Log: - fixed wrong cloning of exceptions (try raise ValueError on the cmdline in the previous revision) - excluded 'xrange' from the list of "imported" types from __builtin__ probably 'standard_types' should be defined more explicitely... Modified: pypy/branch/builtinrefactor/pypy/objspace/trivial.py ============================================================================== --- pypy/branch/builtinrefactor/pypy/objspace/trivial.py (original) +++ pypy/branch/builtinrefactor/pypy/objspace/trivial.py Mon Jul 14 15:47:13 2003 @@ -122,7 +122,7 @@ continue else: base = done[b.__name__] - newtype = type(k, (base,), {}) + newtype = type(next, (base,), {}) setattr(self, 'w_' + next, newtype) done[next] = newtype stack.pop() @@ -143,10 +143,12 @@ "None" : self.w_None, "Ellipsis" : self.w_Ellipsis, "buffer": buffer, - "xrange": xrange, + #"xrange": xrange, "slice": slice, } for n, c in __builtin__.__dict__.iteritems(): + if n == 'xrange': # we define this in builtin_app + continue if isinstance(c, types.TypeType): setattr(self, 'w_' + c.__name__, c) newstuff[c.__name__] = c From hpk at codespeak.net Mon Jul 14 21:02:30 2003 From: hpk at codespeak.net (hpk at codespeak.net) Date: Mon, 14 Jul 2003 21:02:30 +0200 (MEST) Subject: [pypy-svn] rev 1133 - pypy/branch/builtinrefactor/pypy/interpreter Message-ID: <20030714190230.3276D5A428@thoth.codespeak.net> Author: hpk Date: Mon Jul 14 21:02:28 2003 New Revision: 1133 Modified: pypy/branch/builtinrefactor/pypy/interpreter/baseobjspace.py pypy/branch/builtinrefactor/pypy/interpreter/opcode.py pypy/branch/builtinrefactor/pypy/interpreter/opcode_app.py pypy/branch/builtinrefactor/pypy/interpreter/pycode.py Log: - moved build_class from opcode_app to opcode.py - initialized co_lnotab, co_firstline, co_filename in AppCode to get better tracebacks - little tweak to use w_builtins instead of w_builtin during basobjcspace-initialization Modified: pypy/branch/builtinrefactor/pypy/interpreter/baseobjspace.py ============================================================================== --- pypy/branch/builtinrefactor/pypy/interpreter/baseobjspace.py (original) +++ pypy/branch/builtinrefactor/pypy/interpreter/baseobjspace.py Mon Jul 14 21:02:28 2003 @@ -38,7 +38,7 @@ import os fn = os.path.join(os.path.dirname(fn), 'builtin_app.py') w_args = self.newtuple([self.wrap(fn), self.w_builtins, self.w_builtins]) - w_execfile = self.getattr(self.w_builtin, self.wrap('execfile')) + w_execfile = self.getitem(self.w_builtins, self.wrap('execfile')) self.call(w_execfile, w_args, self.newdict([])) def make_sys(self): Modified: pypy/branch/builtinrefactor/pypy/interpreter/opcode.py ============================================================================== --- pypy/branch/builtinrefactor/pypy/interpreter/opcode.py (original) +++ pypy/branch/builtinrefactor/pypy/interpreter/opcode.py Mon Jul 14 21:02:28 2003 @@ -2,6 +2,7 @@ from pypy.interpreter.baseobjspace import OperationError, NoValue import dis from pypy.interpreter import pyframe, baseobjspace +from pypy.interpreter.pycode import app2interp # dynamically loaded application-space utilities @@ -311,12 +312,32 @@ if unroller is not None: raise unroller # re-raise the unroller, if any +class app(object): + def __init__(self, space): + self.space = space + + def app_build_class(self, name, bases, namespace, globals): + if '__metaclass__' in namespace: + metaclass = namespace['__metaclass__'] + elif len(bases) > 0: + base = bases[0] + if hasattr(base, '__class__'): + metaclass = base.__class__ + else: + metaclass = type(base) + elif '__metaclass__' in globals: + metaclass = globals['__metaclass__'] + else: + metaclass = type + return metaclass(name, bases, namespace) + + build_class = app2interp(app_build_class) + def BUILD_CLASS(f): w_methodsdict = f.valuestack.pop() w_bases = f.valuestack.pop() w_name = f.valuestack.pop() - w_newclass = f.space.gethelper(appfile).call( - "build_class", [w_name, w_bases, w_methodsdict, f.w_globals]) + w_newclass = app(f.space).build_class(w_name, w_bases, w_methodsdict, f.w_globals) f.valuestack.push(w_newclass) def STORE_NAME(f, varindex): Modified: pypy/branch/builtinrefactor/pypy/interpreter/opcode_app.py ============================================================================== --- pypy/branch/builtinrefactor/pypy/interpreter/opcode_app.py (original) +++ pypy/branch/builtinrefactor/pypy/interpreter/opcode_app.py Mon Jul 14 21:02:28 2003 @@ -183,19 +183,3 @@ ## XXX add in parent flag merging co = compile(prog,'','exec',flags,1) return (co,globals,locals) - -def build_class(name, bases, namespace, globals): - if '__metaclass__' in namespace: - metaclass = namespace['__metaclass__'] - elif len(bases) > 0: - base = bases[0] - if hasattr(base, '__class__'): - metaclass = base.__class__ - else: - metaclass = type(base) - elif '__metaclass__' in globals: - metaclass = globals['__metaclass__'] - else: - metaclass = type - - return metaclass(name, bases, namespace) Modified: pypy/branch/builtinrefactor/pypy/interpreter/pycode.py ============================================================================== --- pypy/branch/builtinrefactor/pypy/interpreter/pycode.py (original) +++ pypy/branch/builtinrefactor/pypy/interpreter/pycode.py Mon Jul 14 21:02:28 2003 @@ -277,6 +277,9 @@ self.co_nlocals = co.co_nlocals self.co_argcount = co.co_argcount self.co_names = co.co_names + self.co_lnotab = co.co_lnotab + self.co_firstlineno = co.co_firstlineno + self.co_filename = co.co_filename self.next_arg = self.co_argcount def __call__(self, *args_w): From hpk at codespeak.net Fri Jul 18 04:05:52 2003 From: hpk at codespeak.net (hpk at codespeak.net) Date: Fri, 18 Jul 2003 04:05:52 +0200 (MEST) Subject: [pypy-svn] rev 1181 - in pypy/trunk/doc: . sprintinfo Message-ID: <20030718020552.9AE855A46C@thoth.codespeak.net> Author: hpk Date: Fri Jul 18 04:05:52 2003 New Revision: 1181 Added: pypy/trunk/doc/sprintinfo/hildesheim.txt Removed: pypy/trunk/doc/pe.txt pypy/trunk/doc/socialpy.txt Log: some cleanup of the doc-directoy - moved most of "socialpy" into a hildesheim.txt report - removed pe.txt which is just a fragment and at least has no reason to be at top-level. If anybody understands this fragment then please make it into a document and put it to some appropriate place. Now that we have the OSCON-Paper as a base i don't think that we need all these small fragments anymore. Deleted: pypy/trunk/doc/pe.txt ============================================================================== --- pypy/trunk/doc/pe.txt Fri Jul 18 04:05:52 2003 +++ (empty file) @@ -1,22 +0,0 @@ -the core idea is: you have the SOS or maybe a subclass of it that -keeps lightweight instrumentation and detects when a function is -heavily used for some definition, when that happens it will -(say for a thread or process on a diff CPU) run the annotating -os for that function, so the SOS might collect info about the -types of arguments for the function already, "it's popular and -often called with 2 int args" so (AI at work) "it's a good idea -to see if we can implement it in C" so the annotating OS is -asked to do symbolic exec and later generate C (how you do the -latter is a different story -. we now build a huge data struct -about what we know about the code at each point during exec, -from that it should be possible to generate C code, currently -we don't record which variable are still alive and which ones -aren't so we'll need to add that). - -So there's a 3rd OS that lets you run functions that have bee -translated to machine code via C, still needs to interact with -the first OS so here having multiple OSs that interact makes -sense, e.g. for calls from C-speed-OS stuff back to occasional -calls to Standard OS (translate the C ints back to Python ints -before you can call the Python code, etc etc) - Deleted: pypy/trunk/doc/socialpy.txt ============================================================================== --- pypy/trunk/doc/socialpy.txt Fri Jul 18 04:05:52 2003 +++ (empty file) @@ -1,12 +0,0 @@ -PyPy: - -Social aspects of PyPy - -PyPy was created in a cooperative process among pythonistas across the world. The first PyPy concepts were developed by who/where? - -The Hildesheim Sprint provided a chance to meet and decide several crucial design considerations. A #pypy irc channel provided communication among participants between sprints. The sourcecode was loaded into subversion and participants given commit rights. - -At the Sprint: -Some folks did lots of handwaving and created really kewl concepts. Other pairs concentrated on coding, testing, builtin functions etc etc. We gathered for goalsetting meetings several times during the sprint, then split up to work on tasks. Much of the work was done by pair programming. Pairs were informal, developing and changing as tasks were discovered and completed. Sprints varied in amount of "discuss as a group" and "just do it" time. We spent lots of intense time together, not just coding but also social time, (meals, spending a day playing tourist, etc), which enhanced the building of relationships and understanding among sprinters. - -Some discoveries: Plan on the first morning for hardware setup and fixing system issues, (wireless is great!) Built-in private time is necessary for the sprint. Whiteboards and projectors are both necessary, as is coffee and tea. Bringing in/providing food is fine but getting people away for lunch is good to clear their minds. Leadership varied throughout the sprints and throughout the day. Added: pypy/trunk/doc/sprintinfo/hildesheim.txt ============================================================================== --- (empty file) +++ pypy/trunk/doc/sprintinfo/hildesheim.txt Fri Jul 18 04:05:52 2003 @@ -0,0 +1,11 @@ +Hildesheim Sprint Report +======================== + +The Hildesheim Sprint provided a chance to meet and decide several crucial design considerations. +A #pypy irc channel provided communication among participants between sprints. The sourcecode +was loaded into subversion and participants given commit rights. + +At the Sprint: +Some folks did lots of handwaving and created really kewl concepts. Other pairs concentrated on coding, testing, builtin functions etc etc. We gathered for goalsetting meetings several times during the sprint, then split up to work on tasks. Half of the work was done by pair programming. Pairs were informal, developing and changing as tasks were discovered and completed. Sprints varied in amount of "discuss as a group" and "just do it" time. We spent lots of intense time together, not just coding but also social time, (meals, spending a day playing tourist, etc), which enhanced the building of relationships and understanding among sprinters. + +Some discoveries: Plan on the first morning for hardware setup and fixing system issues, (wireless is great!) Built-in private time is necessary for the sprint. Whiteboards and projectors are both necessary, as is coffee and tea. Bringing in/providing food is fine but getting people away for lunch is good to clear their minds. Leadership varied throughout the sprints and throughout the day. From jum at codespeak.net Thu Jul 24 17:03:02 2003 From: jum at codespeak.net (jum at codespeak.net) Date: Thu, 24 Jul 2003 17:03:02 +0200 (MEST) Subject: [pypy-svn] rev 1204 - pypy/trunk/doc/devel Message-ID: <20030724150302.8FDE35B64C@thoth.codespeak.net> Author: jum Date: Thu Jul 24 17:03:02 2003 New Revision: 1204 Modified: pypy/trunk/doc/devel/howtosvn.txt Log: Updated to the newest svn version available (Windows version still needs updating). Modified: pypy/trunk/doc/devel/howtosvn.txt ============================================================================== --- pypy/trunk/doc/devel/howtosvn.txt (original) +++ pypy/trunk/doc/devel/howtosvn.txt Thu Jul 24 17:03:02 2003 @@ -114,9 +114,9 @@ .. _website: http://support.microsoft.com/default.aspx?scid=kb%3Ben-us%3B259403 .. _GUI: http://codespeak.net/~jum/TortoiseSVN-0.12.1-UNICODE.msi .. _Win: http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=4B6140F9-2D36-4977-8FA1-6F8A0F5DCA8F -.. _MacOS: http://codespeak.net/~jum/svn-0.24.2-darwin-ppc.tar.gz +.. _MacOS: http://codespeak.net/~jum/svn-0.26.0-darwin-ppc.tar.gz .. _iconv: http://codespeak.net/~jum/iconv-darwin-ppc.tar.gz -.. _tarball: http://codespeak.net/~jum/subversion-0.24.2.tar.gz +.. _tarball: http://codespeak.net/~jum/subversion-0.26.0.tar.gz .. _guide: http://svnbook.red-bean.com/book.html#svn-ch-1 .. _archives: http://codespeak.net/pipermail/pypy-svn/ From jum at codespeak.net Sun Jul 27 16:21:32 2003 From: jum at codespeak.net (jum at codespeak.net) Date: Sun, 27 Jul 2003 16:21:32 +0200 (MEST) Subject: [pypy-svn] rev 1213 - pypy/trunk/doc/devel Message-ID: <20030727142132.54E275A507@thoth.codespeak.net> Author: jum Date: Sun Jul 27 16:21:31 2003 New Revision: 1213 Modified: pypy/trunk/doc/devel/howtosvn.txt Log: Make the latest TortoiseSVN available. Modified: pypy/trunk/doc/devel/howtosvn.txt ============================================================================== --- pypy/trunk/doc/devel/howtosvn.txt (original) +++ pypy/trunk/doc/devel/howtosvn.txt Sun Jul 27 16:21:31 2003 @@ -112,7 +112,7 @@ .. _commandline: http://codespeak.net/~jum/svn-0.24.2-setup.exe .. _website: http://support.microsoft.com/default.aspx?scid=kb%3Ben-us%3B259403 -.. _GUI: http://codespeak.net/~jum/TortoiseSVN-0.12.1-UNICODE.msi +.. _GUI: http://codespeak.net/~jum/TortoiseSVN-0.15.1-UNICODE.msi .. _Win: http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=4B6140F9-2D36-4977-8FA1-6F8A0F5DCA8F .. _MacOS: http://codespeak.net/~jum/svn-0.26.0-darwin-ppc.tar.gz .. _iconv: http://codespeak.net/~jum/iconv-darwin-ppc.tar.gz From jum at codespeak.net Sun Jul 27 16:35:06 2003 From: jum at codespeak.net (jum at codespeak.net) Date: Sun, 27 Jul 2003 16:35:06 +0200 (MEST) Subject: [pypy-svn] rev 1214 - pypy/trunk/doc/devel Message-ID: <20030727143506.5C03E5A507@thoth.codespeak.net> Author: jum Date: Sun Jul 27 16:35:06 2003 New Revision: 1214 Modified: pypy/trunk/doc/devel/howtosvn.txt Log: Dummy change for debugging. Modified: pypy/trunk/doc/devel/howtosvn.txt ============================================================================== --- pypy/trunk/doc/devel/howtosvn.txt (original) +++ pypy/trunk/doc/devel/howtosvn.txt Sun Jul 27 16:35:06 2003 @@ -108,7 +108,7 @@ last resort to fix it if you've got a totally messed up local copy. Use this if you see error messages about ``locked`` files that you can't fix otherwise. ---------------------------------------------------------------------------------- +-------------------------------------------------------------------------------- .. _commandline: http://codespeak.net/~jum/svn-0.24.2-setup.exe .. _website: http://support.microsoft.com/default.aspx?scid=kb%3Ben-us%3B259403 From jum at codespeak.net Sun Jul 27 16:42:21 2003 From: jum at codespeak.net (jum at codespeak.net) Date: Sun, 27 Jul 2003 16:42:21 +0200 (MEST) Subject: [pypy-svn] rev 1217 - pypy/trunk/doc/devel Message-ID: <20030727144221.92EBC5A507@thoth.codespeak.net> Author: jum Date: Sun Jul 27 16:42:21 2003 New Revision: 1217 Modified: pypy/trunk/doc/devel/howtosvn.txt Log: Dummy change for debugging. Modified: pypy/trunk/doc/devel/howtosvn.txt ============================================================================== --- pypy/trunk/doc/devel/howtosvn.txt (original) +++ pypy/trunk/doc/devel/howtosvn.txt Sun Jul 27 16:42:21 2003 @@ -88,7 +88,7 @@ Check online on the check-in archives_ and you'll see your revision. Feel free to add a documentation file on any major changes you've made! See the readme_ on documentation for more info. Some other useful subversion tricks: ----------------------------------------- +--------------------------------------- **Be sure to remember ``svn`` in the commandline in the following commands.** From hpk at codespeak.net Sun Jul 27 20:53:10 2003 From: hpk at codespeak.net (hpk at codespeak.net) Date: Sun, 27 Jul 2003 20:53:10 +0200 (MEST) Subject: [pypy-svn] rev 1220 - in pypy/branch/builtinrefactor/pypy: appspace appspace/test interpreter interpreter/test module objspace objspace/ann objspace/std tool Message-ID: <20030727185310.EFB525A507@thoth.codespeak.net> Author: hpk Date: Sun Jul 27 20:53:08 2003 New Revision: 1220 Added: pypy/branch/builtinrefactor/pypy/interpreter/gateway.py pypy/branch/builtinrefactor/pypy/interpreter/test/test_exceptcomp.py (props changed) - copied unchanged from rev 1120, pypy/branch/builtinrefactor/pypy/appspace/test/test_exceptcomp.py pypy/branch/builtinrefactor/pypy/interpreter/test/test_exec.py (props changed) - copied unchanged from rev 1120, pypy/branch/builtinrefactor/pypy/appspace/test/test_exec.py pypy/branch/builtinrefactor/pypy/interpreter/test/test_function.py Removed: pypy/branch/builtinrefactor/pypy/appspace/test/test_exceptcomp.py pypy/branch/builtinrefactor/pypy/appspace/test/test_exec.py pypy/branch/builtinrefactor/pypy/interpreter/extmodule.py pypy/branch/builtinrefactor/pypy/interpreter/test/test_extmodule.py pypy/branch/builtinrefactor/pypy/interpreter/test/test_pyframe_app.py pypy/branch/builtinrefactor/pypy/module/builtin_app.py pypy/branch/builtinrefactor/pypy/module/builtin_helper_app.py Modified: pypy/branch/builtinrefactor/pypy/appspace/test/test_cmathmodule.py pypy/branch/builtinrefactor/pypy/appspace/test/test_complexobject.py pypy/branch/builtinrefactor/pypy/appspace/types.py pypy/branch/builtinrefactor/pypy/interpreter/appfile.py pypy/branch/builtinrefactor/pypy/interpreter/baseobjspace.py pypy/branch/builtinrefactor/pypy/interpreter/executioncontext.py pypy/branch/builtinrefactor/pypy/interpreter/interactive.py pypy/branch/builtinrefactor/pypy/interpreter/main.py pypy/branch/builtinrefactor/pypy/interpreter/opcode.py pypy/branch/builtinrefactor/pypy/interpreter/opcode_app.py pypy/branch/builtinrefactor/pypy/interpreter/pyframe.py pypy/branch/builtinrefactor/pypy/interpreter/test/test_executioncontext.py pypy/branch/builtinrefactor/pypy/interpreter/test/test_interpreter.py pypy/branch/builtinrefactor/pypy/interpreter/test/test_objspace.py pypy/branch/builtinrefactor/pypy/interpreter/unittest_w.py pypy/branch/builtinrefactor/pypy/module/builtin.py pypy/branch/builtinrefactor/pypy/module/sysmodule.py pypy/branch/builtinrefactor/pypy/objspace/ann/cloningcontext.py pypy/branch/builtinrefactor/pypy/objspace/ann/objspace.py pypy/branch/builtinrefactor/pypy/objspace/ann/wrapper.py pypy/branch/builtinrefactor/pypy/objspace/std/funcobject.py pypy/branch/builtinrefactor/pypy/objspace/trivial.py pypy/branch/builtinrefactor/pypy/tool/test.py Log: - gigantic intermediary checkpoint-checkin this checkin is mainly for internal 'checkpointing' reasons please don't look at it too closely until you want to participate in the refactorings. it's definitely neccessary to cleanup the refactored code although it's beginning to work ... - trivial object space works with a more unified approach to functions, code and wrapping app-level stuff into interpreter-level code. StdObjSpace fails because multimethods deeply depend on interpreter/pycode.py depends deep - moved some tests from appspace/test to interpreter/test where they belonged (test_exec stdspace and annspace fail miserably (don't even try them) - got rid of 'extmodule' and builtin_*app* stuff - revamped PyFrame initialization (now a 'ScopedCode' invokes either 'setdictscope' or 'setfastscope' to set the local scope of the frame. the frame doesn't invoke any analysis itself anymore. - introduced a 'ScopedCode' class which takes a space, a cpython code object, global and closure scope. Currently you call 'eval_frame(w_locals)' to trigger interpretation of the interp-level defined function. - introduced an 'InterpretedFunction' which takes a space, a function object, global and closure scope. Currently you call 'eval_frame(w_args, w_kwargs)' to trigger interpretation of the interp-level defined function. The arguments are parsed with another app-level function 'parse_args_complex' which is a rewrite (50% code) of 'decode_code_arguments' - introduced an 'AppVisibleModule' class that allows to easily define builtin modules (which can access interp-level stuff). See the doc-string for more info. - all the previous new classes live live in 'interpreter/gateway.py' which seems to be a good name to define stuff that 'connects' interp-level and app-level execution. - disabled 'mod' and 'divmod' complexobject-tests because they fail in python-2.3 (which also issues deprecation warnings) - improved the tool.test to skip non-importable modules (and print a warning) so much for now. Modified: pypy/branch/builtinrefactor/pypy/appspace/test/test_cmathmodule.py ============================================================================== --- pypy/branch/builtinrefactor/pypy/appspace/test/test_cmathmodule.py (original) +++ pypy/branch/builtinrefactor/pypy/appspace/test/test_cmathmodule.py Sun Jul 27 20:53:08 2003 @@ -24,7 +24,7 @@ # import cmathmodule # from pypy.complexobject import complex as pycomplex -from test_complexobject import equal, enumerate +from pypy.appspace.test.test_complexobject import equal, enumerate class TestCMathModule(test.TestCase): Modified: pypy/branch/builtinrefactor/pypy/appspace/test/test_complexobject.py ============================================================================== --- pypy/branch/builtinrefactor/pypy/appspace/test/test_complexobject.py (original) +++ pypy/branch/builtinrefactor/pypy/appspace/test/test_complexobject.py Sun Jul 27 20:53:08 2003 @@ -183,7 +183,8 @@ self.assertEqual(hash(zc), hash(zp)) - def test_divmod(self): + # this fails on python2.3 and is depreacted anyway + def _test_divmod(self): "Compare divmod with CPython." for (z0c, z1c, z0p, z1p) in enumerate(): @@ -200,7 +201,8 @@ self.assertAEqual(mmc, mmp) - def test_mod(self): + # these fail on python2.3 + def _test_mod(self): "Compare mod with CPython." for (z0c, z1c, z0p, z1p) in enumerate(): Deleted: /pypy/branch/builtinrefactor/pypy/appspace/test/test_exceptcomp.py ============================================================================== --- /pypy/branch/builtinrefactor/pypy/appspace/test/test_exceptcomp.py Sun Jul 27 20:53:08 2003 +++ (empty file) @@ -1,138 +0,0 @@ -"""Test comparisons of Exceptions in except clauses. - -New for PyPy - Could be incorporated into CPython regression tests. -""" -import autopath -from pypy.tool import test - -class TestExceptionComp(test.AppTestCase): - - def setUp(self): - self.space = test.objspace() - -### XXX - String exceptions depreciated? -## def test_string(self): -## string = "string" -## try: -## raise string -## except string: -## pass -## except: -## self.fail("Identical string exceptions do not match.") -## -## def test_stringfail(self): -## string1 = "string1" -## string1_ = "string" + "1" -## assert string1 is not string1_ -## try: -## raise string1 -## except "string2": -## self.fail("Different string exceptions match.") -## except string1_: -## self.fail("Non Identical string exceptions match.") -## except string1: -## pass -## except: -## self.fail("Unknown value for variable raise.") - - - def test_exception(self): - try: - raise TypeError, "nothing" - except TypeError: - pass - except: - self.fail("Identical exceptions do not match.") - - def test_exceptionfail(self): - try: - raise TypeError, "nothing" - except KeyError: - self.fail("Different exceptions match.") - except TypeError: - pass - except: - self.fail("Unanticipated value for exception raise.") - - - def test_called(self): - try: - raise SyntaxError("Invalid") - except SyntaxError: - pass - except: - self.fail("Instantiated exception does not match parent class.") - - def test_calledfail(self): - try: - raise SyntaxError("Invalid") - except ZeroDivisionError: - self.fail("Instantiated exception matches different parent class.") - except SyntaxError: - pass - except: - self.fail("Unanticpated value for exception raise.") - - - def test_userclass(self): - class UserExcept(Exception): - pass - try: - raise UserExcept, "nothing" - except UserExcept: - pass - except: - self.fail("User defined class exceptions do not match.") - - def test_subclass(self): - try: - raise KeyError("key") - except LookupError: - pass - except: - self.fail("Exception does not match parent class.") - - def test_deepsubclass(self): - try: - raise FloatingPointError("1.2r") - except Exception: - pass - except: - self.fail("Exception does not match grandparent class.") - - def test_tuple(self): - try: - raise ArithmeticError("2+jack") - except (ZeroDivisionError, ArithmeticError): - pass - except: - self.fail("Exception does not match self in tuple.") - - def test_parenttuple(self): - try: - raise ZeroDivisionError("0") - except (StandardError, SystemExit): - pass - except: - self.fail("Exception does not match parent in tuple.") - - def test_nestedtuples(self): - try: - raise AssertionError("0") - except (SystemExit, (KeyboardInterrupt, AssertionError)): - pass - except: - self.fail("Exception does not match self in nested tuple.") - - def test_deeptuples(self): - try: - raise IOError - except (FloatingPointError,(OSError, - (SyntaxError,IOError,ZeroDivisionError)), - (MemoryError, NotImplementedError)): - pass - except: - self.fail("Exception does not match self in deeply nested tuple.") - -if __name__ == "__main__": - test.main() Deleted: /pypy/branch/builtinrefactor/pypy/appspace/test/test_exec.py ============================================================================== --- /pypy/branch/builtinrefactor/pypy/appspace/test/test_exec.py Sun Jul 27 20:53:08 2003 +++ (empty file) @@ -1,76 +0,0 @@ -"""Test the exec statement functionality. - -New for PyPy - Could be incorporated into CPython regression tests. -""" -import autopath -from pypy.tool import test - -class TestExecStmt(test.AppTestCase): - - def setUp(self): - self.space = test.objspace() - - def test_string(self): - g = {} - l = {} - exec "a = 3" in g, l - self.failUnlessEqual(l['a'], 3) - - def test_localfill(self): - g = {} - exec "a = 3" in g - self.failUnlessEqual(g['a'], 3) - - def test_builtinsupply(self): - g = {} - exec "pass" in g - self.failUnless(g.has_key('__builtins__')) - - def test_invalidglobal(self): - def f(): - exec 'pass' in 1 - self.failUnlessRaises(TypeError,f) - - def test_invalidlocal(self): - def f(): - exec 'pass' in {}, 2 - self.failUnlessRaises(TypeError,f) - - def test_codeobject(self): - co = compile("a = 3", '', 'exec') - g = {} - l = {} - exec co in g, l - self.failUnlessEqual(l['a'], 3) - -## # Commented out as PyPy give errors using open() -## # ["Not availible in restricted mode"] -## def test_file(self): -## fo = open("test_exec.py", 'r') -## g = {} -## exec fo in g -## self.failUnless(g.has_key('TestExecStmt')) - - def test_implicit(self): - a = 4 - exec "a = 3" - self.failUnlessEqual(a,3) - - def test_tuplelocals(self): - g = {} - l = {} - exec ("a = 3", g, l) - self.failUnlessEqual(l['a'], 3) - - def test_tupleglobals(self): - g = {} - exec ("a = 3", g) - self.failUnlessEqual(g['a'], 3) - - def test_exceptionfallthrough(self): - def f(): - exec 'raise TypeError' in {} - self.failUnlessRaises(TypeError,f) - -if __name__ == "__main__": - test.main() Modified: pypy/branch/builtinrefactor/pypy/appspace/types.py ============================================================================== --- pypy/branch/builtinrefactor/pypy/appspace/types.py (original) +++ pypy/branch/builtinrefactor/pypy/appspace/types.py Sun Jul 27 20:53:08 2003 @@ -1,4 +1,6 @@ -"""Define names for all type symbols known in the standard interpreter. +"""Appspace types module. + +Define names for all type symbols known in the standard interpreter. Types that are part of optional modules (e.g. array) are not listed. """ Modified: pypy/branch/builtinrefactor/pypy/interpreter/appfile.py ============================================================================== --- pypy/branch/builtinrefactor/pypy/interpreter/appfile.py (original) +++ pypy/branch/builtinrefactor/pypy/interpreter/appfile.py Sun Jul 27 20:53:08 2003 @@ -48,25 +48,19 @@ w_obj = self.space.getitem(self.w_namespace, w_name) return w_obj - def call(self, functionname, argumentslist): + def call(self, functionname, args): "Call a module function." - w_function = self.get(functionname) - w_arguments = self.space.newtuple(argumentslist) + w_func = self.get(functionname) + w_args = self.space.newtuple(args) w_keywords = self.space.newdict([]) - return self.space.call(w_function, w_arguments, w_keywords) + return self.space.call(w_func, w_args, w_keywords) def runbytecode(self, bytecode): # initialize the module by running the bytecode in a new # dictionary, in a new execution context - from pyframe import PyFrame - from pycode import PyByteCode - ec = self.space.getexecutioncontext() - res = PyByteCode() - res._from_code(bytecode) - frame = PyFrame(self.space, res, - self.w_namespace, self.w_namespace) - ec.eval_frame(frame) - + from pypy.interpreter.gateway import ScopedCode + scopedcode = ScopedCode(self.space, bytecode, self.w_namespace) + scopedcode.eval_frame() class AppHelper(Namespace): Modified: pypy/branch/builtinrefactor/pypy/interpreter/baseobjspace.py ============================================================================== --- pypy/branch/builtinrefactor/pypy/interpreter/baseobjspace.py (original) +++ pypy/branch/builtinrefactor/pypy/interpreter/baseobjspace.py Sun Jul 27 20:53:08 2003 @@ -9,6 +9,10 @@ self.space = space self.operationerr = operationerr +class Null: + """ marker object for Null values within the interpreter + (not visible at app-level) + """ class ObjSpace: """Base class for the interpreter-level implementations of object spaces. @@ -16,14 +20,17 @@ def __init__(self): "Basic initialization of objects." - self.w_modules = self.newdict([]) self.appfile_helpers = {} self.initialize() def make_builtins(self): - import pypy.module.builtin - self.builtin = pypy.module.builtin.Builtin(self) - self.w_builtin = self.builtin.wrap_base() + assert not hasattr(self, 'builtin') + if not hasattr(self, 'sys'): + self.make_sys() + + from pypy.module import builtin + self.builtin = builtin.__builtin__(self) + self.w_builtin = self.builtin._wrapped self.w_builtins = self.getattr(self.w_builtin, self.wrap("__dict__")) for name, value in self.__dict__.items(): @@ -34,20 +41,17 @@ #print "setitem: space instance %-20s into builtins" % name self.setitem(self.w_builtins, self.wrap(name), value) - from pypy.module import __file__ as fn - import os - fn = os.path.join(os.path.dirname(fn), 'builtin_app.py') - w_args = self.newtuple([self.wrap(fn), self.w_builtins, self.w_builtins]) - w_execfile = self.getitem(self.w_builtins, self.wrap('execfile')) - self.call(w_execfile, w_args, self.newdict([])) + self.builtin._wrap_postponed() + self.sys._setmodule(self.builtin) def make_sys(self): - import pypy.module.sysmodule - self.sys = pypy.module.sysmodule.Sys(self) - self.w_sys = self.sys.wrap_me() - self.setattr(self.w_sys, self.wrap("modules"), self.w_modules) + assert not hasattr(self, 'sys') + from pypy.module import sysmodule + self.sys = sysmodule.sys(self) + self.w_sys = self.sys._wrapped + self.sys._setmodule(self.sys) - # XXX use a dictionary in the future + # XXX get rid of this. def get_builtin_module(self, w_name): name = self.unwrap(w_name) if name == '__builtin__': Modified: pypy/branch/builtinrefactor/pypy/interpreter/executioncontext.py ============================================================================== --- pypy/branch/builtinrefactor/pypy/interpreter/executioncontext.py (original) +++ pypy/branch/builtinrefactor/pypy/interpreter/executioncontext.py Sun Jul 27 20:53:08 2003 @@ -209,6 +209,17 @@ def __init__(self): self.items = [] + def clone(self): + s = self.__class__() + for item in self.items: + try: + item = item.clone() + except AttributeError: + pass + s.push(item) + return s + + def push(self, item): self.items.append(item) Deleted: /pypy/branch/builtinrefactor/pypy/interpreter/extmodule.py ============================================================================== --- /pypy/branch/builtinrefactor/pypy/interpreter/extmodule.py Sun Jul 27 20:53:08 2003 +++ (empty file) @@ -1,149 +0,0 @@ -from pypy.interpreter import pycode -import appfile - -class appmethod(object): - def __init__(self, func): - self.func = func - def __get__(self, instance, cls=None): - return self.func.__get__(instance, cls) - -class appdata(object): - def __init__(self, data): - self.data = data - def __get__(self, instance, cls=None): - return self.data - - -# a little excercise in OOP, Python 2.2-style: - -class PyBuiltinCode(pycode.PyBaseCode): - """The code object implementing a built-in (interpreter-level) hook.""" - - def __init__(self, func, boundmethod=False): - pycode.PyBaseCode.__init__(self) - self.func = func - co = func.func_code - self.co_name = func.__name__ - self.co_flags = co.co_flags - if boundmethod: - assert co.co_varnames[0] == "self" - start = 1 - else: - start = 0 - argnames = [] - for argname in co.co_varnames[start:co.co_argcount]: - assert argname.startswith('w_') - argnames.append(argname[2:]) - self.co_varnames = tuple(argnames) - self.co_argcount = co.co_argcount - start - self.next_arg = self.co_argcount + start - - def prepare_args(self, space, w_locals): - args = [] - for argname in self.co_varnames[:self.co_argcount]: - w_arg = space.getitem(w_locals, space.wrap(argname)) - args.append(w_arg) - return args - - def eval_code(self, space, w_globals, w_locals): - args = self.prepare_args(space, w_locals) - return self.func(*args) - - -class PyBuiltinVarCode(PyBuiltinCode): - - def __init__(self, func, boundmethod=False): - super(PyBuiltinVarCode, self).__init__(func, boundmethod) - self.vararg_name = func.func_code.co_varnames[self.next_arg] - self.co_varnames += (self.vararg_name,) - assert self.vararg_name.endswith('_w'), "%s, arg %d: %s"%( - func.func_name, self.co_argcount + 1, self.vararg_name) - self.next_arg += 1 - - def prepare_args(self, space, w_locals): - args = super(PyBuiltinVarCode, self).prepare_args(space, w_locals) - w_args = space.getitem(w_locals, space.wrap(self.vararg_name)) - args.extend(space.unpackiterable(w_args)) - return args - - -class PyBuiltinKwCode(PyBuiltinCode): - def __init__(self, func, boundmethod=False): - super(PyBuiltinKwCode, self).__init__(func, boundmethod) - self.kwarg_name = func.func_code.co_varnames[self.next_arg] - self.co_varnames += (self.kwarg_name,) - assert self.kwarg_name.endswith('_w'), "%s, arg %d: %s"%( - func.func_name, self.co_argcount + 1, self.kwarg_name) - self.next_arg += 1 - - def eval_code(self, space, w_globals, w_locals): - args = self.prepare_args(space, w_locals) - w_kws = space.getitem(w_locals, space.wrap(self.kwarg_name)) - kws = {} - for w_key in space.unpackiterable(w_kws): - kws[space.unwrap(w_key)] = space.getitem(w_kws, w_key) - - return self.func(*args, **kws) - - -class PyBuiltinVarKwCode(PyBuiltinKwCode, PyBuiltinVarCode): - pass - - -def make_builtin_func(space, func, boundmethod=False): - if func.func_code.co_flags & pycode.CO_VARARGS: - if func.func_code.co_flags & pycode.CO_VARKEYWORDS: - code_cls = PyBuiltinVarKwCode - else: - code_cls = PyBuiltinVarCode - else: - if func.func_code.co_flags & pycode.CO_VARKEYWORDS: - code_cls = PyBuiltinKwCode - else: - code_cls = PyBuiltinCode - code = code_cls(func, boundmethod) - w_defaults = space.wrap(func.func_defaults) - w_function = space.newfunction(code, space.w_None, w_defaults) - return w_function - -class BuiltinModule: - __appfile__ = None - __helper_appfile__ = None - - _helper = None - - def __init__(self, space): - self.space = space - - def wrap_me(self): - w_module = self.wrap_base() - self.wrap_appfile(w_module) - return w_module - - def wrap_base(self): - space = self.space - modulename = self.__pythonname__ - w_module = space.newmodule(space.wrap(modulename)) - for key, value in self.__class__.__dict__.items() + self.__dict__.items(): - if isinstance(value, appmethod): - w_function = make_builtin_func(space, - value.func.__get__(self), - boundmethod=True) - space.setattr(w_module, space.wrap(key), w_function) - elif isinstance(value, appdata): - w_data = space.wrap(value.data) - space.setattr(w_module, space.wrap(key), w_data) - return w_module - - def wrap_appfile(self, w_module): - sappfile = self.__appfile__ - if sappfile: - space = self.space - w_dict = space.getattr(w_module, space.wrap("__dict__")) - appfile.AppHelper(space, sappfile, w_dict) - - def callhelp(self, functioname, argslist): - if self._helper is None: - self._helper = appfile.AppHelper(self.space, - self.__helper_appfile__) - self._helper.call(functioname,argslist) Added: pypy/branch/builtinrefactor/pypy/interpreter/gateway.py ============================================================================== --- (empty file) +++ pypy/branch/builtinrefactor/pypy/interpreter/gateway.py Sun Jul 27 20:53:08 2003 @@ -0,0 +1,343 @@ +""" + +gateway between app-level and interpreter-level + +""" +import inspect +CO_VARARGS, CO_VARKEYWORDS = 0x4, 0x8 + +class app2interp(object): + """ this class exposes an app-level defined function at interpreter-level + Assumption: the interp-level function will be called ala + + a.function(arg1, arg2, argn) + + with 'a' having an attribute 'space' which the app-level + code should run in. (might change in during the branch) + """ + def __init__(self, func): + #print "making app2interp for", func + self.func = func + self._codecache = {} + + def __get__(self, instance, cls=None): + space = instance.space + try: + return self._codecache[(space, instance, self)] + except KeyError: + c = InterpretedFunction(space, self.func) + c.im_self = instance + assert c.simple, "function should be simple but isn't" + self._codecache[(space, instance, self)] = c + return c + +class ScopedCode(object): + """ a code object within a certain global and closure scope. + (the local scope is given when you call 'eval_frame') + """ + def __init__(self, space, cpycode, w_globals=None, closure_w=()): + self.space = space + self.cpycode = cpycode + self.w_code = space.wrap(cpycode) + self.closure_w = closure_w + if w_globals is None: + w_globals = space.newdict([]) + self.w_globals = w_globals + + def create_frame(self, w_locals=None): + """ return result of executing code object within a frame""" + from pyframe import PyFrame + frame = PyFrame() + frame.initialize(self) + if w_locals is None: + w_locals = self.w_globals + frame.setdictscope(w_locals) + return frame + + def eval_frame(self, *args, **kwargs): + frame = self.create_frame(*args, **kwargs) + return self.space.getexecutioncontext().eval_frame(frame) + +class InterpretedFunction(ScopedCode): + """ a function which executes at app-level (by interpreting bytecode + and dispatching operations on an objectspace). + """ + + def __init__(self, space, cpyobj, w_globals=None, closure_w=()): + """ initialization similar to base class but it also wraps + some function-specific stuff (like defaults). + """ + if hasattr(cpyobj, 'func_code'): + self.w_defs = space.wrap(cpyobj.func_defaults or ()) + cpycode = cpyobj.func_code + else: + self.w_defs = space.newtuple([]) + cpycode = cpyobj + assert type(self.w_defs) is tuple, "type of desfs is %s" % type(self.w_defs) + ScopedCode.__init__(self, space, cpycode, w_globals, closure_w) + self.simple = cpycode.co_flags & (CO_VARARGS|CO_VARKEYWORDS)==0 + + def parse_args(self, frame, w_args, w_kwargs): + """ parse args and kwargs and set fast scope of frame. + """ + space = self.space + if hasattr(self, 'im_self'): + args_w = space.unpacktuple(w_args) + args_w = [space.wrap(self.im_self)] + args_w + w_args = space.newtuple(args_w) + + loc_w = None + if self.simple and (w_kwargs is None or not space.is_true(w_kwargs)): + try: + loc_w = space.unpacktuple(w_args, self.cpycode.co_argcount) + except ValueError: + pass + if loc_w is None: + #print "complicated case of arguments for", self.cpycode.co_name, "simple=", self.simple + assert type(self.w_defs) is tuple + w_loc = self.parse_args_complex(self.w_code, w_args, w_kwargs, self.w_defs) + loc_w = space.unpacktuple(w_loc) + loc_w.extend([_NULL] * (self.cpycode.co_nlocals - len(loc_w))) + + # make nested cells + for name in self.cpycode.co_cellvars: + i = list(self.cpycode.co_varnames).index(name) + w_value = loc_w[i] + loc_w[i] = _NULL + frame.closure_w += (Cell(w_value),) + + assert len(loc_w) == self.cpycode.co_nlocals, "local arguments not prepared correctly" + frame.setfastscope(loc_w) + + def __get__(self, instance, cls=None): + func = object.__new__(self.__class__) + func.__dict__.update(self.__dict__) + func.im_self = instance + return func + + def create_frame(self, w_args, w_kwargs): + """ parse arguments and execute frame """ + from pyframe import PyFrame + frame = PyFrame() + frame.initialize(self) + self.parse_args(frame, w_args, w_kwargs) + return frame + + def parse_args_complex_w(self, cpycode, args, kwargs, defs): + """ return list of initial local values parsed from + 'args', 'kwargs' and defaults. + """ + #if cpycode.co_name == 'failUnlessRaises': + # print "co_name", cpycode.co_name + # print "co_argcount", cpycode.co_argcount + # print "co_nlocals", cpycode.co_nlocals + # print "co_varnames", cpycode.co_varnames + # print "args", args + # print "kwargs", kwargs + # print "defs", defs + + CO_VARARGS, CO_VARKEYWORDS = 0x4, 0x8 + + # co_argcount number of expected positional arguments + # (elipsis args like *args and **kwargs do not count) + co_argcount = cpycode.co_argcount + + # construct list of positional args + positional_args = list(args[:co_argcount]) + + len_args = len(args) + len_defs = len(defs) + + if len_args < co_argcount: + # not enough args, fill in kwargs or defaults if exists + i = len_args + while i < co_argcount: + name = cpycode.co_varnames[i] + if name in kwargs: + positional_args.append(kwargs[name]) + del kwargs[name] + else: + if i + len_defs < co_argcount: + raise TypeError, "Not enough arguments" + positional_args.append(defs[i-co_argcount]) + i+=1 + if cpycode.co_flags & CO_VARARGS: + positional_args.append(tuple(args[co_argcount:])) + elif len_args > co_argcount: + raise TypeError, "Too many arguments" + + i = 0 + while i < len_args and i < co_argcount: + name = cpycode.co_varnames[i] + if name in kwargs: + raise TypeError, "got multiple values for argument %r" % name + i+=1 + + + # XXX probably need an extra pass over kwargs to determine if a + # keyword-arg sets a second time + if cpycode.co_flags & CO_VARKEYWORDS: + positional_args.append(kwargs) + elif kwargs: + raise TypeError, "got unexpected keyword argument(s) %s" % repr(kwargs.keys()[0]) + + return positional_args + parse_args_complex = app2interp(parse_args_complex_w) + + def __call__(self, *args_w, **kwargs_w): + """ call with native parameter passing convention """ + #print "native call on", self.cpycode.co_name + #print "len args_w", len(args_w) + #print "kwargs_w", kwargs_w + w_args = self.space.newtuple(args_w) + w = self.space.wrap + w_kwargs = self.space.newdict([]) + for name, w_value in kwargs_w.items(): + self.space.setitem(w_kwargs, w(name), w_value) + return self.eval_frame(w_args, w_kwargs) + +class AppVisibleModule: + """ app-level visible Module defined at interpreter-level. + + Inherit from this class if you want to have a module that accesses + the PyPy interpreter (e.g. builtins like 'locals()' require accessing the + frame). You can mix in application-level code by prefixing your method + with 'app_'. Both non-underscore methods and app-level methods will + be available on app-level with their respective name. + + On __wrap__(space) it returns an app-level (read: wrapped) module object. + + functions prefixed with 'app_' indicate app-level running functions. + Note that these functions don't get a 'self' argument because we really + need only the function (there is no notion of beeing 'bound' or 'unbound' + for them). + + """ + def __init__(self, space): + self.space = space + + if hasattr(self, '_wrap_postponed'): + self._postponed = [] + + space = self.space + modname = self.__class__.__name__ + self.w___name__ = space.wrap(modname) + self._wrapped = _wrapped = space.newmodule(self.w___name__) + + # go through all items in the module class instance + for name in dir(self): + # skip spurious info and internal methods + if name == '__module__' or name.startswith('_') and not name.endswith('_'): + #print modname, "skipping", name + continue + obj = getattr(self, name) + # see if we just need to expose an already wrapped value + if name.startswith('w_'): + space.setattr(_wrapped, space.wrap(name[2:]), obj) + + # see if have something defined at app-level + elif name.startswith('app_'): + obj = self.__class__.__dict__.get(name) + name = name[4:] + + # just a simple function? + if hasattr(obj, 'func_code'): + w_res = space.wrap(InterpretedFunction(space, obj)) + + # or a class? (which eventually needs to be recompiled) + elif inspect.isclass(obj): + # this module chooses to do this later (usually + # for bootstrapping reasons) + if hasattr(self, '_postponed'): + self._postponed.append((name, obj)) + else: + w_res = wrap_applevel_class(space, name, obj) + else: + raise ValueError, "cannot wrap %s, %s" %(name, obj) + + else: + w_res = wrap_interplevel(space, name, obj) + setattr(self, 'w_'+name, w_res) + w_name = space.wrap(name) + space.setattr(_wrapped, w_name, w_res) + +def wrap_applevel(space, name, obj): + """ wrap an app-level object which was compiled/lives + at interpreter-level. + """ + #print "app registering ", name #, obj + if hasattr(obj, 'func_code'): + return space.wrap(InterpretedFunction(space, obj)) + elif inspect.isclass(obj): + return wrap_applevel_class(space, name, obj) + else: + raise ValueError, "cannot wrap %s, %s" % (name, obj) + +def wrap_applevel_class(space, name, obj): + """ construct an app-level class by reproducing the + source definition and running it through the interpreter. + It's a bit ugly but i don't know a better way (holger). + """ + l = ['class %s:' % name] + indent = ' ' + for key, value in vars(obj).items(): + if hasattr(value, 'func_code'): + s = inspect.getsource(value) + l.append(s) + indent = " " * (len(s) - len(s.lstrip())) + + if getattr(obj, '__doc__', None): + l.insert(1, indent + obj.__doc__) + + for key, value in vars(obj).items(): + if not key in ('__module__', '__doc__'): + if isinstance(value, (str, int, float, tuple, list)): + l.append('%s%s = %r' % (indent, key, value)) + + s = "\n".join(l) + code = compile(s, s, 'exec') + scopedcode = ScopedCode(space, code, None) + scopedcode.eval_frame() + w_name = space.wrap(name) + w_res = space.getitem(scopedcode.w_globals, w_name) + return w_res + +def wrap_interplevel(space, name, obj): + """ wrap an app-level object which was compiled/lives + at interpreter-level. + """ + return space.wrap(obj) + + +## Cells (used for nested scopes only) ## + +_NULL = object() # Marker object + +class Cell: + def __init__(self, w_value=_NULL): + self.w_value = w_value + + def clone(self): + return self.__class__(self.w_value) + + def get(self): + if self.w_value is _NULL: + raise ValueError, "get() from an empty cell" + return self.w_value + + def set(self, w_value): + self.w_value = w_value + + def delete(self): + if self.w_value is _NULL: + raise ValueError, "make_empty() on an empty cell" + self.w_value = _NULL + + def __repr__(self): + """ representation for debugging purposes """ + if self.w_value is _NULL: + return "%s()" % self.__class__.__name__ + else: + return "%s(%s)" % (self.__class__.__name__, self.w_value) + + Modified: pypy/branch/builtinrefactor/pypy/interpreter/interactive.py ============================================================================== --- pypy/branch/builtinrefactor/pypy/interpreter/interactive.py (original) +++ pypy/branch/builtinrefactor/pypy/interpreter/interactive.py Sun Jul 27 20:53:08 2003 @@ -35,11 +35,9 @@ code.InteractiveConsole.interact(self, banner) def runcode(self, code): - from pypy.interpreter import pycode - r = pycode.PyByteCode() - r._from_code(code) - frame = pyframe.PyFrame(self.space, r, - self.w_globals, self.w_globals) + from pypy.interpreter.gateway import ScopedCode + scopedcode = ScopedCode(self.space, code, self.w_globals) + frame = scopedcode.create_frame() try: self.ec.eval_frame(frame) except baseobjspace.OperationError, operationerr: Modified: pypy/branch/builtinrefactor/pypy/interpreter/main.py ============================================================================== --- pypy/branch/builtinrefactor/pypy/interpreter/main.py (original) +++ pypy/branch/builtinrefactor/pypy/interpreter/main.py Sun Jul 27 20:53:08 2003 @@ -1,8 +1,6 @@ import autopath from pypy.tool import test, option -from pypy.objspace.std import StdObjSpace -from pypy.module.builtin import Builtin -from pypy.interpreter import executioncontext, baseobjspace, pyframe +from pypy.interpreter import executioncontext, baseobjspace, gateway import sys, os def _run_eval_string(source, filename, space, eval): @@ -13,6 +11,7 @@ try: if space is None: + from pypy.objspace.std import StdObjSpace space = StdObjSpace() compile = space.builtin.compile @@ -25,13 +24,13 @@ w_mainmodule = space.newmodule(space.wrap("__main__")) w_globals = space.getattr(w_mainmodule, space.wrap("__dict__")) space.setitem(w_globals, space.wrap("__builtins__"), space.w_builtins) - - frame = pyframe.PyFrame(space, space.unwrap(w_code), - w_globals, w_globals) + except baseobjspace.OperationError, operationerr: operationerr.record_interpreter_traceback() raise baseobjspace.PyPyError(space, operationerr) else: + scopedcode = gateway.ScopedCode(space, space.unwrap(w_code), w_globals) + frame = scopedcode.create_frame() if eval: return ec.eval_frame(frame) else: Modified: pypy/branch/builtinrefactor/pypy/interpreter/opcode.py ============================================================================== --- pypy/branch/builtinrefactor/pypy/interpreter/opcode.py (original) +++ pypy/branch/builtinrefactor/pypy/interpreter/opcode.py Sun Jul 27 20:53:08 2003 @@ -1,8 +1,9 @@ from appfile import AppFile from pypy.interpreter.baseobjspace import OperationError, NoValue +from pypy.interpreter.pyframe import _NULL import dis from pypy.interpreter import pyframe, baseobjspace -from pypy.interpreter.pycode import app2interp +from pypy.interpreter.gateway import app2interp, ScopedCode # dynamically loaded application-space utilities @@ -35,10 +36,8 @@ def LOAD_FAST(f, varindex): # access a local variable through its cell object - cell = f.localcells[varindex] - try: - w_value = cell.get() - except ValueError: + w_value = f.locals_w[varindex] + if w_value is _NULL: varname = f.getlocalvarname(varindex) message = "local variable '%s' referenced before assignment" % varname raise OperationError(f.space.w_UnboundLocalError, f.space.wrap(message)) @@ -49,9 +48,19 @@ f.valuestack.push(w_const) def STORE_FAST(f, varindex): - w_newvalue = f.valuestack.pop() - cell = f.localcells[varindex] - cell.set(w_newvalue) + try: + w_newvalue = f.valuestack.pop() + f.locals_w[varindex] = w_newvalue + except: + print "exception: got index error" + print " varindex:", varindex + print " len(locals_w)", len(f.locals_w) + import dis + print dis.dis(f.bytecode) + print "co_varnames", f.bytecode.co_varnames + print "co_nlocals", f.bytecode.co_nlocals + raise + def POP_TOP(f): f.valuestack.pop() @@ -215,6 +224,7 @@ def PRINT_EXPR(f): w_expr = f.valuestack.pop() + #print f.space.unwrap(w_expr) f.space.gethelper(appfile).call("print_expr", [w_expr]) def PRINT_ITEM_TO(f): @@ -292,7 +302,9 @@ plain = (w_locals is f.w_locals) if plain: f.fast2locals() - f.space.unwrap(w_prog).eval_code(f.space, w_globals, w_locals) + scopedcode = ScopedCode(f.space, f.space.unwrap(w_prog), w_globals) + scopedcode.eval_frame(w_locals) + #f.space.unwrap(w_prog).eval_code(f.space, w_globals, w_locals) if plain: f.locals2fast() @@ -337,7 +349,7 @@ w_methodsdict = f.valuestack.pop() w_bases = f.valuestack.pop() w_name = f.valuestack.pop() - w_newclass = app(f.space).build_class(w_name, w_bases, w_methodsdict, f.w_globals) + w_newclass = app(f.space.gethelperspace()).build_class(w_name, w_bases, w_methodsdict, f.w_globals) f.valuestack.push(w_newclass) def STORE_NAME(f, varindex): @@ -425,6 +437,7 @@ # f.valuestack.push(w_value) def LOAD_GLOBAL(f, nameindex): + assert f.w_globals is not None varname = f.getname(nameindex) w_varname = f.space.wrap(varname) try: @@ -447,23 +460,22 @@ f.valuestack.push(w_value) def DELETE_FAST(f, varindex): - cell = f.localcells[varindex] - try: - cell.delete() - except ValueError: + w_value = f.locals_w[varindex] + if f.locals_w[varindex] is _NULL: varname = f.getlocalvarname(varindex) message = "local variable '%s' referenced before assignment" % varname raise OperationError(f.space.w_UnboundLocalError, f.space.wrap(message)) + f.locals_w[varindex] = _NULL def LOAD_CLOSURE(f, varindex): # nested scopes: access the cell object - cell = f.nestedcells[varindex] + cell = f.closure_w[varindex] w_value = f.space.wrap(cell) f.valuestack.push(w_value) def LOAD_DEREF(f, varindex): # nested scopes: access a variable through its cell object - cell = f.nestedcells[varindex] + cell = f.closure_w[varindex] try: w_value = cell.get() except ValueError: @@ -482,9 +494,9 @@ # nested scopes: access a variable through its cell object w_newvalue = f.valuestack.pop() try: - cell = f.nestedcells[varindex] + cell = f.closure_w[varindex] except IndexError: - import pdb; pdb.set_trace() + #import pdb; pdb.set_trace() raise cell.set(w_newvalue) @@ -716,8 +728,9 @@ if opname in globals(): fn = globals()[opname] elif not opname.startswith('<') and i>0: - import warnings - warnings.warn("* Warning, missing opcode %s" % opname) + #import warnings + #warnings.warn("* Warning, missing opcode %s" % opname) + pass dispatch_table.append(fn) Modified: pypy/branch/builtinrefactor/pypy/interpreter/opcode_app.py ============================================================================== --- pypy/branch/builtinrefactor/pypy/interpreter/opcode_app.py (original) +++ pypy/branch/builtinrefactor/pypy/interpreter/opcode_app.py Sun Jul 27 20:53:08 2003 @@ -158,11 +158,11 @@ locals = caller_locals if locals is None: locals = globals - if not isinstance(globals, types.DictType): + if not isinstance(globals, dict): raise TypeError("exec: arg 2 must be a dictionary or None") elif not globals.has_key('__builtins__'): globals['__builtins__'] = builtins - if not isinstance(locals, types.DictType): + if not isinstance(locals, dict): raise TypeError("exec: arg 3 must be a dictionary or None") ## # XXX - HACK to check for code object ## co = compile('1','','eval') Modified: pypy/branch/builtinrefactor/pypy/interpreter/pyframe.py ============================================================================== --- pypy/branch/builtinrefactor/pypy/interpreter/pyframe.py (original) +++ pypy/branch/builtinrefactor/pypy/interpreter/pyframe.py Sun Jul 27 20:53:08 2003 @@ -2,8 +2,7 @@ """ from pypy.interpreter.executioncontext import OperationError, Stack, NoValue - -from pypy.interpreter.pycode import app2interp +from pypy.interpreter.gateway import app2interp, Cell, _NULL class PyFrame: @@ -18,18 +17,41 @@ * 'valuestack', 'blockstack', 'next_instr' control the interpretation """ - def __init__(self, space, bytecode, w_globals, w_locals): - self.space = space - self.bytecode = bytecode # Misnomer; this is really like a code object - self.w_globals = w_globals - self.w_locals = w_locals - self.localcells, self.nestedcells = bytecode.locals2cells(space, - w_locals) - self.w_builtins = self.load_builtins() + def initialize(self, scopedcode): + self.space = scopedcode.space + self.bytecode = scopedcode.cpycode + self.w_globals = scopedcode.w_globals + self.closure_w = scopedcode.closure_w or () self.valuestack = Stack() self.blockstack = Stack() self.last_exception = None self.next_instr = 0 + self.w_builtins = self.space.w_builtins + + def setdictscope(self, w_locals): + self.w_locals = w_locals + self.locals_w = [_NULL] * self.bytecode.co_nlocals + self.locals2fast() + + def setfastscope(self, locals_w): + self.locals_w = locals_w + self.w_locals = self.space.newdict([]) + self.fast2locals() + + def XXXclone(self): + f = self.__class__() + f.space = self.space + f.bytecode = self.bytecode + f.w_globals = self.w_globals + f.w_locals = self.w_locals + f.w_builtins = self.w_builtins + f.valuestack = self.valuestack.clone() + f.blockstack = self.blockstack.clone() + f.localcells = [x.clone() for x in self.localcells] + f.nestedcells = [x.clone() for x in self.nestedcells] + f.last_exception = self.last_exception + f.next_instr = self.next_instr + return f def eval(self, executioncontext): "Interpreter main loop!" @@ -48,6 +70,8 @@ else: opcode.dispatch_noarg(self, op) except OperationError, e: + #import traceback + #traceback.print_exc() e.record_application_traceback(self, last_instr) self.last_exception = e executioncontext.exception_trace(e) @@ -100,57 +124,25 @@ def fast2locals(self): # Copy values from self.localcells to self.w_locals - for i in range(len(self.localcells)): - name = self.bytecode.co_varnames[i] - cell = self.localcells[i] + for name, w_value in zip(self.bytecode.co_varnames, self.locals_w): w_name = self.space.wrap(name) - try: - w_value = cell.get() - except ValueError: - pass - else: + if w_value is not _NULL: self.space.setitem(self.w_locals, w_name, w_value) def locals2fast(self): # Copy values from self.w_locals to self.localcells for i in range(self.bytecode.co_nlocals): - name = self.bytecode.co_varnames[i] - cell = self.localcells[i] - w_name = self.space.wrap(name) + w_name = self.space.wrap(self.bytecode.co_varnames[i]) try: w_value = self.space.getitem(self.w_locals, w_name) except OperationError, e: if not e.match(self.space, self.space.w_KeyError): raise - else: - pass else: - cell.set(w_value) + self.locals_w[i] = w_value ### frame initialization ### - def load_builtins(self): - # compute w_builtins. This cannot be done in the '.app.py' - # file for bootstrapping reasons. - w_builtinsname = self.space.wrap("__builtins__") - try: - w_builtins = self.space.getitem(self.w_globals, w_builtinsname) - except OperationError, e: - if not e.match(self.space, self.space.w_KeyError): - raise - w_builtins = self.space.w_builtins # fall-back for bootstrapping - # w_builtins can be a module object or a dictionary object. - # In frameobject.c we explicitely check if w_builtins is a module - # object. Here we will just try to read its __dict__ attribute and - # if it fails we assume that it was a dictionary in the first place. - w_attrname = self.space.wrap("__dict__") - # XXX Commented out the following; it doesn't work for Ann space, - # and doesn't seem to be needed for other spaces AFAICT. -## try: -## w_builtins = self.space.getattr(w_builtins, w_attrname) -## except OperationError: -## pass # XXX catch and ignore any error - return w_builtins ### exception stack ### @@ -252,8 +244,6 @@ return etype, evalue normalize_exception = app2interp(app_normalize_exception) - - class FinallyBlock(FrameBlock): """A try:finally: block. Stores the position of the exception handler.""" @@ -357,69 +347,3 @@ """Detected bytecode corruption. Never caught; it's an error.""" -## Cells ## - -_NULL = object() # Marker object - -class Cell: - def __init__(self, w_value=_NULL): - self.w_value = w_value - - def get(self): - if self.w_value is _NULL: - raise ValueError, "get() from an empty cell" - return self.w_value - - def set(self, w_value): - self.w_value = w_value - - def delete(self): - if self.w_value is _NULL: - raise ValueError, "make_empty() on an empty cell" - self.w_value = _NULL - - def __repr__(self): - """ representation for debugging purposes """ - if self.w_value is _NULL: - return "%s()" % self.__class__.__name__ - else: - return "%s(%s)" % (self.__class__.__name__, self.w_value) - -class AppFrame(PyFrame): - """Represents a frame for a regular Python function - that needs to be interpreted. - - Public fields: - * 'space' is the object space this frame is running in - * 'w_locals' is the locals dictionary to use - * 'w_globals' is the attached globals dictionary - * 'w_builtins' is the attached built-ins dictionary - * 'valuestack', 'blockstack', 'next_instr' control the interpretation - """ - - def __init__(self, space, bytecode, w_globals, argtuple): - self.space = space - self.bytecode = bytecode # Misnomer; this is really like a code object - - # XXX we may want to have lazy access to interp-level through w_globals later - self.w_globals = w_globals - - # XXX construct self.w_locals - self.nestedcells = () - self.localcells = [ Cell(x) for x in argtuple ] - missing = self.bytecode.co_nlocals - len(self.localcells) - self.localcells.extend([ Cell() for x in range(missing)]) - - self.w_builtins = self.load_builtins() - self.valuestack = Stack() - self.blockstack = Stack() - self.last_exception = None - self.next_instr = 0 - #self._dump() - - def _dump(self): - print "AppFrame_dump" - print " space ", self.space - print " localcells", self.localcells - print " co_varnames ", self.bytecode.co_varnames - Modified: pypy/branch/builtinrefactor/pypy/interpreter/test/test_executioncontext.py ============================================================================== --- pypy/branch/builtinrefactor/pypy/interpreter/test/test_executioncontext.py (original) +++ pypy/branch/builtinrefactor/pypy/interpreter/test/test_executioncontext.py Sun Jul 27 20:53:08 2003 @@ -1,7 +1,7 @@ import autopath from pypy.tool import test -from pypy.interpreter.pyframe import PyFrame +from pypy.interpreter.gateway import ScopedCode from pypy.interpreter import baseobjspace, executioncontext class TestExecutionContext(test.TestCase): @@ -16,9 +16,9 @@ space.wrap('exec'))).co_consts[0] w_globals = ec.make_standard_w_globals() w_locals = space.newdict([(space.wrap('x'), space.wrap(5))]) - frame = PyFrame(space, bytecode, w_globals, w_locals) - w_output = ec.eval_frame(frame) - self.assertEquals(frame.space.unwrap(w_output), 6) + scopedcode = ScopedCode(space, bytecode, w_globals) + w_output = scopedcode.eval_frame(w_locals) + self.assertEquals(space.unwrap(w_output), 6) if __name__ == '__main__': Deleted: /pypy/branch/builtinrefactor/pypy/interpreter/test/test_extmodule.py ============================================================================== --- /pypy/branch/builtinrefactor/pypy/interpreter/test/test_extmodule.py Sun Jul 27 20:53:08 2003 +++ (empty file) @@ -1,128 +0,0 @@ -import autopath - -# need pypy.module.builtin first to make other imports work (???) -from pypy.module import builtin -from pypy.interpreter import extmodule -from pypy.tool import test - -import unittest - -class EmptyBM(extmodule.BuiltinModule): - __pythonname__ = 'empty_bm' - -class BM_with_appmethod(extmodule.BuiltinModule): - __pythonname__ = 'bm_with_appmethod' - def amethod(self): return 23 - amethod = extmodule.appmethod(amethod) - -class BM_with_appdata(extmodule.BuiltinModule): - __pythonname__ = 'bm_with_appdata' - somedata = 'twentythree' - somedata = extmodule.appdata(somedata) - -class TestBuiltinModule(test.TestCase): - - def setUp(self): - self.space = test.objspace() - - def tearDown(self): - pass - - def test_empty(self): - space = self.space - bm = EmptyBM(space) - w_bm = bm.wrap_me() - w_bmd = space.getattr(w_bm, space.wrap('__dict__')) - bmd = space.unwrap(w_bmd) - self.assertEqual(bmd, - {'__doc__': EmptyBM.__doc__, - '__name__': EmptyBM.__pythonname__} ) - - def test_appmethod(self): - space = self.space - bm = BM_with_appmethod(space) - w_bm = bm.wrap_me() - w_bmd = space.getattr(w_bm, space.wrap('__dict__')) - w_method = space.getitem(w_bmd, space.wrap('amethod')) - w_doc = space.getitem(w_bmd, space.wrap("__doc__")) - w_name = space.getitem(w_bmd, space.wrap("__name__")) - self.assertEqual(space.unwrap(w_doc), BM_with_appmethod.__doc__) - self.assertEqual(space.unwrap(w_name), BM_with_appmethod.__pythonname__) - result = space.call(w_method, space.wrap(()), space.wrap({})) - self.assertEqual(result, 23) - - def test_appdata(self): - space = self.space - bm = BM_with_appdata(space) - w_bm = bm.wrap_me() - w_bmd = space.getattr(w_bm, space.wrap('__dict__')) - bmd = space.unwrap(w_bmd) - thedata = bmd.get('somedata') - self.assertNotEqual(thedata, None) - w_data = space.getitem(w_bmd, space.wrap('somedata')) - bmd['somedata'] = BM_with_appdata.somedata - self.assertEqual(bmd, - {'__doc__': BM_with_appdata.__doc__, - '__name__': BM_with_appdata.__pythonname__, - 'somedata': BM_with_appdata.somedata} ) - self.assertEqual(thedata, 'twentythree') - - -class TestPyBuiltinCode(test.TestCase): - - def setUp(self): - self.space = test.objspace() - - def tearDown(self): - pass - - def test_simple(self): - def f(w_x): - return w_x - builtin_f = extmodule.make_builtin_func(self.space, f) - w_input = self.space.wrap(42) - w_res = self.space.call_function(builtin_f, w_input) - self.assertEqual_w(w_res, w_input) - - def test_default(self): - space = self.space - w = space.wrap - def f(w_x, w_y=23): - return space.add(w_x, w_y) - builtin_f = extmodule.make_builtin_func(space, f) - w_input = w(42) - w_res = space.call_function(builtin_f, w_input) - self.assertEqual_w(w_res, w(65)) - w_res = space.call_function(builtin_f, w_input, w(100)) - self.assertEqual_w(w_res, w(142)) - - def test_varargs(self): - s = self.space - w = s.wrap - def f(w_first, *args_w): - w_r = w_first - for w_i in args_w: - w_r = s.add(w_r, w_i) - return w_r - builtin_f = extmodule.make_builtin_func(s, f) - self.assertEqual_w(s.call_function(builtin_f, w(1)), w(1)) - self.assertEqual_w(s.call_function(builtin_f, w(1), w(2), w(3)), w(6)) - - def test_kwargs(self): - s = self.space - w = s.wrap - def f(**kws_w): - return s.add(kws_w['a'], kws_w['b']) - builtin_f = extmodule.make_builtin_func(s, f) - self.assertEqual_w(s.call_function(builtin_f, a=w(1), b=w(2)), w(3)) - - def test_varkwargs(self): - s = self.space - w = s.wrap - def f(*args_w, **kws_w): - return s.add(args_w[0], kws_w['a']) - builtin_f = extmodule.make_builtin_func(s, f) - self.assertEqual_w(s.call_function(builtin_f, w(2), a=w(1)), w(3)) - -if __name__ == '__main__': - test.main() Added: pypy/branch/builtinrefactor/pypy/interpreter/test/test_function.py ============================================================================== --- (empty file) +++ pypy/branch/builtinrefactor/pypy/interpreter/test/test_function.py Sun Jul 27 20:53:08 2003 @@ -0,0 +1,106 @@ + +import autopath +from pypy.tool import test +import unittest + +class ArgParseTest(test.AppTestCase): + def test_simple_call(self): + def func(arg1, arg2): + return arg1, arg2 + res = func(23,42) + self.assertEquals(res[0], 23) + self.assertEquals(res[1], 42) + + def test_simple_varargs(self): + def func(arg1, *args): + return arg1, args + res = func(23,42) + self.assertEquals(res[0], 23) + self.assertEquals(res[1], (42,)) + + def test_simple_kwargs(self): + def func(arg1, **kwargs): + return arg1, kwargs + res = func(23, value=42) + self.assertEquals(res[0], 23) + self.assertEquals(res[1], {'value': 42}) + + def test_kwargs_sets_wrong_positional_raises(self): + def func(arg1): + pass + self.assertRaises(TypeError, func, arg2=23) + + def test_kwargs_sets_positional(self): + def func(arg1): + return arg1 + res = func(arg1=42) + self.assertEquals(res, 42) + + def test_kwargs_sets_positional_mixed(self): + def func(arg1, **kw): + return arg1, kw + res = func(arg1=42, something=23) + self.assertEquals(res[0], 42) + self.assertEquals(res[1], {'something': 23}) + + def test_kwargs_sets_positional_mixed(self): + def func(arg1, **kw): + return arg1, kw + res = func(arg1=42, something=23) + self.assertEquals(res[0], 42) + self.assertEquals(res[1], {'something': 23}) + + def test_kwargs_sets_positional_twice(self): + def func(arg1, **kw): + return arg1, kw + self.assertRaises( + TypeError, func, 42, {'arg1': 23}) + + def test_default_arg(self): + def func(arg1,arg2=42): + return arg1, arg2 + res = func(arg1=23) + self.assertEquals(res[0], 23) + self.assertEquals(res[1], 42) + + def test_defaults_keyword_overrides(self): + def func(arg1=42, arg2=23): + return arg1, arg2 + res = func(arg1=23) + self.assertEquals(res[0], 23) + self.assertEquals(res[1], 23) + + def test_defaults_keyword_override_but_leaves_empty_positional(self): + def func(arg1,arg2=42): + return arg1, arg2 + self.assertRaises(TypeError, func, arg2=23) + + def test_kwargs_disallows_same_name_twice(self): + def func(arg1, **kw): + return arg1, kw + self.assertRaises(TypeError, func, 42, **{'arg1': 23}) + +class ModuleMinimalTest(test.IntTestCase): + def setUp(self): + self.space = test.objspace() + + def test_sys_exists(self): + w_sys = self.space.get_builtin_module('sys') + self.assert_(self.space.is_true(w_sys)) + + def test_import_exists(self): + space = self.space + w_builtin = space.get_builtin_module('__builtin__') + self.assert_(space.is_true(w_builtin)) + w_name = space.wrap('__import__') + w_import = self.space.getattr(w_builtin, w_name) + self.assert_(space.is_true(w_import)) + + def test_sys_import(self): + from pypy.interpreter.main import run_string + run_string('import sys', space=self.space) + +if __name__ == '__main__': + test.main() + + Modified: pypy/branch/builtinrefactor/pypy/interpreter/test/test_interpreter.py ============================================================================== --- pypy/branch/builtinrefactor/pypy/interpreter/test/test_interpreter.py (original) +++ pypy/branch/builtinrefactor/pypy/interpreter/test/test_interpreter.py Sun Jul 27 20:53:08 2003 @@ -7,7 +7,7 @@ def codetest(self, source, functionname, args): """Compile and run the given code string, and then call its function named by 'functionname' with arguments 'args'.""" - from pypy.interpreter import baseobjspace, executioncontext, pyframe + from pypy.interpreter import baseobjspace, executioncontext, pyframe, gateway space = self.space compile = space.builtin.compile @@ -19,9 +19,9 @@ w_tempmodule = space.newmodule(w("__temp__")) w_glob = space.getattr(w_tempmodule, w("__dict__")) space.setitem(w_glob, w("__builtins__"), space.w_builtins) - - frame = pyframe.PyFrame(space, space.unwrap(w_code), w_glob, w_glob) - ec.eval_frame(frame) + + scopedcode = gateway.ScopedCode(space, space.unwrap(w_code), w_glob) + scopedcode.eval_frame() wrappedargs = w(args) wrappedfunc = space.getitem(w_glob, w(functionname)) Modified: pypy/branch/builtinrefactor/pypy/interpreter/test/test_objspace.py ============================================================================== --- pypy/branch/builtinrefactor/pypy/interpreter/test/test_objspace.py (original) +++ pypy/branch/builtinrefactor/pypy/interpreter/test/test_objspace.py Sun Jul 27 20:53:08 2003 @@ -67,12 +67,11 @@ # unavoidable def f(x): return x - from pypy.interpreter.pycode import PyByteCode - c = PyByteCode() - c._from_code(f.func_code) + + cpycode = f.func_code w_globals = self.space.newdict([]) w_defs = self.space.newtuple([]) - w_f = self.space.newfunction(c, w_globals, w_defs) + w_f = self.space.newfunction(cpycode, w_globals, w_defs) self.assertEqual_w(self.space.call_function(w_f, self.space.wrap(1)), self.space.wrap(1)) Deleted: /pypy/branch/builtinrefactor/pypy/interpreter/test/test_pyframe_app.py ============================================================================== --- /pypy/branch/builtinrefactor/pypy/interpreter/test/test_pyframe_app.py Sun Jul 27 20:53:08 2003 +++ (empty file) @@ -1,92 +0,0 @@ -import autopath - -from pypy.tool import test -from pypy.interpreter.pyframe_app import decode_frame_arguments - -class CodeObject: - """ A code object class for test purposes. """ - def __init__(self, count=3, vflag = 0, kflag = 0): - self.co_argcount = count - self.co_varnames = ('a', 'b', 'c', 'd', 'e') - self.co_flags = 4 * vflag + 8 * kflag - - -class Testdecode_frame_arguments(test.TestCase): - - def test_plain_parameters(self): - self.assertEqual( - (1, 2, 3, (4,)), - decode_frame_arguments((1, 2, 3, 4), {}, (), None, - CodeObject(vflag=1))) - - def test_non_used_keyword(self): - self.assertEqual( - (1, 2, 3, (4,), {'e':0}), - decode_frame_arguments((1, 2, 3, 4), {'e':0}, (), None, - CodeObject(vflag=1, kflag=1))) - - def test_used_keyword(self): - self.assertEqual( - (1, 2, 10, ()), - decode_frame_arguments((1, 2), {'c':10}, (20,), None, - CodeObject(vflag=1))) - - def test_mixed_keyword(self): - self.assertEqual( - (1, 2, 10, (), {'e':30}), - decode_frame_arguments((1, 2), {'c':10, 'e':30}, (20,), None, - CodeObject(vflag=1, kflag=1))) - - def test_used_default(self): - self.assertEqual( - (1, 2, 20), - decode_frame_arguments((1, 2), {}, (20,), None, CodeObject())) - - def test_no_varargs(self): - self.assertEqual( - (20, 30, 40), - decode_frame_arguments((), {}, (20, 30, 40), None, CodeObject())) - - def test_no_args(self): - self.assertEqual( - (), - decode_frame_arguments((), {}, (), None, CodeObject(count=0))) - - def test_fail_keywords_has_bad_formal_parameter(self): - self.assertRaises( - TypeError, - decode_frame_arguments, - (1, 2, 3), {'xxx':666}, (), None, CodeObject()) - - def test_fail_too_many_parameters(self): - self.assertRaises( - TypeError, - decode_frame_arguments, - (1, 2, 3, 4, 5, 6), {}, (), None, CodeObject()) - - def test_fail_not_enough_parameters(self): - self.assertRaises( - TypeError, - decode_frame_arguments, - (), {}, (), None, CodeObject()) - - def test_fail_extra_no_varargs(self): - self.assertRaises( - TypeError, - decode_frame_arguments, - (1, 2, 3, 4), {}, (20,), None, CodeObject(vflag=0)) - - def test_fail_setting_parameter_twice_with_extra_actual_keyword(self): - self.assertRaises( - TypeError, - decode_frame_arguments, - (1, 2, 3, 4), {'a':666, 'b':666}, (), None, CodeObject()) - - def test_fail_setting_parameter_twice_with_extra_formal_keyword(self): - self.assertRaises( - TypeError, - decode_frame_arguments, - (1, 2, 3, 4), {}, (), None, CodeObject(kflag=1)) - -if __name__ == "__main__": - test.main() Modified: pypy/branch/builtinrefactor/pypy/interpreter/unittest_w.py ============================================================================== --- pypy/branch/builtinrefactor/pypy/interpreter/unittest_w.py (original) +++ pypy/branch/builtinrefactor/pypy/interpreter/unittest_w.py Sun Jul 27 20:53:08 2003 @@ -4,18 +4,14 @@ import unittest def wrap_func(space, func): - # this is generally useful enough that it should probably go - # somewhere more obvious (objspace method?) - from pypy.interpreter import pycode - code = pycode.PyByteCode() - code._from_code(func.func_code) - return space.newfunction(code, space.newdict([]), - space.wrap(func.func_defaults), None) + from pypy.interpreter.gateway import InterpretedFunction + func = InterpretedFunction(space, func) + return space.wrap(func) def make_testcase_class(space, tc_w): # XXX this is all a bit insane (but it works) - from pypy.interpreter.extmodule import make_builtin_func + #from pypy.interpreter.extmodule import make_builtin_func w = space.wrap d = space.newdict([]) space.setitem(d, w('failureException'), space.w_AssertionError) @@ -40,7 +36,6 @@ def __call__(self): from pypy.interpreter import executioncontext - from pypy.interpreter import pyframe space = self.testCase.space w = space.wrap @@ -127,7 +122,7 @@ return self.failIf(condition, msg) def assertRaises_w(self, w_exc_class, callable, *args, **kw): - from pypy.objspace.std.objspace import OperationError + from pypy.interpreter.baseobjspace import OperationError try: callable(*args, **kw) except OperationError, e: Modified: pypy/branch/builtinrefactor/pypy/module/builtin.py ============================================================================== --- pypy/branch/builtinrefactor/pypy/module/builtin.py (original) +++ pypy/branch/builtinrefactor/pypy/module/builtin.py Sun Jul 27 20:53:08 2003 @@ -1,5 +1,6 @@ -from pypy.interpreter.extmodule import * -from pypy.interpreter import pycode, executioncontext +from pypy.interpreter import executioncontext +from pypy.interpreter.gateway import \ + AppVisibleModule, ScopedCode, wrap_applevel_class ####################### #### __builtin__ #### @@ -7,55 +8,67 @@ import __builtin__ as cpy_builtin -class Builtin(BuiltinModule): - __pythonname__ = '__builtin__' +class __builtin__(AppVisibleModule): def _actframe(self, index=-1): return self.space.getexecutioncontext().framestack.items[index] + def _wrap_postponed(self): + """ stuff that needs a mostly working interpreter goes here. + + The AppVisibleModule init will put all objects into '_postponed' + that need to be wrapped now. Currently this should only be + the 'xrange' class. + """ + for name, obj in self._postponed: + # for now this can only be a class + w_res = wrap_applevel_class(self.space, name, obj) + w_name = self.space.wrap(name) + self.space.setattr(self._wrapped, w_name, w_res) + def globals(self): return self._actframe().w_globals - globals = appmethod(globals) def locals(self): return self._actframe().w_locals - locals = appmethod(locals) - def __import__(self, w_modulename, w_locals, w_globals, w_fromlist): space = self.space w = space.wrap try: - w_mod = space.getitem(space.w_modules, w_modulename) + w_mod = space.getitem(space.sys.w_modules, w_modulename) return w_mod except executioncontext.OperationError,e: if not e.match(space, space.w_KeyError): raise w_mod = space.get_builtin_module(w_modulename) if w_mod is not None: - space.setitem(space.w_modules,w_modulename,w_mod) + space.setitem(space.sys.w_modules, w_modulename, w_mod) return w_mod import os, __future__ - for path in space.unwrap(space.getattr(space.w_sys, w('path'))): + for path in space.unwrap(space.sys.w_path): f = os.path.join(path, space.unwrap(w_modulename) + '.py') if os.path.exists(f): w_mod = space.newmodule(w_modulename) - space.setitem(space.w_modules, w_modulename, w_mod) + space.setitem(space.sys.w_modules, w_modulename, w_mod) space.setattr(w_mod, w('__file__'), w(f)) w_source = w(open(f, 'r').read()) # wrt the __future__.generators.compiler_flag, "um" -- mwh w_code = self.compile(w_source, w(f), w('exec'), w(__future__.generators.compiler_flag)) w_dict = space.getattr(w_mod, w('__dict__')) - space.unwrap(w_code).eval_code(space, w_dict, w_dict) + + code = space.unwrap(w_code) + from pypy.interpreter.gateway import ScopedCode + scopedcode = ScopedCode(space, code, w_dict) + scopedcode.eval_frame() return w_mod w_exc = space.call_function(space.w_ImportError, w_modulename) raise executioncontext.OperationError( space.w_ImportError, w_exc) - __import__ = appmethod(__import__) def compile(self, w_str, w_filename, w_startstr, w_supplied_flags=None, w_dont_inherit=None): @@ -78,10 +91,7 @@ #print (str, filename, startstr, supplied_flags, dont_inherit) c = cpy_builtin.compile(str, filename, startstr, supplied_flags, dont_inherit) - res = pycode.PyByteCode() - res._from_code(c) - return space.wrap(res) - compile = appmethod(compile) + return space.wrap(c) def execfile(self, w_filename, w_globals=None, w_locals=None): space = self.space @@ -95,79 +105,325 @@ filename = space.unwrap(w_filename) s = open(filename).read() c = cpy_builtin.compile(s, filename, 'exec', 4096) # XXX generators - res = pycode.PyByteCode() - res._from_code(c) - - res.eval_code(space, w_globals, w_locals) - return space.w_None - - execfile = appmethod(execfile) + scopedcode = ScopedCode(space, c, w_globals) + scopedcode.eval_frame(w_locals) + return space.w_None ####essentially implemented by the objectspace def abs(self, w_val): return self.space.abs(w_val) - abs = appmethod(abs) def chr(self, w_ascii): w_character = self.space.newstring([w_ascii]) return w_character - chr = appmethod(chr) def len(self, w_obj): return self.space.len(w_obj) - len = appmethod(len) def delattr(self, w_object, w_name): return self.space.delattr(w_object, w_name) - delattr = appmethod(delattr) def getattr(self, w_object, w_name): return self.space.getattr(w_object, w_name) - getattr = appmethod(getattr) - def hash(self, w_object): return self.space.hash(w_object) - hash = appmethod(hash) def oct(self, w_val): return self.space.oct(w_val) - oct = appmethod(oct) def hex(self, w_val): return self.space.hex(w_val) - hex = appmethod(hex) - def id(self, w_object): return self.space.id(w_object) - id = appmethod(id) #XXX works only for new-style classes. #So we have to fix it, when we add support for old-style classes def issubclass(self, w_cls1, w_cls2): return self.space.issubtype(w_cls1, w_cls2) - issubclass = appmethod(issubclass) #XXX missing: second form of iter (callable, sentintel) def iter(self, w_collection): return self.space.iter(w_collection) - iter = appmethod(iter) def ord(self, w_val): return self.space.ord(w_val) - ord = appmethod(ord) def pow(self, w_val): return self.space.pow(w_val) - pow = appmethod(pow) def repr(self, w_object): return self.space.repr(w_object) - repr = appmethod(repr) def setattr(self, w_object, w_name, w_val): return self.space.setattr(w_object, w_name, w_val) - setattr = appmethod(setattr) + + # app-level functions + + def app_apply(function, args, kwds={}): + """call a function (or other callable object) and return its result""" + return function(*args, **kwds) + + def app_map(function, *collections): + """does 3 separate things, hence this enormous docstring. + 1. if function is None, return a list of tuples, each with one + item from each collection. If the collections have different + lengths, shorter ones are padded with None. + + 2. if function is not None, and there is only one collection, + apply function to every item in the collection and return a + list of the results. + + 3. if function is not None, and there are several collections, + repeatedly call the function with one argument from each + collection. If the collections have different lengths, + shorter ones are padded with None""" + + if len(collections) == 0: + raise TypeError, "map() requires at least one sequence" + + elif len(collections) == 1: + #it's the most common case, so make it faster + if function is None: + return collections[0] + else: + return [function(x) for x in collections[0]] + else: + res = [] + idx = 0 + while 1: + cont = 0 #is any collection not empty? + args = [] + for collection in collections: + try: + elem = collection[idx] + cont = cont + 1 + except IndexError: + elem = None + args.append(elem) + if cont: + if function is None: + res.append(tuple(args)) + else: + res.append(function(*args)) + else: + return res + idx = idx + 1 + + def app_filter(function, collection): + """construct a list of those elements of collection for which function + is True. If function is None, then return the items in the sequence + which are True.""" + + if function is None: + res = [item for item in collection if item] + else: + res = [item for item in collection if function(item)] + + if type(collection) is tuple: + return tuple(res) + elif type(collection) is str: + return "".join(res) + else: + return res + + def app_zip(*collections): + """return a list of tuples, where the nth tuple contains every + nth item of each collection. If the collections have different + lengths, zip returns a list as long as the shortest collection, + ignoring the trailing items in the other collections.""" + + if len(collections) == 0: + raise TypeError, "zip() requires at least one sequence" + res = [] + idx = 0 + while 1: + try: + elems = [] + for collection in collections: + elems.append(collection[idx]) + res.append(tuple(elems)) + except IndexError: + break + idx = idx + 1 + return res + + def app_reduce(function, l, *initialt): + """ Apply function of two arguments cumulatively to the items of + sequence, from left to right, so as to reduce the sequence to a + single value. Optionally begin with an initial value.""" + + if initialt: + initial, = initialt + idx = 0 + else: + try: + initial = l[0] + except IndexError: + raise TypeError, "reduce() of empty sequence with no initial value" + idx = 1 + while 1: + try: + initial = function(initial, l[idx]) + idx = idx + 1 + except IndexError: + break + return initial + + def app_isinstance(obj, klass_or_tuple): + objcls = obj.__class__ + if issubclass(klass_or_tuple.__class__, tuple): + for klass in klass_or_tuple: + if issubclass(objcls, klass): + return 1 + return 0 + else: + try: + return issubclass(objcls, klass_or_tuple) + except TypeError: + raise TypeError, "isinstance() arg 2 must be a class or type" + + def app_range(x, y=None, step=1): + """ returns a list of integers in arithmetic position from start (defaults + to zero) to stop - 1 by step (defaults to 1). Use a negative step to + get a list in decending order.""" + + if y is None: + start = 0 + stop = x + else: + start = x + stop = y + + if step == 0: + raise ValueError, 'range() arg 3 must not be zero' + + elif step > 0: + if stop <= start: # no work for us + return [] + howmany = (stop - start + step - 1)/step + + else: # step must be < 0, or we would have raised ValueError + if stop >= start: # no work for us + return [] + howmany = (start - stop - step - 1)/-step + + arr = [None] * howmany # this is to avoid using append. + + i = start + n = 0 + while n < howmany: + arr[n] = i + i += step + n += 1 + + return arr + + # min and max could be one function if we had operator.__gt__ and + # operator.__lt__ Perhaps later when we have operator. + + def app_min(*arr): + """return the smallest number in a list""" + + if not arr: + raise TypeError, 'min() takes at least one argument' + + if len(arr) == 1: + arr = arr[0] + + iterator = iter(arr) + try: + min = iterator.next() + except StopIteration: + raise ValueError, 'min() arg is an empty sequence' + + for i in iterator: + if min > i: + min = i + return min + + def app_max(*arr): + """return the largest number in a list""" + + if not arr: + raise TypeError, 'max() takes at least one argument' + + if len(arr) == 1: + arr = arr[0] + + iterator = iter(arr) + try: + max = iterator.next() + except StopIteration: + raise ValueError, 'max() arg is an empty sequence' + + for i in iterator: + if max < i: + max = i + return max + + + def app_cmp(x, y): + """return 0 when x == y, -1 when x < y and 1 when x > y """ + if x < y: + return -1 + elif x == y: + return 0 + else: + return 1 + + def app__vars(*obj): + """return a dictionary of all the attributes currently bound in obj. If + called with no argument, return the variables bound in local scope.""" + + if len(obj) == 0: + return locals() + elif len(obj) != 1: + raise TypeError, "vars() takes at most 1 argument." + else: + try: + return obj[0].__dict__ + except AttributeError: + raise TypeError, "vars() argument must have __dict__ attribute" + + def app_hasattr(ob, attr): + try: + getattr(ob, attr) + return True + except AttributeError: + return False + + + class app_xrange: + def __init__(self, x, y=None, step=1): + """ returns an xrange object, see range for more docs""" + + if y is None: + self.start = 0 + self.stop = x + else: + self.start = x + self.stop = y + + if step == 0: + raise ValueError, 'xrange() step-argument (arg 3) must not be zero' + + self.step = step + + def __iter__(self): + def gen(self): + start,stop,step = self.start,self.stop,self.step + i = start + if step > 0: + while i < stop: + yield i + i+=step + else: + while i > stop: + yield i + i+=step + + return gen(self) Deleted: /pypy/branch/builtinrefactor/pypy/module/builtin_app.py ============================================================================== --- /pypy/branch/builtinrefactor/pypy/module/builtin_app.py Sun Jul 27 20:53:08 2003 +++ (empty file) @@ -1,263 +0,0 @@ -def apply(function, args, kwds={}): - """call a function (or other callable object) and return its result""" - return function(*args, **kwds) - -def map(function, *collections): - """does 3 separate things, hence this enormous docstring. - 1. if function is None, return a list of tuples, each with one - item from each collection. If the collections have different - lengths, shorter ones are padded with None. - - 2. if function is not None, and there is only one collection, - apply function to every item in the collection and return a - list of the results. - - 3. if function is not None, and there are several collections, - repeatedly call the function with one argument from each - collection. If the collections have different lengths, - shorter ones are padded with None""" - - if len(collections) == 0: - raise TypeError, "map() requires at least one sequence" - - elif len(collections) == 1: - #it's the most common case, so make it faster - if function is None: - return collections[0] - else: - return [function(x) for x in collections[0]] - else: - res = [] - idx = 0 - while 1: - cont = 0 #is any collection not empty? - args = [] - for collection in collections: - try: - elem = collection[idx] - cont = cont + 1 - except IndexError: - elem = None - args.append(elem) - if cont: - if function is None: - res.append(tuple(args)) - else: - res.append(function(*args)) - else: - return res - idx = idx + 1 - -def filter(function, collection): - """construct a list of those elements of collection for which function - is True. If function is None, then return the items in the sequence - which are True.""" - - if function is None: - res = [item for item in collection if item] - else: - res = [item for item in collection if function(item)] - - if type(collection) is tuple: - return tuple(res) - elif type(collection) is str: - return "".join(res) - else: - return res - -def zip(*collections): - """return a list of tuples, where the nth tuple contains every - nth item of each collection. If the collections have different - lengths, zip returns a list as long as the shortest collection, - ignoring the trailing items in the other collections.""" - - if len(collections) == 0: - raise TypeError, "zip() requires at least one sequence" - res = [] - idx = 0 - while 1: - try: - elems = [] - for collection in collections: - elems.append(collection[idx]) - res.append(tuple(elems)) - except IndexError: - break - idx = idx + 1 - return res - -def reduce(function, l, *initialt): - """ Apply function of two arguments cumulatively to the items of - sequence, from left to right, so as to reduce the sequence to a - single value. Optionally begin with an initial value.""" - - if initialt: - initial, = initialt - idx = 0 - else: - try: - initial = l[0] - except IndexError: - raise TypeError, "reduce() of empty sequence with no initial value" - idx = 1 - while 1: - try: - initial = function(initial, l[idx]) - idx = idx + 1 - except IndexError: - break - return initial - -def isinstance(obj, klass_or_tuple): - objcls = obj.__class__ - if issubclass(klass_or_tuple.__class__, tuple): - for klass in klass_or_tuple: - if issubclass(objcls, klass): - return 1 - return 0 - else: - try: - return issubclass(objcls, klass_or_tuple) - except TypeError: - raise TypeError, "isinstance() arg 2 must be a class or type" - -def range(x, y=None, step=1): - """ returns a list of integers in arithmetic position from start (defaults - to zero) to stop - 1 by step (defaults to 1). Use a negative step to - get a list in decending order.""" - - if y is None: - start = 0 - stop = x - else: - start = x - stop = y - - if step == 0: - raise ValueError, 'range() arg 3 must not be zero' - - elif step > 0: - if stop <= start: # no work for us - return [] - howmany = (stop - start + step - 1)/step - - else: # step must be < 0, or we would have raised ValueError - if stop >= start: # no work for us - return [] - howmany = (start - stop - step - 1)/-step - - arr = [None] * howmany # this is to avoid using append. - - i = start - n = 0 - while n < howmany: - arr[n] = i - i += step - n += 1 - - return arr - -# min and max could be one function if we had operator.__gt__ and -# operator.__lt__ Perhaps later when we have operator. - -def min(*arr): - """return the smallest number in a list""" - - if not arr: - raise TypeError, 'min() takes at least one argument' - - if len(arr) == 1: - arr = arr[0] - - iterator = iter(arr) - try: - min = iterator.next() - except StopIteration: - raise ValueError, 'min() arg is an empty sequence' - - for i in iterator: - if min > i: - min = i - return min - -def max(*arr): - """return the largest number in a list""" - - if not arr: - raise TypeError, 'max() takes at least one argument' - - if len(arr) == 1: - arr = arr[0] - - iterator = iter(arr) - try: - max = iterator.next() - except StopIteration: - raise ValueError, 'max() arg is an empty sequence' - - for i in iterator: - if max < i: - max = i - return max - - -def cmp(x, y): - """return 0 when x == y, -1 when x < y and 1 when x > y """ - if x < y: - return -1 - elif x == y: - return 0 - else: - return 1 - -def _vars(*obj): - """return a dictionary of all the attributes currently bound in obj. If - called with no argument, return the variables bound in local scope.""" - - if len(obj) == 0: - return locals() - elif len(obj) != 1: - raise TypeError, "vars() takes at most 1 argument." - else: - try: - return obj[0].__dict__ - except AttributeError: - raise TypeError, "vars() argument must have __dict__ attribute" - -def hasattr(ob, attr): - try: - getattr(ob, attr) - return True - except AttributeError: - return False - -class xrange: - def __init__(self, x, y=None, step=1): - """ returns an xrange object, see range for more docs""" - - if y is None: - self.start = 0 - self.stop = x - else: - self.start = x - self.stop = y - - if step == 0: - raise ValueError, 'xrange() step-argument (arg 3) must not be zero' - - self.step = step - - def __iter__(self): - def gen(self): - start,stop,step = self.start,self.stop,self.step - i = start - if step > 0: - while i < stop: - yield i - i+=step - else: - while i > stop: - yield i - i+=step - - return gen(self) Deleted: /pypy/branch/builtinrefactor/pypy/module/builtin_helper_app.py ============================================================================== Modified: pypy/branch/builtinrefactor/pypy/module/sysmodule.py ============================================================================== --- pypy/branch/builtinrefactor/pypy/module/sysmodule.py (original) +++ pypy/branch/builtinrefactor/pypy/module/sysmodule.py Sun Jul 27 20:53:08 2003 @@ -1,23 +1,28 @@ from pypy.interpreter.baseobjspace import OperationError -from pypy.interpreter.extmodule import * -import sys, os, pypy +from pypy.interpreter.gateway import AppVisibleModule +import os, pypy -class Sys(BuiltinModule): - __pythonname__ = 'sys' +import sys as cpy_sys - def __init__(self, space): - BuiltinModule.__init__(self, space) +class sys(AppVisibleModule): + """ A Minimal 'sys' module. + Currently we only provide 'stdout' and 'displayhook' + """ + def __init__(self, space): opd = os.path.dirname - pypydir = opd(opd(os.path.abspath(pypy.__file__))) - appdir = os.path.join(pypydir, 'pypy', 'appspace') - - self.path = appdata([appdir] + [p for p in sys.path if p != pypydir]) - - stdout = appdata(sys.stdout) + self.path = [appdir] + [p for p in cpy_sys.path if p!= pypydir] + self.w_modules = space.newdict([]) + AppVisibleModule.__init__(self, space) + + stdout = cpy_sys.stdout + + def _setmodule(self, module): + """ put a module into the modules list """ + self.space.setitem(self.w_modules, module.w___name__, module._wrapped) def displayhook(self, w_x): space = self.space @@ -28,5 +33,3 @@ except OperationError: print "! could not print", w_x space.setitem(space.w_builtins, w('_'), w_x) - displayhook = appmethod(displayhook) - Modified: pypy/branch/builtinrefactor/pypy/objspace/ann/cloningcontext.py ============================================================================== --- pypy/branch/builtinrefactor/pypy/objspace/ann/cloningcontext.py (original) +++ pypy/branch/builtinrefactor/pypy/objspace/ann/cloningcontext.py Sun Jul 27 20:53:08 2003 @@ -72,6 +72,11 @@ # {(bytecode, w_globals): FunctionInfo(), ...} def getfunctioninfo(self, frame, new=False): + from pypy.interpreter.pyframe import AppFrame, PyFrame + if isinstance(frame, AppFrame): + print "getfunctioninfo from AppFrame", frame.bytecode.co_name + return FunctionInfo(self) + key = self.makekey(frame) info = self.functioninfos.get(key) if info is None: @@ -117,7 +122,10 @@ return w_result def clone_frame(self, frame): - f = PyFrame(self.space, frame.bytecode, frame.w_globals, frame.w_locals) + return frame.clone() + + f = frame.clone() + #f = PyFrame(self.space, frame.bytecode, frame.w_globals, frame.w_locals) f.valuestack = clonevaluestack(frame.valuestack) f.blockstack = cloneblockstack(frame.blockstack) f.last_exception = frame.last_exception Modified: pypy/branch/builtinrefactor/pypy/objspace/ann/objspace.py ============================================================================== --- pypy/branch/builtinrefactor/pypy/objspace/ann/objspace.py (original) +++ pypy/branch/builtinrefactor/pypy/objspace/ann/objspace.py Sun Jul 27 20:53:08 2003 @@ -90,7 +90,8 @@ def createexecutioncontext(self): return CloningExecutionContext(self) - def gethelperspace(self): + #XXX disabled the helperspace-concept for now + def _gethelperspace(self): return HelperObjSpace() # Specialized creators whose interface is in the abstract base class Modified: pypy/branch/builtinrefactor/pypy/objspace/ann/wrapper.py ============================================================================== --- pypy/branch/builtinrefactor/pypy/objspace/ann/wrapper.py (original) +++ pypy/branch/builtinrefactor/pypy/objspace/ann/wrapper.py Sun Jul 27 20:53:08 2003 @@ -81,7 +81,13 @@ def clone(self): if type(self.value) is type(lambda:0): # XXX return W_Constant(self.value) - return W_Constant(copy.deepcopy(self.value)) + try: + return W_Constant(copy.deepcopy(self.value)) + except TypeError: + return W_Constant(self.value) + except: + return W_Constant(self.value) + class W_KnownKeysContainer(W_Object): """A dict with a known set of keys or a list with known length. Modified: pypy/branch/builtinrefactor/pypy/objspace/std/funcobject.py ============================================================================== --- pypy/branch/builtinrefactor/pypy/objspace/std/funcobject.py (original) +++ pypy/branch/builtinrefactor/pypy/objspace/std/funcobject.py Sun Jul 27 20:53:08 2003 @@ -40,7 +40,8 @@ if somecode.co_flags & CO_GENERATOR: from generatorobject import W_GeneratorObject from pypy.interpreter import pyframe - frame = pyframe.PyFrame(space, somecode, w_globals, w_locals) + frame = pyframe.PyFrame() + frame.initialize(space, somecode, w_globals, w_locals) w_ret = W_GeneratorObject(space, frame) else: w_ret = somecode.eval_code(space, w_globals, w_locals) Modified: pypy/branch/builtinrefactor/pypy/objspace/trivial.py ============================================================================== --- pypy/branch/builtinrefactor/pypy/objspace/trivial.py (original) +++ pypy/branch/builtinrefactor/pypy/objspace/trivial.py Sun Jul 27 20:53:08 2003 @@ -9,10 +9,11 @@ import operator, types, new, sys class nugen(object): - def __init__(self, space, frame): - self.space = space + def __init__(self, frame): + self.space = frame.space self.frame = frame self.running = 0 + def next(self): if self.running: raise OperationError(self.space.w_ValueError, @@ -29,21 +30,24 @@ self.running = 0 return ret + def __iter__(self): return self -class numeth(object): +class _numeth(object): def __init__(self, space, func, inst, cls): self.space = space self.func = func self.inst = inst self.cls = cls + def _call_(self, *args, **kws): if self.inst is None and self.cls is not type(None): pass else: args = (self.inst,) + args return self.func(*args, **kws) + def __call__(self, *args, **kws): try: return self._call_(*args, **kws) @@ -52,35 +56,50 @@ except: raise -class nufun(object): - def __init__(self, space, code, globals, defaultarguments, closure): - self.space = space +from pypy.interpreter.gateway import InterpretedFunction + +class nufun(InterpretedFunction): + def __init__(self, space, code, globals, defs, closure): + InterpretedFunction.__init__(self, space, code, globals, closure) + self.w_defs = space.wrap(defs) self.__name__ = code.co_name - self.func_code = self.code = code - self.globals = globals - self.defaultarguments = defaultarguments - self.closure = closure - def do_call(self, *args, **kwds): - locals = self.code.build_arguments(self.space, args, kwds, - w_defaults = self.defaultarguments, - w_closure = self.closure) - if self.code.co_flags & 0x0020: - from pypy.interpreter import pyframe - frame = pyframe.PyFrame(self.space, self.code, - self.globals, locals) - return nugen(self.space, frame) + self.func_code = code + + #self.func_code = self.code = code + #self.globals = globals + #self.defaultarguments = defs + #self.closure = closure + + def __call__(self, *args, **kwargs): + if self.cpycode.co_flags & 0x0020: + frame = self.create_frame(args, kwargs) + return nugen(frame) else: - return self.code.eval_code(self.space, self.globals, locals) - def __call__(self, *args, **kwds): - return self.do_call(*args, **kwds) - def __get__(self, ob, cls=None): - return numeth(self.space, self, ob, cls) + return self.eval_frame(args, kwargs) + + #def __get__(self, ob, cls=None): + # return numeth(self.space, self, ob, cls) + + #def do_call(self, *args, **kwds): + # locals = self.code.build_arguments(self.space, args, kwds, + # w_defaults = self.defaultarguments, + # w_closure = self.closure) + # if self.code.co_flags & 0x0020: + # from pypy.interpreter import pyframe + # frame = pyframe.PyFrame() + # frame.initialize(self.space, self.code, + # self.globals, locals) + # return nugen(self.space, frame) + # else: + # return self.code.eval_code(self.space, self.globals, locals) + + #def __call__(self, *args, **kwds): + # return self.do_call(*args, **kwds) class TrivialObjSpace(ObjSpace): def clone_exception_hierarchy(self): - from pypy.interpreter.pycode import PyByteCode def __init__(self, *args): self.args = args def __str__(self): @@ -154,7 +173,6 @@ newstuff[c.__name__] = c newstuff.update(self.clone_exception_hierarchy()) self.make_builtins() - self.make_sys() # insert these into the newly-made builtins for key, w_value in newstuff.items(): self.setitem(self.w_builtins, self.wrap(key), w_value) @@ -167,6 +185,11 @@ return w def reraise(self): + #import traceback + #traceback.print_exc() + #ec = self.getexecutioncontext() # .framestack.items[-1] + #ec.print_detailed_traceback(self) + etype, evalue = sys.exc_info()[:2] name = etype.__name__ if hasattr(self, 'w_' + name): @@ -324,11 +347,14 @@ except StopIteration: raise NoValue - def newfunction(self, code, globals, defaultarguments, closure=None): - assert hasattr(code, 'co_name') - assert hasattr(code, 'build_arguments') - assert hasattr(code, 'eval_code') - return nufun(self, code, globals, defaultarguments, closure) + def newfunction(self, code, globals, defs, closure=None): + #from pypy.interpreter.gateway import Function + #return Function(self, code, globals, defaultarguments, closure) + + #assert hasattr(code, 'co_name') + #assert hasattr(code, 'build_arguments') + #assert hasattr(code, 'eval_code') + return nufun(self, code, globals, defs, closure) def newstring(self, asciilist): try: @@ -351,10 +377,13 @@ args = (callable.im_self,) + args callable = callable.im_func try: - return apply(callable, args, kwds or {}) + return callable(*args, **(kwds or {})) except OperationError: raise except: + #print "got exception in", callable.__name__ + #print "len args", len(args) + #print "kwds", kwds self.reraise() def hex(self, ob): Modified: pypy/branch/builtinrefactor/pypy/tool/test.py ============================================================================== --- pypy/branch/builtinrefactor/pypy/tool/test.py (original) +++ pypy/branch/builtinrefactor/pypy/tool/test.py Sun Jul 27 20:53:08 2003 @@ -225,8 +225,12 @@ modpath = fullfn[len(autopath.pypydir)+1:-3] modpath = 'pypy.' + modpath.replace(os.sep, '.') if not filterfunc or filterfunc(modpath): - subsuite = loader.loadTestsFromName(modpath) - suite.addTest(subsuite, modpath) + try: + subsuite = loader.loadTestsFromName(modpath) + except: + print "skipping testfile (failed loading it)", modpath + else: + suite.addTest(subsuite, modpath) elif recursive and os.path.isdir(fullfn): subsuite = testsuite_from_dir(fullfn, filterfunc, 1, loader) if subsuite: From hpk at codespeak.net Mon Jul 28 13:22:54 2003 From: hpk at codespeak.net (hpk at codespeak.net) Date: Mon, 28 Jul 2003 13:22:54 +0200 (MEST) Subject: [pypy-svn] rev 1221 - in pypy/branch/builtinrefactor/pypy: interpreter module objspace Message-ID: <20030728112254.376825B01F@thoth.codespeak.net> Author: hpk Date: Mon Jul 28 13:22:53 2003 New Revision: 1221 Removed: pypy/branch/builtinrefactor/pypy/interpreter/pycode.py Modified: pypy/branch/builtinrefactor/pypy/interpreter/baseobjspace.py pypy/branch/builtinrefactor/pypy/interpreter/gateway.py pypy/branch/builtinrefactor/pypy/interpreter/opcode.py pypy/branch/builtinrefactor/pypy/interpreter/pyframe.py pypy/branch/builtinrefactor/pypy/interpreter/unittest_w.py pypy/branch/builtinrefactor/pypy/module/builtin.py pypy/branch/builtinrefactor/pypy/module/sysmodule.py pypy/branch/builtinrefactor/pypy/objspace/trivial.py Log: - eliminated unused 'pycode.py' (forgot it last time) - got rid of two-phase initialization by dissallowing app-level class definitions in '__builtin__' initialization. We don't want to invoke the interpreter for *making* the __builtin__ module as the interpreter needs it to function. - cleaned up uses of app2interp in some places. app-level methods now don't take a 'self' argument because it doesn't make sense to have them at app-space. app2interp and InterpretedFunction don't care about bound/unbound methods. These are/should be an implementation detail of the objspaces. - the branch still only runs on trivial objspace. Modified: pypy/branch/builtinrefactor/pypy/interpreter/baseobjspace.py ============================================================================== --- pypy/branch/builtinrefactor/pypy/interpreter/baseobjspace.py (original) +++ pypy/branch/builtinrefactor/pypy/interpreter/baseobjspace.py Mon Jul 28 13:22:53 2003 @@ -41,7 +41,6 @@ #print "setitem: space instance %-20s into builtins" % name self.setitem(self.w_builtins, self.wrap(name), value) - self.builtin._wrap_postponed() self.sys._setmodule(self.builtin) def make_sys(self): Modified: pypy/branch/builtinrefactor/pypy/interpreter/gateway.py ============================================================================== --- pypy/branch/builtinrefactor/pypy/interpreter/gateway.py (original) +++ pypy/branch/builtinrefactor/pypy/interpreter/gateway.py Mon Jul 28 13:22:53 2003 @@ -6,31 +6,6 @@ import inspect CO_VARARGS, CO_VARKEYWORDS = 0x4, 0x8 -class app2interp(object): - """ this class exposes an app-level defined function at interpreter-level - Assumption: the interp-level function will be called ala - - a.function(arg1, arg2, argn) - - with 'a' having an attribute 'space' which the app-level - code should run in. (might change in during the branch) - """ - def __init__(self, func): - #print "making app2interp for", func - self.func = func - self._codecache = {} - - def __get__(self, instance, cls=None): - space = instance.space - try: - return self._codecache[(space, instance, self)] - except KeyError: - c = InterpretedFunction(space, self.func) - c.im_self = instance - assert c.simple, "function should be simple but isn't" - self._codecache[(space, instance, self)] = c - return c - class ScopedCode(object): """ a code object within a certain global and closure scope. (the local scope is given when you call 'eval_frame') @@ -58,34 +33,30 @@ frame = self.create_frame(*args, **kwargs) return self.space.getexecutioncontext().eval_frame(frame) -class InterpretedFunction(ScopedCode): - """ a function which executes at app-level (by interpreting bytecode - and dispatching operations on an objectspace). +class app2interp(object): + """ this class exposes an app-level method at interpreter-level. + + Note that the wrapped method must *NOT* use a 'self' argument. + Assumption: the instance on which this method is bound to has a + 'space' attribute. """ + def __init__(self, appfunc): + self.appfunc = appfunc - def __init__(self, space, cpyobj, w_globals=None, closure_w=()): - """ initialization similar to base class but it also wraps - some function-specific stuff (like defaults). - """ - if hasattr(cpyobj, 'func_code'): - self.w_defs = space.wrap(cpyobj.func_defaults or ()) - cpycode = cpyobj.func_code - else: - self.w_defs = space.newtuple([]) - cpycode = cpyobj - assert type(self.w_defs) is tuple, "type of desfs is %s" % type(self.w_defs) + def __get__(self, instance, cls=None): + return InterpretedFunction(instance.space, self.appfunc) + +class InterpretedFunctionFromCode(ScopedCode): + def __init__(self, space, cpycode, w_defs, w_globals=None, closure_w=()): ScopedCode.__init__(self, space, cpycode, w_globals, closure_w) + self.w_defs = w_defs self.simple = cpycode.co_flags & (CO_VARARGS|CO_VARKEYWORDS)==0 + self.func_code = cpycode def parse_args(self, frame, w_args, w_kwargs): """ parse args and kwargs and set fast scope of frame. """ space = self.space - if hasattr(self, 'im_self'): - args_w = space.unpacktuple(w_args) - args_w = [space.wrap(self.im_self)] + args_w - w_args = space.newtuple(args_w) - loc_w = None if self.simple and (w_kwargs is None or not space.is_true(w_kwargs)): try: @@ -94,27 +65,22 @@ pass if loc_w is None: #print "complicated case of arguments for", self.cpycode.co_name, "simple=", self.simple - assert type(self.w_defs) is tuple w_loc = self.parse_args_complex(self.w_code, w_args, w_kwargs, self.w_defs) loc_w = space.unpacktuple(w_loc) loc_w.extend([_NULL] * (self.cpycode.co_nlocals - len(loc_w))) # make nested cells - for name in self.cpycode.co_cellvars: - i = list(self.cpycode.co_varnames).index(name) - w_value = loc_w[i] - loc_w[i] = _NULL - frame.closure_w += (Cell(w_value),) + if self.cpycode.co_cellvars: + varnames = list(self.cpycode.co_varnames) + for name in self.cpycode.co_cellvars: + i = varnames.index(name) + w_value = loc_w[i] + loc_w[i] = _NULL + frame.closure_w += (Cell(w_value),) assert len(loc_w) == self.cpycode.co_nlocals, "local arguments not prepared correctly" frame.setfastscope(loc_w) - def __get__(self, instance, cls=None): - func = object.__new__(self.__class__) - func.__dict__.update(self.__dict__) - func.im_self = instance - return func - def create_frame(self, w_args, w_kwargs): """ parse arguments and execute frame """ from pyframe import PyFrame @@ -123,7 +89,7 @@ self.parse_args(frame, w_args, w_kwargs) return frame - def parse_args_complex_w(self, cpycode, args, kwargs, defs): + def app_parse_args_complex(cpycode, args, kwargs, defs): """ return list of initial local values parsed from 'args', 'kwargs' and defaults. """ @@ -166,6 +132,7 @@ elif len_args > co_argcount: raise TypeError, "Too many arguments" + # we only do the next loop for determining multiple kw-values i = 0 while i < len_args and i < co_argcount: name = cpycode.co_varnames[i] @@ -173,22 +140,17 @@ raise TypeError, "got multiple values for argument %r" % name i+=1 - - # XXX probably need an extra pass over kwargs to determine if a - # keyword-arg sets a second time if cpycode.co_flags & CO_VARKEYWORDS: positional_args.append(kwargs) elif kwargs: raise TypeError, "got unexpected keyword argument(s) %s" % repr(kwargs.keys()[0]) return positional_args - parse_args_complex = app2interp(parse_args_complex_w) + parse_args_complex = app2interp(app_parse_args_complex) def __call__(self, *args_w, **kwargs_w): - """ call with native parameter passing convention """ - #print "native call on", self.cpycode.co_name - #print "len args_w", len(args_w) - #print "kwargs_w", kwargs_w + """ execute function and take arguments with + native interp-level parameter passing convention """ w_args = self.space.newtuple(args_w) w = self.space.wrap w_kwargs = self.space.newdict([]) @@ -196,6 +158,41 @@ self.space.setitem(w_kwargs, w(name), w_value) return self.eval_frame(w_args, w_kwargs) +class InterpretedFunction(InterpretedFunctionFromCode): + """ a function which executes at app-level (by interpreting bytecode + and dispatching operations on an objectspace). + """ + + def __init__(self, space, cpyfunc, w_globals=None, closure_w=()): + """ initialization similar to base class but it also wraps + some function-specific stuff (like defaults). + """ + assert not hasattr(cpyfunc, 'im_self') + InterpretedFunctionFromCode.__init__(self, space, + cpyfunc.func_code, + space.wrap(cpyfunc.func_defaults or ()), + w_globals, closure_w) + +class InterpretedMethod(InterpretedFunction): + """ an InterpretedFunction with 'self' spice. + + XXX hpk: i think we want to eliminate all uses for this class + as bound/unbound methods should be done in objspace?! + + """ + + def __init__(self, *args): + InterpretedFunction.__init__(self, *args) + + def parse_args(self, frame, w_args, w_kwargs): + """ fills in "self" arg and dispatch to InterpreterFunction. + """ + space = self.space + args_w = space.unpacktuple(w_args) + args_w = [space.wrap(self)] + args_w + w_args = space.newtuple(args_w) + return InterpretedFunction.parse_args(self, frame, w_args, w_kwargs) + class AppVisibleModule: """ app-level visible Module defined at interpreter-level. @@ -205,20 +202,14 @@ with 'app_'. Both non-underscore methods and app-level methods will be available on app-level with their respective name. - On __wrap__(space) it returns an app-level (read: wrapped) module object. - - functions prefixed with 'app_' indicate app-level running functions. - Note that these functions don't get a 'self' argument because we really - need only the function (there is no notion of beeing 'bound' or 'unbound' - for them). + Note that app-level functions don't get a 'self' argument because it doesn't + make sense and we really only need the function (there is no notion of beeing + 'bound' or 'unbound' for them). """ def __init__(self, space): self.space = space - if hasattr(self, '_wrap_postponed'): - self._postponed = [] - space = self.space modname = self.__class__.__name__ self.w___name__ = space.wrap(modname) @@ -239,22 +230,8 @@ elif name.startswith('app_'): obj = self.__class__.__dict__.get(name) name = name[4:] - - # just a simple function? - if hasattr(obj, 'func_code'): - w_res = space.wrap(InterpretedFunction(space, obj)) - - # or a class? (which eventually needs to be recompiled) - elif inspect.isclass(obj): - # this module chooses to do this later (usually - # for bootstrapping reasons) - if hasattr(self, '_postponed'): - self._postponed.append((name, obj)) - else: - w_res = wrap_applevel_class(space, name, obj) - else: - raise ValueError, "cannot wrap %s, %s" %(name, obj) - + w_res = wrap_applevel(space, name, obj) + # nope then we must expose interpreter-level to app-level else: w_res = wrap_interplevel(space, name, obj) setattr(self, 'w_'+name, w_res) @@ -262,13 +239,12 @@ space.setattr(_wrapped, w_name, w_res) def wrap_applevel(space, name, obj): - """ wrap an app-level object which was compiled/lives - at interpreter-level. - """ - #print "app registering ", name #, obj + """ wrap an app-level style object which was compiled at interp-level. """ if hasattr(obj, 'func_code'): return space.wrap(InterpretedFunction(space, obj)) elif inspect.isclass(obj): + # XXX currently (rev 1020) unused, but it may be useful + # to define builtin app-level classes at interp-level. return wrap_applevel_class(space, name, obj) else: raise ValueError, "cannot wrap %s, %s" % (name, obj) @@ -276,8 +252,9 @@ def wrap_applevel_class(space, name, obj): """ construct an app-level class by reproducing the source definition and running it through the interpreter. - It's a bit ugly but i don't know a better way (holger). + It's a bit ugly but i don't know a better way (holger). """ + assert 1!=1, "Oh you want to use this function?" l = ['class %s:' % name] indent = ' ' for key, value in vars(obj).items(): @@ -302,13 +279,11 @@ w_res = space.getitem(scopedcode.w_globals, w_name) return w_res + def wrap_interplevel(space, name, obj): - """ wrap an app-level object which was compiled/lives - at interpreter-level. - """ + """ make an interp-level object accessible on app-level. """ return space.wrap(obj) - ## Cells (used for nested scopes only) ## _NULL = object() # Marker object Modified: pypy/branch/builtinrefactor/pypy/interpreter/opcode.py ============================================================================== --- pypy/branch/builtinrefactor/pypy/interpreter/opcode.py (original) +++ pypy/branch/builtinrefactor/pypy/interpreter/opcode.py Mon Jul 28 13:22:53 2003 @@ -3,7 +3,7 @@ from pypy.interpreter.pyframe import _NULL import dis from pypy.interpreter import pyframe, baseobjspace -from pypy.interpreter.gateway import app2interp, ScopedCode +from pypy.interpreter.gateway import InterpretedFunction, ScopedCode # dynamically loaded application-space utilities @@ -323,35 +323,32 @@ unroller = f.space.unwrap(f.valuestack.pop()) if unroller is not None: raise unroller # re-raise the unroller, if any - -class app(object): - def __init__(self, space): - self.space = space - - def app_build_class(self, name, bases, namespace, globals): - if '__metaclass__' in namespace: - metaclass = namespace['__metaclass__'] - elif len(bases) > 0: - base = bases[0] - if hasattr(base, '__class__'): - metaclass = base.__class__ - else: - metaclass = type(base) - elif '__metaclass__' in globals: - metaclass = globals['__metaclass__'] - else: - metaclass = type - return metaclass(name, bases, namespace) - - build_class = app2interp(app_build_class) def BUILD_CLASS(f): w_methodsdict = f.valuestack.pop() w_bases = f.valuestack.pop() w_name = f.valuestack.pop() - w_newclass = app(f.space.gethelperspace()).build_class(w_name, w_bases, w_methodsdict, f.w_globals) + # XXX it would be best to have all opcodes on a class that has a 'space' attribute + # then the following initialization could be done at init-time. + build_class = InterpretedFunction(f.space.gethelperspace(), app_build_class) + w_newclass = build_class(w_name, w_bases, w_methodsdict, f.w_globals) f.valuestack.push(w_newclass) +def app_build_class(name, bases, namespace, globals): + if '__metaclass__' in namespace: + metaclass = namespace['__metaclass__'] + elif len(bases) > 0: + base = bases[0] + if hasattr(base, '__class__'): + metaclass = base.__class__ + else: + metaclass = type(base) + elif '__metaclass__' in globals: + metaclass = globals['__metaclass__'] + else: + metaclass = type + return metaclass(name, bases, namespace) + def STORE_NAME(f, varindex): varname = f.getname(varindex) w_varname = f.space.wrap(varname) Deleted: /pypy/branch/builtinrefactor/pypy/interpreter/pycode.py ============================================================================== --- /pypy/branch/builtinrefactor/pypy/interpreter/pycode.py Mon Jul 28 13:22:53 2003 +++ (empty file) @@ -1,293 +0,0 @@ -""" -PyCode class implementation. - -This class is similar to the built-in code objects. -It avoids wrapping existing code object, instead, -it plays its role without exposing real code objects. -SInce in C Python the only way to crate a code object -by somehow call into the builtin compile, we implement -the creation of our code object by defining out own compile, -wich ()at the moment) calls back into the real compile, -hijacks the code object and creates our code object from that. -compile is found in the builtin.py file. -""" - -# XXX todo: -# look at this if it makes sense -# think of a proper base class??? - -import baseobjspace, executioncontext - -CO_VARARGS = 0x0004 -CO_VARKEYWORDS = 0x0008 - -class app2interp(object): - """ this class exposes an app-level defined function at interpreter-level - - Assumption: the interp-level function will be called ala - - a.function(arg1, arg2, argn) - - with 'a' having an attribute 'space' which the app-level - code should run in. (might change in during the branch) - """ - - def __init__(self, func): - #print "making app2interp for", func - self.func = func - self._codecache = {} - - def __get__(self, instance, cls=None): - space = instance.space - try: - return self._codecache[(space, instance, self)] - except KeyError: - c = AppBuiltinCode(space, self.func, instance) - self._codecache[(space, instance, self)] = c - return c - -class PyBaseCode(object): - def __init__(self): - self.co_name = "" - self.co_flags = 0 - self.co_varnames = () - self.co_argcount = 0 - self.co_freevars = () - self.co_cellvars = () - - def build_arguments(self, space, w_arguments, w_kwargs, w_defaults, w_closure): - # We cannot systematically go to the application-level (_app.py) - # to do this dirty work, for bootstrapping reasons. So we check - # if we are in the most simple case and if so do not go to the - # application-level at all. - co = self - if (co.co_flags & (CO_VARARGS|CO_VARKEYWORDS) == 0 and - (w_kwargs is None or not space.is_true(w_kwargs)) and - (w_closure is None or not space.is_true(w_closure))): - # looks like a simple case, see if we got exactly the correct - # number of arguments - try: - args = space.unpacktuple(w_arguments, self.co_argcount) - except ValueError: - pass # no - else: - # yes! fine! - argnames = [space.wrap(name) for name in co.co_varnames] - w_arguments = space.newdict(zip(argnames, args)) - return w_arguments - # non-trivial case. I won't do it myself. - if w_kwargs is None: w_kwargs = space.newdict([]) - if w_defaults is None: w_defaults = space.newtuple([]) - if w_closure is None: w_closure = space.newtuple([]) - w_bytecode = space.wrap(co) - - self.space = space - w_locals = self.decode_code_arguments(w_arguments, w_kwargs, - w_defaults, w_bytecode) - if space.is_true(w_closure): - l = zip(co.co_freevars, space.unpackiterable(w_closure)) - for key, w_cell in l: - space.setitem(w_locals, space.wrap(key), w_cell) - return w_locals - - def app_decode_code_arguments(self, args, kws, defs, codeobject): - """ - Assumptions: - args sequence of the normal actual parameters - kws dictionary of keyword actual parameters - defs sequence of defaults - codeobject our code object carrying argument info - """ - CO_VARARGS = 0x4 - CO_VARKEYWORDS = 0x8 - varargs = (codeobject.co_flags & CO_VARARGS) and 1 - varkeywords = (codeobject.co_flags & CO_VARKEYWORDS) and 1 - varargs_tuple = () - - argdict = {} - parameter_names = codeobject.co_varnames[:codeobject.co_argcount] - - # Normal arguments - for i in range(0, len(args), 1): # see comment above for ", 1" - if 0 <= i < len(parameter_names): # try - argdict[parameter_names[i]] = args[i] - else: # except IndexError: - # If varargs, put in tuple, else throw error - if varargs: - varargs_tuple = args[i:] - else: - raise TypeError, 'Too many parameters to callable object' - break - - # Put all suitable keywords into arglist - if kws: - if varkeywords: - # Allow all keywords - newkw = {} - for key in kws.keys(): - for name in parameter_names: - if name == key: - if key in argdict: - raise TypeError, 'Setting parameter %s twice.' % name - else: - argdict[key] = kws[key] - break # name found in parameter names - else: - newkw[key] = kws[key] - - else: - # Only allow formal parameter keywords - count = len(kws) - for name in parameter_names: - if name in kws: - count -= 1 - if name in argdict: - raise TypeError, 'Setting parameter %s twice.' % name - else: - argdict[name] = kws[name] - if count: - # XXX This should be improved to show the parameters that - # shouldn't be here. - raise TypeError('Setting keyword parameter that does ' - 'not exist in formal parameter list.') - else: - newkw = {} - - # Fill in with defaults, starting at argcount - defcount - if defs: - argcount = codeobject.co_argcount - defcount = len(defs) - for i in range(argcount - defcount, argcount, 1): # ", 1" comment above - if parameter_names[i] in argdict: - continue - argdict[parameter_names[i]] = defs[i - (argcount - defcount)] - - if len(argdict) < codeobject.co_argcount: - raise TypeError, 'Too few parameters to callable object' - - namepos = codeobject.co_argcount - if varargs: - name = codeobject.co_varnames[namepos] - argdict[name] = varargs_tuple - namepos += 1 - if varkeywords: - name = codeobject.co_varnames[namepos] - argdict[name] = newkw - - return argdict - - decode_code_arguments = app2interp(app_decode_code_arguments) - - -class PyByteCode(PyBaseCode): - """Represents a code object for Python functions. - - Public fields: - to be done - """ - - def __init__(self): - """ initialize all attributes to just something. """ - PyBaseCode.__init__(self) - self.co_filename = "" - self.co_code = None - self.co_consts = () - self.co_names = () - self.co_nlocals = 0 - self.co_stacksize = 0 - # The rest doesn't count for hash/cmp - self.co_firstlineno = 0 #first source line number - self.co_lnotab = "" # string (encoding addr<->lineno mapping) - - ### codeobject initialization ### - - def _from_code(self, code): - """ Initialize the code object from a real one. - This is just a hack, until we have our own compile. - At the moment, we just fake this. - This method is called by our compile builtin function. - """ - import types - assert type(code) is types.CodeType - # simply try to suck in all attributes we know of - for name in self.__dict__.keys(): - value = getattr(code, name) - setattr(self, name, value) - newconsts = () - for const in code.co_consts: - if isinstance(const, types.CodeType): - newc = PyByteCode() - newc._from_code(const) - newconsts = newconsts + (newc,) - else: - newconsts = newconsts + (const,) - self.co_consts = newconsts - - def eval_code(self, space, w_globals, w_locals): - from pypy.interpreter import pyframe - frame = pyframe.PyFrame(space, self, w_globals, w_locals) - ec = space.getexecutioncontext() - w_ret = ec.eval_frame(frame) - return w_ret - - def locals2cells(self, space, w_locals): - from pypy.interpreter import pyframe - localcells = [] - Cell = pyframe.Cell - for name in self.co_varnames: - w_name = space.wrap(name) - try: - w_value = space.getitem(w_locals, w_name) - except executioncontext.OperationError, e: - if not e.match(space, space.w_KeyError): - raise - else: - cell = Cell() - else: - cell = Cell(w_value) - localcells.append(cell) - nestedcells = [] - for name in self.co_cellvars: - cell = Cell() - nestedcells.append(cell) - for name in self.co_freevars: - w_name = space.wrap(name) - w_cell = space.getitem(w_locals, w_name) - cell = space.unwrap(w_cell) - nestedcells.append(cell) - return localcells, nestedcells - -class AppBuiltinCode: - """The code object implementing a app-level hook """ - - def __init__(self, space, func, instance=None): - assert func.func_code.co_flags & (CO_VARARGS|CO_VARKEYWORDS) == 0 - self.space = space - - #PyBaseCode.__init__(self) - co = func.func_code - - self.instance = instance - self.func = func - self.co_code = co.co_code - self.co_name = func.__name__ - self.co_consts = co.co_consts - self.co_flags = co.co_flags - self.co_varnames = tuple(co.co_varnames) - self.co_nlocals = co.co_nlocals - self.co_argcount = co.co_argcount - self.co_names = co.co_names - self.co_lnotab = co.co_lnotab - self.co_firstlineno = co.co_firstlineno - self.co_filename = co.co_filename - self.next_arg = self.co_argcount - - def __call__(self, *args_w): - from pypy.interpreter import pyframe - w_globals = self.space.newdict([]) - if self.instance: - args_w = (self.space.wrap(self.instance),) + args_w # effects untested - frame = pyframe.AppFrame(self.space, self, w_globals, args_w) - ec = self.space.getexecutioncontext() - w_ret = ec.eval_frame(frame) - return w_ret Modified: pypy/branch/builtinrefactor/pypy/interpreter/pyframe.py ============================================================================== --- pypy/branch/builtinrefactor/pypy/interpreter/pyframe.py (original) +++ pypy/branch/builtinrefactor/pypy/interpreter/pyframe.py Mon Jul 28 13:22:53 2003 @@ -229,7 +229,7 @@ frame.next_instr = self.handlerposition # jump to the handler raise StopUnrolling - def app_normalize_exception(self, etype, evalue): + def app_normalize_exception(etype, evalue): # mistakes here usually show up as infinite recursion, which is fun. if isinstance(evalue, etype): return etype, evalue Modified: pypy/branch/builtinrefactor/pypy/interpreter/unittest_w.py ============================================================================== --- pypy/branch/builtinrefactor/pypy/interpreter/unittest_w.py (original) +++ pypy/branch/builtinrefactor/pypy/interpreter/unittest_w.py Mon Jul 28 13:22:53 2003 @@ -2,11 +2,7 @@ import sys, os import unittest - -def wrap_func(space, func): - from pypy.interpreter.gateway import InterpretedFunction - func = InterpretedFunction(space, func) - return space.wrap(func) +from pypy.interpreter.gateway import InterpretedMethod, InterpretedFunction def make_testcase_class(space, tc_w): # XXX this is all a bit insane (but it works) @@ -19,7 +15,9 @@ for name in dir(AppTestCase): if ( name.startswith('assert') or name.startswith('fail') and name != 'failureException'): - w_func = wrap_func(space, getattr(tc_w, name).im_func) + func = InterpretedMethod(space, getattr(tc_w, name).im_func) + w_func = space.wrap(func) + #w_func = wrap_func(space, getattr(tc_w, name).im_func) space.setitem(d, w(name), w_func) w_tc = space.call_function(space.w_type, w('TestCase'), @@ -46,7 +44,8 @@ w_tc = make_testcase_class(space, self.testCase) setattr(space, w_tc_attr, w_tc) - w_f = wrap_func(space, self.testMethod.im_func) + w_f = space.wrap(InterpretedFunction(space, self.testMethod.im_func)) + # w_f = wrap_func(space, self.testMethod.im_func) space.call_function(w_f, w_tc) Modified: pypy/branch/builtinrefactor/pypy/module/builtin.py ============================================================================== --- pypy/branch/builtinrefactor/pypy/module/builtin.py (original) +++ pypy/branch/builtinrefactor/pypy/module/builtin.py Mon Jul 28 13:22:53 2003 @@ -1,6 +1,5 @@ from pypy.interpreter import executioncontext -from pypy.interpreter.gateway import \ - AppVisibleModule, ScopedCode, wrap_applevel_class +from pypy.interpreter.gateway import AppVisibleModule, ScopedCode ####################### #### __builtin__ #### @@ -13,19 +12,6 @@ def _actframe(self, index=-1): return self.space.getexecutioncontext().framestack.items[index] - def _wrap_postponed(self): - """ stuff that needs a mostly working interpreter goes here. - - The AppVisibleModule init will put all objects into '_postponed' - that need to be wrapped now. Currently this should only be - the 'xrange' class. - """ - for name, obj in self._postponed: - # for now this can only be a class - w_res = wrap_applevel_class(self.space, name, obj) - w_name = self.space.wrap(name) - self.space.setattr(self._wrapped, w_name, w_res) - def globals(self): return self._actframe().w_globals @@ -397,33 +383,30 @@ return False - class app_xrange: - def __init__(self, x, y=None, step=1): - """ returns an xrange object, see range for more docs""" - - if y is None: - self.start = 0 - self.stop = x - else: - self.start = x - self.stop = y - - if step == 0: - raise ValueError, 'xrange() step-argument (arg 3) must not be zero' - - self.step = step - - def __iter__(self): - def gen(self): - start,stop,step = self.start,self.stop,self.step - i = start - if step > 0: - while i < stop: - yield i - i+=step + def app_xrange(start, stop=None, step=1): + class xrange: + def __init__(self, start, stop=None, step=1): + if stop is None: + self.start = 0 + self.stop = start else: - while i > stop: - yield i - i+=step - - return gen(self) + self.start = start + self.stop = stop + if step == 0: + raise ValueError, 'xrange() step-argument (arg 3) must not be zero' + self.step = step + + def __iter__(self): + def gen(self): + start, stop, step = self.start, self.stop, self.step + i = start + if step > 0: + while i < stop: + yield i + i+=step + else: + while i > stop: + yield i + i+=step + return gen(self) + return xrange(start, stop, step) Modified: pypy/branch/builtinrefactor/pypy/module/sysmodule.py ============================================================================== --- pypy/branch/builtinrefactor/pypy/module/sysmodule.py (original) +++ pypy/branch/builtinrefactor/pypy/module/sysmodule.py Mon Jul 28 13:22:53 2003 @@ -5,9 +5,9 @@ import sys as cpy_sys class sys(AppVisibleModule): - """ A Minimal 'sys' module. + """ PyPy's 'sys' module. - Currently we only provide 'stdout' and 'displayhook' + Currently we only provide 'path', 'modules', 'stdout' and 'displayhook' """ def __init__(self, space): Modified: pypy/branch/builtinrefactor/pypy/objspace/trivial.py ============================================================================== --- pypy/branch/builtinrefactor/pypy/objspace/trivial.py (original) +++ pypy/branch/builtinrefactor/pypy/objspace/trivial.py Mon Jul 28 13:22:53 2003 @@ -34,41 +34,22 @@ def __iter__(self): return self -class _numeth(object): - def __init__(self, space, func, inst, cls): - self.space = space - self.func = func - self.inst = inst +from pypy.interpreter.gateway import InterpretedFunction, InterpretedFunctionFromCode + +class numeth(InterpretedFunction): + def __init__(self, ifunc, instance, cls): + self.ifunc = ifunc + self.instance = instance self.cls = cls - def _call_(self, *args, **kws): - if self.inst is None and self.cls is not type(None): + def __call__(self, *args, **kws): + if self.instance is None and self.cls is not type(None): pass else: - args = (self.inst,) + args - return self.func(*args, **kws) - - def __call__(self, *args, **kws): - try: - return self._call_(*args, **kws) - except OperationError, oe: - raise eval(oe.w_type.__name__) - except: - raise - -from pypy.interpreter.gateway import InterpretedFunction + args = (self.instance,) + args + return self.ifunc(*args, **kws) -class nufun(InterpretedFunction): - def __init__(self, space, code, globals, defs, closure): - InterpretedFunction.__init__(self, space, code, globals, closure) - self.w_defs = space.wrap(defs) - self.__name__ = code.co_name - self.func_code = code - - #self.func_code = self.code = code - #self.globals = globals - #self.defaultarguments = defs - #self.closure = closure +class nufun(InterpretedFunctionFromCode): def __call__(self, *args, **kwargs): if self.cpycode.co_flags & 0x0020: @@ -77,24 +58,8 @@ else: return self.eval_frame(args, kwargs) - #def __get__(self, ob, cls=None): - # return numeth(self.space, self, ob, cls) - - #def do_call(self, *args, **kwds): - # locals = self.code.build_arguments(self.space, args, kwds, - # w_defaults = self.defaultarguments, - # w_closure = self.closure) - # if self.code.co_flags & 0x0020: - # from pypy.interpreter import pyframe - # frame = pyframe.PyFrame() - # frame.initialize(self.space, self.code, - # self.globals, locals) - # return nugen(self.space, frame) - # else: - # return self.code.eval_code(self.space, self.globals, locals) - - #def __call__(self, *args, **kwds): - # return self.do_call(*args, **kwds) + def __get__(self, ob, cls=None): + return numeth(self, ob, cls) class TrivialObjSpace(ObjSpace): @@ -354,7 +319,7 @@ #assert hasattr(code, 'co_name') #assert hasattr(code, 'build_arguments') #assert hasattr(code, 'eval_code') - return nufun(self, code, globals, defs, closure) + return nufun(self, code, defs, globals, closure) def newstring(self, asciilist): try: