From 034da510769db1e3f197a0e4b07d1c8bcd7331f3 Mon Sep 17 00:00:00 2001
From: Berk Onat <b.onat@warwick.ac.uk>
Date: Wed, 4 Oct 2017 17:53:33 +0100
Subject: [PATCH] Changed C API Numpy library to directly access molfile
 structure data

---
 pymolfile/molfile/1                           |  174 +
 pymolfile/molfile/_libpymolfile.so            |  Bin 757984 -> 771368 bytes
 .../Contents/Resources/DWARF/_libpymolfile.so |  Bin 77982 -> 184310 bytes
 pymolfile/molfile/_numpy_swig.so              |  Bin 0 -> 44744 bytes
 pymolfile/molfile/compile-numind.sh           |    2 +
 pymolfile/molfile/compile-signedintbuf.sh     |    2 +
 pymolfile/molfile/compile.sh                  |    2 +-
 pymolfile/molfile/libpymolfile-backup2.i      |  576 ++
 pymolfile/molfile/libpymolfile-new.i          |  578 ++
 pymolfile/molfile/libpymolfile.i              |    9 +
 pymolfile/molfile/libpymolfile.py             |   98 +-
 pymolfile/molfile/libpymolfile_wrap.cxx       | 1374 +----
 .../molfile/numind-cython/compile-numind.sh   |    2 +
 pymolfile/molfile/numind-cython/numind.cpp    | 5454 +++++++++++++++++
 pymolfile/molfile/numind-cython/numind.h      |   12 +
 pymolfile/molfile/numind-cython/numind.html   | 1243 ++++
 pymolfile/molfile/numind-cython/numind.pyx    |  192 +
 pymolfile/molfile/numind-cython/numind.so     |  Bin 0 -> 78632 bytes
 .../molfile/numind-cython/test_numpy_swig.py  |   42 +
 pymolfile/molfile/numpy_swig.h                |   12 +
 pymolfile/molfile/numpy_swig.i                |  178 +
 pymolfile/molfile/numpy_swig.py               |  150 +
 pymolfile/molfile/numpy_swig_wrap.cxx         | 4477 ++++++++++++++
 pymolfile/molfile/pymolfile-backup.c          |  329 +
 pymolfile/molfile/pymolfile-backup2.c         |  565 ++
 pymolfile/molfile/pymolfile-backup2.h         |  354 ++
 pymolfile/molfile/pymolfile-new.c             | 1522 +++++
 pymolfile/molfile/pymolfile-new.h             |  356 ++
 pymolfile/molfile/pymolfile.c                 | 1402 ++++-
 pymolfile/molfile/pymolfile.h                 |   15 +-
 .../signedintbuf-cython/compile-numind.sh     |    2 +
 .../molfile/signedintbuf-cython/numind.cpp    |    1 +
 .../molfile/signedintbuf-cython/numind.h      |   12 +
 .../molfile/signedintbuf-cython/numind.html   | 1243 ++++
 .../molfile/signedintbuf-cython/numind.pyx    |  268 +
 .../molfile/signedintbuf-cython/numind.so     |  Bin 0 -> 78632 bytes
 .../signedintbuf-cython/test_numpy_swig.py    |   42 +
 pymolfile/molfile/test-backup.py              |  153 +
 pymolfile/molfile/test.py                     |   50 +-
 pymolfile/molfile/test_numpy_swig.py          |   46 +
 40 files changed, 19631 insertions(+), 1306 deletions(-)
 create mode 100644 pymolfile/molfile/1
 create mode 100755 pymolfile/molfile/_numpy_swig.so
 create mode 100644 pymolfile/molfile/compile-numind.sh
 create mode 100644 pymolfile/molfile/compile-signedintbuf.sh
 create mode 100644 pymolfile/molfile/libpymolfile-backup2.i
 create mode 100644 pymolfile/molfile/libpymolfile-new.i
 create mode 100644 pymolfile/molfile/numind-cython/compile-numind.sh
 create mode 100644 pymolfile/molfile/numind-cython/numind.cpp
 create mode 100644 pymolfile/molfile/numind-cython/numind.h
 create mode 100644 pymolfile/molfile/numind-cython/numind.html
 create mode 100644 pymolfile/molfile/numind-cython/numind.pyx
 create mode 100755 pymolfile/molfile/numind-cython/numind.so
 create mode 100644 pymolfile/molfile/numind-cython/test_numpy_swig.py
 create mode 100644 pymolfile/molfile/numpy_swig.h
 create mode 100644 pymolfile/molfile/numpy_swig.i
 create mode 100644 pymolfile/molfile/numpy_swig.py
 create mode 100644 pymolfile/molfile/numpy_swig_wrap.cxx
 create mode 100644 pymolfile/molfile/pymolfile-backup.c
 create mode 100644 pymolfile/molfile/pymolfile-backup2.c
 create mode 100644 pymolfile/molfile/pymolfile-backup2.h
 create mode 100644 pymolfile/molfile/pymolfile-new.c
 create mode 100644 pymolfile/molfile/pymolfile-new.h
 create mode 100644 pymolfile/molfile/signedintbuf-cython/compile-numind.sh
 create mode 100644 pymolfile/molfile/signedintbuf-cython/numind.cpp
 create mode 100644 pymolfile/molfile/signedintbuf-cython/numind.h
 create mode 100644 pymolfile/molfile/signedintbuf-cython/numind.html
 create mode 100644 pymolfile/molfile/signedintbuf-cython/numind.pyx
 create mode 100755 pymolfile/molfile/signedintbuf-cython/numind.so
 create mode 100644 pymolfile/molfile/signedintbuf-cython/test_numpy_swig.py
 create mode 100644 pymolfile/molfile/test-backup.py
 create mode 100644 pymolfile/molfile/test_numpy_swig.py

diff --git a/pymolfile/molfile/1 b/pymolfile/molfile/1
new file mode 100644
index 0000000..a20e02a
--- /dev/null
+++ b/pymolfile/molfile/1
@@ -0,0 +1,174 @@
+import numpy
+import ctypes
+import _libpymolfile
+
+class molatom_t(ctypes.Structure):
+    _fields_ = [
+        ('name', ctypes.c_char * 16),
+        ('type', ctypes.c_char * 16),
+        ('resname', ctypes.c_char * 8),
+        ('resid', ctypes.c_uint8),
+        ('segid', ctypes.c_char * 8),
+        ('chain', ctypes.c_char * 2),
+        ('altloc', ctypes.c_char * 2),
+        ('insertion', ctypes.c_char *2),
+        ('occupancy', ctypes.c_float),
+        ('bfactor', ctypes.c_float),
+        ('mass', ctypes.c_float),
+        ('charge', ctypes.c_float),
+        ('radius', ctypes.c_float),
+        ('atomicnumber', ctypes.c_uint8),
+        ('ctnumber', ctypes.c_uint8),
+    ]
+
+class molplugin_t(ctypes.Structure):
+    _fields_ = [
+        ('abiversion', ctypes.c_uint8),
+        ('type', ctypes.c_char_p),
+        ('name', ctypes.c_char_p),
+        ('prettyname', ctypes.c_char_p),
+        ('author', ctypes.c_char_p),
+        ('majorv', ctypes.c_uint8),
+        ('minorv', ctypes.c_uint8),
+        ('is_reentrant', ctypes.c_uint8), 
+        ('filename_extension', ctypes.c_char_p),
+        ('open_file_read', ctypes.CFUNCTYPE(ctypes.c_char_p, 
+            ctypes.c_char_p, ctypes.POINTER(ctypes.c_uint8))),
+        ('read_structure', ctypes.CFUNCTYPE(ctypes.c_void_p, 
+            ctypes.POINTER(ctypes.c_uint), ctypes.POINTER(molatom_t))),
+        ('read_bonds', ctypes.CFUNCTYPE(ctypes.c_void_p,
+            ctypes.POINTER(ctypes.c_uint), ctypes.POINTER(ctypes.c_uint), ctypes.POINTER(ctypes.c_uint),
+            ctypes.POINTER(ctypes.c_float), ctypes.POINTER(ctypes.c_uint), ctypes.POINTER(ctypes.c_uint),
+            ctypes.c_char_p)),
+        ('read_next_timestep', ctypes.c_int8),
+        ('close_file_read', ctypes.c_void_p),
+        ('open_file_write', ctypes.c_void_p),
+        ('write_structure', ctypes.c_int8),
+        ('write_timestep', ctypes.c_int8),
+        ('close_file_write', ctypes.c_void_p),
+        ('read_volumetric_metadata', ctypes.c_int8),
+        ('read_volumetric_data', ctypes.c_int8),
+        ('read_volumetric_data_ex', ctypes.c_int8),
+        ('read_rawgraphics', ctypes.c_int8),
+        ('read_molecule_metadata', ctypes.c_int8),
+        ('write_bonds', ctypes.c_int8),
+        ('write_volumetric_data', ctypes.c_int8),
+        ('write_volumetric_data_ex', ctypes.c_int8),
+        ('read_angles', ctypes.c_int8),
+        ('write_angles', ctypes.c_int8),
+        ('read_qm_metadata', ctypes.c_int8),
+        ('read_qm_rundata', ctypes.c_int8),
+        ('read_timestep', ctypes.c_int8),
+        ('read_timestep_metadata', ctypes.c_int8),
+        ('read_qm_timestep_metadata', ctypes.c_int8),
+        ('read_timestep2', ctypes.c_int8),
+        ('read_times', ctypes.c_ssize_t),
+        ('cons_fputs', ctypes.c_uint8)
+    ]
+
+class moltimestep_t(ctypes.Structure):
+    _fields_ = [
+        ('coords', ctypes.POINTER(ctypes.c_float)),
+        ('velocities', ctypes.POINTER(ctypes.c_float)),
+        ('A', ctypes.c_float),
+        ('B', ctypes.c_float),
+        ('C', ctypes.c_float),
+        ('alpha', ctypes.c_float),
+        ('beta', ctypes.c_float),
+        ('gamma', ctypes.c_float),
+        ('physical_time', ctypes.c_double),
+        ('total_energy', ctypes.c_double),
+        ('potential_energy', ctypes.c_double),
+        ('kinetic_energy', ctypes.c_double),
+        ('extended_energy', ctypes.c_double),
+        ('force_energy', ctypes.c_double),
+        ('total_pressure', ctypes.c_double)
+    ]
+
+class molhandle_t(ctypes.Structure):
+    _fields_ = [
+        ('plugin', ctypes.POINTER(molplugin_t)),
+        ('file_handle', ctypes.c_void_p),
+        ('natoms', ctypes.c_int)
+    ]
+
+class molnatoms(ctypes.Structure):
+    _fields_ = [
+        ('natoms', ctypes.c_int)
+    ]
+
+#callback_t = ctypes.CFUNCTYPE(None, ctypes.POINTER(molatom_t))
+
+def get_open_file_read(output):
+    ctypes.open_file_read.restype = ctypes.POINTER(molhandle_t)
+    ctypes.open_file_read.argtypes = [ctypes.POINTER(molplugin_t), ctypes.c_void_p, ctypes.c_uint8]
+    return ctypes.pythonapi.PyCapsule_GetPointer(output, "plugin")
+
+def get_capsule(capsule):
+    ctypes.pythonapi.PyCapsule_GetPointer.restype = ctypes.c_void_p
+    ctypes.pythonapi.PyCapsule_GetPointer.argtypes = [ctypes.py_object, ctypes.c_char_p]
+    return ctypes.pythonapi.PyCapsule_GetPointer(capsule, b"plugin")
+
+def get_plugincapsule(capsule):
+    data = ctypes.POINTER(molhandle_t)
+    ctypes.pythonapi.PyCapsule_GetPointer.restype = ctypes.POINTER(molhandle_t)
+    ctypes.pythonapi.PyCapsule_GetPointer.argtypes = [ctypes.py_object, ctypes.c_char_p]
+    data = ctypes.pythonapi.PyCapsule_GetPointer(capsule, b"plugin")
+    return data
+
+def get_plugindata(capsule):
+    data = ctypes.POINTER(molhandle_t)
+    ctypes.pythonapi.PyCapsule_GetPointer.restype = ctypes.POINTER(molhandle_t)
+    ctypes.pythonapi.PyCapsule_GetPointer.argtypes = [ctypes.py_object, ctypes.c_char_p]
+    data = ctypes.pythonapi.PyCapsule_GetPointer(capsule, b"plugin")
+    return data
+
+mylib = _libpymolfile
+mylist  = mylib.molfile_plugin_list(200)
+numlist = mylib.molfile_init()
+print(numlist)
+for i in range(numlist):
+    testplugin = mylib.molfile_plugin_info(mylist, i)
+    print(i, testplugin)
+
+plugin = mylib.get_plugin(mylist, 81)
+print(plugin)
+natoms=0
+numatoms=molnatoms(natoms)
+fname="../../test/md.gro"
+ftype="gro"
+
+pluginhandle = mylib.open_file_read(plugin, fname, ftype, natoms)
+print("This passed")
+print(pluginhandle)
+print("This passed too")
+print(pluginhandle.natoms)
+print("Here")
+
+x = numpy.array([
+    ('C1','C','ACE',0,'','','','',1.0,1.0,12.011,6,1.0,6), 
+    ('C2','C','ACE',0,'','','','',1.0,1.0,12.011,6,1.0,6)
+    ],
+    dtype=[
+        ('name', 'S16'), ('type', 'S16'), ('resname', 'S8'),
+        ('resid', 'i4'), ('segid', 'S8'), ('chain', 'S2'),
+        ('altloc', 'S2'), ('insertion', 'S2'), ('occupancy', 'f8'),
+        ('bfactor', 'f8'), ('mass', 'f8'), ('charge', 'f8'),
+        ('radius', 'f8'), ('atomicnumber', 'i4')
+        ]
+    )
+print(x)
+print(x.__array_interface__)
+print(x.__array_interface__["descr"])
+print(x.__array_struct__)
+#y = mylib.read_fill_structure(pluginhandle, x)
+y = mylib.print_array_struct(x)
+print('Test')
+print(y)
+#outarray = mylib.get_structure(pluginhandle)
+#print(outarray)
+#print(type(outarray))
+#for i in outarray:
+#    print(i)
+
+
diff --git a/pymolfile/molfile/_libpymolfile.so b/pymolfile/molfile/_libpymolfile.so
index afa3e0a62a50fd7b2efa0c76eae1d2fedf08d253..26d6964a955d12f5da6de48551627239aeb0e3f0 100755
GIT binary patch
delta 271264
zcmaE`P;W(-{)7%82T=wv&`M<o(+;8&XW0p5RY7<QSiyn}SydBX*$MG9Ktw$_A)-7D
zldTx-L_<0u!U2vDVGy5bvLn0n<R6R*LK{v&WS3bpf~7Z{nykg7FnJZDoM-|Y#Gnh7
zU>ODwp9QSZgGoWuzyTtAh94pe;zNuTU}c#+hbf2g!DLQmX~qweRhhK~9|S^F3qTYz
zJeZuwEX=4gxs+L3@B>s1>U@R|lQ%L8GwCr-p2sMo?BW;#bvH<7K_tYO9WEdq0|ST;
zagqXyf~dhfi0lU`h%AT?ku6|RU{csQc@m2sQ-=EFM=btA0!$D!2OwHBSeYg}vj#?9
zU}RvpaFCPX0S^PihI5<@0W1s*43{|>6l53}6y9?(tWalQ0O^!qU|`6Q<6@BFWMF96
z!NstGhmnDsfq@|aVk$#18v_{UFfuUQXJ=rro*uZKQ<{}y0~dqbWL`FDfqi%R6HgTz
zRZnVsH~kw^g8O6(why8w#JCt9urV-bGB7ZJLTZI97sG+=3-@rwGjHFphcf_$oNf@!
zxn*(!J9mBJR(1xD&e|Uy-L*enSfsKucr^cD@aS~?z~92dz`)?q?fSu^^Z1J$=^&XS
z0<nkr<sBG8JvyIyG`|t>=rz?q*8d{~qzaq<3LN^iOy6xma=;Fp23Vv|4&kV>3)#ZX
zunUyhJi1wTS#mOXbX#=$ZgJ^$eY1h#g(FD!an~Q9aP;VOUGTDo3F?Dn-!~rJEGH)O
za4JfdA{h}4GXkXjS@L8L&MWn&l0gn~UE$H~`oN>R!s5kUkU)3s3Xe{A38<jJixUVz
z1&`#~D=*X$0vaC4wHIE9Ap{IOl55YrU_}U6cqG^EdGRHQoxuZQu!Bc(?THtUlh_&D
zpdua~$+bsbTtX-b@JOyb@ZumsAi^WLcE^hi2!RBs>m*)iCr^IJC9H$wgaW9X!V5-(
zGb+G>$rTzeVv;5+aEnR0zzu8ffW-a-k7SD%x=EA$xy6`7lP0Hgn^-OE-~=U^4<4PR
zFFZO!A9VWO0VNTuBzA`89}N7xyda&>Xn2{$z`$U5p!1kVFK=eY<g46e^&49_89aJT
zwdR8;(O@veJEx74;l*@D1_qB_TZI-*hJ9a|85my3B!Z*jgGYDmhZmxW><otAI=_2#
zy1ww}bbat*1q(>I>BD)TWKjF!#SC@^h8M+&><lmXI2j;L(O_U;c+r%=4zf^jBPg_4
z>o1vt)LXo$013mK$-&6LVEEso8*KEA7j`^gqs72lYHxUS9(u8xn}K0JB;|n>U3ei0
zQS@sA$lTfsAVt$aia>cBYSM`pU%0_0J%T7Y;n7)t=tUt&6*DN5Aod-2aUP=TBt+E#
zkWoG$MW7M{YSfMwt00OtKoso&DN+Y10u|&?MH^nULKMx0DB1v0!~{~r2D470({;s*
z1c<6mh^iGJRd**p;8m}`08-Wo@^R?}kIv8&9-Y1iJdV5W0B5Og*Bc()zB@b)K4kS^
zJmJx7!NA}00g}Z~B)T0WJUU%Bcr@2;VBl{BIq&5Tkg{IZRXado<-5V7(-$0vU}tyx
zKJe&t{o&E+`=K6G40&{yet0n(luF@-w3LAKA9q~<b;kye<^x<Fovt&EyRLx>UGPZu
zUE`5`(!hi91lVO=Ag^@0B8z);S8#ZAm(K7&7k1$A=-eCe|9|~|kIv&Bom&I`|NsBu
zH#jqZg#UYVgM~oh^c|YaTS3J*x<Q~qN0@<u;U&mX-L7kz4={GRu6Y^v|NnoF=Gp}e
z{4L8tX}sHYL9+!5f2#<@i3>cs9TYq|TRr~Q|Ns9IRCpU6=sf7r+3WHD|9`Mi9^I`V
zwnwMy1drz02@L!#(NJ?dx*aq;x_wW0XrAym_=DM_)3w8++x37)w{Hii#PjHMZSd%J
z-Qdyfd&8qUbce^mN30%<7d^T?B|thlTPr|L>jo*Zc)^`i4=TS82zWFfVDji}Eda|w
zlrTeh;9x)gLJXWSTQfikn)iYz2L6^KVBbIlJ6jV#a@~6&6l%ihE|Bo(o(i)0#YT`p
zy{6N)u`@XC;9{s}U~uU?<k8&=lJsEi1?%pFP*AfvTOB}=Qwh@84UuU+$mM~msJnE6
zN4IZ-N4KCycQ4o*ovjuiZCzHN8le~DVvp|78y?-IJ3J0PWA$MC<k9IR;lbS5YB0G^
zK&pO+NAm$jk51PeFTel!|KFqW2q<I39!^Ws<Ckv%MJ}uk3;<W2&9-;iI2joDTg^aW
z(962N4OF=CR<wgC(TR<q0#o!5NU)RlFqmRp)5ghg-1QEqM0p8nMjdy(12Pws0bV#5
zSTles;TImwwJ#X>TLr<U+Gc?Y$yRFyhL>R=0Z8HTz@wKnux+xhpq`*2$mDL{7arZ7
z0v?^bN^O&S1U2eEv~n`=H$MiYmtNM}t(*)V$6Z0bVeqhIy#tbK0W}#sdQJC(<hpH7
zfGO6KV9NIcI2CmZybv@6JL!T)bL|BN{uV2+3s@H;t7@)LVBl|&hRAe6W$GaYI4F2@
z`(E(qbX0f=${-%yteH>+VEInh3m)C9ai~HEz$qD=nHeF@mjx*}?s@_oQkJZ8VCO4>
zEbKL91j%*Va)BvO4q));7I+b@Y65om36JL56Ab(<Ng&0b?BC7%5>yd&hko#|X1O@|
zx{x-b-ehLs23=kWn0P14MR5BEk`z9?<oWmizehLgk7iH>;`_nlILnF28-$HjKX_#O
zK7f}y_8_N%noXc`t(V8s<KRP<ZV`^j93sXkA3U;4K`K9abQdXjbccTM$##8U;KO*x
zqdQ2$qg&{OgCy9sFJ5{=+zB_@qq{-@>=>w39^C~3sC-a4An?N9dh&b`RS_h81sopT
zp)Xz>37>pJq&UEJ6Fb9;N#W3X^|<Q`a8Neaeqi8lRRY=BYx-?DsE}q|t^@L>#S7nX
zc824wfBu8YqWMhV+DvQ{NJZ_37jwfW&lU~vItH#MS%siFE`%X;D1mfzv)<PR8Rq-K
z!_tw1za<W0(GrL@VW_s5VeAZ(?~2$=E))~xd=(0EBCGz4$^BxE^{=Oca~ITs+z@@?
zU^6XV+zmxorw<N%);-fX8U73G<YZuAv^>b);sCO*n^g^>!K0gX&U8?YtUd7`)P%jh
zft_I&NU2A6?TOBV8yH^XB24t?bUpBLvcEXHXBx=N2{YIj7<PhM>y`)k+dw@Dk8aj8
zS|HC^cyzNmLCoFpAFR%!*YpU;Y>;w~?%Ew-v-v|O&leZf<p7&DfsKKo)AdJl?GFb2
zR#0Qbqu2BdxKd_KhZwqn;l<gI$q&Wlg%3l-P2u9RLnaGL__14turqYJ-kE$M&Svrw
z2^l7<kj;lABpEqxE&(-rc(bY}Kaq@J5(wICCne6rv@~FHxQv`caR8{K2es!XKpXQ0
z9=)ummrVZaVZhYsKUv>Xmfhji|Nk#e^G;T9SDJj(ON_|_BKy-1Ec@Z*|Nk$n5wb@X
zgY{-YWEX&BSMz}NmU@aYIWL~v>*>R^*LU)5PfaEbp2=lCu1pITP2THcE-T~<X*fb!
z3Nt}*)mwT46d5mUc_s_`+Su=hw6x?FfzrhB7Y#fN3@<?iP`B%iPS-o#wRc|FdV|_;
zh9^PM1uiwZMXS0&aeVB>C6F7{CvWzZU^=>Z@>yRQC0QS23qi%l3kGjcM1YM-{qg_*
zWC1UQ$=ZGbOvw-(YrQdaYzT(y`1&2HW450F6Z7K9YyF~_{(DX4^jBiP*vZN8!bfUy
zl$!G7P=86md0gNO<PP;oJlEuUe+j0ooRbf#DNo+xFX?IyQJ@G_@Pm_q;Uy^fcDo+v
zbiLxyU3;Uu^va7u4+d~s80_H%9^I}BJi0}nfZOHAUbt|BgWV>8pNU}+*fH^*lUD{P
zu^V=9GQ3zL0e8$l4zOc<7eaz{KgVSGKnW&M4wz#Mr$ZDNKovxAFfhEdXJBAJbqwQ^
z|NlYVtru53CNB&0VEVCO@`u2!Oo{H3mj@}aYlAASbz+k*1i1=+X9HV!Z$8Ar9c+`;
zf|Z$yWhZ+Fy9(AoB$q=aZP_L-3|40PAv5_{u&W>=L^1^`d5CqgOo%j-DC=a)5LdxI
zR<N;}P)UE*$^9X+d<tM^f!iT34!BO<72?Kp#C>vUsJsZM0RijY?gepPOmv@Y8fwQB
z2$DBsl5?NDBGi~kW8UPup%zRZohOTj$ud>=O*RX&=V*T8;L*!Eb1qma5F!;336%=)
z=w;=c3r^{CoxmymN62J0FGn_zo`gAIJs%yx#;phf>0#|=WtHHZ>=kD?d3G%?vz!b2
z<khwEVkOf+Sy%M;ZBTvVdIQwE@^@sP{Ge8p=cqF~sL%M~MU)f!WX3wT$;-<{nF3fQ
z?<=pItR5}IG|^$Qb#!q3JW)`Q1ZqQkczFhtqq<p(k%V?aggTIfmO+GKk%T5ggsPB)
z8X!XDNJ6;~ArmB_s8EQQA(EIoM92(D$OIxJj3flgj2_*rJ46u9=Yy!aE5bQBDaLiO
zdx;Fw%RiG-OTIF{uw$PbTk6BK`1j=1rFw>&CxJrE^w=bJhFxjkY{YwE5<A0-)AsC;
z2DwLf?F*0Y(g)q4M_#BgGB8Z$Dl=j#V4Q4MmO0tHLXT&^4Jci@K6p`O!#=sNLXX+d
zhJEs)3iZjE>D&q#;F_gE;l*r-sv9rDz#^c&(y<p+Hj}5M2TopEW^H}W8f?l7NZYMN
z7SsiO!3nO`L4_K~1)!$*hZnc4K?V1fmsJoCnh0`EmM*sz1~nu>O#@H?=+SxXMV&SK
z<jitA355n*%Sv!H2rBwKdTn(oIT>E4+D=}dC{xc_2?{V!$CUM31t-IczaU3;v%ad}
zWbkM{q7Zx7qu2In1t&x2MNn6()A!4Z^I#RVKVB$Vvooae%eyeZnzRbdwt-b(i()}8
z>t)>nGNtpNN3ZBC2~LK66Brp7K;7`#4<4Q8Jvy&>bcafR0QJgW{IO+cIL<0m#mN9_
z)`EijMW@x|)FcI_@QTUpNqS7DEhleJdS%gS0ZPQ7H=3(J4MtD`GQ0$C%yd@>fFkIH
z*Ps9Y4KI0gf<|F#FL-p9t^n187L#u#?-nu#>8(8gZn}4eZg{c4eDboCEJmNnf~k5;
z7kef<rb_S>^nl{v*an6d+SZd(Q+t_qm`(nYs>tX*Su9OS{YE!P*7X9kYvp>uqu2Hf
zNUYoUhezizkIqvY7+x$ln;f5JEN%u?3XZrJ6(CM`?SmKjW|LQ@IWk9ab54GnCd<e)
znLFK>X_m=khji7+Pt%{NfVzf;2X;aNArutj4?HYC@w*=c)mE-|z=LR$-)AT?&G|T4
zC{s^1=Od_p2&#=yA_7!uZ0wvIo2kik#%OX!rl!<#Bd~KojqnEy{4L<#2FO8`#*<HH
zCMoV`fQ);zDuW}=G_w;FR;&UXpu}PEqRwctUzQe=$%n~RS+Pu4-%q}oB{P{dQG|sV
zRDsDRDzfvnvopM~Hk<64sAM#!5S#`;qku0YLFRR`b`^pQVr?$uWQaYShSC%2wRP#3
z{4+~~_ogANWx+4+GC42Ik9h+d=j8oi&P-A)lUc%>nU=Cl?hJQiYGR#yCR|rawH=&k
zx3#b{?D7NUl3v~ot?Udhb{lRMjxb|X?bZYP7}SZKaNI!!)LMPP4H5$lHMM|-nqEB7
zotzgb#WaO+b62DhBl89(&dK|ulmy##Ko0rAz~2HIfq0RiGx<}LDW8EyXDwtrDf`#|
z|C3we)cF?t0u{56d|aV3c~@M7$ueyez4ah2Y^cZ_6c*rqSqsQH;8ecq=l}nc-Qug6
z*6MFQ9Ph$7**rUfNmy(0#B2?w+ZvO1XS*rdgUskIy#Vg4Hy>p5IQWnOJlJpwG>-A&
zj?QGI980Mmjo{$8Qp?V;Ybh_NTI2oQ$j<QMrq<-roC8eTzfCsJwPEtqnOvG%Xyuv?
zjv+0OgL+wS1cE!81r4A8I}R#2)IbuQtm^5U498hT(_y)iRV;n7LSC8L1&?k9uxq+m
zPIxp|a4_(<*n)I`dq;4Y$$Ro7d61P(eweq_{RTwu0dVK78&uEi@Mx~x!NA|r4mP6p
z0VsdIc&G^~;<hx`Zeieu4VWNn-F!D+oRR5-#^!GY`b?8u>vEX2)z~L*sWW4~rOH0}
zZCwPj`x=hP9`)t*a}vOQ1x+V-^xBqHfyM$~e3A$Gm9;T}li`Ji0xZfv11K*TLEPi4
zNg!>o0U3{O*02O{fhZ7r7^&GCPz5rk_6Mk*Wd-T$H5CO3^@?r>d8X6#gU4jM26pCl
zdG^U34RQh!Ajxh}G75e1;-x(M<g$iV0gp<kA)tZu9dhiGxf^vkUwD8zfuNCR$Hrh5
zj<^5+Pkz;8!Rm3GH8*ba)yAcaj7^iPn~e=#$$&JwUU)GTWMMaGF!9)nlMulN9?i9&
z%$^OA`tZV3fqnA5W?5!M1@_7RnvIyfWY{Mgx2TH>#(;weT05}Ba5B6wl>^rf52Hc(
z7F;`=i{@l_!7B$Y7Y>1hVYS2FXyn@AzAQ*Z?T;5mGMKf4W-QnuXzkDgG6h^aSpDW;
zz*9T$$b)K!S23`3So`9|OlffKpdUTiz14%CAM7m9NZ|1o_odh;&udlSd{hE*2(SLf
z$;VqYm>0{kPyW>Eq)`PH-TL77|Nk$7Ku+!5`{6ez7lVa5Td#m5EM?gz$F#{RNrDyF
z8X@#_ww?hgU;s&Un?`?_JiASWSy+aB@}V|;Cgu;5Keu@@RTNLQYnQUGkp#s|>x<w2
z|G$Kks<!dPASbngEcXBnb#@zUV0aONQ0LJNR_@Ww8~=WCUxyZppfo$f<fCmmOw8{m
ze{T0=nqLGmnz=@TeR6b%jCkoYQ2QCG2TJi~yaQ=vmXczhyt~7hV`?F&Oq6Dy%+~40
z+#$_AIlQxnSx}mN^0Q8T)#f(_;30O{G|p^MkegjW#oUh<9T3io$rs{mbwI@@q@r~&
z@aS~C;n7@sgMq)r4Ut1YtxeEajO&HTj$$&CcZ!MBgR4m}0o5u2$|$)Yb3wx#oyT7!
zg4oSR3}O$%dXoYky{vJCAZLKH)dq$auAl(wwaqUCl?Y!pFuX7U33S)~0A;VvA0Ex%
z>JOs7@y!NMV((?mC}d}t98f1(-|fla(dm2Pxa$G17dl-}cpP^HDFTgVtpJO`M~7=K
zyl7)$V6b7}Z{YwL10TKy<=D~_FE~N-2A!_30*jG}f#JC89MJfNN4M(^k8TGJkM0JL
znI5VP3=9gO39)+qmJ(2Fuh;f=0VwiIUu<A_ks<+N*6#4=E`8DI+VbL@FsSUdJpfYC
z3F?u7RoQ`5^_p%3iCTgbHt@Gz0y(Q0JRW=q#02->P_1PFS<BzD7$RK{8X^|xJlN?w
zr@3|x1Ah;=l<l=m0-4(DItMf#0-DPKC&jbkpz#pUXe>i#Yt8@v|GQm}Si8>Q@AU;4
z)@y45(gd<H+4qP?x629eV10M#kqrzlCW(W+AYH)D&|P{2GCI70;YD@5I6FgUYYD_G
z@SygQm&-u|LZFZbCykeZ5W`>Ovoma9c;O|^&H!%zbe@NdBfppc37s?fphV$10n%p;
zo#4^wB(Z_vg%rr*ZV)&0M`vpe$mo@@MA=+Br=Eeo2WmkF#DZ61NEU#Gb6*%hEXaXa
z02&2f;L#o00kvS47$~wpT#yARAPYc4Y{y*>fLdwL5m+$0x%L19e+ww9ybu=x1&66@
zzAi{JYwdFm(1ha#h8Nr*321}Bqq8*vJl5^{!=v#CC{0dY?<-orfzhLzml>o3lr1fN
ze{{Hh=WnTCWMBZxOa#fmM3Z2m)ySegFi~G*Q8Sq6{%0Hv9xxLWV4{Xlwe?`@xM0H8
zP+_p>7Y3*!T9J*o2NV5|ED9QG1v~g6vgjt5+SkaUb6}#P&p7H4Zfk=H|9^_);sTiH
zOk^XXV4|x*qTQiCJgfsbz>WqDf`A>;i7o?b=744Dkz^qL2Q^*|4|E*t@cj->rCqMy
zRT%lV9e`K=4&de>Xd<(_^n*ut8HYz_=>w1Bt~Wpl8`Kr?Xs&Z$;BV0erEc(qu!93=
zHWHNQ|6f29q2RHr7q|J@8D2s<(tfTFJeqe*02#yI(ht^M`{KoF0dVREwcjr=@VA1R
zuO853^s*eR2sG#10MZ7v<pRW($<LZ>>LH~y#40P0RUp&B{_+4#&4K37x?MpfsYC2x
zjERZ_k6u>S98h}ZJ(3M_1*kLx;d%~_&e|8SIe|{_WZVr8SV;>jJde9>s0UdGZtlMN
z^Z!3m@d`>Kph1Zbpa6T33mPQ{70{3YcTg_#=ypAUwOr+Ikpug>_Jl`w>5UhDd?1H`
zW~*E`fcmK~K^4<+SJ1)=hL`Lh`=K1j90X|I;)O9tPp_#Z$WPs@GatjUs5(d-8n%#*
zBsgdiV0BdE8_*<(M=z@dNM|qa<t%mvpI+8gSs*9We&{TH1De~0bi{)=JUT;f)I-C<
z2Q*pH>3ae^)_B|%R8xRzA;{e1an~8pV7l?*=x>x@0u>FgV7l<a<M03f9=)~)!1lRr
z*ue1Oh9IZ~Te|^TYV)_e2iHs!pf%HmdK^Kx5<J9SyTPNo^u!B3UQiU<=0l7Hb(@<Y
z#;#z16zBXcx}ch@8`QPNTIKM8q<d|RKqf#`fh(Q~8|oQem<zHqfaV_|bpe0RVNmQP
z*G_m*2C^1BAG-(S{chJi)~*xyd%+!~<k~kcUh#lR(ApUu$-a9$I$h37bi3{W*CTsg
zUH})K5a)Yzht7Br#{+62Olhv2!oc4f1G1slc1<QbgX9K=7uy9u6%lwwuiJHoM<;l;
zvjfyrsqcUUkAs0ncWuXiNay|q6A!2^+yO4*!4p%xwn3TT8Y)ZxE(5J_Ko0llwY7xE
zn+brtx`Uw;JfX?o3aN>~&OGp9GB-Gsg)>2k#dX03h8OJhpsWq5(>q&1wF`es9?0dO
zY8I_Q0j=5n!P2!4UK{|K)m^&)vb+Rhfk$`ff)|e5NZ|l={K^cl<7e?BIUY1g`VusC
z3LWL@we5zeD&>cHA?E-8|NN~XAS-)qiy*S${NN}7W!eiK-Ju&G)z}L=Q1pY^WRN)_
zsJ*TbJ<7=ThJY$jXrSq2WPu&V%nynm(DeCBs7?up&R2X$F7^TGgv$R<2WvcqEDxIN
zhV&*ubqB1314TDz9H0Rd-IHIWh}6IM&k2eLQ&!OGqHfmI`>@Ra87yww3=)S-7;j*B
z;eb>kbhg@n+#mx9krap<<UtBR{kqQDACUQC4^VjupZtY2PQinqowXn8JwO#lXXpdu
zQUW}!++5|sz~9mgG5s4PK^+2Rk?z_X9^LgG9^Igc)zTLp-JuUWI%^Mr2GY8H4|KZj
z`G2v~^-6Q?6$buZ&`3LIWD26anHQ8AcD&#Pd(HG{CObpDN4IV9J&>R6H!!?l1W6zY
zybUjz7#SE|eg(M!R68{902fUBEuebdqt|u^#8_R3t6p@vu6eN-WJ0g)X-KL*v4P<Q
zKS&l-j(57Q;BQ5B&}W`{kc*bQsO11hf+<K_x9#J*Fb5Ta#1Rgf@v;c)7Eql7@%f9t
z93T^*-gN@W_S)8Fg4&)}HZZ)H3@Ha*$b!u2HEoBO-wZcjupT6Vu%P3m5Uj}vOEREg
z$sf>21jQPn@DBhb^Iq0U(2BQi-u>WE<n-tS4FJ|o@aQb<IPTg4>hB!~w|YUT{8(%8
z|NsAOJvxtXV0iHZlxgdGZJojTeLFmkgNhi2<E|~BH65L;GXMYo-@x$V5;rIZwup4L
zN`P`;3lkFq!wY|QP<Yw$r-BpydXP!Ywy~a^3=EyEB4A~QK#uFS_3{LD+e;_B_|FC^
zXCMnPn)ia%MlkTV%wVhstz`f;rBTaq4oKGlJUrdI71TEN=$#5GBs_Xq7rfwL*a=!_
z*m>Tk*L8u%ad7Dd@}9?W@Kgzy*}0eF|Ns9!;H5AOpyIjnm`8UjNX(;i>JM=Je(1$k
zu6lNc<E@~gg$opQ-L(@uy0?OrcY_tZ&|!njn)QMP;9knIFfbekH<dwlbc0#eVD0?9
z;5Jh-SjeN><>&&B&Q?$v;?WIWTLN2s(+v^q-1`CSgyZ!dom*f0`~UyN8!k{$1`+NC
z3xQVZyx@XZ-)aDIUa#r<WOfE{O#oV9!fSCGluj*Qd|`#Cf;e&`6Lj$oI0Zo*396^S
zPJ0O|m%tLBDGGPadIpc~h62#!Q#UwLJi1Fe{$J>Ho%7O_8EOnD|0aXu`7|e}WPI}P
z|Noc1OrU{1+g%WeO`u%YUEAT&ZQoq4z|h(H;2)^42DLz&_ky}y4E!ypVF}x#o7KS`
zlqwp2Ffq7;2I)FHx-CI%M92c6Zcv5D-~lP~Jet9?TMYayp!pc6!@<jEJYdBecvZ|~
zM={aK`%~EkKucs0wdh`p$rGbQ>S1e-Kr4zm89jP!UnH?Jbc3@6WR($Tr=!9Kh8HJ6
znYr~2$npEYS*7`hEkC&7%n#$+L05<L+OAGwXMkp?4Gb^(z*=vhY5fU`w(feckNEd_
zNHzbg;cs~g7KDrO@0$wBm6jJ#!|0DIER0Zs$N-d<;X$MU;x+FDQD{K~67uM5RRAeq
z>ju;CFaisLt8`FHW3K`%j38$Fc6flpXj39PLl-y{pkdVED7As%MJqcf5nTEA|Nn8<
zIiM2b<t>PRCP0E6G3)@%#C>3C*2y<OiPgfR8+&fAXW*ZDu;JtXZwDDYI`^Icg(J9^
z@KPS6z1P+Yv{<UwG$xUqVOKP0^rM#-#D2lb3Y!`0HRS-Q0h!-?K*6IMY=}qap$!Z#
z3Yfr!&jC=%6$6`RY6Mox`tLf}RWEV^nPBFC0{1v5e}jfpKy<h39FJ~Z)texdoF1SK
zo#n;O);(Y+f>wWbgV`R9M?eK~?BN$TS=br)<ryXmbSZO#D&J(^FQ75z$#z|~0!vvz
zE@9PL2Z~%)<#m(0yA<oU=z!+o|Gb!645EL$&~E|JUtWYy1JNH|1S|&8Z(d~V0?{vC
zNF4ytPhQMB0-_(h_;4OX-+7U93q;>|G4%_GzVagTFNnVIVml)vL#OMR7x`=;`os%Y
z84!Ks#bsL%eW3n@Kp2Rz=f#0|5WV9?K_Q6V^5S$eh~Dr*p$|l_d9hrXi2=0s@`o;n
zUh*Q>6htq0kzoy@=e)>o1<^BJsO$#OQ(lCA0nrm)-2VxpdtTUZGBb3#cD%SC38GtG
z$hv^&`i2(<e$3D=!;A1x5EE2EykLz1F+t_Wi&L2(CaBT;BBTby1dXq}D4hjjf~toX
ze2YO$P_y+#`z{a@R9n0_`w+wgmG3XKUx1jPVU8Dv<yaUxTS0BV7n~X_4E2zb`bCiu
zNEp<xd$BPX!~~U<FCM0Wm@c4|cmIk(Oz>>GeglXJYJk1?*bZWX%AFVb{UD|ZNbRG^
zASNhBz3`g{V(NfIudD|#L3#6q@&OQ2<^TWx^)HTG0I@;Y^2Ms>ASS5peX;r*hzY87
zUx;$BLTlC+{Nf;{0LZjyN+2c=h<Vfk!~|7uFYbqfm@FXCB33qr&Q?%;_F{rP8-wA=
z&hs9<rb}5t)$|`wt>YKYz+k8e5$*>IgQ~_Co9h^0iYvjQUqFg4_Dv4x6{(-I050hZ
zmV5(}blDCUH3y4=Yc;REa8X6DD5&yyapE9clp8DxsxDrzoP~>iWdXSmR1Uu=ybc$=
z4;GaLm9Z~+Kf;Aif`vf^(u*}eC-sTcPyPp&n+ujZ19G4mGb7AT?O;(*8S~<)I9#+4
zEP4c_HqQ_)3My+lTR|nqiwQw+QCF~9P!aGVECw#B4;Gc(0WxAsCR|t&EW8CI>e?`Q
zL!U_fyiT~}TV{|~*MKB%&Vq|x2aB!%iF#-;!Q6ciEV=|Fy50~jx*9CH03^E33@$nq
zEIJ1y8W{!`tp|(B&HxF^Zh{MEf`zAmM1Q}UoX{^)@BbApX$zL@0ZA@pWQMs#9W2@b
z65SvQ7Zn7Hwtz(Itl*-*nLvJQ0EvF_go{1}i`IZdF9g6v&x1u}D?q}V!{Nd^!NMgV
zQJa*>0uw~)&y>L>d%==9AW4HMaM5zGXa-1h!aTTWB3Lv9B>Hb7T+|yZng9}&xD6LI
z1&hXjL>V5#MdiVwvJoKRgy(Q!POxwYNHj!w@_`8=^~pLcu+X{-T5r(m1Co^Wfs29~
z+?}l+AW`llxadZ(S{IP0Xf|AQHdxdFB<frZ7i|TL+JHoVHNi#m!J@JjAYt7uxNsy`
z*aRecwQq94M3MTw8E{F^h)QRx4oK2_6<kyttVIJP+P(`e3R=n9*{T8(l|2m?ea!%h
zWd)F^(L=cCRj{ZGNVMhyTog3R-`OfB0TRB=$O;Q4(0F-gs|ZNcMv!%~;w0hvQW>~x
zE!Zf~3f31-jo_l`U{MZ`9${~|C}^a;vy}xT+8qTKwFawY0EwPtftQD%DU#0CKY#!K
ze__<g#?a0CXDKH`XX}r@|NnPR-aM&DtR#w^VFzd)2Gr^Xtxc}vcyaXaWb4T?OrA?8
zM^4s}>*iHm%E{o7EGh<~I$17uoANB>WN1Fd*lEhVbn@cKn)N#ZK$Y>I7yK0<`p1jO
z9U%J43xio8`ooK78$k4%7r(ZF=oc@tc7y0AFD@Jd(GOmDUj)&2UX;ED(KlW!`V6A4
zyqNw2L|=H}53cObykHdq)zv3n%+UtXM_zpJ0nrEQUo3!D@;oUZfgLYaSApm)FN9h^
z^oAGFQ$h5a7dKQumGz1jzB(X!$%`mM5WV0<U?7N|^Wy0m5Iy6?#it;8$_wKUAbP@!
z>3=|U&x;KLph~^tMUN?nZh0Z#3Zm;9Ui|U~)xb5Nis?lVhzYLbYvMsna3wEZ1Y&|K
z`L=!#6I{uEoC#urEBUOoASSqy@4p6Of-Cu^dmtvbl7IUM!~|FJZxEF{8&V~I+8tD>
zf-CtWu^=Y6lD~<l<b}#XqTovYN*#y^uH=Q<KumBYf3yq41XuE%Q$S2`C2zV6!~|FJ
zGq!=4;7Z=|IEV?V<kMb6-UYG2mHfIlASSqym-q)_f-CtJUQopi>OQ|XApv57D|u&q
z5EER<*SLe2;7a~~7>Eh3<UJVSmHeL8$$HZ?>py^+xZSMF&VX91poI-TJUVM1yy*MJ
z#_$3((h6F4(hFLu`(o}_HqgEz8#hqrllAQ>kOqqvlR=`;b=5D8nIOBLV2k@<qs864
zdFG%-Y$vEc3fl1X|Kcvt=v?PDQ}E6i&`bk(3K2Ao=pf($8gYgUC4wgFPJkxQx&stC
zL-&C9k?H=J{Ct{fJ!s0xqu2CsFxWk25ch0gcyZ(l8)$qQveFweocXevk%3_+Xxo9|
zfzCsQ2RwR9KOA>$0rf~gCW0qLx@}jRf!w(N1rq~<PdDpaGfoEIZU+IEZr>J<PVmMK
z$Or)_#kh2yi}itYmpwYCg8J@0orioN9d@7YUXZ|X7SL!g!*LfCP-(#6aoj}(v{Hk?
zryD#t(b)=0SC0QdtG+-RbXIsk#;ZNL!Q&pV{#QLH-9tJ{;Qkkg3mxqBXs(^Xz~2fD
zhWA0>V30itj+PA!FIIm>2?kIieF@nOP&?zrJZ8`WJ;)xH?%EkI)`9t;ZYJww@P4s|
z43J27ZRQM*Zr>RmoqIva88mFy*$Pg=AOk>)*r4K|@e+_YsAul_!lN66d6mFX0_z2N
zbhd($Ie#lC6g;}Y9FN8$p!64e_{Ej4lj_7n6FhotkNUDRybuC89yBToO<5k0(OKw%
z_%iUKP*(L5V86aN`-u&G#r`y3P-xVCcp>|lZSovZe=j$%0PCdV5G?^nTA)kz<H1sB
zOZHVD+9reLEM7={VnZz1&-%#5;L*vt-+1!+nNIb_;58yp2X^~_tY^J`3}RdCM}!0Q
z!DC&lKE~Kq>@S08@aSgMF$S&XhOXET_d#E=|MmmiM9{R%%bSx6X0dx1aWX(w;-jzF
z_ko*x$p~yNV#U4-$ZV7q`~4p#@1G^612zoXf_)!|=bj%0du{{63*Qfu8E4B2J43{`
z!o{UOOg5ffKiNn|)Gq;)#a`rpU}JdE_2>V8M4?jm9$cu%I)DT0+!3&uFG@h7(2>rU
z;h+%fwO!%|8c~1q?f?J(ljnO%cy3^LQ3pyTy{4XEi$UY8{2ri{W}W<y$wbh8C*KR5
zu3KIh-vUoQW&43T)UFRUFuZX7%*FuPZrAPl0klNP0J7+)wFk6%we20)O+DUVH@!Iw
zcGCui7gZo}@ET3m2b1ULM5)2&GQsNwdu@At!9!p1pV&b2UZ9cgADymCCi|(2*EhZa
zO<8+%vmOI`5mwON@aQbP@M6_FHij2Re<6p<&bMGUMA(7dzzK1~i}fJU<E{@tBMmQK
zLWb2qN%XiYXwfsM)B{bWf@sioR?u$d8;~7w^{x#b-Qa>1w8;p>1{JJ3Ji1*Qx;+#+
zeb;PYcrpDW8^ca;seH~Oxpoa?mgt4&2arQ-Pk_R>6FhI14@&pFrDr_4L90?hgZrU7
zd_a5dAcdqy=XFR~nDGDq|4#6Lr{n*6(3;aeAJFhOXpT<zBO60=Eoh1kRG30mA9(bd
zE`o%(=pk5$FMb0q!@&N9j*-6n0!a?9y+Fxf38V;jT?5*}?a|FDRlxxYTF`QplOTtK
zmX>w%do;U&Mv6em;sT`HeW7(1oFZ5u-U6+j=m4!t1g#1A0IDKEHN6LDWgy9=a<A=5
zZ*Vd&Lv{eve%|}KpgN`#vW*n9)VChAUFm{HCwS=6qw_jsrpBYQ7gU_S04=)m>2-bK
z(d+x6J9LRhH+a76LcK>PcpT3Iv@RJuUgrZDa`))$1vLaZr-Iu6pTTvz?*)%;i0R#1
zK`n}Iu%u6SD@dhBXD_JB@6&nEr@Ix@vheBd1r^hsEGj<TQz23zDjYuDQ$g;5R96!`
z1R)^<YJGWhgKH6ZeFYH%jnISZD-ah}U-jBHdx1lS8<f34<L8~V4?0^xgA1U=JRaS=
z9S1=%k5prTM!w-S28iR)cm$M@Vh_KtddtQD-<%IxbJAV=quZU)0lXT;F)Y}l@l66F
z1H%q*iazGi%_{>n9K08|_P}vh@YL<G*82bd|J!(U`yTM<gzTM!ZlMJ4D)ij|+ffPH
zLfYxO0?O@nROob_<B?oD=fyWrBJC~R1KJY;*?Z~$$`rLLK(m^l@$nhpiW<Dc#-rD?
z#{-<D|L+5N)nWs~i{6*uL=IV102vN{xu2bZVTT2%2Xg$l>lAPz@8%UL1to6Z2QTtL
z#Q<n7xVg52fxi{BW8j4^$dpdk6E9oX85rt!fR<Wx9)D5tl8ph>9cBQnTnEp6ytoNc
z*lYV8<P6BR)fcZILN7r=kk$!k714{!NSfio3Lf3yi4%|Rsi0=IM|Y5fM<>&ZW{451
zK}K}8)`PP3izyJX$sn=rsURV+v9&11LWM!bf|<z1I&r+vftV2qG6OpFW(yJW0||A5
z+g@N})sT#>hl_*E1+~Udoa-d;;_3@<vBn271hf<R|Nj@yAVQ2Fq3)^R0-)1L;>GzF
zh#-UugNy~MKyj|bi#muI^#|QSH4S*~;YB}0Yyn89dn%|M26k@+in&l>khx$cin$6e
z)FEaRfXsl*WxTL}2qlArx~D>#XHF6?6hX$;gZAWip7(%@gUkghK`~e3#f9hKU{D4b
z0&Uqngb49~gdn*d?A%k&k%IwL7<hC#fs6$+QH(WsQC|r$<T9wQ0BQHV=z<7s1qpRe
z1(h*ibBj^Tg$jer1v631wRoWfF~gV-lo7z?-V0-hP%*?<Q2FN3=~OTALI%ZLs5r=6
zFcZaGhZm=xfrG&qWC)}neQ^gOBm)xao(d`%!OlJU3^^E}!XRV8Oqj9tpiJT9@uCD`
z$P-s^Y5<kDFIpi&M?pf}Q$a#tbMsKlg$jer1v6phf{hJ$Aqz2M63C3sR&XCr4<eKY
z66&5>4-x~LD~@6=R2XC~n2BO;#EWB3!NK4JG6Xsld>tYr4ibXY2Vi3lJVg!$P&ENf
z4Pa(>JyO}=l<*=SV#p^Ka4>*JjT<0Bvq3_T=~J+|nPB128y>x&x^XK=sYj<9$h}}@
zH)MLZyG+8P(=Ef}cq^z%05yg@lEI5YZ+LXGG8Awy)I)oa9mg3!IicHkibuC=N2do1
zh&txL5eA}<JMaX7D@fOl;|>B0{NUN;4v$Xo#^Vl;&H&KqC$Ke@8Xz6r9s-RIK_)i-
z1d;qL;tUK7kP5^OF8}}U|Nr%!9s(Y{wgN8T>P`xjQ@d+By8S`gIT#q4e=>AJW)2}c
z5PEIjI)hbyc+SRP_zgM@+}R2qz5WGh?_2@(c{;%!-oWtU_;XMr1vHNB(QA7MqIokU
zC+u}*2hCDk_y?YmpARw-G-lr|8l(zpdQ5^eJxpD|yfOiwZm^j?-M$@;-JUEU+PB+N
z!lyg5!?!y~!KXX6!?!zH!=pR4!=<}e06O31(fQp6v~y@GXt2BUluzeL-_8rZoi|-N
zO;kLNyVOJayguC!dGMSUsO`{es{!_gYr_VH7px%nf@WE}4LzEVF?w_wdUW%yQvo@$
z^8#omW_N7^Xo|VB6*Nfx|01~409r5!o!ND5@aSv>%^ZLhpo3<}yE#0X5B~S)<nWm6
zBgO@q;jM>A!&@UDF03^I-B$k+WTHo}ZJ!f31~Q(pG3;Xo1$nov6xc2MAAs7~pwksP
z_ig}L11eX0L9EVJ&`|vUiypnU;Sk+gpj-%6>U*NIb;ZAW&>DTvT0q|AJ3!SvsAcoQ
z!}6j>XDet7p1&1xHUOC8(Rc*ZUWs;$i#_}z><JrWds^cg(DpNrURF(eQ04(I)H~+d
zFL2xy(!vL?&e#IVHK2t&-Sq;U|3Hg$l51adwyJ>6*Ld;aA*h?`x&U$@2kIKkcplJN
zaB%bb#fJxAbr+7iJ^|&ZZr3N)t}pm||AICtf!4i)mi{OEJ^{^6dVrQYVp-z|UFrpz
z=L9c-Y_6{mVB&|YGzbPA!2;0(>v~|UJr{ti<N&o@JfK5IFY6##6hkf4F3?Orco};$
z$SUyGr<X54n<2qV+v~w6vw)5^0_j)q0Ih-tOMp@YV)7YcFJuaN4HpB$OYj1YMIaU^
zD8S}}6Bi>Wap5#z>Y;{D|Gyn#gq{H-&%jU*I^W075w!lrG~JG!VHbG$doOROBRj(j
zfk$l66>K0An=3RB$2IKe_E0$ZlCAk6WAjf2{uc0#r*2n>C@V}9wDJbxG*HJ5+<1Qp
z4SJAo9XvW)>mjugSk9vp+~9w?4jiDhJ6^oK5ALS!@Mx~rK%P(sS11TSfV|KH>Yn$S
zF11B?VWk5*!wbKMNM69=<_toP22~g6js}T&bc1Iip>Fno_EkV7K&t_4$qLx-kn>&;
zOXNI2-Aeve(5Yq~y|(}CL5r)NY+!it>>fCE?|69>oVPJogF@0k3uu*s2V@y2%C-oI
zG;GxYYUp@?vSzPoq76Gk{jQUs;O*t@v}b2{!Sw(UJS#j<Vt56X(CT)Dh@!{v3P{(z
z6;uVn0t+MtieZqLM>kl?qqFrxJ!sVeG=^8aczzcg!z(ai7*r0T`k~DZoJi+evopZF
zaL<mN;f2S2Brgzlb3H$JK^Qay1w5eL8ECSEIT|#D>(LEf_yck@s8EH}Lg4)02VN-&
ziUW9d1r_X|ya&mcFW8`~jUW|4uk8dYP?rj{m!;l!fk$%a6OT@pi=b^5b)Yg0bXrhz
zr2rGO%56Og+BI7HhJn8YyjHu{Hqr`Q^ap|z_kvE+v1O41)k6Ct*g$Op-xD6)o(dkF
zdqGtyXb7~s7sTpp1x*!$)-T?92|gI3*H+xB9&8c^!ld1@V3Q!Lrr;)lYE6hqAQohO
z2-u|N+B*#Vt)OKrputtv*iE2X1Ej4|!K2&Y#rxZ!Y9CY`z7&O|W6(}U0cQTzKMV|@
z#a{Ic44ubzfX><iO+VG1cyZx2INcv;27A~QoH%VOEWyr90u=xd4~s&a3H9&+4_sAU
zr|X@Upq&XGy|z{mLu3(#T#(_kXYlCW5A`g_6i_V(@hFJZ*$SFt2743|b)b`*NF88-
zq=Bm}&@=!EF>rx>5VX_>JmOQj<HhrvYz*M!)anTGG`Lu30gaMD(<YYO-Le*>5^O+D
z>53Q2U?#LogNW~V(R>S(p={IEgZdw!^kxq!g!WDVrQy!wFZ@7ydQG>3_QZEXML~;-
zT0r8Rt)MAzhz{_e3GrhmFE4|K<6S54@AHsuekjeqFSMWYltafghmO*INZh7^9qBru
z+e4+Z7c?2xyca|=^7ny8Ck+pD`#xZXh`(giZUspx9_;je(Cyk`4d(Ip)q@5SK<(sK
z(4_oJ&}Ncuuv8~lpc_nfx^{rm7kE^`qdRnkNAoWRewTwD$v<AWfqe<y&oBYB#2VD3
z_eidN@Z#VNP`HI|0Cy4~QSlt&+!Y>(inSh;=evD3cyu~ycz~m!bO*?o7qVdOps^QE
z4v+3m&<+HT#)qJTA3eZLY0zo`{+5Yg6G8ok(iJamT!%(~OEO5f*VF`DMzGFW3(8Rz
zFBrf^g0@{iM>ARz{xkjm4<E(?4PGKmyMVaRhT}^MaC;D957>D**Fm`wv^e1<s6&9_
z^Z>9NXoUi3F<ZBX0<-S}(4G_Ucqw?5r3Z8x2^<dK)@$=mhROb7?BE70WK0CqTmcWK
zfw(YtfSM-Vu1`SAHC>;){QmX-|K{2bM*cofn-UV;z8%dk8MR$Iz!AM4(q3TwC;^%!
zU;w43PS+XGNu<As1(&WDpd+mw&3gktvyo_v1;L{!kRcQ3Qb|~#2|z|f;Ewf}JTXer
z7&LiD-36Mki2)W!5eV91KEtEa(Ew}{c(%&X0<_S)+jT}~fPzC;X}?Fe>kNmE0%=H2
z0Uc2R5&`9<#*?6R(jBKd0;IuR5!V@=9x5P7@P3>{Xu$#+>tOfj22X*(d~FC4L`o_k
zE^-usT?H8ffzEotbk;+LIN;$0;zD)8W)`4pxj}t^*uxVb3-WtyPl|Ce>;oO)_=5L3
z8^dwdtzw)EkTcU*m-(_Yq<Qe?9q{O7ePRY-pGf1+Iry2so^_@eXv;k7WvF=lfi(V{
z6QB9(c_)g2w#-i#gB<XBoE5|eoyB;ZwOb6jeYux)1?V`4PS#e4A<IG8s*|-I!ZQG^
z3hrdB6ysztJmAsES^*a36#{i0I(dsAyyYUGNk`rs2=9eRGMJkN;cgHG^AaGuE#hEa
z6ogj>J|&Dd1j5@6;rT&${>osL9w1&PYa)aSf>6$4oYN=vFp5t8Ifqx%Zxtx#gJuUV
z_;j0ktm0ts?B?_6wS8{N&ah9Efq`KcXqfc{`}N8Cb4_G#g36EH3a%F{*V!06JKZ@v
zdQD5^LB;<47m1S_<|;U}fK`~5n6fkYbpC%aQ=5UI^#Fg%DFz0p!P@5R4EsQ3FT~)K
zYoNiExfj0w|L@bQs$o9)!CXnnM35n^2TC4z^qMk)PWtHG3sUgHbF$Dp9Y&kU_VW~Z
z^~~8BTn(QX9_YOJqH1#PJZX*TCJ;M!Xo2i3)$-^y?SKj`g$Rjz^qN+hOx`e0LSO>O
z8K84!AkK)Ld}Ce<lbreFxcTCYg_FzX%Q>)uR49OwdI}@R@phiw;UNE}n6fjx%tI0C
z0trQfgnH`}_HAHcV0giBdGeL{PP`jUK@G^MY;XSmfAMIt@&ZG~Q<Fm%*a=O%!p7j*
z>&NKc>9ah+qnmZ-vdK#q$kzvely^`4@cRFM*UkqogfFu(c>X`)nd~0pX?cXdNB#f*
z|DN6UFTP)9V{q(tk8$jDg@&pVD7rugjzGMlahZ+5xAV_y3D0hrv$vZ-!|TP~OKc3j
ztxrn1K@qe}odFb#kVuz!VaU#~PXr$8k1l~KDAwOgCr2+-WZX8ncA>JymZk6n<I&B!
z4$R~5=(S}6xd4%1awnfys28nj2#FFebx@S>w`73JCRTsAu5%_Rse$hj8-q{pR#0U7
z^r~JmVrTH|HuvfL{({Yhfx)BoK#714Xo%(63+~I40~e`Fw1YkM&9mDcw0gnR!5B0e
zaO*|s<Oz!;8COqUwaCodA(DgPwWdch=-`?IksJ)&B2AsaF3mp~Kl2N)%13fAl<;`;
zil#+#Fns10U}^fyFX-&!(aq|*1msN%!vj8@?_4@Rd3N4-v1hXOVhykUi{LO}0?UIu
zzR{SSVIL^yU-p1}*K4{;AL8lLsvu978hG@Y&V~x@fC$NgCOq^f&s{8Suw*gF9*{XX
zAaf8YGWh}<gJW}j3<H1PZw62tee>y6l{B9GVzCCZNCd}Z;U((z-`=w`ytah+EiD4g
zZ%4x+e&gkdg7~cw;<sMj-{9Kb<lrs=aA|e_#ia|NOjs=d6}b1}-~~1YmyTkE<IWnO
z?C;W1tmD#AY~s<)x_%MJy%ycx0fq;7d^(@GbiM+Gjq>@)N0+G87lLI$zKJ$sXV?eI
zJ&*)xaGs69)$rSEC68`aAFv_|Pe^v!VZhE{c;Lmsb8HNb`yiVfS+&3_K*mf#O^`3o
zK>{Bv&){M0dZAR*rSpSF;}HoC28QU#SxdQ@_nu{&F38L(KDmD>r^cRzAm_r0w`~hy
z#oIxUxrkDzbn=0v8cfEzlV2^BcbyHA1J#BQr^}pUWAJRYXW(zS0Umy1H3pjrbAPuX
z*!?Tcf`SlMj?FWi?6*u(=rhQ<pmNN!H{QXgSGCn}a^*64$(*xn49!27`CGSgGBAAR
zk8=L;iC=)XE|g>P#%2GwH=kx>_{1N{S{uSKdDrp??f@uXDuiRQ><WL~Z>J#g2ZA{m
zKJiB#0L7}xZcsG&^y*$-58A(KS_w*T-Kt0DO`f?TQPt`rJA)6u%YhAyKAqoQ+&jg_
z@c(f0Z?4h~k6xIAUusX5Un$9?bY`;EN*n1mJ#eYD<vVCLxOWG*Y;N82{r~?LC6gzv
zJX#-hl8wRhIB4MzgGV>(k2#<)2F2EHU3P|jpxtzkklTI|6zOkYUIbNxy{3~jAo*g8
z96VpNK!p}Ugh2VC6e`pw$H3sY7nC4C^~Y3JP!SBOm_+p0H5vAS792t>2|mdNRR@Wr
z99Ga`t55s_tcHOclmD&S%ein3C`?q{btWHKoxm^f4iOm7UTm3cye5VF^f5?~PW6Wb
zc?Ohk<PQ#VZayggh9Ae~__f81S@({>0{~KTYHG1F>;tWAf;h_QD8%Q<pgN&Dp2Mfx
zG<*gu?U`$$lzC!D*%&;#?L2x-Ei^$%$)oeui!Ddk7(6=fzhF8x*=D^7<F3ht>#bEL
z90et@3Z@skLAG}u^8f{mD<cDg4`{yoo=@ki7p;>otd|ign9jlQqVq5tgG;Xiqem}q
zhsNZ8>!s6#53@1&bUuG^_b_NU-KX>Y3&X=~46O%B3P9}Rhe6H&g|LSPv_OOS<;h`K
z0Q+>C{+|Z(g^D_gs(pvSIrI9o$@Lqw-Kvg&ta|^#2W%+FZ%fo+ep3L8fh^jIYD6el
zq8?PoHoa$Oc=2)ahYfO39}clGytD<ac$7K>8T|##Vt4-b={7ZnJLVtABv4xq;^a?<
zAi+0D9F}U{gA{;@JFo)KX!6UmlQT9d)nA$l@{liRIB!2l4QOu*Sj~$GAVXSjm&AkW
zpKg%%Kn<U5hd>RVBR-wUAa_pT-~fgG3jvVYPG(RIW#ZfVq(tAR^EoK5*?=OUvpUAJ
z8*IaRkPV1BQtuF(GQ(?S!`rXrL6Lnz4CLBc&}u>-P-xu-RX(3y?4GQ%$w=ed6i_Au
z7i1pYtRKKUP?mE88HsT8`pIpZw3!qSOy0aHvwpi8JHtNELO6(rI1j>N_%uiYG|U5$
z_;3Iu0g9zRYM@x^y!E0VEX3D(yH2n3wok9>`P=LaKHa+SCUY=2c8h}=v*&#}pS{R{
zDD!MS&f@X^bm^1V>^|MPCns}&g7ZN=$QIB<6U3Houv$CE?ywk-UejZ0pytSb!vil=
z!Qy<5&2=#hby_~XswubG84Pbbc8APMfLp|HfQ`Z9|6$K$w-``{vpigL-=o*I4%G%t
zuu0&Mo~XvoAcE9><p=5SX4RNHS#OIX<KxKzTco5uO#%feC=fkC<{;u_<K&htiYj^_
zLC~oZ5a&1S2L)0s!)HhSC^vym`~tFN?i`a(Zjs>-Rbyw^!2IIZ<hNT?gMX-kIcN8Q
zRD+!Y64{3^hjBlsUatk!>!1M?!`qH~Kr11AdTqa{f|@&Q{NV>aJMl-kD1d8)TW%ba
zQ@2{x?*$zN+RM5_m7T$Z-}S<0aKRsS@-u(br47tJo&R2_?SqDpYm8^}5grfA!~8v!
z;PxWe6|+^?8TKI}!wsamn>BqREC|w6QCfZ=(+m%IG#}xJc8qb1b(}1>O~_tnA}Ftb
za;^hNHK<n)37gk@A^ELa2$X_B3d}(Y;K>r4-;Pbr-=-*aW&+3zeve*TevlH-m>$H8
z?#ZjR>1ug^PrJJRB2x%dNAS0tWCocCQvMy}0nlDth;oz3jN8RDzk&ooBUunZzP+GO
z2dS0=8SV^k$bOyduw7M_8|=(x1yFSaDm%Zi!>Wq4E*z7kb~|fCX)rK2g3tH&=~Yd7
z1gbZ5n-_p6Q%wbS2FG6a{~q1Eh5eJ?Zck&JJUL{CD$_od$<;ed>ucOO7<_tNI3B&$
zG5od*bn+pnMas*o!p`s_VHX?2Yv<-4ETu{wy)2y`y}aunst?{kRx8TQ!SGrfS%jGz
zWGL%hWp;)a(z`%KYV8i6&eQ|`y?fMEK#k4g2fl!ICwBWz*55f*WkxS3Y;9C_fkrxa
zf(S?OpcKd@rm7%A7<Ns5vD1L@++@jJ9S*yDK*~X(wL*!V;pKABIAO184(Oz!&igMq
z`5-ZHlm!+8%aqs|_90>*Wb(sZGK|HO|Lu}w7Ig%LUx4(fd!Vq=eLV+6nNE~}2ieVT
zaFG3;{ARZ*lbYgY;XUz8O0POV4zS1S+zL5%h8Mw;r|dIeQrbHC*uM69ez0ngbHB==
zION<GP-Xk=b&h8@NLE&sonap$O>Ec#YgoSa_UJX80y-b4^ZtvqoD9(RX6u0xBZ$s}
zAag;Bx*@5lYzr(kU6f;IP~B$(PfoFLnHSRR4EsQ*mq4_*O#ZmvT~nqVl&ipHwNJOM
zSUbp<;7r&GvH&!W4^e$(a^e9c{W+jhggWoP*vkP5aF5Q|9sDgS;6MlK$p+~`WRvF2
zn-26dGHY9LY<4+h#K?Tkf@5;!;Yy~g=E+|UmoxRQpS<q4B4gI%{v+z<<x=bn;7!OL
zy{3tvQw=)rzo=sY*}~uA4bE6#8}g;t8TKJ;@YwwJhzk?5v?<4Alj9YPK9koTS7Op!
zGx_3i#rmvz4hGN8yU^+^M;yiTs%t>;@c(s&Pq(gPJqN?<NRM7qX3)m=&igN97(qD;
z(wr-CgBk!jA8H@yq&i4=JXsA2aIl-~#Ml{-0{ql!Hip*%9(vufFYCZAaNG|v3TjL?
zNHJ(`3u4T?)!?Sc_PWXQPbdl$t%9@~JUTyk^qOvaIr+i~b-$gfKuW4PJX-&ku)g>S
z=Is^$mkS_)7Z3qRK>-rD4iV5`Wng%5P8c+_avxka#=hLUij84<zXprw<fxPUOs{Jv
zXP;DMTr+v%Nm2Pzt3XYK<G!u`OUn1H04<;I{Qp9HC8Vg7Up@KgNkt~1Rg+(wbdfTs
z1*I5JRaC{r&alrKp3>e=c01M1B)V$y`BReO0xQ`VJbUXo_JJDvyTEsObl!aNYx4h7
z&WzhOJD<*E7V%li#^BqXZsD1H$K&8*CQ!3t<KzS9WDO@T1=-tL@%{gQ&(3zxC>cnu
z7A$($vva-xsHJ-FkAmmHCrqG5V)A6Z^RkkzOF>>Z=G(a)w7k$Wxn9HL;B%%IdP^s}
zoUdZsw0ZyeOeRT>MNmas?t>1t@=UJx@i_RL`Gvt`$4kZ%e-?r)23Y|buJcT;4**L(
zo!oOtit*Iu<(JkmGA^DRcBPX^a{lCpS58X$&0}M5w7kdPBmV#Yf5Y2QOPOD+n|%0c
zt*D3^2SXaa-U<HpN30AW7Auz;$K=p!HH`BoU%IBxm_M26dI{sN$>rA-8E;IUdA*!5
zVY1*2aYm2Lnm3{u1*>L(BEEG2sAtn{bK^zU<f%8E#nix}dqJWvq`++J7eccpzq@I|
zcxSTmEfrT&C9timqDmYLWv-wB-tYhaf8rNlNaGJ-m4HhAP~>1J)9~nS4M39otq9S1
zTajaO&n-<x=gHe{`6Wi=fa2T2qt~?d2OFsSdvOM+bpQY238*>Wy>-L)|NmdRd33Yt
z!xbL>!N%}f#iN^51};<q5)$<2X61wnU4<CeG&%LQVsy+*P<}Fl_VPgSy%sb`-)s8l
zJ19=>zt}vJ4K%8<!!;;~VW+#RKLfwZ3CB)90ncu`7xFXN7{DbnxGDSYMfFTjUx9zh
z0grCp((K6(ZwKjWX2X1;`-6>P17qhcm(GVT=1zxr1$5AnPxsmxAg}Cyad~pWodm`W
zlMmhzQT{uXjp4O|M>lI-7RUflvXA)2#;^}Gg$BvOwv&I{F>$>#4dniP;KT~fs0See
zptK6fxf>t?5}>*etYSVy0F+uGD*7fD-j!#}n>_KZlv?mKHU{tRJ<n#ql{-R3DnQ`^
zHb8&c<coJ@Oavk3fRZf490rKM2DsMuQ^Ae{Z`}dwyf<0#o+!(Ssca0>1$|kRCdb^9
zmUx=Z!Qi-;!2wiagkIRkzya#4{eR&$x&NM;So<_K1`o@_MbBQdIUaM7{|_E8Et-7#
zo)(k#l*!-k`H5?T?C3lK&hOx8c;(S~^TpiBG575lQzp;8Z@}L=nT^4*^BDiWYQ`7E
zli8+kOk$R0E-m7ieldwzce45eXC{`(lXD(OsJxm4>f#EzZurD6;QHXj<VkD{Y5bb5
z2h#X8eJ_B-HoT~xyyAf|^F(Qm$@d<Fu~|)GV|ej)vem;K%vDkxlfORHQ?X11)nxXd
z2C5@})B*nROP~3pu6gvDrhQ{$*uc!Mar(uA$?lI7xnsb5pU!VDN+uUS(yMo!2rYwq
zZ693VfDY2jOkiU;&U)qo2W*i3{~tEkAU*F&Hpn3TN!VEYh6|uh1@Fwm5b=W^y}Xy9
z>fvhUT;Kq0gXCRufrH^V>%0pb44?_nPF_clghwaqT(B9err=R8*69$QCumtrC+kHB
z&kw>o4dJce0Yw~Z?}f>Uj}_`KCxcQexLWt<HI2Q=&hWx#0w^OL_GrCb66w(ko(kUw
zYWsou@G2m=)&nKM9=)a!e?VP#u>3BNn_e_d1m~s}(8)%ijCr{qR4%brfUN*!2%SG{
z4EsQBk=KSE-K+`891PZ=Il*4rbHCXbUQ2@XEP&{7h3mQen+>@lXPLmpV0hc3n^ih_
zvh@>tv6H{yj_~N6y5jGDQ17d7@`NWQ;-^rgav)Ob6DHq&q9(Q#MXmrM_iD2EQ+2Tg
zC{iU5skM_so~ny=qex{yqzWcad}<;-2}NoRL`toH@|~wj^{oiGU7+)1UfB0T0_r*_
z(z;pg5<zhQ3ZS&#Yz!~K(=FYs8gNnGU(g_UE#}e9DgYN31&M>UAwkNQ^Sz*WyZ^$u
zmyO}&KF}F#-K>ujKr1A>L1qj8Vq<u{)1#a9LITV>4Uo_>k8akza3Nce&}5Hp)>Uw!
z5Rf&XG2GWPJi1vY!Nuc1;-KN7*9{)stW|LFQjihnpee_r^WNk?&jdA>{es8SF3_T{
z7Y2QxFes7s=w>yBYwi2RHredCu3T(4$SbWIK%Pi$1%;;P_oqJmjt@Y!xWnYe=Qg}r
zU<0RCfVStFPd@d0CGV1-AS<TUfJ7Q6H@t9Td^P#_3l|UJ9<WW;zO8RdI6$L9Q@TJ3
z=UxDr-gzI?&-@0q@4iQ`>6Xjv3@;XUfhzx_zO8Rdd0#TJfXcV`FD6V5e(B6;H+lL?
z1KwcJJu<yhmw>D?oP6b_H7_@k$jiwxuabD@ECY`>g4I+_?tYb-ZPx+L4~a3b@P7@e
zAk-Kb7{C$h2^VMk&c?70bOazIVmUfN`u2iC<3&w78^cSD-~a!+8ou@DhKOafgDR)@
zFJd~_81{n(?O$X}j(@GkXgs;^bp_}8Z)^-MosV9;nauy@etljP%<?~<V5v$Ibb2&g
z-1aLQ!)s6l><kym|H{U&50TKAp!SuuA>5VM%Es{W={L|KNLDVm#tN7n5RaT}6JcX`
zeb%F!^+hDi8K1teO>TT^!!$i|^8UB7Yy#)m8D9LK{OD~aW9MX_clw<37l8&?AH8Ut
z-15$rHxfKzFcq{M=Y{#?bMG{yR2H!_)M&UG{s#>#z4z$6=g|w1{yJIUy>WeR3#cjb
zy2_)Ql`jHjXUzww*CEb2+rq~1I@qI|^-VZT#qKX`4Ew-o9uzoN;NlFQp@DM{F0=yV
zM?~N>v_K-`OEVk8j{lIQ*StO9lTW=@5HEsjN(Pw^>Ylt_|H5c8;|DR5xlN$JtQLUO
z%>5u<C#*f*-UO*?3}L5xf}8!$hbMb~P&CSD2Df)g*c+^sOP+xzBkqR5{9y%h9LOIK
zpU!Cpm7dezzho4x5Af{#_M)f-l+urT^qMMv0=fJDi#aWztasS)7#jn>2CInx2ZJNO
zU>msn?=@utZFlRu|3bC}oTaoqdQHEAwup7!f58P2lJMwe^@m&k@FN?;KG2G(*VZ1r
zrUyQ<F&O@TVFj{*-)bMIl~%#$(aoz6%E9o>rO}q9)W)NmRS2&8B}g}@VuLvTViUxL
zlPBkVlogEu8}{-)0|Uc8(An;wj9oo>-bcCm8y`XHe!Zw`20Jp>r}Mo>ujvV>C@8pE
z50s=pL|;QigCJ^)AfmUSqBamws0nAGqH17K{#KCHpz_GC5!761<6&fAcpd1|S^ph0
zi1?(5jp4P6Pv>*cu;5zI3D->^*YLM)Vqjo!JPr;}P><)e0>}s+h!LPw4zKw^0>2x;
zW`bIYhW|Z!O~XLjDK9mFA`4V3@q-s~gX+sLkj@4>h7tk81CGt0dV2D%Pu%s>LtrVu
z78Hn}Iu{a%AoVXHYm-=u;EL)&8A1WxK{IRwrGfh|qd`lZx>>#8>N-H`^gspHHIHsq
zBe?ihkT@t0yxs>oeBRMD+%YUT;5e)6K@JAcr2_jw1h~!nLZbm>Hmf;khgS1}1jCa)
zy{xRDknQCyP6CY#iR#P+4YbIrrcCbqyu?I37~~TM@GAda+vv}13@_LkK;du%G$yU%
z(Q9k{0hFkHdTpm9f(EX?z1TN7@r#u2!yu4GP|YX%nT=r|=ty@+5G<$%b?M)}R%`qX
zYUq}_dvvpI0V@XeUHm?SWkIFMrx)t=piIfy7c}|A7j=cbNgxwhn4t?9LGfe-cFJ*3
z;?r-K%>PwRlfQwD!H4m;M{kXU$_q1){?5aO-wZE-2HfX!Gcb5|9`fkrJ@<)ia@bcD
z#!Zu}zslAx0V(UPP=0Z~4iq?tJ$iYQK7-~nJdPg%4GDlojPLt){&<mH3zEP8VkJmJ
z=lvJDb)cmF7?cpEL4~C1KpJ=b1D|sD{l!;s+YfX{iqj`Hh8OedU_r;<vhg42AiVD{
z)EMh0OMEkDY@ZzPO`WlGa>X}2wfP^}7&?2wC-|%cxvBL)cPoeo^?FGQXqr8K@|kbS
zj4LO9_@+~@08-Uk!(jBn3+%?j9?fq!JbHP>LCFuad<oerKE14;KY%9lUpfZ7xK<5X
zzI6n2UD=ZlAn&|?@v#=<%44812&&BkR8PNqv8@_3SWw1-5Ph*2q`g~>^?*MpazHV-
z4U`@ZfLg0&HIU%i1$NT?7j}~mewSiWu9<xIyNY!73Q)!J{l#^V0iEFHZvB2xMtKoB
zS>}heRCf(%Jpzl0W2Y+zsOg~N(Y+VEOJmpM!XIj0NBuzdfs)sY_iPONK$!xPyjrS3
zp7{R4ts0z=Uj7H4-p@J}uD&0n9%RwW^`N8rgC;-xp)42xmWCwrZtEAK)ssbk7HQ68
z;$V2K<<ZO9!w#CGU}1CYbm4Jn{tcezuVCU}DB<<!W!2~8n7rYqHDlo9H$UT;xT+`n
z{E|~VG?SgdqZhoD^F>z`8^bQpA|H>=`yRbp!AEVJn%w<MU3O6w8-r^{+INU-_grv&
z1yWSn_@Zs{`CodB;gkRUiemgTIr6s=<H^ZAzjYW7P2Tz2iZOQbm*2*!uCW}TDR9Hv
zzTK$|j{N&<R9=XcvoW|>{wNi9<lk4L!uW!%e6r7<P{z5F7yU7oF)e3fXa?Uq%23J$
zT_e@Nq2bZZn(8(A;~xcO#WF}$=NRr7<{0W20@~XNy7kzz^SWo}KaXx!C9laQe@`)n
zP5%E^k}+no<UcJN!%|Q;FzUc(M}9$fk&f7ouGon#9jOyNdTTpgh#*T!bi_{d=#HJ?
z(vdpDqqlbAi*J+b|H(4mm^}BNJmZeZd;e)jo-P5ECZ3&gp51j4FD90OI>dDnFPKUv
z|NCdoX1<V};l;Aa*8eM+7PwE|_FtjC%^j2uEIhlzBs_XevtNRm8!vtrvoXBZ_2_2J
zK#|pi$lfi68u|vrIPL~&vN7xcW%SoQFL;U}0T3ME(fJ$H2Q%^Lwgxo{<X+?#gLaRC
zhQJv-x~nB#7?-j!h=5s3Kr-;=!nCQGjIt`cTR0dP>a;=2iEevzo3d}=VDMpl=F|D#
z@&7fC|A#%2S>J4)x{6Uj_R?k!h8Oz9ppNVA&7f%;1_qDgtUDk~(4s2gslOP77*nS6
zGBUc>|0)92Ob0!Z4|_5m_36}6@#y6Zdd|l1x*8_*{>3qnb9yTnUwkYAW#r>No&SA0
z-@TY#49Xe*Uo0<XV{km?!v3G(#hM~EhE7m<2iopu_-z;H#sW~$``xkghHvN37deFx
zEoMb*46oB()D{_F+RpSGw7!Nl^clF|gPZW$*zy1I7e3P&nHWW69z6rAQASha+WGUv
zpXr87j3P{|h11=c7|ocjyG*ZVVwBXhDFhE>l<<K{q1|ktB~$l7-L+m*o+Y51RoejR
z^!80Z$iygIUjf>u+gsZJ9>IK(Qv|N;Tc$vCNKb_702%Ybzle=tHz*cc50sR7^qTU4
zb`rt08iHg&ErZqrB@rIIrf(-8>lFscg4QUs9w@Q$=rz3w+78rP+fWa&_iG_2@wOf)
zk@x5|Jp|JUvg^eys1*N{!_B8zJbFtTKsC}VSojuzR&Vf@aCIIB^@r|)Jm1Z_#u=2h
zK}%8|l=61o@Mu1g5$zb~7$1B1MSea~GJTQFRLC~nQG=z1nZ=o7`T-3V1Fnk&piWlp
zgcmQS_p&f5aV{+Y#pL%Fd#CSUVN~TThjRO;KVxB3<n)DdQ>P2CGO9_*LAhpmh@8#t
z(ap-{G(CWoQM&$kF2r_^UR%BOu(6k*Tu>60S`Qz4`TZC^_QHA}$_6cv1h0eqw+=M+
z!ukp-4q8Nc1<Ho2d9{uMbi+66r*)vQmpAJ;K+Rx=PSzBVghwy$_Q#<5h4%^AC|=On
zQXZYW_aHn=aK+2}0mSQMy$GUud38WLqdIwm*Mscl1@DvU<n;ydI$7f&ls|-WSU)-O
zv6y9t1gOPu-J_fJnFAy)K<DN3nigzhXLu2x3(8%`d|SWqx142x-r>D(f)oS8i&xX<
zvN0+%3FS;b#Kvf#V+K}v)Tejvh2P*ciR&J*F?j4|U}FILXdeT(kNe-J^V5s%)8*J1
zmFp$*Aiav?uO-247f}A)ngfbbTZiXt3@<Ws*&ug@gV#g75Cchd&t32weBa9fFx8wO
z3F<k2e=!>**$ZCn2({_c3uBNNXufg-GXn$2UEuXNYeCLC-n!%Y^aJdSd`#1Hr(a-a
zR1)FK1?BqVkk<5(hinWlq;jXTaWEP)E}m}1!Kf{GGYjS#P+9syD0_Mt2cte?^YmpL
zjAph!vcP`fZvmYc4Jutg{ef`MUb)_>=Rr>G?Va=d|Nj?%ve_7Xl9z(m`#|L&sDYO^
zU6PYgL1H${2+*meFe4ZqvP}=<WE5wdF+G!$F^SQ5`Wa5f9L6QnEx8y~neBeDPfz4x
zv|ucpK8uUdj_t!eHij1ur{CjZ3^Bfu0V<BbAp**U&okH<pdkZ}gXRo~gIhB|m&Jib
zyFOY^PvvIRl_<Ceit>Agw+#=tbno5q{QrNK&R;LYGN-TNW(;8Lnf{xbQHwEgx*89o
zI-})uKOROICYki<IXsNgjQ^*1@Gx%R-{Q}~V0hcJyOsfz(Qj;b=VfGMjH^ilM{Vr`
zHij2v5cWh6I}5^I3S!4W*f&A!pfomy{am0ERGc89%%E7Yfs5)uL~TK$YH8D#@iA&K
zd);T7ewmL^ML_gE8^eo3sW21vO=st4>}AqQoj#49(TwrO^t1eo4z}A<*ciGuH-HuZ
z_u7iz16QkaL1M+A?Y34Bfu0nYAss1f3@@cY?Ws3OYz))&n3=@F1Cl}Y?EVNz28I`t
zAnXYsb{m9U0Ag1`*cBjl9)#TiVkbe^D?scp2)hB4vAmMmrbn|dxiB*)vrX?`%Pi0Q
zFo|vY#<k26%*T@0rWdYb7G~VA-CvNApOMLJ(ewl%M)7*n#jqkOFacCVDK3T=QM2yC
zizwcE*C1^8&@U@!8D%f;l@o~J;XJ5%xSEfPKt<E{MWFP`z;K)u#0M=2I?nof5u~{C
zsPANb16o_y%i0O5jyhSNL3je7`GHQ>2M}H}Xr{cA^%jJ86}+08^$LV11{pFw2jNvh
zcqbsdXAs^Y2u~bzv0EqW9th7Hyb4^9bsL0x1k7c<u?SSOO`jvo$R)bY7`as2(ZkO0
zLOo&nZed2HdhZ6%Vw!KDE-h$<7pOh|Bpy`W-hXi<9$dY)J^}mZ{)=@`{uNLU7Szs#
zloa*H*%@AFC4$tJNPsIyh`8t-Hij2MVDVCB$N$HWq;}P_Grahoz{b$ZaiCNYQ~=zZ
zo+84i!FXtTuLz?Qw{-#=!+y|V9WVAz-z36lDcE?Ijp4<ucu-Rxbb)r1(eytejEYR6
zant2R8I{w8jNtxr>~@#vWCN{q?v4lL{<Wa}U_QO7KW~9jsW{Z1?_b2nf%xFXQ#NrR
zxAV7N1x?U&-hZJ6<%2dh?gAa;<kR^cG}y3g`btqog#d1Z&KI!|on26!m!SMAMg~Yv
z0JOZW*L3kw(9TY9=#|JogW<bJuc_rNHij2w(<Q|i9T<O4j}l{4V7xWGT8z<|aoY6#
zVvJ%^OJhJKvWtoYxDf;n)~$a*=O?C3e=o+UBI+0iT5Fqo9@I1C76MH;+<)OaT|=Bv
zf&D=ZJHrdcxat1ljG{6bx7iq8vwQT~>fdH#co7i`8Z!eg{@}f)KfOVmQI2uS^!eh9
zYE1q5(~pZYI@D*zfC@kt6$OyVF;I>Mh~p3C7<hKusJz%50}5mC<b+SJsqPI>n98Vt
z)D=fVg62Cj#96UW{&Vo+0TC5wMErk|6wSr}9;*g7U%$OL6T`+Zy-kAAQ<OCtR9cz_
zRkK586G6siPk$o8XeGNX3SrZvD2PotP@8I|TT3#^vTdmXtpl7MC&?%)dJ|*^sC@<*
zc$x>2+CP1QB%{2@g==gKFJ?u9_8WCTMyg*_O+PHjXsD794QWc%MY1t;9t014di2^>
zUjud7Q$VLvo_n!;x`Y&?va%#pr8!uoQ)dr&z!<c2##SGs{M?Jg>2Xqwr<g>drfW$v
zM)6*V1o>=l1889T$@GcRjFpUD)463BC9O7u!>3L`)#ul8c7_*XksuFt_xAh+9qWGZ
z&;S3gQ$2cZ?_LMhA`zf~uu*vtJUvc^QId1&HBg8D%nR@74Kj?X%;DGBrmv7;G-E2$
zn*KnBQI64M`hOWlStbju>2k7+>Na!3K@OP<+HB|3tIG}AGtdo<8&GH$gn^a>*r<Sp
zA$-C>uHbK-2AXE>{QtsidZR3(IODeIGi4cd<@v%u?tn!7t5Ar_RA{ca63R9`aUrV&
z$HKj!d9QG`>5U6nMc9llu`#?bm@Y5JXu<V23{vEXhE7kEW0d2(3gy3@-XX^*&$$-L
zJvx1Z9Ahef`4u*X7aKysgGR<09McypVpZZ`y8;^Ye(`j=pFE>ffJX>&Cr$y>vtxbH
z2o`h(jlhArb{Y`TY=|gmr~o8t01*uZiNgDO?$dY3Gs;P{&0=SG!5RX}8{oAW=8!_F
zdHOqfMq}QB3!rWRsM+%D#l-1)3XIyK;$TypIXplO{%<~=zg`H2uuWgs$}By7UkEeX
z^nL|Kt}vquYz+HAdjlaO8$H1wk6CvIgT`u<L1rF!p#>J>_UN@$0Vx&%mB66h%Zqrp
zgaSw+0xsb;{k;OCq1}ZGYz!|nL%<Qz@|lSNl9PNoL8F~JKytiLx$CHM3qW!or^hKW
zibZvR*jIxgX3R%b2lDfaolv=ERJjO{zPV7jbW}M9kX+;RbBc^&(HbCjDpZ|5syYFX
zoF`OH7*+1ac{YX@x=^|ApduHN#X)|10Fo07o^G$iC>nJF#Q7Qo@c?Lv9&~X6NZ|&M
z+)b$5VpKzBfaLZ<<=Ro@8bERjr>|3D6pP9Lv0I_){87~ffaEfva>l4~79cras2u39
zUnF-afaDCP%PBL8MR9=GqEL09?lF?O59inzUi=J%_ziTM5|Z2vklbCU9B951N$vnh
z?%?!3Wk#{I6(IIfu)30BBsEh&;=K^@Xe99lka#IX+!;wc2P7T~5!Xf%j{u3gPUli#
zOkjR@hHZMT3Zo)p#Pog@Mpc2AXV@6_A!Z*6ryo&a)RV3A2bBk|J3!6$A_#kf$HCun
zph78WI=?ETGUI~j#;S}4%sa2KPft^2RAn;+Sz<MPqAH^-J0FNG?mvC2Dq}sz{L^d<
zowr`Bo^GSYs3TN*8Z_P*%3uh(G6z(v=T5IuW0V#P_hn;nZT;`lox8%PyL859egWQ+
ztL)QPt1;R||2PH8k)aD-eDML5ay%-ot^eyZ3~&4N>fSuX23ppuBQg(a;JX*+eITo8
zyLnW6EPvNL1UKM4I?uh><HN=PGXFI%TxjKV7j;H`%WjYs&`EUQ)gZMH-U&!Sln=Gj
zqt_PHY}yBEctHw^ZXdSkeBsPu(@GfGrk_w}<kh+Dja=$Mm#B$=j63cOZn}DOS3}Ff
zf72N?7)3Q+fOR;d6@HgMqVU4+h&N=Nn)vhs9n755<1`qhCBA!u3qjDKBtD%L3O=2w
z2SClZ2h%5NFnTghn|@n^(UECF&*TdyBw1dt_<)BkBI`YRZDo65t#m_AP%E9Y7v4%=
zd<xPsKj6{JyKg^)4R3+J?E!b@r$W_$7I9QT*>E*CdqA!9`#oT<G8|_G@j=0Lob_@K
z2LmHRG^i=UdIf9}D`Xsj^&Es}1Zkz;fbhJ)O$pXZ5FY4!c8^ZhGZ5ZKh#XYkLP&f5
zM9<{J$0E}o{9$C3zv|if$D`LY4s>(8uO}#&Kw}3bMUXk;)6<t}F>2Ind9pDab7lc8
z*gt*}l-BRRu=N6EVvlatA{kI?mZQYcqt|x*NjBt#v-+OkCh$w}GNx`;53owmXnZty
zzYKVG_R)*o9&8LR-!g!P1#(Y#^xF1;3^9aP4X-@dJQ+NCW3M365_sVM<BO>tkS5Pw
z4>ksuZf(cLzl^75S=ZEgbRPETX1y&9au>+9f|H<*qEF|e7lG5KX)|j3dU}A|ULx<&
z%{l?D$_MJEONIwtuz0XBytV|7ad>pzdm#z7Aoq%Ir@3oqK8JI!OD=;)@(=I|!Q|<D
zI*b~sYH)Ly!M3?{zIrjo9pb(?F#Z3<lIhVpjP8tK(--S7PH{fy1`ZsL<{ykD#^B~@
zx*KS(4GU=X1Z341lN87cpy>qm6DZROAiXY~Kc;_t&LUk8$#|k}pj=-q@FEJtfaeAu
zH^`tEc<4MN*s=2(B)<7{*co03f-LMj?$OQKED5#=w1U&squ2J@aW;m1pgSNTS=ZJL
zwuT@dZ1`cHPHUIWVvxi7j%l$mAY#U+^XCfzH#X4Pg<jL#<B%4HN9TD^;IDF>uCKr-
zHof5}6WjDCJw{{3<<tB07<Cw{rtj8cRFG<v0K37X*OnDzJz|2|Vft4+Ms>L<F5r|0
zU5<Li1>!Le@U(YLJET{g-2uz5<<6k|8r}iVuM3Vr@+fFfk7XBx4Ik9A?f~Ui)&<KU
zy=st}N~n6c8uboPe%0-O<yR1&i2>BVR_p-fR|W<TmtNMiV<1<uN<$0;RTUnctfCNJ
z3nbh6LwH>fo+pF{x^2Oula;%JV|rjDi*UVxXD4VnRZSceD4;2z8y>x;1_kU4FXlUg
zaw%x0lfUH}sL|T%d%>sI^@>NY>61>-xNzthP^<3wi&@T~@mps8)}3Hgrsu%hszMKV
z^!gt0>2*B;QB?v{H3y<9f*Z6c#nz)YbPq&92v`9le=Fz$0Z6gH>;!Vcao<jL$K!0E
zi9E;S?x1ODhW(&RTwmOq{@8$VCG(6^?9=-V8E1Pt9RaW8>a{%yVt|HfCV&{AE?)Q%
zHij1sPLQn7&B`DO@vgP&jZy(0@HNQ>pnVyT@#O;!Y||5;vnWlUZp2v4`3!U&TIa17
zuck{IGlsJ5In2iJB6ND0F{4Vom;)p;K(YppJt#_G>n2$2AqmIu0Q6Q=a02?!%)#*g
z0$i-u_IV2|CB3!-rKHO(@RXE#7?OHGsia~ngbhz6+gm`3t9n^8iV#W33aSCFXmJZD
zDXj$G*9=NPAU-Hr9cP`}0!>Q2tfHWuSe>lXTfj*Znvy0$c&k7s({!?)hVV8(ct;^T
zUoLiV&C%Wh9#Rpw!N^h%Nla6PAfXExE|%|LXL!M94~j`pVk+_U=r!GQ2;9R0o!SbH
ze9!<3KPdQmO_zeCI`6-basU^eW**(FzF_k}#X!#?Himurp!pEc{&&za0JxOLAvOj9
z@PP2k^`N1dUegJO*rt1!GO8I&vjf>?nhQ0#-yUqTutzuR6+w_oK_-VEVq<t6;?Zkr
zb%<^HJX1zBdk2UvN2o4Kh%V4p<~q18ZIF9FYY(6Wm>n#E1q)7RHe*z0<~hVRUDu3J
zO?{&+*bOfag44*0Rd!%EfY#K#7l66p;z73QRc4Gz%x4d>O`mVZsN-M>($#!K!K2r7
zB~+&#LT52t=fs0-3@<@fZhYpC0^gJQiC=*C$yxU4+~$m4^#LHQy>mgK?a|u{x;6+N
z=u>RK&N2n5=)C`;*B0)qOZ+fr$$|`@4H^dMHDv`Ugc}7qhy!kvC&VZLkc!UxFPz{;
zNwK!W&H8bGjp1bg#H?Kh*rvZTXOy=5Z4GwB3(%Ib&igOE*nk}YTAgPJ*Ld*&bWzmH
zZGZp&-w*1ozG$89WWlJ%7%;uif-#rTWBPpy##F|r>8_TH%8X{yGc6gdn0Fpx-@eR}
zv5t|M&w_2b!f8g;=|0wsf=u7Jr^j0}N{UUg0JUBHC47=MS}-y&fOffNo@AfiXU(X>
zoOOVG`&Mg4E=IxcW*`^ww{8RX^54IBJN<$Uqb}p`?f+~T+ZgL_aKM6U%`P?u@UB(x
zqPhcc@tq)Xkeeatq~4T`VK->b)uWqrGFTC4p6f!XNaqcY#v?PB7#Ki>Q7m-2%ijc2
zl0ar<yRBdBF##7l5|CnNldLf~O+hQHRmKq2kP2&AC8WZdS_La+CK`i^nZ_!3F=MzK
zQnY{?m~yKiY<S}_wF*=!@baZYN*PcC^WRQ1HGx&2QYO3#RI-3d84w?|Cigh2cNMgh
zvFT*>0h`1MEnnOqyho5`qXUHZ5>mc6L3s6$VPKmoQ1N0Q0ouR=uBx2aL7@$*sxEl+
znw|lT=<PO!moDj$WfYdvEgTqCTq;08(`%}|lZ{~)_;9e!`!DX9fFiR5l#w5@fs6uW
zf61L}4ExmKjll)Ru#CKoZTbQSMsv}>MvyeRgN*?^><H>}B~O3jz^Gln7bMlq>IOG#
z$qqK;4b>p6;O*ody{7ATfQ$jpgn@@VU;Hu#y9TtTc@~l!XqxrKJ&2r(N3Urck{qZe
zd~paOXW`M!%X*X*=8e7`(-%83nn?A+MbtrV0WI@{q&%1D9~~K`cmm<_E<2`+J29&I
z%rJyb1A!a8k6v^bf*fjUi|pTbMqsysGUi7Xn3akk3qZTaUvh)j^gMsDaC(Omqinst
zA!xb9ncx5aGn9ycR^<Nv{~tQh^yr0<AsYjzG6z-apzRbeIjHTQ4ZyZv+0F(TngNA&
zq!Fl@*Lt9&64b{8&(=YE)1WcImD@q1#t;V@{6Fm2Ss%{<we3BqRk+B24K$MfqQ(H^
zhf+IGzpM<*F4^_k8Chk80n}0-@Y=mVkiqv1!MY|mcFMh!29;jjtT&lqAz-{6x-Rn=
zT*zTN8!u$#_{#@>{{Mf`Jbi;Rqk>!uSOGZc9%lp1lz^tfJiALJ3@^QqGnoF)nNf=I
z%ydo{Mrqv*`k;a-6g)lo86I%|U(C=4hfL)*xFi3+_%}V!g)v#0V;dX8i>Y8g@weDB
zg0^BphO{njn||JfQ94=70Mt-p;cpEDHNiUXzi<QvbMp^&{&tXZP#l4dB+!P7YBDk~
z_;&vD?R@XqTch$|7s$z=jtaLP8-s6ej>-qH2soU;M~uAqG~L&gQIl<(2|L4!jnivf
z8I9~}w}Sfjtvf#d|No*$7c>t0*RwkmGUezCI(y{*3uZl#Uuzj&+|dOEGk<F{_;8zA
zh8Gv7zj0+$RXD5*>UnKF@%jIM(3A;cKx@(#Hij4S`qK^F7^R{G89^}u>WQu10t%$5
z7e0em<TvZGF}yYgZSrOSDF9{n9b2GLb{8&mcMBWCKG0G@NJg2Xi<l1Bz%YH88>1Xc
zo(>zs^xaOZvP}65)1SLBDl;+YPUmrFRAO8<UEiHi**XVoFF1D_9&ikH40-`F#-sU&
zK=Ti_5)07U<Nu%|1VL_$0;`=0nshci@FHq@uREiJjJ^&VLvytND8qCMgW?00FJ6f1
zOh4$(sAT<78{{?9OPk>F|NTWcB-mO&Q&2v=rrS1wrXNr;2x#Ys;dD6<MhWR?h`mQZ
zE5mwwPk^W7TS2+>#fIsD9*j2j?jRewtzRf=gCe8U&7<4;g*2GW-vYYk=(UeWw=gWj
zypYs}JLEmcmgebaJQ$^t%Km};2?}b<&1?+&EJ4dQL5-a_xOg;3To+#A%4)MQyax4@
zZNMr(A#`~Y$g8jrTBilucIwg1%Kwjjx`!vDLj5UCNNoqH8(VLeh=H7Iq=j4~7J+!6
zjn~KxaqR-+hB&A}4m<TqvJh5P@@j&rO4dSnRrzcar0P51(aSn(J{v<?y$63DytVzZ
z09049-bGTh8_I^Oxmv&hIzN$tp_BDi0jS!%Qoz9gD(pL1FF~}Q2Kl;^^$dgutuBv2
zc-#Wu7B@p7*djpz1`!62PS#%#Np;Y4btmhd0#JQ9eS#MwFZ1?4?9&%`F-o!<7qK(E
zP|}=!z>86tNmO(CQ!hqE#!u7Py&07l&rjC^QER6Af~d~v1t2PI`ebiLB`IeO(E3Qw
z$tpjY7#Q|}ZjA?xRy==UGyS|bqeQ(RM4pkqRg{^5Vc!u31_p>c7f7OaFX%?9eW1Z6
zXi5F>#eH>%iJ(J*Y>(|`V|X!NgN<Py=n`#+&I=#~y?a5c>>)ZqBl<p_4__<=Ni_dp
z<Zs;s>e2S@{qk>mnh&D@W7G6<AI52H`n%W|UhJ4I?8~Ujc4j9V!;9AKZoZ7%jD|Z^
zLFs5O=qf?5iJ<BrA0!4^0<sy>S2(l|uI9zu=}mr&I+k{zf?r&Xjp5~Nuo~O7AVb;I
zz%7H<A|AcAF6+Q-&=}{v7Y{)ucC!}zV4wcnk5MgHekU8l>kS^gw$pa7F}z;x(QE4q
zV$AdCwVeX0Fs3&C^z`+2DOL37wOzcGjp0R)DjP$0E9h3s&ciDhOM^XnZBK7yV|X3t
z(Q9k8o{ix}_VfgQMvM9_Ti6(0LY!?Y0V?tpRoNK69cBWD=y8xq0$>4_k~JQ^wrwDR
z|0-+@ujhGmP6Zvv+Bp||6GpGCHmDHH_2{*20-1OLwB8y`#m`M_46nUW_0{*<9^TBx
z@Y>X)*VYTf0ClegH-qL2RX|~ATe_Kz;bk)x({k3aF}x^MVPoi?3p!u0dn)L9wC-Ne
znTH;|wrAIXM$bC$bwbYa?gbs*`obEddMl{ZfgB;<-J8P?nxgHsJpxw#LRw||(f~$B
zj`?dq8|GeIoc=C=Q9^17Sh8~~Xvu8nRFKa)dwD=7p3I-F5Xk7nkqc2BIz20pQN2DH
z%=^SI2tGIS6Te_D=%B|>{DM<K=PAD6Q)Xl6-s<rG|Nri(puSUgFR0t&(QE4mwFP|S
z=v2@Zn4P^VK=aUdlt9(hTF_;l9=*06U}Y|y?_L~H0<RJT4d#HFAB;-iCJFNkai!_P
zL5#_4ZEM&VUieS131UnTYXAk-OGRj-43agZ6sLa*V$>7bq5ujik6v4?)gTkzz3828
z6wIj477a=zDbv$~89mr**RnCZ5L2AKEtt`gjTgkZHvMZbqZZp*kR{8etA;QdFcwY^
z3t<dol9ZdiGKA4pC~q|z!;9<k;8<J)VxOKC%IM2He?9y3fKbMXYO7bWF?{A1+zL85
z`NbVMu)6Cj*%)42fUvn&u`#?jGMzn)QA_sqQg#M@ja&R0r(SD#*#2i`VBqhs1-15j
zZ57r`_X}f8VJw-xIgBxcar$(Qa7Jau;^{i!jDgJem#|N72xoL+wpz<R{b)F&BU{*V
zHij4br}IQGE@!V?23kEKvwc?tqd22J_X;+K7hj~n?(he(Ux3)%;KSNqUi<+%Ysq%{
zayEvSN5B04|H61$6yqeOLvN-}iDC?9QkI<lGK$fJeLpCiS4d7jkjN;;*f!ldn$bbf
zS^`w_@wcXe2RQD(Fr3~K%_zkfG<|tA;}W(&Pykj<4~$`yV+@>L5X0y#_*)F3Aqm`p
zx&Pwh^fNJx(oBNl(_h9g$}<02&OV(pmT@8bCQzVCi%;Je%P7JAT?E`|nLaUrQFQv#
zSVmRBHKGt>uCaiM`TH*xO_z>ilwv$Q-7JprFxz5K=$@JWKaNq3aq)Dyct!`o2oZ>e
zN>IRd-hbgYJwKjNiZOqBS3F}6<GktO35?F-mp~ztEyBj|5_IF7N3U%oNFZu@VFIHh
zlbO(T`FKXD>B|xrRRv!QL5$-8m9L%mUp$<CCxKCliAi|+j|9ep?7<*?Ji_3hVtOSo
z-6on*YWk-{Mpd)<f)I`1L#aFOznBW;gYH*H?6v&_+H1Q_kd48|@&kYCNrvegqZ!qv
z7bh{M*Wcm?m84Hz7kl*DZd=aA@LI{E*LE$4q2<wQTLNN$hV!yP3<*$q2uc&XK}L0c
ze{Jm1YpVznSOpe%4%S=%QVP;z4q|}HsDGfe(=G_=I@hjvk-^W#;J63c2WR^IczSd)
zqa5ST=~c;$`a0|aAXU}SN$<aW$gPR5e2^9gq<_sA4(VTi2!}Nq?(l&c4R^xfjfSJk
z;Ee{}%vJ~+-oHKo+LhJIy925Q)W4nyWy9612?sS4Hig6b*C0OV1kK~D%fb=;>*ZjR
zVEyZb5MDF5q0c%S!n+AhSFCd(JRNZAW}O}mZZGUjVdP@!eKh@K3Zo2LyEQw*i*M6k
zr!Y$D{#gocO`87y|9>B70V24E_Upw?P@uFPD9HoWe)oMkpMg%xx-i`^l~JVL)de&>
z489BM1*ZTwm3#E=1(|Tnor~dx7$2x3=iB;(f9gTUPPWoC+XZcm47Kqcr(frI^xFPh
z#s)fHu-EnjDCQJEt1P5Imi5}s2MO?l1UMlAexO(v=LeUD-Mlj%g4&#%9@CGcGD^AM
z14Z|9J~jq$*Ly#x>++(G4>Zlm*XhCG(`nHe!Sj0S3te7Fbb==?plkj?L(HC?S3SB}
z4IfTdO=E1Am;kb``G<A67<m0k!4gop`|ri?=||ES*D&2)JiRELQJ*n>`l58kl}y2l
zr~76wsxbCXFUnxFv^>uRTCQ}=qjxXpj+GY&z+6`j=#CE1Ldb9)&@Rc3uO+~S&sYR9
z{M(D$)1PE8x~S~p26^wb7-+g=A&BYH`Rqj_H==jKeUE+m`XkJ;EGIeH7^dgFU=f?%
zoXIH2bl~pvX_<^|{!11@dsh=VA-NQE(VcI1DfpbNW~i7mBLf2>dOy7YiGz<r(*pM+
z!IAzC)Nq<MJv)mrOY6e|Hip+ckg>mBQ(MrH6uncySKjnOF8b;PAG`j7nQQw0EJg{&
z*y$44j0%!A9Bhyy_MG?yU5x*D^zH>$^Qs)v1G5?Re9kUlV|d}liSXNz+mI-=_PtQ5
z13HwD5oKu1qu17Q0jT%~Uw349z@_uwi{Bh<46paU$e4aQn^8*jG&^$M<>ml2K96uj
zBliTZ_)orYLS(vJ4kNExH#;bZN;o}wZI>-%V|XnL8hEII2nu`j+7>QkV|Y<DJurt+
zj4u~tbnAiAXCA$_nhU3w<}f<dgRF}^e2kspFlZ~9N3X3+0IXbKU;~v490BlhL1rPO
zEC7wW_0~Yx@I3zpw4<n(mkFu{R4#m6fTre#Kd4-|=MO6vZur}CfEH6T9A~}c4=orv
zSucZ4Vg-$Dd33U#h44UqT#ruH>kuAfjTq}ie{f0Aoy*AUvF9cz;K3smpku)nfQo1E
zJnFL-+#rAVni~0owlF<^A;$*F;NXpcEuiC_Jv!%t4vvRR;7pwUAeYfl^e`(Zl1xQ-
z*cm`c2E5Mr_H?y8Mt#$CR#1qSx`1}Eg+kaC`yjg;zk`aDcveuFhpZS}%?+~h*NgJ$
zU3rXB++XK|q&n}t5M-OaK95mKPm+y|;k7d8R7^RKZr0WtATNMAlF9Qy&i@9o`q7IY
zETFQTHU7r*?|F=hOj0b<H###4PuI<76krm+G2K3&(b*!11>~nA5L=DrvoX9l2J%7c
zff8ZQZgFVe_xlTNh%%75-#vOwh2~G+mCq>8q|Q41c0Qw#q5pNT13bI^1$=u`84VA3
z^qT&d2U>RF+WFwcZe~zpN}%<?@BjZn>ncu8VV`bSz!<7>@)}fIxPasTqaMAcM)N@a
zbm@Hg!h#v>_W9SQZ!cg})Q@6<lwFX{Z@2Y}<4nk@ot+sX4XLT_dr!V_LcG3L_KXiS
zNrKY$Qbtg!-0A~Ql}hs<sSMP`HL8HH;l0<HKH!e0mpo)N7^LRgTr@SUKA=?D?E_1d
zAU>qFs`uews0a1tJbGC#%>}uXwGv_=q+VeyhVb5lx?7#BwGf^b6R0u7S`Oh^LwJP{
z-eCw2s;`q7tTGoYXZy~FgJBn_BnJ&xWr6~xmo;~;EX1`Smq($y{H)J(%OXa3rzu|S
z3@@4)K@J4(%(Dgs)LBN**cn&pXGl%*g%O-WJUeAn9FMbun-RUH=jVV*?(Z*Jr_U;4
z^bw8%U2WEjm<N5q%Q*dK5o5T>2he3-y`g73pfjq52VN|ko>I){>azJVDDFYSCO>Ag
zA)o48!~ja#9=)~&bJ!SO`~vYnjhi>KK}n<Y+>1L5&>4l!8`CGQVH2KK!pO<L{68z`
z&`apV!1L)6C5*D^i=VPFyjb?1mBF(UJRN7_(QCRDY>ZFmbI^kR3IACcAf6Op0EdB3
zr?N|DHIGNH>HAp_4=!b3W9W3|crEME&3gS3$jP8=#@z_2*Fm}A)eG<Gb4nPkrF>^Y
z>K@N-@F{%!Q7kh+XQuvp@ooCY5=K+mWB*to!y!JFk875<9w_DW>@I~a?q4<Cxs*|j
z<KQfC&#r8GVJV{`zuZ4$FU3t?Sjs5OW8uNU0NPmAYii~>{Xi+BT)mtZG>yM_^@o+=
zI4hSIJc0YpLL`CmVh9_az~6a-6Zo6y5OGj4QG%+6tGVR~AHuos2}<iXJvl(vbTM?Y
zUWaJ^8v{B9sFU>~gbQ6$a~i_?4Oz2(6v8{l2TrrcA-wI7@tuPZ9=jk|?ly$S3*lY$
z1Q*ih%NTh@DlUM69$HA7GP!}5_I@a16qP&p8x+6Cd^^8*cFGyv_Uw$aa6INFzyK;`
zIsZ*pE@$**OqpI-&Zwud@-HicXSayTK2RSGl+soHzy!eg@cs+oKhqDFGpY-B%m9_*
zdjo#|{|{>P-Fm_LclzIQMmxrt(`_mkWtk*rOpmT$l#1;B!^+V7gN46UjT3azorsD@
zFIW?}SbyR8n-#SAp1*~I6SVmTeDQ-%Z!ctW()8eTxE&t7Q(yc9_2GI!7eE>wcws#K
zTm_>n<ICx9K(=L0pUz#$D8+btx>_Y;JLAFW>na(Q80SsDSji|N@A#7ybQ(|Vg`fZb
zr}1m{Zukj4U8?oN&;S2lsQjGHQpFg@%+<s`J++E4pKaC;R)!b8({EKV)-ww?vQLkx
zW=vuB>13aNxSG+~K&_LV;j;_Bz|ucI|NjRu_Wt<!|9@GsN3Utr6gGzapzgfkffp&D
znCvyJo-*C6hB1J-u7iDhXAR>`M&?7c?9)^07%wtEYh~YVS<jftD177-D+B06;=UGk
zhEM!)tbHx)(>FFSCJXyPB_yB{5-sf0)f*WTgl~U@=vdke(Xq6defq3MMj57gN2l*-
zWK?J3>Yx6wkx|&v<P#|7T~s7IyIoW`KueSkzE)^GP!|SSGO_jpMB2imcPqoM|NnP^
z7E*Y09)A%qUAKu*ma%KPcN3$Te(*<DhX02_$->b(Mun&5nMbeb^zWdu27K-Arx!^d
zSs5I=LsUR#wzl+5-_XRU75VHvC}wYacDkro)Ft`!>ZbL9>Rr&0W8F3?;Ob8wbWT=p
zXv2$tA6OZDyGv9od>Q|N-2kp@!A^P+^^ujKJG22*kbDPi{W>w-xS3HyvJ&KU(DM2t
zAV#N)io#1r&}hs4=_SpK%948z!!rZ;jP^1KSHri4mtI6q-_Xpct@86d$m2&rhJubo
z*bX|crgti6+}i^(3jTum<MjW{jOz7V0_+Us+#bEWx_3Y(BAx0j@{yInqZjE^Z)T7{
zGI;d7*W-Wl&-^06<IbQXCqPG^vu-SBXLzmV(aU?Kft{h7r?J!9rTGVV_w?j)b_URJ
z9dA_=J4h)D<Ro!d!?!LS)0eg|nloMRnSQT@QG)4p&-5QHjIwgfz0gf&phoV`7rCsk
zvz$G;S(Oh>H*RHAWV|;$w3ShT>Hfj#<*kfrjJeb2wKA&t3cLe({5UB1!4nf6y{7d&
zpiDLu%M<|rdsYVD*8lu1s*DT_%|Dp<`#?=G-_~!R`2}RZ)v-?(Y-9W{8{W;vupcxD
z19Hs67e&krkR8Mx-MpFyrt7vd$|XF1%?iF)4&F2gdBX}?M{eN(Ud-wB8qCvp(G3!A
zt~OvOQS|6F)dv|2Y9WBu#(`?{Zde~&5~KmX+D!2E^wsT*#!SDvrax$B3}w7J-K>K#
zlr0xD3R$v!Vh5uTBU5tc^rfAQYK&i}pXp?j;StybNxi3D2)&yArIS&g&vGv)dJXo2
zcF(`qGu^O@QH5>sMmB~QtENYHF={YXnu7ZU2ktPkOrP7u7$p(A2c!X1+}_yFAi%)z
zBI6|}Xpc-cyvrz`@f_Tfd&SDod8qLhNV*0zn;`+#1F9Wm+t?U(g2W9Eyy$ts%J3Sr
z@qDH!2dFSC;c@}ZggyIz;kA%QH|y)&Ad3t@V}yAxSi#elMK3@B#(Ho!`}6||%+mFZ
z&mrLp8ecSp)pb12L3N#pDZH*rZHL!myfb4VY<L$#0%UhDZyHn$sEc6<Wy965m~t?H
zR&_CS@^YGj>N;jq4h9|uh6ILAUPh4qPF5xm)eBoV`o{!Zfrf$inzFJ%<d%Vo#!glS
z2=6I`_Y0y@2(m8=sxJh59|!9<6L2N>cPSG)hi4~fZ_~nE)3^382DmZ4U<DnpE$Pu~
z+t3CoUBIpSe=in3XJvR<$;QB7_-z+xl?EuE|9_GGoRz_`^N4Hf6aJ271_p-x37}nr
z>d&Wp_cGQoy>Fd<x|dO&si|lBn_fmaCZV3`JbjF6Y_q!A7+y@CZqdhR$;J(0hfFW;
zV>Dq8>;!H8d^UYkA7g=-R2Lh=Yrf;oplhE&hciooBqwjT=x2;(GOld~CAQ8_FO(j$
zGBoZ5jdME(xjOQ<_JbO%y|$9=pkd6%pwh(F7sO_JJpI^2Mg`4p7eO%}a?r!0*ESM#
zR86nxM^LNkz>9s4KnY+jXt2E7`bEoh{z;4>OpK4Fr%qxF;I0O%aq0Z@;{WsmlNhy?
zS|5T^=24%{Yz@$2@iH(MbjG%UPv>{f&U-IXrt?l_RIN{hYW(-238bXE4!Zke%L7mw
zpbk0!whY39=G_?&Kt;dZ3zY|;r1|}|f=91yeFMnD9*|-37iJGZD(qh{fmQr}k@kR<
z!4-7hDC?%pApe0EyYRPuWS+ipGNY6;V+*KB`+$|9yYxgis8wwH5^UUyTgYNRAY#WJ
zfFk-As9j(SI=RO1K<B3y8>jP4VN{efeE_PptmlHlyXFaa$ixd|cJp?RDU2PAjN7JP
zoXV)p*tPxdRK^vI*1fkOc?dl86B6vv{06)jvhz1+RnB^dLpxn>9Cy9Kz|dfS-1Pzj
z!xkrg4c7Ms?9(4iXS|`BQozo@-xS0Mx^qB)H7uE(fnV<sf0H94=p4<woBVpRP6h1K
z@6KS9U{)_+pZ;S8qmsDaEl@=+z$=sks>mY`f~tSM9QNskGa03QWgwEG53<=A()cw_
zed32GxRDJ~9CLy{{J<yvsDq%hCfpQ2rv~yzx$b!J>?Xv>RbW*R9m}%Wr_Y?pxPWQ#
z$?4X!7%S>G-UL<72ORhR{{R2KE5GNz*D@ZxqRRV0HGyq4=ope-)AnjmEWUUEQrgX$
zzXlQn;5Cvi=xZePZ$JYtEEsfFM0d4=Pj|7$izhe0iQ>hb8>|f7)-N(|fKqL>#tZo~
z5SGD<!w`nWi(Mc_=Y8-|*6XGR&Sq4Qdb}E9WvA<feT-}j4A89nLh$DF?%9lzjAy1V
zoz3X%wxx=V;YB1!d+UJ`2ajIc;A%F87hoHDZ9$%Rao`3k!|_(oEpVU(Ca#8WUu$~w
z+IoWy9Dy9x_3XvO<$7}%nd4f^*%*9!mx87=b_IYJhd+NIbd42sMudt#!#=1`=dBkh
zybPcNq@=Eaa_wHw%#cSX`-|6CKwQx%h$*0%Aea`9&Vw&jPw$z}xKma83Me<agLewb
zL)ZqOmbNg24O$oQX4&+t1&oT!%P+A`SGdV0qV~<R^RGuY>*{6j5CQd}G+31~*cm{_
zO!8~6s%NlIKe2#uX8q-4aPl|^YEsrGvopM?xeQ7Xg03q*JMs&-DWo~_TPeE92=GUp
zNaNRF%>gau;*U9)#vjRA0A_1~uZer%dYKi}YIbc%<JSO-r12j+!1zKBEUe+%kj5`^
zB8^|rcL!+n(6PBThM^?DvD<a~gN2Nlj7-uOr+Y7ERAKx&y<jn;lFp?ItPHO~lbaig
zKxxc$Huzi)(Y7LR8sodj3SR*?WAXHTiy37-!_PyK6u8aMZT({Td1&I{x&USvykLYd
zEMEKoNx_=~ub>(s109cK5cPIL3=8XY$0dxmj6u`umoUmptOA`3(RmKE-c%H1Sg-B2
z0yc&h-=}X|!WhKlvuHclQpQwfCf+mC3s*3TN`5;Hve|V8;{lHup1n3LpnHNrqf+;#
z&tJhP$uwu)^j#|$<rt%;-(0~c&lEFn`mYs?pBO8qzg@|wrsy~q5_h0WRfHfJC<1w1
z-~Z_*s~8oS80Jn7Tg6z-IC=V|RgCIP(Q~H%Ud1TKBza=G^lC;uChj@Yy;n0{VvL_I
zw}!ESY1^#n3)V17GnP-^vxd=vdCm#e=@-<QWmIoxLTf{h&T~GUzdSl`f(DtU9tR~)
z+pn2y3@^%$vrZS(U>2WV(9Xg+{Xh{T3ux!bS`k?5A@e9J!w%4u51p(tM8LJUV=ko0
zaKNMUphqw3Cu<1zL>hm+?*Z63q9qWu3UIZ(thJhu@gcCn4X|6mqD3GFS|p2bFzf)0
z4t3VE#)xn*fXC-MWkW&cbn=FYfX?BvZ3C~gv<(3BRI5PeG<2$ZfqAB9*g<<ZOntyS
z-Cuklo~|26d#~+txOZkBfqUl?SdMje4#fQj()jbi?ym<Q#<3S7+l7$LaozBlzn*mq
z$f2O}qmy+fhzWKx>n0HnhECZH5KW4plO#G>SAm?;X}cOssjdN2rdz?3?l!PW+i+1>
zI5Wc?R?q4LT8G}t3Ni+Kn;OhzV29~~C3zK~4g)pNSfOlq15HwtgJCDwjl6QAAcx6-
zNhy%lPF86U)yw(=vN2v1!jlBuK;Fs9FUldt;L*$a9Wt&UC<;2iOjk&hgJC+OCZi}M
zmGrD<6cE`l9g>bA%ekF+*%@9KPT#PeQQn>P2)I(=Z!rhWGxeI@1)WsUdH;p^QC0@W
zJ)n+p>wyv(k6zO^PzkxCpq9Xs)&q|GQ;s+`pJDRoHI>SqzIOwoxV+&3-_8#&&K>~`
z9x#_mg9b}Mx_b9sxc~qEi_6n}HZV#H<sOFGI3F}P(QA6qb$aCnMp^YNsJ0ByqN(@r
z^>V*ns6sT9M0@m_7H5HMQnXQmDhAzN=8I&9#u0GiGSj2iRyrHHH~dj98^ep;hgl&9
zzuHWjF13+S(^?l~YUg3Y1D(zyKA=r1**u-j0xq4&9H7~$#>1=(uh+SBuRU@9|9@9&
zy^>QNy|!gpYz(g_z1TXvZX=@t)3&M87i?sdXA(U${oqDMMW*!3=^M5)sw+8$IEKFX
zaEO%wx@Zg>4&s@h5)={+pQh_>Vw4u@IS37hWKcJ$*Ytz)^r%gYij1w(Yc?^;2-(1-
zg(1=lGeE{mO+T`UQOHsY&G<mji678l);R<U0{)gfNJEu7i;dysN(ehXcRK%OMhkus
zu=1%#?t_MbUaX%UwwX~u;%Pd_iBoq#1RD;3Bay%L()0y88O8axL1foJWCN#f+01Cp
zRFyvc?Pf-6**p8ezEx=c!BG<OG7OZGn%{7M`m3f^U?oOOFM6g|ZedhoTF5$m;TA>-
zM(^pnwlK;vWkR?{!uz4tfo>#*E=l|kT2*=<bRx{X7tRM*LC3rcK&Ae@Fq*Esl~F%?
z!hTi;!`rXpJbG>KgJLHDv|0zmaPMwia{vE->(-9@|Nry1%mc0X?6vhyXJdE`I`r>Q
zCUh|NXBsq>Y)AubDBcgP(_Zs<^xEcv%3Lv!-?~|6PMp4XE29Eq==6JA8I@&%K}Rxm
zgF2EIJiEn^Q|yZ!(`C0YIxyL#g5pbE*)b^CG2}(bK3E8`gVV$86i{G8(nHzwmD?Dl
zg#`9O)59y!nftw_CHCO-z{I(4`p<2Q(qaepK;>tF<iW?|nHHyjERmYtzk`u?df;|O
zVV^l5Q<{$`H2;8DbT}Dd(Y(Eol#vaJpk7<qbkKU+y{rr`<v=F(&Yf`|bhyvb37|0V
zHJzOdGFw|!6=EW2{Ug}vK1e32Lrqkj&bXaXSm@wxs1s*{rm1^PRqeoD(BHKO8oQIh
zt3px3s}QEi8=~o263AY#p9K9AK%RyyzAOdh_4Xu$carviyi*e7(Q9j(%Es{G-)>fh
zm(Ret#dZoP>fV9`u0jNYK`QP{f4_rKk}U<q-aDOdC!;q%6WBmlR+u|IV<)2m|K&uG
zEwHSRH+?!ta0x^Zngi^oAKS@zG3+WR)#&YFWpF(1209Rh;kBPfuWdglWI<<JyabIZ
zd-U4cfdtrhu`;}T4+;CXNo))+zU^dXczF+W2}E<903&EL$@VD7ynEB%?qbwr@=us9
zv76CecI^&W+TkdPcnR8C1v(rNoV&QeO3avEL{49`n^BRu_#fN!3%eP`nPhiNf4Q4c
zhS?e_!1#2!!XCzCp_^TxiogP_SuviC;YHB&se2gZc@(yTN_9{-eOlM_1A7>i!(Jw{
zF}!%RofUN8Zm(^30vp4ND<Ix}k6v3_5bqd>w-Mx9kjfn(-r^UM+mIT79^KY2+O{E&
z_8*&WxtCE|gaPadQ0@V3RqOiC#_*zYdd6Nxd2wHma?qka@CD1grqg3VZK5aB_itbn
z)rC|q?%TnMsl)|2*MUwTV1no^N%QD6&9a#OU@xPr05e2!sXk;fGi5sOK1L<U&D&TR
zUW2aW*#h!N?>0~w0y^QhbGpYqMtR25(=+xlDlnbtnBKLIQJzVA>-5$87!`#$wn9@k
z=w5k`Ueg@&>G$?ADl#!{o6fkO(VAaA2Apa@b)DgX7rUl=?`Krt{{TMg1D3wJr&oal
z4?+Z?MQzOVmHQbr>-oV4keu=8Jmt~bI|o!@Dr^Dyl!?F97L;hZtql)&^qRUu4z323
z-5$NYAR~NwTR}PZ#mCJc<;?u8pdI(kd$-*G|DT~Q-2<wRAEIvsICJ-cQn62O>jscD
zJHh&<2OeOQaJ>#W1RIO0MzAW-7D3R0U(i|%@VO?>UhLR{Rx~f4zU}~{i4MaSP?Gxg
zS`IY(91p&$q}SFJ!~iYj`4h*+@Z#uZP}`i<qis6hK}Kce*>RwgE<Ac|gFuWU9=*1l
zAjWQwUfT<?Yz(hAy|_O;<RGK6%-vQ{Dh8#W3m%X~*0A=%3#aLm4>BqV$!~(j6=)>M
zqt~?AWcu-gjEYPWo2S1z$Y^P20Y0c?Dm1PxZ-j=N9weYa<H_K%u=NZ$xJ)@A%0Yo{
zc;Lm7>4}FJ75HyOfa4n!1%?M+lun;;h;fIh3dmoz8(A5SJ44EY1kklkAYX$f`>uif
z1M+?^NLkoMu=j5^Pp>`9sLRd-5|iFIedA$9g?a&q;UEWk^!9?PvKI;)K(1usZv`#r
zfJLkOH?Si>E<;Za>p{wy`CHjR1Hl-{0iq8}MDGOYn;vk4QBwN)SFqt&6g5t7Il>q&
z)Yt@y2uN{qG7K~ZH2v)nMy2ed>p*e;<Yg>q4Qa2fTnrn-OCJdPQZyUGO9u#h8i;KI
zVMl@38lc&LXKNv4h+|l=XXiK2&_u84nm_E&`N36xLHC*7hfEeO{l`B2U@4<)eeZvE
z2FL-yhHF71sFnZO89*H&k6zYO%51PJ6j<-ZK-i#}K=3`sv7p8Ly{zjVK*Zr)qR{{B
z498ic|AW?bgEmBg_@GTY$65XVvx5)4^XO%r0?P26te*eb%|Xp@=t6I2h>>4GwOJ=?
zErj<Q!YhaHwu3Is>}0k4KmFi8MzQG&JlWYKKwEg9H-Lf@lCFDA3%{{3yhxbdc#Khn
zF?jm2V~oYj&Zg|sWsWmW=Pz^wjTc0o`ou3Fo9oCv{m^m76vhS9)lV=+GCE9eJi+M9
zm^A(92}W1ODbu-6GRiWRP1iih=)nBhh<$s`NycDC+qpF$yFl~QPs7<D7u<q(ytTr`
zAA!UXH#51c1jngIH)~YQ^gpLSr&O(&E`OTQoatZn^oY}pvSL$LfQB61C0x2Ez;@#0
zSh7#=KFz4boNmCreaC4=X-2`v%RtpOe=B4G%l#KOr$0HvsKEGTJL_4->5TRVDq!vk
z4q<~_A`5oc3b=R(NE~reO!`u2o6Vz}wYp;Z?Q@I@cIHbUNeDa+0jh?UECFS;Y6-~P
z#jM51mC~fe5XF$Ohj(AurzZ+Aiq+r!21`<vi$O{1<TrSd+8Yc_E*`zSY*G+5yg#@0
z8))eq?|i75gC4!S6QFFknwj4~$!q>Mc2N5Od_TwRZ|n@6ydZIpPS#o9*clQ%dRgN^
zJ)}<7DPR*>Uw~RNovh~|ymt`Z2?%d4WF=r1gtrI6Yk}~dLU_j@yfnz<b;CFI>G~HK
zWkop3LE#NbbD+9-(i=907md>sE-+d$eF>UA`vRjPqs#QY7Z^>&J_UgagS`(x*97%W
zz49I0clbG-<07M}*j*I46A-y|(}O{BlThS9H>MgMc#%AP-bF@Jad#9s&<#I^2VO`l
zp8o10qn&&cLh^;$VsIVZdVqiGVaU$WhUxB?7*)hV7l5MjuxDqyfJbjN`##X!pD%)@
zH(p{?2(H#-XQ<ET*EsRI(4*IMe*hc9YXgs7Q>H*RhS%z@hW|l50aHB?PZBf}3}S$e
zCaM83*gbkp=LLcqAD|mS&Vn{FcC#jxO#gC;@iKGvd{)Tr@`P#3EYm++X5?gwE}s7T
zGGnB)%mUCr;c@6Lh5sI%w>-LgSA6^b|3%mI{40#@OdRvK|G2_v$0%(MI{u}1>XL7u
zLl|3kfT`X+Ae9@Y2VP_JXOi=uzUUgGfsfuiP(jXEdflVDTEL@s>jjV++j*=EFS)=)
zr|C04(109hKx{WFXe8zTi=T5?8D1NC^qMAtrCuxsH}Fj>{HDuYXH;k6FPQFrol!wx
zlP^f)3onT53E%1E*BKQ<X3d7=2YBXTp99W3(7Ofx&H{xvY>)icSrEnG!ulU5beq^1
zUa*36bb^-NlnR2z2mGeLxz1?Aq?12g>jvXerZnH_7jH1i+PlpLjcu6*f}P>f*$SE(
zF+AYY2@19sw?X#wnp%M+eLDZUbUyOwUK{Zr6kIP|J3qYGHC^{6qdK>mFKBfMsMFpt
zJ^m)644(i@0JNDYZhGfUMrlT;=}T`iYD7sw%slP`@;Agxmrk%@|7U`nVtdzzjp0Qw
zNL6R6!T<mNJz7BvNJM-=NuM_mbVxbB>j{ru(}OS*x~GD+61+GtUHum0QAUsHZ*MWG
zux$sOad~07_-#g2#tqYLZ!_+x|2!QWYA>w8_Ea#w*ftH6P>z8n%{%YC;F-w^xgx`-
z^ZRS=V+`v1KwHv5v-;0wfLk)9uRVHAA9;b??a@6Kw4A~Nbf)>I7gMG~hU=rIK`clB
zS=7z?It!AmK_izUh6kos++h?}T0RXDS)fvoE%v3@bXJB~$TCOp$p%d?*(YB-Aw2!S
z9mYr@Yp4O8t`8tnrEb%;?=ounn9e|(AN`gIvI#Ul`r8;WKbkd-l>s~xdLJxp0E(Za
zX&|Tme~|`qYB%fF%;^j7GD_8#PldP&e2494&@tVe_g_4l3aTYQ%Q#K%f=&qmFXOxp
z5d@u-{n`z(Qt8EhP#);K0h)t2yzd8iT=6?7D;%B*3J-7+eBjY*dJAO8Il}|3{~dRM
z2HWbmTzUilTb_5}-)?n}@hnrl?lV|%e{dqGxR-neFYcw>AVoYVDfn?f*q{~!c!=-s
zQ&4fwdhP~99Hi!*D})VK^YSUExPK2Sh{30TfcTIFb&sDyTNAmxtPfm4YqePKLJWkK
z{nsJ92=KN9R>5ar%i<tBZV2xvq<lXMQTYVII}YKALs}Y~5S1Q~fx^R2!R?M|F3fCt
zptFG;Q$aBZsscdUu}^~zZ`?Hz7JB?G?W_#Ydtth!+dg8HV@#bM^N3N=JbWUkx(8j6
zyA-_SXX+C0vZ5FH6InqgxbwGyHbFo}M-IR@K`Kq0zU2{U$b91TYmXQ$nQ~pG3qEEv
zVcb96?J=VQW8U=i$BbD_$DF5Me$1%K#4};~ug8q?jJu~xJz?C)AE^Rv^&I@fFCZGK
z!an`h6Gk5<hQ8?<PZ@)ml>4UFK4ny5{6BrcQ$|nbVlnpZZ=N!GG1jLGfO5@?<2{gK
z)Yqfew7~(Cq4#b99r${(7nIWYTUtPsZLe)6SZXUs%J9GopI%mm*Xka<wt-I2gGnSn
z3{YGCyd!kvXqqD%!wdahaA3UP?E%qs(6W-bo0UNTG=0n14Qf1n^XO)s7(e~!b4CNM
z``xSzuaCYk>xNb(1&pjLeBf5%WypNFa{P4T7mQX+-NDoIUoeWv_;-U$=67xV204`-
za?aN~P+Cu!zVHR39usT#^ouVTjT0|)fyy#d#fgwC0`8}Mdhx8AmBF#m?&FRB|4S@A
zdTlQ`ura)t4RVFHN3ZP{5U;lzq|tVp9VozDI-j|8e(LVs0}7<{ZbT#NW9;<Qmy8PO
zYdazN7G6(Cf$Rm<QQ!q40-c~F1gj@Fpo-!3#7xiucoHBTka_~NCA~Ekln_Bhi9Of}
zpaZ3UPk-~0QIp9&cDnd0#x?bxQlRBFQ3ula^;lEo*ctfSn;5{8x2|XSLs+$uWZmW1
z8Ok$0^9#7{;16LHM3T`3$@qa}4)BMtewRd;C=8M@0m-c44`IEFB=b|2ouORnvopVd
z>jwT1*273r_hs1`%6vV#S^q_YoDXVJzp`Ot*cT4!D1(;5yx7};2)&EZ+go2V<}ya?
zux3L#9nq(IE2vQS>HPRYvmG1@OF{DRW-drV03xvvBmuu@7$ot%4KzXox-i3Zj`eh}
zw~SVdNz+^3GHRFvTZ2~X3&_@svoma9^XdGa#;@@>jbG#S3we;9URzg?Vc_kZAeVv+
z3z`1#Eu$r4*mmi6jAG16yPLo%*YJQx_g;_-J$g;An1c$cxfcKb|L?r@V#@U3kBotA
zmF8>=FKnl;`p9U&B-Awh&PT?Hvh|H1pO`K&10}>=pp*wU=0)uEu1}1Wfr@5q3>%o>
zzW@H>QUj>50oiDAuK`qHe19>kftBH<|BwIwUobR4(j2q~%Wpuf!5&|RHr_8?ftBWQ
z^`O#x-xYXie%%aGI)h5;*I!w|eM5Ljz32+KfV~af^b1n63aTEirtb=<G@o(>);9$4
zA$`M+E6~#1xtDda87Pogn;-^4`-U|TUOc4y-Ui{NLU<b>yd+48U33LhMvG6ME6m6#
z!VwHgSg-<m(g{c#{R^WyW8w6UFN``&dJWUJePJ||QUO`oYpM&P_+3AE^xD2K1?A-z
z`=&E~W%Sp`0Yy@2Ju7I%8tZ*wP{J1k-vtC(zFuzw;tQ}YXJemU@s&~CW^W+KT2Okv
zZvwsX>ZK`ogoJewT<Qr(3Us9LODT|4udTWn8^ena({F!eEMRj4v8$#Beq)RX-5dZj
zZ81m-=z`$adLG@Zv*F?~AaT%IE^vph87@8vBn~?34Af<0c;QqFN|8@Ix>+LvrvLlK
zXw1wl#6I2RJEJLcGcWt}obQZIf^{Zr3@^lMS)r#bb5>8^|D7?2*;|l(y2uYkV`f!B
z_UT?A#(4qu=?y;^m6+tJrZ4%ySi{6tHC^c^V-%B8)%3cbj7p6ErZ4=-=*C>i#6JDi
zPsSR?Gt<+5F&Z-M@tHpB7h@&k+U+908KoJmTgzA(3=e=kq~s0rXpue}!#*>3G4QY)
zl(cJCyoe}cg)g^z<260&52Li*+A>JWMwF&t)v(ob0%a(rDO53}%UW|9-fm-=4xTT+
z|A$eY@z?bKe;D1FH<htY-?)m&hPk+mb^3=@Og5l7<J!}({J~fX${(4h;rT;LACW)$
zUZdp?-_zjyA%dia5z2<=56jb_{9%6@k{6D%g7~0`#N({Sr$Kq9o&hvk@>dU>KXf4m
z=7K8UPF8gY&jef#vMNG&J0Lu52(KH`zL^T)2}5#AKZNH7S+h0~!t;gjx*@!9NWVAt
zH2d^J{}|=<i#<TG1j|!@_p&j(cvAujV^EWkza^g;<wAt==>q>5^<t+KvoiSh?llr%
zfSi5-YSlIrgT_DiT8Mze7#SE|<QKC-?=}FPefvVB1k}(!;@g?Z;Mp0=ajX?|UIgfT
z#80}QMu_NNFvZKRH+}Yh#wm<Try4Lx^HqWc!K*!AFqck^WKuG{S;EQyJ{$|Q?qos<
zE5k8RIGS1^RD!Oqdk^lGM}mCPYig-Gbpw-_lvN2UL$|R<Z|j-&|NnP`+Ad<c;8NlK
z)CWvDAqL)T3@>&TgNka~DPC+0FV+^bGQ9K!=Vq`Az!#*wcnVShz8j?Z0263x?)(4$
z;ORKftw5c}UNC~3<SYR4*;bwD35-nIjHT0i7@1V8^L0QT-FpFaen?U=sI^sc*`wDq
z21(c(BD}|=*VGe9*kt-^MkaYRy+W|#q;x>81})NDT*S)Y*j%H+0$zh_d&m>il$mb8
z#H66X;tGjZP{+s0r}M>YWshFl=UOnG{zafX$a>FZdIb}c0^_XdGntrdh3Y_}uw}s@
z3v#EwU}B1?&nW=4x%MZ3j_zLvVS}#&SOj5%uLGC{VS}#&=z_2-K*#>qLD=By0E!@N
z29P;v5H<&h9R*<vfY^Qzwgian1Yy@JfH-Cljs}RW1z{V2*m4lI1&A#KVLO1>Y!G$;
zi2W-c>;VrD`yGUR0_3<y5cUNS`x=CO1H?WBVIKgo_vMR&HG?lP*aVRPUt+LqdL#>z
z8)N+R1uRU8%(nTg;0p|xl=7$FV`0*E{h9~T)*d0nz~I$gqag6&395j`i_5421}_ew
z3Rt|@INgtxNyV@SS)4_|qkE4;2Wb6g38wf2ka*1W#jH%)j0V%svogtX3xZYIzu?Sc
zh1{(0c{>jqQxg;8vFZIBO!AD&rmyE<5|`}D0cGHQmjoCXJbSl;^7by!evcPr+wXHQ
zWw9`EXH56zWinu5OrKuM%OuD6aQYlxCKbj#(+~181uz@$MlXB~_?SeP1T3e!@i7@N
z=1ec=V=`w_OP#)fk4ZVNRvxrg&2*VOBt3$TJxY`Z6@<4udV4{=B;U>lFF4Xb<<Nal
zI+RWWWf#!A>)wsW|AWqTc9Caec)<b|=5L7tWm3>Mz_%A4Q^6|5!H4OadVy5ko9@WZ
zB+pnfJ&~VDi7{|`3qO-e{R%md3sf)4AzaV{66*W}b%AH+jTgqL;D(n+ujwW^Hij2Y
z5VQ3_Ilb3(6-Y=QEX3ck3S4l5u0EX&5|)4pgC=@?I=_RwzzP-u&EA5%U<~qu9!TlC
z6p({U0>R3jy|@qNmV)~E9=)a(AQfl8LM7hQ7n(AOn4~3x2SWH;LG8|$r$P4in%<Lz
zbiz!f<iKUjhQpvhnhFX@!vinkr!Nv<QcvNA=q#!9>D{{FG-!_7_Mt2&6qZ7i&)skw
zB&d5y77`|)b>JSIw?K{IKOn830Dkv^AMBb^anOiOujx8jHij1<S<qx<029OXi_T2K
z%+Fs;n(i#fq#;tC49Wv_puH96WI-+yy(&AsUXV$V(Pa8UK_-!U`6P&MT9&ghF!=V?
zX?XOSP6n&o3vpC0$WfrduwO6aL5}D(?UH3<0ABzMs&yihL7~UrvIG(i#mI8DP&rUm
z@#r;;MwU|q%aynlfTj|WB{(4xpgW@ufy6;IHprrnNf3+XgIcM*rdvRApp63{xvSHw
zgqWlm_fMZD#H1i3mk9OJGRS!1UYY49gqRdV#gjlCZ{`wZk6zOaGN8bKdJ!B=pi~Dr
z<mr7PD?``Z1E2r@_v{Yi@aP4r0`Js(u_6I#v;oBE2AS!0!c0<(E2c*ZGs!T;%1kd8
zW|C*Ln?7BbNnTkl0aQEuXDm(g0L4xdc<qNNyENSD7fsV|3NslCorDM-xc~qEF3`5y
z7v|IDM3|(R7D-KS6k`&Z?k~c`8odT&cX#UwaLSqis^)irCV;@hZ~tCAN?>K^-U>=@
z9=*1yQlJF%!UCkD*R})91MOW@Phe$ux%v+%Y3>DC2Jw_?-1PM#Oh&@rq}Ui<^S2z}
zZ@B^*)9>Z|EH(Y21e2JcQXHt-GtH9%ZQ1+(f;C~fv?!Cl(_WCd;Ca>71GhoTV^~0!
zsLckc>g|OX4{CCPJY;y_#g<rjN<1$K3IWl@Qqy}xnPi!?<EF0`Wzv$Xk7s3g&Ea^g
z%?Q*F^yqG#aQOfK?g$po?mCVaX45~5G8r&QNljN3V=`5*0-J^wJE^hI*m(;oj(Sb)
zBtXF@R-XxR|9VM~`=7t4h=Zi0`w&&jpu&k@VUO;)pb+M7xdM@$0hM(I%ksByf>$t^
zPJ{~UK!w34<Mx_%LWM=4!mglzRO&Ttgo^)*g;?zj67Mywf(k#MZXwR3ubvwN3L-R5
zMZ`co^#GE?48<XyiUE1H*L0Bt#8cT&lRrXK&4dbvfQ8|nl81Pz8!BrCmgR3*01<A1
z3d=)<BOrdQfeLd#g~LF?O1-8fQ1Op35Kr|(@<c9F_||k+2_^;ZrO~XQv*5dVpXp66
zkYI{uQV<8HDn{4oFC>`E;^jd8YyQDfD%DV}?OZD2(QEorjEw=D4?rVUzaqhj?>e&B
zGq6~(7Pud_6O_O}D(`?rP1hr<+%vsalF72ZEgCd1@q@Kg(F2l$8Y*-kc6lMIj)s_E
zfh^_@5`!cPkKST!R4dIulD(#!NE$pl@4XO?WMz2i2fE$5^<-V3M=vw)eo>I8MOj@t
zPrSH2JxGelzTPo{mEmQ{umAs#JBxt2BOblB0%D+i3pzAkAPVejRWVRb*$XOyU&Ka1
zg1G?_!=gx1PGG5$A`ggDKt<N^|NmcTLxfX2dQJa{A`B7%3u~5ydGwloLK6QQ39_KX
z!=u;q1(NWy>6X$=PNtW^LR&#jF+A|X6y)*lVARslECQNT_koKT)3c(}H%K$dxSK?R
zYVqeUmW6}byuG0O)#<3>(H#gmRuR;XcnXpN6_UAsKvke=C)l>R;3^1I?R|UU89BXA
zhDjQ9KAsGdvGymBUA?yIqM#51m2KV;tPDQArj8gI&rR=@VUl6e4xheShDp1=4y@7i
znFy%0bN_{91jy6;E!!ZWdIcm5De+&(fu(%9w}KqZ-?9RtVjGf*Kj9F~iy=}Ak)$3%
zrOtvfORs4UOv>v2{};!gawi~iWiYw_|6i<zN`bed_nIamNllpEFUu5Je?|!8V^A77
z69!Hr4}}m>D+$%!3vtjzB&mO4Ah(v(d-R$fMG}4v5e7|6?m`m201*c5OkIa0yfe%I
zY)Ys{ujvvb@kJ2j?jF6iGr_{JbfOtHeYzZzooOYC=<QHYLO@GBcS4}4Ck4D!*R)t@
zI+r|?O#Lm8;$BlRVMv6%3<bG>zcn3PX4$d}!-AtA6q3qRK;}R)Y^Sq|N3SWbFsO)p
z|6)B@XGyh3uPFmmXbwaO<oi!T5LKNJp>&U4(`O(d+s^kd${=E~p!pk+Sm*l}$q=Cg
zk6zQWP@w>b5Gc$JLWOLnKayvv)9VxjIr2p~*kx$mjtGW&8#1A7YRCsJ-%VpcihE6y
zK&K4#f=hs1pi<(+q!5t*ORYS5w{8cw#BJRnroRkkWtd*)%p{@mI0$NF_IGe*Y6qP`
z)Qg;%+(RIlX~}d$MJD6=4<I-6+Ny#lC_uB7p24gPFCkZayD5Oi6g_%v6A-3=_H5sK
zp%M(KuE4DbP$t%d*}L%@sEJ|f4b}l}K6&(l8@C{hw_fOitur+iU}FIL34H5FdN8`b
zWWde=4H+siNi*)4E~~^OYjGhEv>oTbchETr|Nnb*S983$9S9oOI0j;S^qRVXEfp;W
zQ@qUrp!PNES>EYIN=&M1wt>))Ir<gs!Z5I^y$8UzCr&-^7(8g<GJUTSleGMw09ME)
z4~Cb(*8zNcp#aj|T@7kXD+^5juEZp#-mb;Q@L~g49NcaIIRbRT+P4?C13+mUte9J1
zx{WfE1e2`5^e|;66}2dk6sWL!^abn+25hcKoW4MrNlk(;fR*9@>C!i#LqVX*9{>OU
z!g2aNWhR&U7yhga-L0U|=yVqF?7ZjM&F0bBy5R8t|DL^Z8Xmo-BB12cdH==b08r@i
zw@d-8-|sbLf(q|}3fDq}--B%Ey#Hb;R5*<nwCf(+dq@BsThuGMikpq$g^UdY1NijB
z=?hhu>>0mIf2hJFq1o#PiiS4OZJFQ}o4h}We;nF|hO`G+7#Ln`p01?I<jnM+e|owq
zlN@99^fpx{N5yhqq{IZ;uKLFpHhKlV3v>ST7phFUOu~NC#nqTh7_F!Ks4=N2W%+@6
zsE1ywxwif<v32Z?XY@=y?$K*<6tuy@qx1R;&*@XtnBo{8P5-RMq$2W(54`-ZlSRew
z0Qjg`)8Bm4wbhxV8Fx*0S7*{=?3`Yv&Q#9$e)>CgrV=(jUN(jo;nOoTm|Pg+rmxjt
z@?zh}!^ZGJ$!GdM4JH}3DIm`O=?a=mqFD_f_7iV#D7S(;qrH1KTn0yP1`iv<YxmXz
zzMX&gTl>K!^IlN*&!gAW8Ki3+SXXHUsM<ac)?o}1o(>UC1PMb7QUeJ$OrNjG<f|&@
z1q!b^ju*xtMkhF!AsMlEE-0))`SHkfK`kcP`Ym4Yl*q!y#$b5qMTr>$11SA9ftsO^
z1RcQ%k}*8+!o-Au!2?pWgR%wK%ooX?(0udyE!crtoZvbKq~OI_knx~hJ*I^-L85aZ
z*~p{wJZMTV)C*Eev4C`R-hYwe#mdmxT5<UQe`v)DPAftnPjrJ5+5^zRO1+|QIoKFp
zoHd2G^EneJ9ma8hu9jlhCj%N`X_?Nf&7{b<VY;d|ldjwh4p8C!3)F|Z4Jz_lLCqAO
z-rfz@|Nnn6ae4trsrU3r+Dt|U6FgZN`1j2P^;lYOSBQHgANJ_xZI)tZ=yqwe*$L`V
zDV})E1HL`4^ZpAx_vv4>nQWL8+@~AqFd508FbCb{_{6un7IaOx{fj$ptPGYnO8Fi6
z_ti7LI5)jnhslIF_dMJ5T{=vq%zw|ZO*hhIDi6|jgM?peE4UA6TP)AU@KO;pX54GL
z9K;rduz$<3F}&o2u;oGGe?g<ny|$l0?2iyONd1co(|_wSX=pxoWo3Ydqht5B4A8Ny
zy|%sVYz&~AReiem790kxQu+0wc)E`sQzqlZ>D%;}v>2C7f2hZ###ld{L!U`TF3AOy
zhgv;A{Yp@xFnsy{KXlp9^B1nuo%ES*GbuVxmp5RNV0<{;!hlJJ@znHC114AYxvZcg
zlU=qiG+?r4WDJ`A(2z-$shVXvhY^z!<ErV}Mog029lu!_Ub}kqn)a|v_cvlvwN7w^
z1Vzh>r=U`5`U0?{P4z)%DM9KeP$hByMT!$BfrlfSi0Y2h*Bdd3##{lNT!gGr8(rl)
z2dEWg5GyQ1!6VeO(KUW@M6+V+bOmE3vHDVUg*(v|*1&9FdHVmqZ}0XQ5KqMZ0=3A%
z6)o5kpn2n3biEERy(gZ417HqBFF)8)P-R&UTIuEP2-^6(-2v=$TMcG#1LA`NSP<eL
zTWg5mZHS-^M5P}@@R$S0Yi1supF9q}0&S~KhlsC(D24>OZ7)P{CRlMj$BSR~prjyp
z*t5GHRLLy^J4tj4^K@4eCS%bUduUYzX<UJ-x)*b%_nI(CtLcC=f)WpC2eU`7X$V*+
zc#OfLcPgkA4>@$jgvm%w7%T@4B%j{3pt8!R*Y-OTsGc_c&oo`mlu69&l|85+EpY)4
zZhU)j8^X1NjQgEuVq<u50wQDu5jp}A+B!YUl*zkZ-VPl5C7$3i-ly{)s2DP{2aWyw
z=Wq4=|NsBX2jGUct-J&q!;5EjtPC$}9)XHATN#kRRXb47)pLNV{d+IiL8c*jSQI4N
z32SWp03QY=dY+Mu!SEz#pihHgx``Q+G-K=Z05c}B`eR^uP^3c7x#_fHW!R?!sslRj
zznB6tyY)Z`GiU~-^ZtvCn&5Q00vr}=L7@gZWM>0NRc`^CPw!GtVC{koh&_KX$qv-9
zcI<FbVFJ~cD{VkU!Cp{b#j&&91)QiNO;bQ-b-sU*12&|B&9is92UyBf#~GZYe%gYP
z)O3(~$L@ZJoUH{DNDkDinqdnI3{bQ1nhk{a;`MYpb0%?4bFlYB?U<&=nKLOehE8uV
zXA-G*uz^GXXlRcgtO6||c!Lb>oo@u13G3au@i27M3shyb*n)D9?Q>9o9soJut_>^0
zYtT8JL1JtSFF!zv&oVJKh8O3dj)63{7;QjfZS@kYJ`tV2`CI33FfjOZ8-vp*D@bAI
zamVI57SOpN9Q-Yopn9*@bPMQUu3ph&jBE@qax|cAn(d$sqP?a8V26WKDKrs&n4WFH
zq`>Goy~l#dRmRd9RH=fST0Y$h&b=%u9?3tz#pa7y)8AS!88T)}m$zinV6>m^VaX&X
zrC<eW4Yh%0RXmgTy^&;K0N>61g2QThgC$dj#2ZU+pz*f|f$qva07=#+|5&G4F^Mz2
zoGxL-v_?VzrpD|ysG$l`ll7N%`g&U?Np?_`_kzu8`X4K%O0G5kK;bC5{U7V}dTS<G
zE;Z2kUA>|c{;^J9X3eCn$7}($uKNzC6%A>-_D=SJq>a~L-OyzFg4uHVe`_Y`D0Z-@
zsL(%Fh8KM*(BLuy>xYa=c2|H(4GxI1*MC_ddBR=^s+9W<sA@Ll1j{3b?DOd*HcSfH
z4(4Dtm7afj95kE=&2(@_Nqz)%@VA1p1t@2Ke_;diLw7Kwh5!u!{Wk*}z~9mi(%)<P
z`~xTuz}^6jxE}`v8mLHSwwV6khDll^2IRy8FXn>m?X@itWMg<Sce<V}Qxv1m^iEqQ
zW#%=%z+o%LXgvL#Ez>DRo9Q#{nB<uk`~(Y&vH5m>e4%YN{kk1fb?y!mP=WvlWcOxJ
z{Cf1-a{UBl(HDWHtPI_oKY+v5Rt+L%3l{qV5z~W+X@bRmK*Y=;VxnNNKM*lzh!~^k
z^!@fs28^lGKiD&gC~8<ia_fDN-`<;mLP<3OR1<*)PM*CmH-+@|rc8HqVA8374svI&
z=?+V9TMd+GK%w~@R7h5sfXV_hW@E=rGtfpxh;0fW4baHwuI2z`w|_6fjX}Px=6I0<
zVnDhakk%Qf<^5ud5vU?*2F=oSJB##s{A>Qn#NWio$iOiDjRTV$-wlv1NW;_gH|ul>
zM<!#YPNV4)oS5Y5GeLSmb;)DUV&`7dJ0Pz>>U&TLaRH>Yw}RcL*R;3^RB3?w#vng@
z18u$nJFM4qBS=%{{TGX%sy%w=g2u+d%0ON<0E^pB{soF4XdQ9Oh?U{xUJ=kNKf=2n
zy{2qGS*QPVWKv<=G`-)6NnUr7AvBrsfE)-_+B-P_97m=ne!vr*;ei*Ersq2`$uqiv
zbuy_LPT%0fB%_gmqDBp5?{QF(1R0z3faD|pAFR{AI5AmjEH?m!HQKPjB#<B|lmbB-
zdri51uuczkW>R44Hk>Z)!Xz(j2UGADT-ll4{mwdlr8AQ%qtW#9&P?LM@ARR*SPzk3
z_nme6PiH0t#^=+eT$mJuXTjtnA@Y{rS*QEDFsU;28BD+6%p@l61yjHcR^WTaqt{gT
zJL~j?E=(d!-VjCg>@Y<qz{54B!rwum1Izp`@<5IRN2V>~cTmFJYH%2mOaFlq^H-4W
zUelM~K&k2e3kQg5UZ38jCJ1GZUYvs{y8u-t2~oxja?e4KSnpgNuyRnuFV<%T-6tBw
z_Sum?ibn;s9Km+kH&%uXOfTG~SGqE(x<`HjImGtGH_&j>uNUmnp#D%b$BQC8P&9Od
z(zHh>BdBHpEkT2-dML%f;9~iqRNkZ47Tk4tHvOq9lZEYDU63YlsQ}dx_l*^Ff{o#&
z7u8Zwlb?YUbvAcM!IpY}jtY69r#n5$jmbi(3e*!a)?;OOxtoQ7!SHs=ZT^;xETEQx
zZ9hm#LT~yOHzsw)pVRNSG2L`t3NozqK&cL-gKP7ZmEpxisF(yq%nc+~3lZaQIR`nG
zx7Rl0E6B(1UL2qP!<|V@aGwq+)WLZe<n$N6rt5n!X$$`P0*XOVmaia+m+vd<^lT3%
zh5EVLp!)47q)uW4ONw6q!piVMK!Sn6vGX{nHFY0!1Y4LkEBGE*$RI0!E9mw$&+a%5
zP~MIJ8*&_C$P0)?lfJMryo9WYHHF&!@G~pJiyh+NY6aT+na<_O#3wF*tbfBxkPAgm
zzhj-Q@5v;oaYzef@!L{Im~H2^Ku(6*Ht`);b@pf0=>?ull8lYhyF8g>nDn%!ukd8j
z@csUYmElFDHmFs~-@*yLod`5%E(G#no;D;WwJrl6`T`O^267?Dr=W?y);_qn4M@G+
zbXhMZc^k(skl?P;f;I_3jlJVqpg=zi2?0Zp>hB<t)&r$c5HVwr*yHIHUQFhkxt~F$
z*9#7<={vlbw544&L3+W-2ozz4mpr<+f`)=#@M%u}=f$MM7&Beln@LutOC40qw`E8%
zFf^ZFYW~4o3fg2Y2WkbSPfzh?QfK@<y~mqLim_?>a&IPMWdjXR^_3&V!0`W^N3ZRU
zKVVzWX@COE7SvaIac=rwZzgTFB`lB{)Q8DX;-oqxa3O_!@gI<4(TRUpr<eOMDKNgD
zKEsDelSx>8`e7d?eYr<!;1Db+0{5CcdQDZq>ZgKgrxzcm3-~hG%EmLZF}$cyXJvRT
z3Z26Nm6MR#XyNoMUnY6c`5<E;brEP(!K2r7+HcnB^L&}q7!OT9>dWM8ct(|#!Erx$
zda?BY!a8lxL6W^->pUQX2ELsSd^=yhI5FMQkEzNqT$Po<#kyF4zx6uk#Iau69gJ)Y
zFE4@Eh$0&i-WsaYpZGCZaoK<>p<dCLU#!zL{F!9Ad?0+&U#!#p{h5qhgH=#ER4(0%
zLG1>Y&gcB=|3g}bkCnku3R*$~N=YpqObiVC;RilD@@pOW%pb>ka3|aJWByEjj0dKR
z1~4fz=lo=yZXLiR$GCiYQ~*;U6Q}a@vmoxv>2Cs<^q8}DuuYc@WKvMF2Ss*=GQ7v&
z**zcJJW2iyu~$=RdVC<05)-S^^yWY&UB+wEHwH4vGVYjuK9EUW=-78whL_htm0z#z
zs=urZFAh)V2x8LZTdM>r?7%~wLO)oiI|nhDFvd==2x5|B{4jlb5R)A9<!x-!cLXsN
zGOnJk70l$zEcu;vdQ~u!n$jh3ISq?}E#P$!tvkR}?;g-xmi_cY!Az?dGp6T;FljP>
z+QK${W(boJ+eeV~zouUdVUn~h2gPFN{TDanL5a=w@h?_}7iS=B@!zZrFAjj%o%dht
z0MUqe1MSNF$~s*=l*xrjT5fu7D3dhfzv-Q!Ov;S6rmqcU(q!B){dy>q8gu(*wrOEZ
zmdu@BSf|^BF)68)$%2zDe~Tguc)OEFuWSsc(CWPR;;kGjgW-Qr2j=ngmN2F$(f6Pd
zp;->Bq4eNuThNx8rs<!<nAF&|fTTR8%ZD?m2u+j$1tGjm`~OA5^w4l7dFHs!(1^{R
zJ}sOnjPb?vx8Y2x+=ryW2J*M$GEI*UXA))J^9ibM?evfcrZ{dTn1Zv65Ct|+1x&m$
z)4zgLG)h5@(1EI${Sj(J&h)8~Ozq4W>)EEuM=?1t)=p1|Vv=`U{sEl-Eu>f(UTb;u
z%3k^kN~8B*7=sMzwVem5T+~7A&igOqr9epxJb?zykry7aPCpREw4d|cdr<NB?}hpF
zj%X%*#^C8YqM2N{8`gr?iSueKV4Kb!!=%C3KiwdPsf78)8n)@nW0(}!1m3bTy!bTz
zYz&hF^P4xU(*<IgbeZkfuuXS}WwKy&n_d~qq@=qLR7h%xvogH2{RkQW`|WY?g+l8A
z{=SKzk~sOdtKk!$UelB}AQ$|eE*Q%sG5tX-lL&LiYPRX$LFV*NH;7}pYvKL^bVxRM
zZ6>IT%_9o(Y3mBmMOU5AU;Gt;6mh+KK`SZ21Erv2?I($_PTR!Xq&iuYmEr$kkJbYv
zyI$Lav<E=cLluIrl6yJ*O+1qU*E?ZQtg{+EXPf?T6SKVbTOr6AT*q+7FvpN!&(41@
zo`}Gf?lT^4y<K7Lk$l^y+xFel=>-W)O3ZyitkVtGGaFCuPh#bi*t+BQ|Noxg!wxH+
z!F}+;VfxDiCKblx)A<sa%w)twKt&;FvAsv@fl?pe)^8<ZKAq1&-TdFv6B3!^7{jL5
zCo;)!<qLrwx9KU{^oDj;1(sYvR)*;xHnWOMznjR!&y?|W`nyCX9mbsL(n(B~QVoKv
z3>z82h1DW(!veI6uGjSRCD!SANlY4cSs>FO2WgbJLe7tXsF-;PlxwG60B`H;1#Qpt
z>1{m$p1|ro^ZoyS$FLWALesA#F<CL5o6euiq{k#KG~GU#NtF4*47Tav$xMpOTV}9L
zuTEy#$)xajx>*X79OxL+6efA52al$gr7-D<iroUITwwu_O}1WdSQ%aj3rydc!X(XT
zHvMV}C~Mzhoi3QlB*(aPx<M+F40FLP*6IGKOrnBw_(6J1E6#yZ!2K7i`KP~0XHo<$
z^hss1<`9P%{B-)QR3>TFu)82@TtN3&eCq54kCAWVV`cE}l}P~)5P(`bxznZ6n50C5
zctPg17Cc89a<!Z8na0%3x%&<%b$);0H2rQGlT7_gC|8yb(gtaVH2Yhj!fasS5?ha6
z(^9C=XI_xX5-pEj(=@2i1Bejl0F!X2&{?n$f9pYJ(C!s2uya523$Q9L0-Y%zcM!DC
z^Y{P%(<{=M#F!tSW}QAUok?0sg9ln@EEfiqe0w{dgT~KHkDrDFmw+nBU%jS`XF%S&
z|H5SY>vSe1P|C|-a^w=b3JOb6=c}yKBQu!%taQ1NQesIp=yZv_7hZ!6^t}cOghw8|
zy`U`S)7yIHIcN-_cf#}k|6eHbOn;ccq{1Z0Go3w?DTevuW!C9wnM`sP0bEemod@kR
z>oq+Kwh(NlPw&<X&mldGPcK5aK@KrBI0drg`-|l1dor118Glc|mC2;feD(_Kbe=3G
zJ&uQ0K+*Z4cDqv+lMoa0iGH@};W<pVq(a$P89WX?X7cE41;w#P=W!p<DFL@$7)|%i
zWs+h(KAmlPMlREC#+}nu@|aY(r?7!e(i1SfGmUL}a30enE=g8M=m@e-f1k%B%~te?
zmEpzi=>qvoiejr-L1hcuYblT9U*HK3kIu_49HzVHGtHDQVFfj0pOh~4=myVRzTjm6
z<<Pwipg>_{nf^bYNuTl8bo~M*3qjk<ATNsAfhk_M%dFEY3Ybip)S0KRFJO|9`UlQ*
z;PMN!k{Y~d8`MjZWtsl8fJuROG3Zn-$S?vQ%XFbaCLP9C)9nkHj2M%r7Zoz8r`UoG
zm<oy(k6uW$gfN2!en2PwPC4kvcovk}Ynj2zZ<xw^J$h{=E`h?+rSsj37fc{`w{8F>
zp6&|JfNS^G9UxCgGqEywCjW)BMY^W{Eo5?KoHX6Jh)F|a)<uwqU=~(@R5wkpFJkg!
z_P)qE{d5tN8oSv=R)!Z`Ow)f9F{#V`xxmWs;tnHdniOR8{{x+^AR07W#Kbh+rkKfz
zv1fXHF_R0U`}8BlOxhgwXF$$-abo)SVkQkX-Mg#|FP2SLEn!mNQU#^vUQyRGtkeBV
znB<wQ&#+D}EMbzfbp6i)I(nDC<p^YLqBK|`IK82SswV?v{kyFo#E$RNPn0lO*8e!o
z%J8D=C1@NDUh%(wvG*Sf<UBhMP%j^}_yja~0qR^_1Dzz;3%<<Iqqi3n^e^`OXJP2x
z3d$q@&w=i31_^Fp1YP?EGCSr!3;2c>6K)0u&(7l>-E+Y~4vN=*FXm5gC}px_p9oUO
z@PGP&QYLfexu;pD|0-otWL|Zeb-G*`lbrC3zfdoVLl${W0p;{ECW-o)|5(6l`fWi5
z7#?`x{*Q&hBU#$x|6zDp_va4_g9jwo;bJc!Vl$qD7FpJUh7GGuvoaW7GCc6&I#?_e
zHmvvm1sBZjPH?Z+Gz08^aPS)P9q{O$3yM%ss^$AP{Yx2>jf@`1FVSFQLR28;fX?W7
z{r~@q&gnkoOcFdCr$Jf%l~3nS(ClD2lN<BhQ>@c>mNUty|Njm3X&t15eSQj*;J~(d
zKmy(Hzzep&)Blt+#c*sq1x_sS(-SI~Jj}y>gTnd$3%}ni4AAWrp53(^FET(zb{+<?
zL0jQL2Tt~isvHHG%bRwdb^84ZCUfz9zgWN%{hrCL0v^3K4&b1A5j9=6lF5lNb$UT1
zlc?McQ1#P0^}>5l;Rud-pWaqbS?JsO@I~D8#g$CC);!l)8D4Dt#lrB~3e-6QwLxF2
zfUJHk>d|ZKd=BJb(B(F5zaXRG;BE^j1YaDO?p?(c%9u5MVHHyhW9RgLRZO08-QQUl
zoR7Ph7Jym`|C<Y>7#JME_i%Z1vwl21J++!ik!8(y7KZ5)JlRF2&#PwQWLkTA`pRl1
zCFX~{Y}3zGGucaMonU2n&A$tDX*Fa3LhS@A!wb>x(^YGj)-u*izg)v)shM>g6eZtY
ztoqKv;MiTB;@R!b;n{h@^WX~wP>o=l50-!RqHDToEmK;3@;4R+&+a`cptZ#>!k`@R
z+I!D$EDXCqmq3DBGyh&}2T69`_w2U!Om^q+$ov43^JqMl0lLNS7g&<r@xMQZ;Ww}g
zLAmU^M=x*mF;)iG&KEB<zOpcQcHV!j<Iz30;{X5uuPr@0|G$_nRmUXEX$n>IeY#m4
zQv}no6VoTuG08EuOkZEeq`=gAV*158CNT*|un9*%eR7Xp)2HBg7d^d~b^8B0CK<-;
z=`!_9T8s|U-RqeY8FQv*)-&l#*nEK|!q1><Fu^Ag^qNK;Wu3mEo=J+)Z2IYXrgY95
zpFuImDt&yqbpw+M<NWCf4NMa1ZJ$8_Q)lp^_A?8EtKol-?p9E9(5JHkbW_#qd7$$q
zX1<s*eSQOzy15w0o=#?uWN!|S%%9+ZVLT4LLG#7Ok1Pz`-W>lAdUP|t7Ke=Of)u>y
z`NT3kelxStbp1vq0VdI7(;XX`Oyy3wurh$RD}Y+M7e9kC!d46L66!jR7gMKCX=L)R
zcR0+-@WSjf3wZ4T_;kKb(1QIikgz;d*aI|92o??j33EV&yWqmoAmNXn&<*hg3EzSW
zgRdY48{!EPJ`54AZ&?jDB@raP1|r_F9xglyBs>)=ycsUM4<uX%72XaPJ_-^}hYEwv
z9)%3i+yMy(fQ3t9AVR-ELT<KTG5(e{a1#`durj<*g9>ke3!8w1`JuweaA8xB@Q>;0
z%}lb)Rfk!pyEikbu$?=|%JAaJ^ulH)VdecGw)Wls|6i**9tW)!gGY%+ujves<htq0
zo0$~Yj_qIt9l3V4nMp#f8{{^VkB|TbozV|*@?4Ox?8oWMEli4*vk$T|yac6w$K&jv
z``BSI4LX4WBo+Jr|9{8h>>w+Vq+T6logUl5Bw_ghq(&X01~h$%q~;$;3Ur~S<8gM-
zxD1k1=pokW>spv3<dP4uGQ7M7I$xo?6_lntx&t7kI;a-^IQ>ZrlP2Te>3pqBN{nIC
z4O^LH7%iv!wK6p@vAvsqp_NIU={@80pRG*tj4!53wlT?wetrwe(nmonlc1fk=P$aa
zd$lpiGnXD@ou1RiB*$1by}OM`lG*bh>-6OyzV-BDZA@$GXS`uy08PaH{{P>Fajyw1
zfzN+~YNAK)-UXmtX2x%z`FJm6%GaaU^yU^;h8GLpLd08jL6r<RrP>}~Wq8pE6BmVx
zYl6fJq2kj&wlm2y-`x*!l=}HMET9t(KwWG87EdMyh8Is?qdEkX8*8UWbTG*>PMu!X
z!BoKbZu;{MCT*qvpo1WLr-GJ_dGz)!0Qa+6mw>6>6`-rT&rUb#WJ+M%Gkt0&lNMv`
z^aGtt7waou!oC0U#^3+{n}0Bt3W2OQyyVeqDz%rD;RVArP?cWC@d7lX0g`%=^b*ZY
zy-PuX19IBu7tnC{_Ur%umx+v^Wj=M_DW-QXcwe$Gbk79^aqDfL?!6kH|NoyZ(9NXE
zxO}=<H<JQm+w|~mCKblS={4O<+Kl(7ujpn{<$Pbu#sC^x**X1MH&cw(uA{6BFDAcW
zVQ@SS9`6Kg7y%!tSqPG-dI2gSK^u5~?V29b!=%W#b$VS7lcs3+a~1~g?i%wCFMOe_
zA1|Dz@9ANZVB&Z&{aO!`JX8Fx>EC;pOu2tlg9a?(SbtQrO*ijll4rayJ-nAmmRF+&
z)PE9mz4AKw#j@#*y-X^}->V@)2VNV!D1FMp@QFX_<Y#_C-wnrIkARMa2eEH_;*UDO
zufcn|nvH=!`~*m7$7g;)*9#uKwHrXgNub3~9^I_TJ0bmgYu68@>>kZWJfdR{ztDL)
zouiLwTK%>i5Xny02QTWLf*N0kLD%EK&b|Q6tO$dITMv{t`}FR803Ofy|DxdH|NjjZ
z45dn-Y~==0(0Le|KmLRC+<yX&tkTP`c|k3U?;z(ef|PZ$x<GBTc70IFC+N|5go6ci
zyI!1QeC**DY)_`^^)odEFWC-r)&-AVR*%DwExn+v?M6^Gc<V0cNazI~y{uMHL68E_
z(Yv5ijo}J5c=WO=A7-7-Jb_8A-t-A5FymNfSAyaqg7tMa8^b3Lew_=B&3_q7#XB!}
zbe9}m0BZe!4&OcSBJ~Li!|RadUo7QFa{CW~T1GECL2`ni*-tPZ)J-u1`McNlEvP^Q
zv5zx5FfcG2cjf>^n#T@?=_@8MiE~R<f?`*ImA8^@`l$&_`rNlGzyiG2E7+#9Ok~Pe
z6a@<idfR;Fk2>%f9Qjd~JbG=l53w?AV1A+Vc>0uyOuEd`S!~;nOk@&eWUAgW{q`g#
zX$hMLERY*eJeuERcyxaD==|Z)&FiscI^Sd_>H6~zSQsEq^5|xj16|494Z0Npk}fhp
z>Eii)h<=Y=+izyD{nkbISs0G9J~D&vw=O?`h>-uG5H>ixKl9h~9y0^)w-)~k5eLPI
zFGPJk;@0v_W}pq%JIp}U00YBuRuCUF9ekX1jTvMUwns0k&H+%bmvtG$K<Hh93m`nu
zrQjZ&te+sfD9{LVC+iY3&{co2he6jMf=}(Z=Fw|<UW1L{#lHJ23?2gDV>?RZAoq+-
zy2mnI<0y-cPz9(g>AddQ2|fM(;il=OQ<#+e5<z-;=YsCf1UF;BC-s9@cszXJ3YIgC
z+RqAEmkjE<wm$$>j3wqCy|z-IlKAs|7WkI=!cEhkPGK@*ygOZHDpOc}+dWX>xE0lC
z@UFs#FS72jFo0Y1yFl$|sC}W>1Rd_NFnILt1zlo=a3JW?a`k&G498m&{{8<CN`4rI
zacE&P?ekq024rKtgG{<N{o_<75w4SWK{lBh?qi*9IgLq;apClYX-tZY_S2iDF)4|K
zVAE+2))}n@*4bO~A2b-#3ThX4^qTg9&gbo&3UWBO4gG@W9t(qKGP_4Fi^EP()$Z~A
zp-1OoPkx8HpnzR>8&oSC12GqanV^Zd7c-`7PG`~($iEFLwOT=UjDr*;Oi!H7q{LV{
zy=6L+qE7G~EMaMfO;GdB^o!G(WWu?zNq)PH#h8a6rzDH*1MQgi=-&GQJk$5^#VKrR
zw@!DN!PLTNF#Y5VCRuGE6eZAT|9cDB4yfRZ>4GzvWEoFQ*PqGM%+7Zc<kiE|H_Tv?
zkXOG2>OHrD+Cv__A`bgNjU{Me;km`aF#W(xCQ%_o)I$w?G+lfalN{)B=UGfmjDM!@
zoW<nCcy#-pSxko+>%U$F^%B57dGQj$2Hht9;x2>@zBKhBg#80_>gCa^EDVMRUOoel
z!`jMk2bYSwuCp+_JO>e)vmMmIybd-Mta~y<H`vs62pbe`FRDT8=<dCsSbUKW;&kr?
zTakQ~h2do*sF88~Dx_qBA2#7~4P<ULhX?rR9xIS0_}vUfP{okLCbsE7k62l%3oFtj
zuY!uSiMsG2Ep<DhxLW27VZ)2GQeAM7HVt}^7N|(GgsO+DNz?_EXz9AJ5)H%$ZHG9{
z8m$X0(VTl(RkwqSv`~nFrr@R?t3QNy2Q*&N$=V6wJ%aF>A-n?6a8W0#tM2r|c}xl-
zhgYyMctFnb_UJYB1?@bxnZ9%$lM0jm)#<0_F}X6nm@YV<Ns0UD6&3~$@B;ko=^N)U
zNiZ&&9zLJRnlWwqWRSEoMB0YG)e|huq;O^Wt@%ufjDM&9na^Y`ur!m6;YH0AP@NgU
z`XHKZy88kqHO9Hq^A<2EFlJ5fU%;fq=stbZ0wyIUmCMtwEnre)V!S;4=K`kY`Uguv
zP6VCAa(y!^!#;Ti28NfQ*=>(*)}wH#J0K}t1_p-LWggwEYvJPRTUZ(PX@JDzJi1w@
z!o_ca)SH0B-8{NkYvJMwAobv5SU|_Kq%LJ+u<+;x*=-Jz00lGnd=_80hER~WB52Pk
zsE~cZbBP6V)V}i4>Bftg)XkaTDs@0ALCY{-Z}#YBeYFJUE5|LY46kQ{uA+ns1#Fo<
zaS@X*<BRF{7cr?Y?w!uEn8|}%AQIHnh-96R#x^~CG1En6uJbI@6;3lMP4`{GBrU$^
zJPU(w@;`7+1?S&iKAkULR86m6!lWa!aS_bAl1;1(`w$1p6r5+7?zfOdN%#0Ua4vwJ
z61w*+sDywWV72uuB+Ec@fukBU7Z|9+a>1Olpj;rM4$lRDf*>g$bUU!73xo|n0hB=<
zlnZzz86k(QfKCa$z7b8$8#Pca_@oBQ1t31CC4HRrnHn?~*mSZ!R|A>E3W^txPS%GI
z-bv8fpiWk4uq~_?AUshBj~_Ig*U5Ta4Rpeg*z~_knYcuJLDxUS^8jem=Zj<0rI#_O
zGj5yiyo^bgv1oeXGN#E=hfafPkK>-5@`kq^JLOzE(>Wlw5-y%Dx18yFsQY|a82hbf
zg&bD`J`+bDE<O<?t_(_bVjkVB;&5?$khmp05nVeC>LY*-B!4q+de#aiMaJdRdsZ+R
zGfka0{oo2FGsctCf2?3C$QC)x!r=J-m`As>fQ$78(6O^M3qf1cO-_P})7P#Z-K-Zu
z7uA9jaN#;uhJ9KvyLZCHTR`G!aJwr`fre53zxZ$h(dKBG%Qk)C8b&EQ*OQQR053W>
zodhQu=!tJDP9P_m1t%biA&JIB3H_*u`+peanJ1lOna=o^(Us9_`ubH&c1+wSr@vpt
z<Xf+y1WQ^y$5~+ax(F+=GdS*p9&IeK7LsB>DNM)?!afOV$HUJtexnFV9K8S6KqNuQ
z>^YPTPl`7b*<m-t-Bn~~a0HJz?PRKFU|{Ivy#Nvc-veTJvXl3iB4``NTaQlGBVdDB
zt-<|e)_oA(6iCY20pZ;M?VIRi-38%AfOc1OvTlL!$|1aU5S}cg#km5)^Mml}7eTn0
zpykS)taBi|i4fj4Fwd4B9z@y4SQuP7P5&vfGwg<jjvdsa@XKPr=QTb7>*Q61N`gWJ
z#s&u+{IZ++(~9g2E}gblKp_Bb%ei!_g2Wub_l3H2>K+2g>;au7>Cwr$7i=yoBgB2%
zA-tKOr7E4Q8zH>;Lg3qAH$!;x!eHK7FwfQx?vq7FSr|HH?Ud?4F~_=QH6-RxJ)x-t
zlH^?ll>~XB9m<ABtEdvl`KEGU%2paosY-w}cCt!>s9xC<U<b*9(v(lHX^$vqPSI3W
ziJifx*LHoq7>H{t4pz!~Mhxs)K?rXV<dQ#-Mvq?B3!tTXovgfIIom$CPi`H7C)-L;
zvfTrX7*(iKQT-GL*3QcVl{{FV#t*&4CsYZZK%+qB>;+XbJ3(!<PF`P-94HDpdEGz;
zbh5gGDOnGYH#$ut!IUjXpGU9lZ@Am+kATvP>MM}qUe;Z!Fhe<_p7$zPmUkgk_8{Cv
zXTYJU3zCPr;~c^r$3eO}Sx<l|*^^)gnBD?Ywzrko8Q_=muufNB&&1CpH)FcRdZrj=
zqr)uIyYDkg)hBc84*(q`#d{cB*!px<E9?UafXX#ikXY}2(D*dC3k6y?P<#|Lbnh0?
z=`8TN$fKJz8+06Jw}nSC>qL+nntyPYX?pbXUR%k^@LJoWo7EdGUkH<z_2}i@29lTe
z=ndkn29Fr<9Q5clwE_tWdGzw8Bg6t$f(~N_bv8b|=sFB4{a8Ov1C{%r{_l-a0guib
z9?eGzKo?~}Mj|#&Z`#15!nAJM^c5SJ6q&ZHntpl%lQE;+^#2=}ycoAn_u9zhB9H|>
z3-X>v@6<Ve|NjS_5WSH}fzfID{*6pBOsa>c-`&V0Cs}`xg`u-`!e8)(>#ZP#pp)xv
zhqFx=*~C<3H0=-zgJ*AzEa;fzDIil?!2&U|3gE%jt?eMO!b70`*WLyYd-wDMn?MJC
zteAdx6O&SX>=ckUKq1#G&kkzqahGv=^opKX#>()T+oPAa7u?Mk0R@c83UCX3>j4%9
z(C*J}ix<ldvM{{PInL@L53QWLS$QGmIsQMs1C(Z8YaeG-lV@iDRpQ;O3Lq=Gd0$Qj
z*=gzc|9G?653qf_ks$kcJ!W|H^2&g11V=^va*&NKoxff<9$;bE4cdw8(apMeGTZb!
z=NRRg;`dKqy`M>UI@1;=HKvdQ(<dHg(wZK!g-J)iY9Df)q_c1Oge^=4Ol<q6AKJpC
z9P)54NY)vW#6V+sclNR{yteb`W{sT$av3-@WD%jkdtwPJG&X_c!EW<ef=Ch@_OVPi
zP+(M$<M7G;5duoIeEY#xNI>T5LCeKC_Onc1*vc$DJ->>DefrF;OezAc%UBuqf$o(6
zchz5HOh3DoN!%xY87spE#uvZ$f`XadquXFV7ib&eM;PD2u{#_zjp@G(w7mC;;ei(y
z_OdWIHrI17@b}#UbqSgeD}3e`kli25Hr-$wlReLerJ!EJP1nwcFLI_=Z)1{U4i09U
zK4%+~deqLPtPC&YKt?wo<$2BQYWUW(8(}9mD4?1Thj=z0<8if4=Kz`dJ&28gzsCr4
zQgnAL=yJ!;{87#_pc^4&gCH$c-XJ!H7fsV;w=+qYd=G?(Jr87KcoDM))Dwt002*ez
z0$N<iALXn9(s>c8>L5tfzUi6UndF#LgV?5bZD(p`_IF{MF0g~CLX>3*D?=K8_-+31
zC;Z{xHgLS~-Oa)<UD1z46m)U?^xZp{IAyJNgED8e0;E^>VkamTVC~sk(;x0&(r0q%
zn=Z7IDXu<k5olU;Zvp7A*9p5pV=w$Iv7i}{UekOesZy|1322K^B9d?%L^u+Z9zoYK
zcUyS$ni_%6Y=;yR;=5QFUQP#@*Uj1pRguiPTmqJ?f;@V8-^_=mtBq^n>8fBpE5pkW
zkiO2j5unvopxdK)cY!?8n(!Mm9Xt2JU(jfX?$1S_<>OmJK!d8iwy$ooPIuhJBq_OU
z7Yk_5bcrNrJc9*%Q!V&lty$BHcQF~trh&qwyA@=#OZVO!(DXv5#ePs{=>_|a=?8Z)
z6+38vu383{rheiu=X&(=PM!yKZNwV5Yf~2@azXVDP}s9R>YiS*n@N#z?(}K9nG~7k
zc2D2An<<G&ap!c|Jxo$eE(@ny?qM=zoHRXu4^xcf`fZ@%ZO30o@pc44^K$#LO@Fe7
z$=~ebc5v|~11jG3fQqjNV1XDJQ1Rx|yL3G$C_10LIJq5M!mR))5#BaEb1##p^{P&g
zGeMd8f(XJJqN1Ra;z32*t(72oaM6}AA5_r1VA=-CbM`N6roY|Gq-x=-1=_i?7Zltt
z-faV=kP^^>CeC@_gaa174i+v=1g-V~Ii*+i;Z@e@Ui+9-dFMi;u6TCazgRoHW*?KP
z`rNq)o$+Al5*g2Kd(as7w--KJA(qQ*n|@*+lWV;+bS)9cOP{xbY%fiIJ^wgsvM{7L
zHN5>=@HlIzFs$gEy8yIht(#T61LQ4>|A#%2S*?W;9_MYC1&u#faQ7cvimjLp@_6U1
z7uj171?<^&HU^LBJ^Ptt89S%1+RqfiRJR3ExN03>GGvUO9&><6!~H@V$R5y=MbI@0
z;h;m?JMX_}*}}pA9!zRI02<0P-3S%W0f~dg=D_DE_L>$$#Y3i_KETxL@n<s&!%Hzx
zs_$m~(F!sc6mN2ZQ0Gf{^ztUpU}bnMb)1z|5aR!r${^*vypqd6%E7+5F@5@igG|f0
zW^ZC)c&&Au)ly)3;2|bsW~U7-)BiHFNXIC<bXIe`4mi$wmmd;rpsAq)`V0&n-K_Ik
zK<0p~J;D#QmeZq`mvcHa)XsrB>R@}ePlKiUUoSpx0H^whmg)ZvG08KDZkR5An5lsA
z?eqzUnanee@_~(F0@q#qElmudtpqG3wI1EPRm~v#EJ1CRP>){Gw^LaeUWa>h%O-)v
zxk2mSK}Y1<!#in;V4JKxdSefCgZAi{-k1rBJeSU&FLq4VKf)v~nzk5ZBsfJofaPBF
zt!J68dw@xLdf5>sVMfF0T}PM{744>g>Vx|)vNs^&O5UT_v<NC5JpIfOCOyV8(|;df
zGPBZd0vQSlmq1>yXCO89v?<VViCzSf2ZxK)6hyextpnGIqSG6WG6^spX`DXkC{vE2
z$_!SdBcNZXuY-**)i8s`@w0ih%O7KsV`Sd%#5UdGIFm8oPDe-uvJ!OU__FDZ$C*@3
z+n{1)AhFl05tYgsP^IF?ALS0NRpOz_{6Wfmrr$o!w4C{tG28Uk6HIZ;ypC+spPgVb
zV!q+PHeLE8lcfd+=&l2Br}^R(R)&2>@NhrAiiN>(AGGmtt9E+LNhVo|_Z;k?)1Vk$
zUpdbDm;;g`U!Qo<G=1YqCT0I;D?t7_!V!%$nE<`lr<56XuTL=x(!D-;tVo<fb|g*=
z8~DZ_sp<0{u&_>dI>jWxB(`dL%qgZ|1?7HLhL`U^Q$(!i*dcCsX~@XH&>4FLw8bND
z`uS5#8X>xu*cd!ozm@3tFusQL<a~Nn1wewG_h0;22`X9mTi!A-FnD*H{PFyM+@tkd
z=@Zb*+_@E?@tq)cb_USV{V%tIE+d};YKy3^obG*^NxD8~ISWJU?Gjm!UeokGR)*Ko
zAYIL1UF_`a44@gA*SQ|Org5MRm7VWjc&z|6@7X}>gG`P4K&x=xzc7P{xf(tJEnwz3
z&U%&&GWzq{%(wMP2?r>L8ms^fPkeu&0XBLK8#@C?$!lIAkbNRx!5M7RKb>YuWMZtI
z9(smJnQ_DP$}>!6ycvCn5_kUeJ!hB<L^_s16O1Fjpew^`rQ@t!tkcdiSu;tlm~MNP
z$%2V>+4S<WOiH4K%UBp*a~)@W&H^bbJi1v|R8C)amPwH@dHRL3OomdImx79H8<iJp
zmV!dD)Y7wCMg>&uE}AZVj!905c{vNiYxU!-?kteVc`bIF)tUuz1rEq$eU|Cb=a`Hc
z*G=y~$F!4)r((L-d8U(0u}h{WUSX1-ZgPQXA>-`n*Df&mGM}_yo33_|X{+#B28daX
zd!Z>ZqjdVai%e=vB@ENWE-_g#DJ+^EbcxA{DJ66Iv`b71;tx7NK`<3mUHNpr^yzH{
z9rXXgWct}lOo~iGi>80L#3aS|Z94a5CPl_8({(R1Nii=qW1H@EnQ1fA=Jx6TFEhzA
zKAJ9ng~@?QZ~@3+rd%2GLH@3nco9E+!4)Q1#?90BU12h>zYacNeJ^PH;|uNupb+72
zVFL}2^qL++lKL<oB4xnBz~Fh@9W(&~Izo37l9IDfB?lq8*C0u40!x*Eu3DXkBs_aQ
z%l4A1Onr=udDEG%Gr2RV&7JOZo#}|4$Xrm`dHy2!+yDQNlS0|{urj=OItSv23|0mP
zL+BALSDIO;$KPTSmsmXq)P!O#&H2nP0A7R->T)$1vQ6*1#S}CB<P9dF(6v9=7`Q=$
z(!YQF|9_ly-cL3L&~W|BH(+l6Pd0Fu=jG!cpfw8iFTTuTVR(7r2gnIq8-9bDZ>rq8
zLCv?dpwRN^d=ENi>+W=en@s-vzn6g`3>=Jx2VN9U@4LyQ&6~dqF8IQI`mvi#;Y{4S
zrpw=A(iA^33*r@bW{6jwd-R$<xexV9*DNevNz?~>rAL!*C&JWcGeO3bxE*JW_|678
zorK}#nr|T2*Gs(EGu`<%lZueycc?E*LB}q2Tff*az4A7bs`)`4a6<{?l^016V?Yh1
zTF}Avy<m^L@CFN)#z2>}`1G2F?wEe{Hj^Ts7)0i#N4ND0wHeb{?l7sCiXrK|F$3%_
zJ&$f{P($h2i=)$77+&)>+uD6&V_@QMo%j_L0eauqrpMl4%4T{|H~rKdCV3|D8Pi|i
zVX|igUE;#zuD1<zRU*_aebYfE^0%D(2lZb5G!{@wlmLyY9A|y~g>CwRyG&w?9@Dqq
zWzwqO`~_5g{x9)!u{K@*g^hu~Z!Tz{@U};<35db);?^`!>zuV4tnNTb@h1;{t;3*u
z&0lJRDleS_9^JNeAj#wp9tWQ>y;wDkh2gbD=WUN(8;AkA5CgnGYFZDJ7{Lu#q0Po%
z^@(5SfJgEVkAu&dUa&w^8bVcax^$Y#eqmz(6)cQjppl~k8lmiF<^968ebzlD7AD3i
z)8{{6vSbd?WSf5b0h77%q>rE)dv6D*=d*(sbnp$NdgJey2I@X`+ZKMDZu*c(m2uwm
z=!Z;NmaUT@;RU*>)}y->q|c+<;)N7c_#q3Z>c01ZjR7=31zz;BwT6}91>fZ9`yMg{
zFyB*Wn=bf>NrgZ710+|xZuIE3P5Ln1<q?xM^Imnf=|zv2bd72yL8}<zT5W!V`T~Nj
zpni=<H|xFkpmjE_8qk9XS{;7>|NolTquciC`{@@SF@;Lhy=P<S-U{l-ypZMv?ErOU
z@#wbAct73lF_RaQ%=_tGkC_yie!iQ&_Ayf&)693<d7m)dWn^|zVVnN;DU&j@j0)Ry
z;b%;i%ny{=ru#o*a#h#p1^Kr``Z(*W*KFWg{-r3m=Vkk@oR#4v%WqJEJO6t6?q^I+
zI*h%b_8;t?wa+~)46d!;N~Mpp7QF@)2n-CbK^K^mavf()d_7(BIa302vl83%p65&t
zm^&2Nrsuz4k`}(v1*(!FSr^HG(n}nOo<8>llbM#HA}CA*d~bZ_kMzCsnLq9zXhp}1
z3aEM~sCp+Ew&{OgFxhDBR)DC#f~sB!s{W2N#QZzbY}1opGHD7-P+((l<QHTE9Vybu
z`{~8>IWL)v86&4(c*!(TZh9vRgOBBp(rAxl*DD^a2ON*Nu(B{z#=aIf&dU8_di^UV
z6}3>P8cC0CYmem8D;~|qHb6!*d^^E`$a9?a;PdS#UokCal$qBKYUKX|g`VIuXc5B>
z<}y8--tmShf@#Im>5twpIWVO?ov!kh$zE=18>k)igR#`Sxmtjs#L2OnjsJvWC);a_
z<E)%dr#HT3l9tVD16w3`ob}NYNNnu@)r_xsj<a5TGJWS;CO^iH(>dNTsWC-8nQrio
zNr`dU^x$_)Moi34rnkRiQdNm-1sfo7ob}RUBm+Q~S%dFbI?lT5@$?Jtn2Z>|P2cyP
z$;c=8F(hUU54`q1&g%LYnyRfpC0J?;*f5^sth$e(8A1sp9t;;3g<1k?0B}B@-uRx$
zhS3^g@Qg>u26sI|Hh5Jt%;2I&$Og}Vi$^_zxE^G%-y@L0lG8&!Fx_WT2-|M<kx7w}
z>2JvN$WKgi;kz3klQfVSoz~kW`XDDNH-f5)|0Q}J-LT{w*9a=v?!O3Y1hoWj-G?|2
zRN9=o4|N>Zan?ik*%&}$RMY!4SVX5k{=_826dyAE`zI!S(`6ap3I^2pcyX%{>;u>1
ztUmW4u@6c~4p4(2MUY1~>+j&{(Vv;@d27=VTDMGJ{+UUiao+UnpP6i>92!B(Uu=0n
z7vc4SM?=6fpZ{LmpRV_XNlD1!9>krlhTmR(1FbZ;I6dhLlYz#fdT45rI?np)E<}yt
zf!ET<S?}CM_~ydh>ASu#xzw8>sjfp&U4W!I<t`-9!D$YZWFRemk6zonyKK-4I=gB?
zp%-<R4R%4N@)s8HB`lzo0O^^Kfq2kL0PqE!c6ULQDR2GehY$(S7(93$$LuZ}!*N!d
zyO7vF&I;o5gB$+_cOl{F(aCBE*3G&URFHSFYD0KDpk`Djt15)Y0-4H?hw%I$yiN#D
zMglzP!F`u45p-om0c4(o6(XrB1D5=M2joE34p}hoCxrJz3(SLBxI-JvvxVqW)&=vf
zLsYivfq572OppD>q{wtFV0yzhrT~4jI#BB1Z?$G(VA%fy)XV6r1tq@2`#>B}qxwNL
zXpF~JGJ}=jg~#;&-<Vt(!=}4_XVQ#*ln&}kJb$sG7Gy?Au1BvecMdDV3m1?Hy|$mg
zDQPQc(~9AN7s|CP4Bgc%FWy(PFuVq>zbj4$b)!Mk3LGHyo%dfj)IjI+d;O=M{LXYl
zV}2GZ!wZWV7SIuhzyJU5?mhDR|NobB7#J8@PnHOI^xDn?DG;xjzV!!Fs`!Can1Qn(
zPQI4P%J8CQy5UbImxSYBp$bOu{MrlVDv%$Yq2t6aCRMXAywn7(Kkl`S%VcGEp<WHz
zZgT=s`@901`+^;8g6*$VR>(+;;ei)ls#q9ao&k*%#ZABZlPQ5?1w?7nblYD{*6v*p
zo_!SyL!&jL00Tn}XdnK&Y*vOB=2f7kd>QE6qd5>&k{~Db+U^6nd1@tiA!dmeXq0@<
z^!>k>v?Q_xz-u10PJQABZQ8SKOa+fu@0-r}n@O5&0VsA>PFMQPv`V!B6evF{SQxrX
zk93Eg==MG1((QV|rQ7$4N3ZSm6i^_&I5+*{Z>G(R2c|Fm!{k%{G8rs*tel0xvAd4t
z<wH&e2A|H_4IT%dGrveG2lXD0dnDJM0P};&L1E{*z$3Z#3|PPstl+3ea_t2$-w>i;
zhDUPk6|jH;L|}qrvmHYTKPZ)eT$obM!q6Rir1f?km#*P$$m+iD)2se6nJU}`#erBk
z3qy152?n3;(gi-<sU3BCFjb4Dpa08bB(WN#>PQ(#)fon`EU4%EB4WDaKPFSzI*@ER
zSoQ*gPj~JNgbMbu>Dm97bY((7N_4?Wt}ys?r%tE?IRw<2da-x<mVZo!hUV$43@;v(
zg5rwJvGb@$r|Syv;S#+z(l7Es!ktH4Ti=$5dGy-eNdv8#nlARADV_1)^t%5{vYN>y
zEDRo?0YTRz9+rn|UV~;R{7XQFiM3t=r{Dje*ybpm{*jScbo$NzOvy}4#Z&E=WknYk
z!?d1&YW@DAe`*1<3_Alzi)9H&i}=)4%sz}BQ@=CIX}&CiX*dJY@Cq~#akU89F4Yv!
zu};NcjnhLJnL`+-PG7~yET>@x*Lnf2RS89_Q!*>Vi`&ybFf!*bKAIlO#4P96TnMx8
z3S3iuAq#_V>l2^u+y=-1LR=xp0dXAg7WaOT0O%}BPym2JtqSBD=A!8*nV3rq4i<oy
zVt|tgD5tDXWMz0!Q3y(ut_<If$b&|0>o`CSa>vf2FIWqw=Q1<Pu?2!uSxukF%v{X2
zBY~CS#lh)ZEX>7h@*uXy^kxvdEuNL(#rf%fK<u}1tPC&0rkAoZ=jlo3u`oD(b7fTE
zZ)szItW5_Q|DrSxoaW&!F$C$^HC>R6xqz{DdJ`M74+l>aIM2MCevOUUgfVJ5H#@Tr
z$DBy8V8Zlxc4m3uPdOk{j`(&i18rggm!;DuvNO+S`w-2_@M7k4BMxR&Cf=OsksQp1
zip>#Vt-3iN@7A$+CU4sSs!R?(V}Ug6c1>T+!ED3f3{iGr`g;y$DaPpOT%61v9ACr1
zdQ+!IaWYHEe#l~Bc<I5+z~FiCy@F@*Jn(tq;C-z3Up$yTk(0So>t+~O!`v(u2G{O7
zme(v0rELqqRz6_z=#_B*xmPc1x(gR`BZmh>{io??xtL`b+o!+cVy>5G&jfj|?F2aB
zKoP3q(QCUV6l8Mey%*-wJGhw_$a`df72QBl#067SG2NYqIbC#f2uRZl&J1u(V-U{D
z@PadA`(YmDxr`<?zgQXg1)UZ6HCP)VOaXpDW{+OmkAbWVFHWR_OG=;4+8z8Y;Eqz~
z@fXjhPvK)OWQtFnzJQ-ubh->ba}(pS>GS!S?HSvq-{)uECVn{y)bbbLo&E*1WjFF5
zXf|x}7uM-(1en#Or$Qt}Bfo$qzBEpK;)f^*{K7i@odC0hcoIYbuNsnWr7x`0Wd)g4
zxgP|8`~td<q-eUYAhUS=vH(_w7tYDhasJnLK+BxLEkIChD42xYjmd}b6k7k6aC#hk
zukhkiB3RnM1H4)?04%*5oS47@_7DNkt~iJaJ&3>zP&9&7$R>fBQ{B5k+e;xzcpyr4
zz?J+4+p!xIjSv;DAOfH$g9zLN33S5d^G+v1TCw1>3ql=3f&&~ouXuL;hqNB#LB@9?
zS`UTOlZ2QZ7=KJ(EX1tN)aEn&j1coC;Y)t7Kr(}v{UUGrL}BKw9PVI=7lqUPM3|LD
zCVGREy>LqarwiL4R)!aD(_2NDmDx=|Y}thE>qVGXGHP!D1#xa1SXGP{NRLbBKacL%
z1)aBix=Uxcbbj>dcHID)h_#vCEXF)BS_7nEV=QQhYA@(oU9Vo7zo1cw7tXPu<a)%T
z+jW6Qugy`gm_AtSm`Atk47iwdET|G}1+9hl=yu%z7iW&0o-fWUC-gW5B=5Syqu2I|
zKP$rv-Pq~##hJY%=0<~-OrQ7cWH|%9(&{*9mxbMQMhRv&Hdm0+y6L_W%)SzDqF^e|
z!Bm1ySL&U<NrKslZHFH#!;6d4e@QU=f({^*WR_*TIXz91*@ayRBqJR?eWN6^4``34
zB(p4&a^!SbDQ0K39$!|57pc?Jq?mnWE=PdOKj+aMy27KA<<u@vwFjOyfA*qa`gtj4
zM~Oc^pc*Zbg~7Kwm&3caMwh{(vv$P`&+Qu0%=L_n;nP>hFnbErhl4`wm`AUzqc<zV
zi&N7XWtp9Ic7=h8@^2o!wtOJb@^Db8=Ax1TD#ax|yK7Y7#W+*=^a5FC5w-}BZI08s
zWSO1VK7jQ6oPG(!?f|hjPM4Bnc4AWiu`{P9$uT>z@9<(}c%c|JeYG63t(sUUs2q1u
z$y6u_gq!}NC=}*26_Db+)A{6?9i%pdK;5!}iN6Ir^3rQt<;lwMB6)g-JaZzOF^K(V
z`gwU~L$);@tPC%XPG?hK-o$>zot5DQZ^-oh3e1(NS3nZI!Qd440>o~Fup1pgsju^1
zcc{RNr0KDW%$iZJf<Ufl1?O7O5dzOZJDDE_fzrqQ7iS@o;2aE+1fOMkBnVWGek)OO
zZ1Bxs0hPncAj-h`8l>zS$c(wuA1E>>>PUmEZvmOtYpV}pS3uaE4j`wvbpCVc{N&R4
z(y{Z#i=gSbO3dy$djdf&YEc0f3ZU)cr58X;B{qVDljo>F>Yc}6iziNhpu{Yy-42yH
z04g;OLZs3`Vx282;DQ6>DDVxjvC|clnUy5;ppxK1q!X0JK^u%z0;fMzWR{*@s?03T
zHUSi#meVIGGiz~N1Rr(!;`j6;%FN0f(l#KMzql~{y)v_@_Khc?VmRht8h<3~9WYzd
z^}>rS0W1t@{F<%@()cx8FQoAwJHYs2!E}EWW;vnb4?u-_%)w9mk*viJSQ%avOs`jA
zwh>@-V`X^F?$K+j;l|4Ff-zwFX%%KQ#^ULpRG8K4z5OBGlR`h_68Aiqhg9P3g9w1*
z3tYgig$RIS1}rcKA^;9sus}CN08!vpK?K0z23C>j$D+sJ(Y+fSSYVL|kdn^(F9JYx
zGkih|vbyu-8aCMN+2C6kIi^2VWmaW8Hl16ISyoEnJ!n0uN9Q@8&Q~uwLHc`bwcfKZ
zyvUyJq{eK^_;h-M8nYJvbt_O9dvu-xZINg9o4!+xS%I;8`Yko)2n9P|Q2KB+@aT1s
z`0u0m!?V-X!m+uQfuTg(qt~|1YI=}5vy!ZrFQ{98gafqtD%LR$v=hvu*Ve#_mEnb~
z@AQf4%r=aNr=L@2mQ!YW4=xNqXMdgZ>HOu<dDFG?!HYdU;M^kva@)M={2I)Pimf2c
zf*|qM1Ep#njny0hhZz{^LA}LFkkq&7ff~#P%(ox0P7g?CwqrWtHGM)dv&i&$8Y~>s
zA80VoVr-dSt;sCS+;@p}`b<q`b;b?T4{9<eG2Wi8qQ$JtxP7{Z7PBW)uh;Z5$;=t`
z2Uoy`3eLKNh6>iMfDaYeIzUDNKnq@@_CbaX;0qonf+q5Nc}<~eK#L;9p=`LC+7+M^
zgFAU!SAa$j>Q}Hah=E40c|qbHovd{$*cj?PdRePM8LE@D0&F7dbjb4QA_y-SGAK|2
z;hj|n_uv0PcyA%R1PHHO11uK>;oX7oLLfX_$e4g1gx6&RR_Ot9-Sn0$X5r~PI?TKx
z*3zJ%Y0#pA3m(0uM<=i{yx1~bSBF_vz{VYv7LIy$#xj7W1TRjH(qUF$(zTynqr<GC
zZsHDZewCznK+Z^dao!E2{5UAFH+WheuK}&!$+e$;T!&d*`=lLcWJz?B9cTg7+x?)m
zX@&=0tTSR@c=;X_485ioz$$nr*iDzzWtI^Jok#tG2WkZ`s4r|e-9wjIj?Ky*+#ku&
zWtNh7r3OmKFN)n+7<?`N_;miRll15{6}F!~PnTIrR1c)G(+%QEDZ_6dL#9kWtIMp-
z`3fZ3%^E5>ol%cjQCYwhty$yI_$GoCbe_gl&(1#{-K>I=(_QtL)fm&K=jbuFGIme@
zq{nQ?yWbVm#jychLvqn}x`95kidTaR#5x;~UQ+>8ke{LFuS|6T4=D6{fM=pweZXVu
zFKS&u<A2Ph9F7e>D!PoXotu9!)`KoP&$FFAPoG(gX@U6kZTid_Olh{$ALuhH>h*$-
zQ0_ebA{JzI=TYC*w?3UqGk*X7U&3d2+o#v`zAY=m%O+4#>NQQX-L7xI+{nZ@ZTdzd
zW?{yP=|_#2b%lQ|WMgRfsZ;8DjKzon)K!#rn$Bv>EHAZUAsfRn77hmRDnign0+OD|
z*FAboCoG(9XUweZpS_Tc;l(vaum?er%usUMr&l!;yr_R}0N7uq)mE$wuZ>#|cyz-=
zGObt{O60&dH<)^YZ7=}anm>JmF|$bh15o!e)Dbj@#NTp{2{iTqnoL`<nT6qn9aQ)Z
zTsU|R3&RU_sPHYg@K;d#K>#Xz11|gkB>d9>V)jqC@M)0nBZzQ)%P+Y25ldEv7pEcO
zEx+Ny8$iNapu*qa!gD~vbD_c?;ldpt;Wnu78c?8gg8Wkg63&MTZ-5IY)Puw$pyHre
zV#s`{4@lS%DhxT{0c46LNLULhya#TI8c0|eDh!$tgcu?W68>Wk@jhtu3?lsB0yGy3
z6|M)3b3w#kgT&84#m~SEzYY@K4iyHC=Rs5-1_>{K3ZI6nUJnxPgbE*n3(p1#7eR%u
z!G+r`>RB0HL_@`I!NrR~%3Yws_u#_uAYomoFeB(LDR9_Mo5jNLLJTU5aEdWV^?y5v
z_Ypy>3KD(+6}}Cc@q&2B6=cdqsQ6>Jo&U{Q8D8vy3crR6zX1s^h6=xj3*Q6@_e`H`
z#$3y_XD;a4isvs>?50bZGk37PF=b_Vv48psb7m!`1!mLFm@`{3W=&_eV3rllG6fZj
z-#oiTRA76uU(A_qX~C?;<ZnJb)q>exDaHm|<0>@&VCC<b#sykF)e6e@4IVm7{2Ht)
zFR@NPX2Gn&STp^#1+%(Xh7}9L{}Y|9DWK(y|BoB~2lXH9r)yX;=hjaJouu81r9gTS
zXw3pXfs#L}6;xb(;uqjOb&-`JjbHCXxmy~)9_x{dtPJHgpd~;2QLUh&45VZ^Oo=i`
z$wH74NvIM~F$Yr80##Dx@6kP7#EN-3Q;+HNwN}h3vJNJ!46y3pstN;xV|R#(0%)&I
zujxdS>F=zV6`0l<PZzLemQvqh3TeZc`kJyr?mh<1)r0l8sOYpDsFd*NH9ciIJ<yt2
zn(3zL^gL^3DW)f;)4Qyhbs2X~-(k({$ymLe$%a{ji7{xpwjFa4<NN7-cFev^%BIur
z+A&+pG#DWa?o)sr*bADYei1y~#GW}zEWrd)<iD^sg)lsNO(*G2-(t^f#rSOcdwb?Y
zb~{~Gh8KdS)59H@;~4i(-{!z<9~f@}nxlNe-+B_X#0j+i7_<u*oNV5`a54d%DAfP^
z|9=Ko!zVAH2hG0lHez9TEzx?LzZJ9q2vks88i7VGB3U2qVx8{h$gINnYI-(^dOCfA
zBeT5LX+uPuzvcsJ*l7q_={W<I20VIAcWbjUyy%;L(~;T3YW7K1&=u`0U7z^{!7Ef+
zZ<iYPdi-zxnFl%~?!iu0hH~lVAB-T*`JJo`C4At;;wq<Er$;+6ComqIzQ>8#im`3_
zcPC~A#?#X!oSEgAM6{+`I5R6UW$8?hc4n5Aovn?CUjrGG_<f^2eX=vNioCQQLdkn+
zPz~_?g|Pt(!^<0>L!Dx$Uvp+QXL4tr&hNsk$mlTL(1lrsccVTi_-jFnSn9;5N4YR-
zGO4IfZ*^f-5z^KN*H9%1uy)CT>APK+m6(?4PQUNMEY7I_IvcrHbd}ol|1Qi@Os=}q
zrCpg-6`Xb9uIRk=B1MV;vXt1f8*Ir!_2~(&%o;*IdSJu(TOz?LAx&@aO`qk;tOD9W
z;L0o}@n07z%>!BzHn#v==bN_jO@HgktfKo~j|FsEvS)WF<YI47?`}Oz2WX3r3-ex3
zIqlJFYQi_&&W%}xao+S~H|A<49kuBX+?d6f;uyC7aAQtn)cL&`)X#}O@rhr6^*fjy
zd+^0CEl~Op;N7<eBncU~+O>yudaDPsmcdf6Du|ASV0P@m7fT>IL^Jk)ayeqSD`5}o
z^!pynTJGLpl@ML-V0P@m7hVuuynIOZaDmw|pw;Q0_@fSfcH|dy1D#9-ilJ}H(*r!2
zqnI=_r?2s3R^mJWI-9oh--`*`uX{4*Ffy7?ckyP<U_3E>tv9nW<C5tYK~%%^uOKRB
zx}*=YGNZ+GTOVd+PZ4#H55ddXTPJ|#gJyvmkDbR~{8mFq^nfH9p%RafBw9f07_vdl
zz%$cV`Y_8_uSb#u)ex^O92;tN7%B}xY9=8`f@<v7(hx}zkYwpJUuFqLzwMH~%$pdQ
z?x}1)>&G0!#C&-(>vo+$=1|7^U`0quXtnwdTJaJp;L&S(K>?n`UI>ELP5eLN(QA51
z1}^H-`Rk?5C(wd(Q$qz-hL;jw!0gxZtPC%CAnY)ZIK!9!|6lkkurN#r|MCC7`Y#C1
z{qg^Q<&XdWTYvojKP{Mf5>tS}^eMs2DqKJ0L7Ama;Dzn<L&412Oo9s2-v=`*)xVVo
zbr(H5-32^5-8nov**&}WfsSZ;aYY_9I`$pZy94#@ULKK0Y9EILJ9b|8?EL4^Ysv+h
z_vi$f-gyMHa!_l30%%JSy8>u{<FHF-wSrG)G6!hI;5x97v%qm@(6V>%r5~nDQ{=Z#
z3Sm}cl=qec*E^s1wOr5mbf=!+4?p?Ikzeb~C;mv@&}FRCFNHD(GkQ-~3uBIFd_BD_
zj5(4?UUvG!FlK2cCfVu#!k8WFrDRzd_JO8mAtUC`WI$f7=Wy%}*YN0-{l^08D1b)W
z>cJBJpq<9wWmp;ZfqG^TEt|nIU@Z!u?&`f4!7`xnFSXCE`~r0{pi+=w3;2Bbh~xYr
ztTAg@8Tj>BKW=7aD7X7;<;XAKrtq0Rg7xlZRtEkMRy&CFWstPOXOOH4NOnI&R$(p3
zJ^XsCn>Vvg{}Ilt$<x1?mEp4szW{5~X4dJt5zILn!XOcT0a1RC7L7wL{2Gt=HBR$u
z{N~qq^qD{6F<AAf4Xo1-MliRVZ&?q@!I7*wn?ST?Yr_Bk|I=Lf>*qRvPC~Pgf{d6<
zNaNRlNP!1U6s4xuM>5+9?Oz1a6mpn9{0XQEzp#;Y`uRv^9cjze;DUq|M5pm<=1xfC
z*PIJ7`9<e+u_$IAX19&3(^I3EwV0<aWSu@KidjkV%La%)Vy}SQ7kZ;i57HEH-SLS(
zQZ{HI>-4Kp%*xCgHn2|r9mQ<M{CNTEbdzXiHDSLEpz!?R(aUNs30kGcYAiWDH=6ml
zeXay3tiaZP;ulOk@M57jByJ%FgU4a{!%u$Zj{;3{$|gyG4qWl*y!VM;Ahh8{$@JnF
zW<|!J=~H8vm8A5=Sr}fLGcqu^@avgAS;xvyCJowPvuh3O^oudf61@9iLcCMguulIL
z!>q&G1`?75#eU2h*6I4O%&H<G>sUbseDLUHwGjuq)k1uFMl7?k-d8b@TVI5TA-mA^
z0MvPRJbGozPqQ#=U;?E?eX;2~W0_^V1W^@VfGR!%QT16AWE42PUKC?x*e45WK!CP+
zy-*heZ$VOEsPhGP{Vs@2mycsMWt=oUG>+NCP+b%}m?iNd2f`3|kqlzMhw?*3A$b}y
zuEbi3I<CYz{aPHepr8;RE4-@m>3sC!?(`pV%%)6=V$=2GnUy47gH3e3;4#Aod=0xN
zXejX4i)Yg_<C)is*gR*29(izMKZ5`R!wYv2mg#~ISqzhY3b8PB9%}pr60MQ<=w^NQ
z45SpapXc)i7KWW5al->Il7v|pUTb)Cv+9?yfzIG8;c@|4^X&hH*FqlMtOvoG3_wE@
zF2bM!>-h^0VUVX;r$3v%KY>|>F?{-+1ZGL*^i|L?qW~eun2}E+vl;WES*+7r6PYWS
z7=)%JF-tRZ&SIS|m&9zsBquaIB#GINcbx#Jx<1CgubT12oayV6nB|%LSf^h|Vy<Q8
zUjZ?Z@yGQ3WM*r|km;wBnKSEe6u<_RrtpCVm5vm^2bI<fAO@8bThRuURuq7ickl{2
zLDYZ-m71aI;e$$33P6KNvkD+<XpXaj_#pOi*1iJhQWTp`)_$-_uzmWS5MBakbz&#$
zVF)h`!rKesf!5l2bh6eLOn;xkEGOdr2ow>Z!648MlZ&9)xC7G_Q<>Am*7Ae;DE~cr
zYa2Xzr>6Y>|KISyi<IeeQ<+ti>c9smgC#)6#(4Dhf{u;x>20lnD3j-({y3G{lqr^f
zx>OpoqR3G`@URDe>oP_LhW+67b;Wf5G-esb(CIm8%!d5?r-BNeh*O{V1!S!kvu<CL
z#;nAs+IJu1I8f1T!wWs20#bDQ@_+^zLHqcV?@#}n&a5cu0at1QQmVwj!0>v<3l46U
z>50!-l&1S<Fmo~ezBfHOgE^S-*!1-o%u-C<_okoDV3xM?;euog@H`!8k=9NwP@<}a
z?!8~n398)gdw@q~UoPi_D2C*s*V&L<B$va;TVKQl>Ux$)cyzP!-h(;Ziiee9pEAfb
zN}$$X2t<v#M>p%syC`bp;rV<87pRs7FN@n33OeGv^E+q;z!2oB)&r%_Ji1xe!u87W
zurj<p1e#{7_vp3t%YmgwCQeX#w90{}M=>5qS_2Jo_Sd7ON4XqudSrpB0j0-R+z|Ef
z^vIP1N{<3Lpfm_tj0)m|*vDB}azN?P9z58{3N{Ir9{*>9%w-h;jZby5{)F&uL(=1C
z2yZv2Yum~CHG6tv7PCVA<~yKJ0i{RK;N)IV7g`4#0f#+WZ}YdD2ZcxP-V30Ue0o(o
zxIv{ABd7=Q9~4C2IKWZ$;u;4iCiq)B!EM6(FAjkDrM0_2dn|l9|AQ8SyMSY&6m&P&
z3n8!#ttbBdpRSP2EFv4i4Nm&tBMS@<xO6^x5z58D0NKD-Ha#$#S(j-Q*Yt*LW=W>q
zx2Mm}W_AGG*OJYwAewNC6@2xii{g*hg8LX87#Lm%vQHPxVOA1d$PRH_BRj}(rJ&7q
zFY>2*<S@%||Ken2cqt63w+~G(%wblLIeZHq3dh-mz|-k=p50{%hL>K%O<$YCEW^aj
zKK*nKa|n~|&FPA{%%Y61rkm$7n`oco1g+9~<<t4_MHf3L&$05iwuAKdhNx)3*5F^~
zWChI-Ov`1~m*8guRX1{=wE2b=>@ZCb`_}Zkxy<U^tensu_$rR+{CUh`O!_yctLHJx
zF}|JdmdEVCbneFVjyz@!CIOb|oAQ{QB~CMg{0QDj?b&Uk;@MrI0&?@e>Ad;O){H&V
zJ@c6@m~LN#IJsl`%zS2ZE;G=^>CRg(G+3wK%4gojm^Xc50kaHqc{l6y4F$|vjMJvy
zE?^F1d^26QkXfGb%yi#EW<9w`CXlls8$nE&K<?&mH3Fxr`!D2~rq3*7j?h2P0CvoY
zzo6suT~q`>{@Tp|9<uiBtWl9bxbU{&r5CTKD-<y+Fix57Sj244bmua}jh)kH6fp-d
z8ccs##2mtSd%9gQv#oq2$Pnl*6jKJM<)H3i=lvJ*3@p=U6*Ffu{+!NM!mPr0Wx93=
zvk7nLKV}Ax?!BNb<}W;_=aewV=%_NYGQ0-$5*9E)1NkWvykqcUD+2@kWU{17)4!B3
zE7Y4Z!{tHqJr$r*1+;1WEy#d1FaG~!h8!#x;L-WpqxE))IcUK!c#0_rY(1<*i}(w2
z3~c?W7l;RMB{+e2;GzzEL>r`-YfoTf_<v#Yl@kKf58Pp7nLf9RF-jsBbaprRa2IH8
zANP-$!L#$obi=!h^6Ae(iz0mgGox1fd|*AGYF~IZqS|lz%M7XZmnUGW_8(pVWd?Ay
zpYoR(JTs92a%DH`_6y)@pSk=G^YnWO%;L=LQy|qebHN|x=@XNgg+a4LY||&OvT}%k
zY6~&2QP9#w){t?!UpccF<DBWK<;*6G_0wmSGppB!gUoI{P$~s2C>+6d{(q7Dmzg2W
z@i+^+6~jJNXu+ZlRci(=;z0>a5-OsyPamp=9V#NU543(4q~_}%W^n6<`53h1y7%JF
zACSlXzxelOx<duCgy?}kps)lD_w%=UgZF{6zC1TQw}M%bamn=l3T8vbxakKgn6v6X
z#==Vcxj&g<$GO~z1r@uzrT-zt{6UXiQOyDf`&1f#4tS;O0k9g;c&M5~9=)PoP&Qo6
znpjYgzbO_}%rh`_vTgwLSH*&gdr)c5ySg513M-_bWnBv4IYEm1`4Apx3zA1C>r4o5
zIpm0z$q?RDNa5cL;eCYg+9A9QZjcqMjS${U2(KE#<AI!jQW^`s$C|Yc!kr#F-Morf
zuKqvh#CAx^^yoF^R0Az6`^n7U0X|!hzr`0+VZiH<S^roV!1n`#F0Saj^}-3P^8O2@
zpUj|>ja#8-=)T~A@<Fp#y97bi5TqXI`2|u}y2l4%;ywmO3uvs~dhz`SGm6>Ie=viF
zN38yVS}#vP$G!gpwW`1g?bC~|(|M|y^;Bn}Y3hP#6931-unUxeKnn{$OpmW-7GwN9
zy{wwqNM#G?2zBtTO6$KY4EsQbY(bhy#Xp!C3=ep8^LCw{ex{mPPP_=N(h;N*wEyz;
zo)<>b8Ecpo>W#sY;LPFJ?JCj91{w-`vHAxy=!{%QjcXhE7gX+ohO<C{*!lcL-FIdN
z&+b?TP`Zx#4hjnXRyJr^=mO<`12t`U!9fNt7LNP?sVm*?*jy{Xz~2YHGpza8^aVA{
zqO$Tx=KcN#Qpev4+I<N!|LOEgHO$&P5B{()_;!Bq?7aEn$8^qGW&^g*e^?k^?3r#~
z%dBfu_8sKs*Qy@ftWQsZ3Jy^7@zZY>$PrDDa9Q$=8D6;VI5~Y@Ewh6DJh<W~AjJlt
z!gaexH)|VQT=ow%a9_`V;WqtkEwd$)-pT12b<D2v%-=xS^@wk0I=EW@@)g8A>f4#G
z0daRv9kYq8(l<~@LfbC7M?lBOcMHRk-ivQvKzi<YbW4M@T=)X<dK)+^-G8xb`rkTc
zaYn1@qV>$?vK=6`&_GXtsw{)5^qZbp&#c1i@|$J)gnDMF`mnFe49!27d^$hZgTiF-
zad4O*5{XBzt<Y~4h8Ia+m>FKmGcquM7Y9L3cGmz&B!2}vrDYo^7C{S#AaeX5Id`bs
z8qmS!-#{bKAdye}Q8zyG3$Tj!voZ*M=09|pkzeBkf9UDY`~sp+s#&L7H!v%6vVk39
z@gin=dIR%nE3ac<cX{;M3jbtb*k=y14BYGG{0yqBtY6fAVrK9FokGmO@H*e4*Y@Xc
zP%1e8qJFwhBeSW+ZO}pN;5=~W2TEMe`UFa#HYzW8L5$-ppaa_Akw5q7^qq~&D!lb@
z-8+A<On=qLY{1q8^55#|3Qf#fj5DTtH!+(rZk*oK#H<p%4s?wMxOlk$&GbIKs*gcO
z&x6N#!5QQK3yzN<dm$O)$p>%{!ZXG>C?6?ffZL>g(;1tYEzD+rU}o^`P6gL=<xr)d
z1tg%3Zz7ZrnvVsw=YD&D&zrvYon?A{GqX5j)%5me=HjHJ!?57Y|B4bEiXWI6z{jwF
zj&Fw?!1wMO3&TFpL2uv#_%z@;<-W5p>@$W(#Pj#e4DbykzYakvqpj2HT9~E0CEkM~
zsTz7DNCb#?+!=I30O*Qd4amYmCx|F`IMAcJ8oJC;2P6t_eaO9Mp1w<-QAR2j)bPLa
z4wNO1`?mfsG2d?i+O81wo_YEQc}87nS&wd3p+g`)f*KQc-#~i_K*90oMceemR%UJC
zC+|Q7zB7kMC+H#<(2A#f)91G`hu7ORvoi2cKkV5JTAO|v6gZ&vHKbfn0$B)_I0}*g
zmGTe?POyZ%XLq=ON9RS4gD(|4dQCTf1@+Tj%zq1tXpm{UL7G5yB}CH|h(ycn5<ZV!
z+od2$UWR%G2Jr4ZFc-AB6{2<}M6E}!?F^7Q@Tu(J<Uau}(F&3PZRCaMD2Gc_f+YCh
z@e~J^C>Ln`R+sJDt>@Vt&*5tL&8Js2;VTP+=kzaa%r1=Urdzf%OIuh#e31N>8FaRd
z2t!>SBv`CaP2BkgChzCdYpU~=WqMCLvqhBB8)gR2WOoq{%flX>H)?i6^uGDR!mv*q
z?iz29B5;tt21$TUX@t1n2rls-Bq0LVA^C=RvfwtcX(fzo)2%v~d6P0<BPXtvARb2I
znhX&|OI)=OQBYY9N{G;NNYg>0@FW-cnwbH#sY-nMfevPIwxwTK7+$=aez${JPNMWR
zIQ@BayI%0=tWfajEIj}k+K!tp+{tXKbm227`dvD|y+{EW*d2SprL$PXxAkp_hDUep
zffo#~rx$fH+c4+(vQ1AEVic>7^@BCl7+*3o9B1|PgLlq<eTKBoK%MixcnBNb@z(VN
zx8|Ne)qpzZpeq?bCuqafNcw?VYVv-d)CcOEgZQAv!f{q%KWJ;MzLQl1Y!YiOxMj-9
z2jLY$4%Fj-@XkZpS&JaNYY<)!gxALpZjtptc+J9KUIK*2sR-spL3nCPVBQ&D&|Su{
z;GTrz^qwqc?&%l0n7Kr%_JDFOxTWFIYszB8%JAaz^mkp%QjB%eIlGzltY$w4HI#N6
z2{1rLBVTlZ1Um0~G#<AQ0f~WT9m<}A+RWJ;;BNXpaQPtqVtQdWvn=R_-fm_W6{k<2
z9^mm8&M%o6S`U<1c=Xz){a|5uasLG~gR9{;k8alZ-P6B!GwZ1y|H{JfV!;cLf$v{@
z16u|<WgWD(VjpP44AkH1p6=Ddtl+Q@A`2CM4w4B63AG+5y$m@^{XJ;3w-O}QI~Q~$
zKUk>;=z^YCFLa(yU)96x#x4O`IKcg4`u84Y<NALeSQuWse-3t}4`g-12awPmh>#^j
z=m|*ZBt%FJB6JNTv<)I83=ujF5?TxvDs?tI;L&Tl?*nM8^w|qNu#0S4K`9){J_%wg
z)k7ryf;eIzc6V#T_y7NoI~ah9Ac(PRLB{%mjV%d;2(1JOS%HQ4TR<DgAi`j0Dno_S
z!L=c1Da&P$Y96R?HAuL7>5T9H|G$i9RsuDc-@o|v6qMbLc=XyX0lB3287SND1*v&)
zf4Wy6vy9!cm7sySsS)4*|9{c<3=~}aE#}M&4AAQ_UJLv`;MmCyYKF{!n1vkjhSQhy
zF$b~Ff6v13LiySBzkSRSikm?k7O+V^5a;l>#()}9y|z6dH%y&w*3Yc(v-Alw!%Jz1
zcr{2o<S8=)R0F6|Ui<{))Lu}ad2~7oy!-%a0QcH9fRt*YDy^8lv7cGYtn@Pr!;61l
zZF50B1hx5mpMVVonc~^$qQU{1lLFnSV)+Ubf4^REKAHZvpIMLb{&bxQ%#ys%UxJoY
zPMrb@jLp-7CNLZ71wICq$VWVSO^$+gM|pJbtpLe7Jpl)-Z|8E*b;qCz0c2gp^o<jk
z9r+$TVrFpsf4=lJNNoGGiOgEOOh_i5n{GalS&!4@EenH7=d%}q)AJ@Wt25e9pEi+M
zNj&5uXe-?>(43|14iH=R*Z==7Ql_7u$gC`xv=yGoeY@2>lj{V)SD(G8na(|lS*!jH
z=<bcq=Pw>U0>xvAi$|~N9jMSbh>#(u4S67wmEpC%M>p&DEg<7SwS5`r8jfC3&@COV
zhM=?A(jGE1yzB;Fc_+YHUIbd?AlSMAJPixEe&XMY^oO7-tPa%OaA9O%a5bF1WfHTD
z49i1sPn^HS5PYtK2juVqk6u%UH!RcNOky@ve+*L5d_(}eEFXM^#J3m9kC+)eduw50
z?_LN!n(i{0*_rX|^p45Qa~YpbSDV5t&)7fRZ3?p)W5o2@Da=v=297KYKD}E(<pF4Q
zbky|aQ<yabTOTkpK#c}p)>u0I!4zgaMyKigQ<?SU<F0|nA$_|`865fd*}Y)8$IM`P
zqm<u~e_tKri!ak-r!r5_>3_$<@Z!cjP=RT?8N@yVVLu1458PvBaNGmhtL@RvYP)f|
z<TPeQ#vjwIr!iYHJ=ie4Y#MW@xcyyF113a;1L}Qnrg`ys`lD&grW$+ifJ3Mx4Ai>%
z54t1U0i5iXfLA*7f^N_B?R@d#&~*Fh%(oanPM4a&tib3q-FgPI599yo9W$6Uq}Hs1
z#hmstkY3T{&p|ck3%T3VPt9QNWMaHCJ#;3s0ps`SZ8Mn_7_UuVK9gCMal`bpGnv(x
z64y@uI+Iy}MfN5$_?}9!>H4#n*_q_lPPdrF?9SJH6O{9+L1*>-e#$bvcNVjx-P5O_
zklqUlX^^9Tz3>Gq0v+cBJ|_d>KaQKA!v6n@GoWg$*K{{XQ|JE|*3+NNVpfr?y8&uG
zHb;Oi_3k|W;-xqP1HT5VUJ2`T#o5e?p(jAnkjs$$L3d{KP6Z`5!vil?A|zBH5)fy+
zn1GN_he&Ms4(j{AD8B*f6{<da!ZLmOY-UY+mmA>z8t8thlINiE+w>Ip#tN_vFVt=@
zGjz6s?$ZP*087t;NQ3No!G2@<|Jlr<ypteeAS+%xnXWj8Sy)x(I>=l{{+3kGa8fTg
zcwU5qj%w{SO#&(JJpSU?^vF5PZNh6`urR!Mb{)}2PFXem(;Q}FX7eJ}=^AsH<(Z8i
zvrPAz%dBJHcMW7J6UZ@8*NQv_#WBRS1=lcK`{WT=8tmG@Yhc&%-GPXKU8{F(`i;5F
zvW(Hwzs+S<VwSqfJl!FhRdl++JZ4TN>6O#1=P?H<yIujMSkS(b?qUJMOD}S-GBdb#
zm#7GMCjZ+9>UO-iK7GSHW<BPY4_T%^oX0G|czgP<dCW45ucnL7XVzt$Fx_=NvxQpV
zLy%kMf-foUyyejgzNZvy7^G8W{g8#>Mb`Ai^O-f71g=g$H=jA!e)|JZ*j!;|*!k`M
z|No%N{Q5zysouR{Q+iE3Kzfc{VP-Hq*?OR)474N(e9*qBAxL8F^n?Y>Vs_#n_C$~&
zp#F60ff74}y1yU`N<ng<HPfvJN|X?Ck3n*g)3+>OR*_nFiJ8H>)8(rGLi+7}7KRrx
zSEhejz#PYDHa&15v#*fZC2;=bZ<z-^|M>ok-su|_G6zeun}gOWPn`gETyFvRs-RX-
zP4wdNbh$;$&TQrPSQuU`o1VUiIh&0Q#5SFNV-d5S)WN%;5g^1(d~-odL_u}O*69k1
znP-SBSq#hV%Aji>dPU#eVVQnrF|!V1-}Il0nKcqp&x2|s@X%(<70|sN$*_~v_ku1i
zdf|E=l=WIyfLsO&-`k7~43MMOyCI2I1#G}E-_~#ZEjN%P!MfScZ*N?}oWfYI{(yzy
zwY5h#Yu-YbgWlc%#kc56XBLLn<sRLvA#j<?5SfPCEDWz>J$h|dfkJZeIcA2JlAtsG
zyID2iN>@OXCW4e2d33Y#!)5v)GSMIz2^o)W)~}$$6TpX7mO!LJZi5TH^yv-Dm@7cx
zv5dLSwEZRv!wVK3(1z3&l@*c<3?98TGk83DO$$I0uR*swb|WMtJbFzdZ?a5Zvz%Fx
z+59HU^b5<G#nKf)N~dB`$_<jJL6ZQjU;lc8h2cdqnuLKzujze|gcq6wXm$I^8!Xd(
zS1>CwueiZ7y>JDySo&m;(l1=7E(bZV4kU3KO#)<VCP?BCngqz!5Rk-5GzpNc_BU9j
zzgxj9CZh#XQI4h}#G}_#^ajgxg_X==kqjUeu4pQ9JbF!EUuR)>p~J<%;Mjar?qw$<
z1A}k!TTf`9diC0@@aQ!?4N}8_q}i*tW(6n~wqIwN-oKJrOlC1i#WhZZZ$T<Rp6b8O
zGX3C6X0h~YkcuT}DnOn{2T63JNqBhlng)X;iqIrLp0Wo?M50L~c=VcTUuT(aw~ARz
zMjWI<9Zf}rN3SXKb(ZM`tC%I3-&|vv-m{8X()#K(7KRtsIFMbwXT=<Fv1PgsB)1Dq
z4!obK*L3+cmgx^xG5f0P&w*v3b(bMo=qflNFFb*$Bbeu~PLE4sm1R7*y=XOaJ!AO(
zW1vEMe}WVP!wbgaV0MHg1H+525b+5h_Dcx60K~ovVON0I7a{Bp5c?>E4aylWb{=D%
z9?in!!dNuDcP+CbW5D$FYni3QOu<U*U+9AA{h(Iv3&ms8@2_Q6)&F%AWOX~ZChunO
z=-wj%+MM^|F@`W`o7amo(~Z|LD@v~d%kBqhdNJ=PGi1nSGbpHHrsuC?78R^I3Ylwz
z%#Tgdge(I%aEFmqHUM<Nch@my2GAwkGOY*dBpg9wP@nntS-)tXerg@FmZZlqW(M$S
zl^)2~e+NxxonDy0q{#Sby8e1*d!}d8rx&bePG|f({l<D`cgC&L6*e%7i#T5Z#lTch
zVdv4?y9Cs}-!|QQ1GBwioiJ!=(%x;Lvb^)xi}WMR44sF4Izf%L+viyrUX)B<y@A=5
z@y+y?8<>sx46d*+yjXb{)O=#qnKoT(BeNpo^XWbtnQP2?rh=jy+&u^NZUPTM3S{u=
z<>xP)4uQ(=<DhEi_y7Ok#*|OzqZikw|J%siqJHBLGwMC*QxAfbL)C%rN!L5bJpElf
zlOCt>L9q2@Q>H)I#H_$*G@WrXv%1+9kSO+REc^E}W532y>%jE5&CEHBZPQP0W>#kO
zoBn<?vu?eBDs04M%|6hG%O4f^h|B+rkWm)U@i3OA5H{#|81UTK0~OGS3#)(wL>#2%
zDpWmO%^4NYh|4t<$cPJg3r#2MaTPX(PS%qU?d#(&f`%Vh4@0=n%dz%Ccr~Ex*U8GS
z3bsieTsgBIR6!aq2@Ce@1YM5B!@<h%;`csK9Dvq9!0yI6zn6J>?@ty98Lvs8*aFRR
z7+qvRzJP>tKlAj1KUpNEyKQ9_VEQ+4dc;;{Cs8YqNxi1sM?g6kyo&45i=gT2w=&xZ
zT-^hTs-uRt_k)HRUmTnMdn>cL#iqT?pk?ZY2RdChbhd(47k0L~fS39Bbbj~fHT?&=
z4!SpVgGX;KNYbYlEc;^l^r&sj7ED@ur%&0&tSlzGmzlxW@{MojU;dsXa0}El=`hRm
zv)h;@M5OmIGc;Q>@b?+AGB7{}de2S&xs5r5v3<JVc4h^pOH9)XwlhnpSL_9~HktWb
zcd#%p7~b~muDQ$bB5@Bh_~4D^-^`_NL4E&#>Fc*Mn+n|7h2opD)4yzI4rA<^?!ALq
zf$1va^xPfH5{%W;+jcPP)^qL#bwW!;!3TJ>nt<GAd6>T^6LdqYf=4%NC+LXFZjODP
zuu)2nUR&F9EDSF^b~7{V3joDs@7w^8Hqa=~rxzD@fhM6qLq5H#vIjxk_h%lxQ!PL%
zJRa?4W@z3EVlvc&jMnR8WeD}?=GX^6gw~_icF|cDh8J&lF*CSyF9mH`2Ms$W>;k!w
zzZJAm31TJ0t~8ik9=)cU4uA^>ACN^=)7y74t23$Xn!aHtvov2KM9KyvrMY|h&7I74
z;(K>8Gk7!~=5e)r@7wvcW)39mXHM7K#cZc~U_T4QYtZS*h@BumfjJ=0fDI~`K5-ZG
zV#Z0+O?NYQF|lu-esDLlX-rx-EJYTdVqw_l2%1U*UHan(7oQ6f2hCH0ryR`S;#)xC
z@PK&nbvv|vc_|JWFzWpNB6WJu9%dazr|I>3m_3<4ZDpRm?;nc~<KpQOdznpTHf}>p
z3JbP@-0acK`?hm>=3Zun`pca#r`<lu!m!T<7N0LBfwXq-<p9NDcf7$1j;)|}^KFmL
z`=#$;Da`_;=Ko<2cuG^>26f--rWgKOAvFSg71<t;37|eAcm>9$Euai630p?CY70a)
zr2gQOW}EIP%pzVd4J)rEZUL27FQwt-Rn$pDStO?oVZ+O!v!ETFy{x+=AWODD<&{2E
zJzULBX;68!Um8+g9cKmcLDLM!SvN~VM~Hh(Sj9ls&UCV_g%}7evX(=5?VwSuPS&3g
z-YZbUxRZ6YG-%zH@brKCm^o6-Kml~{fr7_w&{+zg@n;Xl!yX5JgC|9Ow}SHH5l~mb
z3CuhOzS8;Kix*o#J@M~8o$p@U1%+9!Y1au*mU;ey1!P|9fl^Q_s|G6eVS4s{X6eib
zF!%e5GawyMC3aA;9S|}8mSzS9hP2}jEF}!b8T86hi+p-@*F69m4YEue93_XrW#GFP
zoLfN7I|^DiqYfIxSAr~4yfOX#er7ob{u3+=FLr=5wB9b^0Qq6!W>5|PwnPk6<g{#t
zwh`1p>LzRfdFc6zJ)1%F_ZM3>gJv|urw6QM<eZ*+fLV&^Y}@qC1I)f60>?o$#4V4`
zo1UFFJUed&zmV86{nY_xRmRKH1r9R1NzFfos=zS}1cQTLOq^bDklBpUX8Q7j%yvAt
zH-H=u4%-XUKOSUGW1e@EWqQ;hW<|!<={1L#y%~Q_KXHiJpXvOO>5P9^#HSk^W)@&P
zu-)-6a}=Yn<T{W$pT7`X2hA-jnx?Ni!Yt>Wwhod?;c5EvI#7jO&GF(CgaKV5d0;Il
zal_K~j<pb7khHBL3TYdGmPqn8uLG4~r97Yjtex&~lv%F63~Gl*ukB?~Sn`iw3rha`
zMd8U`;4mb~gOc_eWe6Ldv=@tlD^VUKH7^dKsp%JGV>r$_RTP%|L3~i>JL@=WrzkA_
zv%UqdMPqG-7#IjD*E?BjA-r3V<lheAtpYDLV{L@+jzD<T5MChUC^)FTsgR6PE(*^m
zY||5tF|%uOt^-9Hq$B*4fq`M)2R+C@c+eWqV4i8}H&9aj{vvStgk#K7oC#|ou~asF
z^D$-<ab-}L_tstkca6bQYM@1bzo-8@#%x%x+W;!&EK18fdQA`LLTdU?FBYz0X7KG?
z`alnKg6G^9U`if*t=r#vka|!XqWB=nbn%`w%nYvsJ-S(MgH?crU*GA#%nJlb>Ueas
z?t@FlA7o*8%`WHBYnp!$rc8Sc#NlsOgXs4!jHjPD&OC{6*7W!j%!*QX>cCd-16>&h
z_J&8V?Slg>3@>I+pLK%yp@Hct(7b;$$kCue#qa=lX~*eWurAOUM4)O4F|F7&ef3FZ
z-TE6VkyE6^DoBb1oniwz!3MOOWj`piUlf2$2d@h%0TnVQ`yoMo5~RKLK#7q@C)j3}
z&fTEkdhPDf&8i8vItOI6HoOXXv67kLwX#PyD|@Xn$aSE=vet%$LM_P1&igNVS2Ba{
zvFp4sy-<NsdivB;%;t<4)6bq_p2&D@di-f-117~4(<h#07M0po4Kf83DXRNeAlLJO
z1L#HR^aH1vb>$B)NA@H03Wy&exz3m$I_an+0LxR$mVxpVp8z~h?br*+BcMq~V_66r
zKB4%DAC#wfH$v5bCLMdAY`B_x{GdGbgdditKzz{k1IJl!@I$jyeJATput}`Yy5us1
zmjcOJssbQeSWiKw8L#srn!lhT=dwqyDK}`^=+`n(WqhE71G@f0$)lS!sR|Z4YI{*a
zM{zm06oaf`oIXv1g>SmvS!N+7k*euVXPLd2U+iI--hURn^nA@(W=GALOF_X1-d(m2
zGT-(8MJq%Mw4D!}zd-G;!s%k?n3b7}_OML1ImhhASU0`-9CHxk#_8A2G28G;tp>Ne
z=77%oeKcMEJhL71+1)JD6V5Z6F=kDlexBKoxg5ebopynllkxj@t_#f5*col6FTBny
z60$rW=9}(KEDZZJK}{ymO?Lfo@#P?KL^}7I18SB3H@pp64#qtP<c0e$nCC#-BOcwn
zzWLKRZ-7>H!A$_03|fi~NkyM#gH3pC;nB^?2UnB^vIe9G+%o%?2Xj^tNZcKs*0;_E
zRRnXvTk^pBgBHz#B)`~~VzVJENJ3<u!wf0^L49MP0MAa)5&h84;HMXiv!`FZ!K}l0
zc{<Zg=H<-AO03h@++=pEk79<U+G{gFsn(4do@)I!LQ*QICP?Oou;Dd<7Be_K*&?Y?
zg|gvl#F#;;tdmua8I*b@nAsRWyU03OLE;|0toj>S7;HT{Sp^_Qf!4)%bh2_mc>0jJ
zaux_rLjXL>{f`N3sXv6rzzizq#j;O0fR2;60@^p%&Dxv;3P*5{+M{>wh5P^igZc)Y
z-(FbF0u}XJCH8|wUhvKWb#VUkw}2K@dGwkl9|fhVy&w%QPR~G87x!2|b6DT@7l7u$
zXH3_>%`92pGXrFlDK9Ui#CZ=|5WfN}W?Kci)uQv>i_J4Z)h~a`aZv8-wf(e(h2e$w
zOprF)Sdfz5tst8W54_Nt2`Z}pzmS^_qThoSIc((zb-7+vu`n>aNT1Hk&}_lP-|7#l
z=^!3r1=Z<=)6d*yRuGb!3H8PYP`%h|DztU_zuU}W_0Pc0F%3KdYSi3+(U0V#A1n+E
zj^O<F@)h`OPE%<fkl(?91)9bI`)B=huwx5A=bUxkd$DT<$Ui0e9=*1+*Mn4p-Tz`S
zL>P45<~Go=682zgZR_LKvoO4T4>5foH%L9I=|N!AP1`_5b>4pw3o%CDqt~<%B-9Iu
z2RDc?$n;2%>5ss=Y_r!-|9FR4So6X(kP}TWtpn90|6jO+>;?^En?iyjW<5k)f5vp(
zyUcPLoe<?_APYM0zhHnUFO~7=HH`;}K`nhTz4$J37SoUQ)9>G9R$^kFHl6t%a}HD5
z`ss!Dn57sir}x}r&Sko@4$M_}KLymUJ7VC|`OBm65a^OOk6zPTYoQ6_#f9mn_nCtk
z?WT9$XZDJFI|)>HI4gk4xQ7t7#%pJfUR$n>pdgwGNfMx=TMtfwv~nTgun=TPH>(%u
z;MZ<YUDvxBwhHUhi+z(p<pZl~`gFqw%<A<lpp6;5a}VqXO?iRV4|d*qF$1Ke*ES1O
zaCY8%v3LqNE?qr(ZJXABEH?cFGVj0(Es#CEwzI*4TR}#=d<L0v_FK=w@Io9SeFv=A
zr}N*-(_l%{iJ<KkP%G=fmk)H_dZ7xjb0*YI1BjiG9=*1SVB=-$!N!2rZ)|}mEdz^B
z1zBr&03<$VGBd-=T(BK`L831&gA<f((>fN07u^s|ppbZJ4OU~y#m>Tz>;ZKM%pLPU
z;oNI04Ry!L$soV;xBLT7s@h%y3HO?QSp|x)7dj9##la3SeX$A@Hc<Dx5CA#m;m`m7
zUsO%s`H)$GsXBG~?T5^|jAy2EK4SJ0ShE^56$-w@+^1J}>FVj}kC=Uxc_x5jymiID
z|NmXOcfSA?>X6mBpy8anl`IS|a;9H@#2m`FV!G~QW_c!#Nz?rvGs|<%1=}s#ziN8f
zV`fXen=4otUi3`_Io+pM*LM{Q1Al8c8{~cj(4b>F*c;$0#9wGmn11&$vlg#DM63aH
zV)V!9B2SpjnK&m-_kF_L$E3e<`rRkYQqrkOpt2HmJj5I1D3$){LQk0;n3yI^4|&S$
zP`|4mWHo=QDGSI>kKVmvpw4@*=>{fn5N!b2;nB~`@LB-2jS933kgJcGVHfCX6KKD$
z1Z+y_9iQH{ARVB@*=wo{@|qS{hQ9@LD<VW#3?wWJ6|SET9+P<Q(QC>E693Z&c20{M
z6Sx)c(QEo;ISa#!r%>TzaN)Ng;d4-7WALdaAVZ#jgttS5xj+|Pb%KOtL1r(23X6jF
zJwb)}SQuV(g2jD$b#s<aU+|1MgUx&?3&RW3>3q+b{TM5z$3ACPWV|-L{yDRPK*}=Y
zq!7Do`ugY0nzk>Nu`s+y?FG5KL<YJL0c7g~khm{coWE6;iGjhj^;_LskM6kv|Nj4X
zHT>_>tNVTF^gS<_C3!b50|z(gbi@~@rdz*YmSGlEXPqAPg4vQy7i7$;=`&w2D>4N@
z)bsHmsaNiv{`dv6t%Cew7KRtHJs@ZBxB7v@b#DjArdE(mXO>KNc**R_<li-2?=iC+
z<NE2#UNWl$S}uY62swg3cY+&>{H?P<yZ=GsPMNWw6a^}xUM>NjN8QaD1{eCj1eD8M
zI)A-5GhO->vkhl#2e|0^7BfBJ6|=VK#Tc08J7ASBD?zEOn{_8#ycaCqJ$1^z|Nmb`
zgT~j2ryqF59A>qo9b^)0RqO-^54sw*3B-dhLab^>ZZrM+I6dGsv!t$VC%76d75C`1
zZCJ#@5c|@wlbPX#K?hj4gems0N3U%jSVE$6`n1=~irg0$urTZbW#$)+(+|C7HWsR%
z2a2803m(0`SA2S1&%F3Io&61SRQ>NLn71?*gLWf)Gd$3F>qUM$Gs8>J=pkrBp+~Rn
z*^jKy^VJ>OK<%)dA6a4NtN&UIX?uZs59j_cgU?!r_YCHK1kEn<K7*<O^&ZYc*$_4H
z{Pnz@A6Xf8g8B=cynP>889I4;KC&_#XKnk)3ceY|qm#8AYz%BOVIzdc3pq@^8p6v2
zO_+AFmO^+!kh9dwKTc1)!6KFn8kP6#yyn^Y*Q1;DQzXd8;5OKP(19#3f?Giis^ieb
zV;)EYxbI#}1w~KqRs&Gk-g*B;Mmr?Pqdj^}4{ZX4=w8rh?+dNA={w#s+p8UJ0d?wL
zhKMpSyby1NHjWfUL36pVVc{2w?bBu7G0WSZY6F|a-;%-zUbzP9bAS$NSp+h6E@+>H
zNAFaS>7e@N{)_%LaC_nxs50)n|H5K=^*d%oCY6@y^WHJv;<RZ7HPD{F*fqWJJ+r8e
z+aeZ*7y2N7b=Pyeh-zVGc<Bc6La(jcLXh!Lb3vnDf43ic&z!+3_F*=t)&{MHWV{7x
zXFUf=9-Z#+m06luP>OYW+*f9K#=X<)zA{TOHO-zr>npRAY(O1&oYk}2ox>y9Bf+!z
zD2s>X>6)vc*`loJ7r!#=Gg?h&{Kl-$$OYnwOn3dpEXR0#ddfHE3ruXa)BC?O%gCOX
z2}*Zw4R3pNPXI-@592GS{oh_po1XujS&nh-^uF)RvP}6ir?36aEX8OG7G(;lneO<5
zSw<Fgsg0{4!~g+MnSo@$lj({-nB^FMPj~piEX%Za#`O3f%u<ZqU{R(;)zf``GRw%N
z%s{w60nGrT>gl>anPr(gA!?bpXG|CT$t=ZqbGpt?W;w<W)4f5mo2F0C0*N+&MQx^6
zfufeHgths{|I&A$;A!3gnoDJ<v-0URjhv3K4s@kBvWL~Hrr-a`EX!y&{V&K|hUwE~
zelbfio|``57qcAG)5_`pelp9*E}w=l0d#H$vI(VNrHnn(*Z*SHWqdOI?l0zC&a84s
z@^~>l_&2iwqwVyT-^^v4yUHM<7SoykFoRaZ82(|d=H!5iwoTvqhuMJf_Vj0em|Hl#
zN+D`bOfUY+tjnZOI(^Y!<_@l|5{NKI*>sbC%=(P6(^LL2PvYEH3=y`O{{J7d5ff+W
z^q&9BGEAo@P7nOgEX6o;dd`1lImQjsyZ<xGG8Ijnz6vDj01*wJ{^UQinH0lB76za0
zwI@J3qi(|z1Za`%#i=GNN}Ma8Hr&}7&tk;LxN`a=MwS{;og(CbhfH71o36~n;=mbL
z0CCd!={Za+?u_lzw=l723On|JN_|jzl`VwGdr$ws#A2&gUkEC*Sv6chg$1a}=<NmN
z50FD%y_f?w>;H?4e6XV5&eNlrSt@x#KuQjP3{xwZ{(zZ93UsX>Gm8!rcm8%w7MATy
z0uyq<MU8J~odif(<Ma<~EO&SwfG&3F{Os9z?#1)zH`rOaGF@^&{`g-i?9pr6-pa!8
z+WCcbHdv^{2ytUbSvJUeSiO<~=2?UGr-L?Hut&$f6wG2~hz8dVo~<klFTP|mGrT?k
zF48+cc=Vd~TxA8HDSD5Cg(ti%8{{<5YMRnuk6v5*4p0&U)du%o>;#+48es<xix=y%
zKqZl_dIt-`iynxSDOd_LL?zq7!m!T})RY93XD_}?cjRPIXS_5$laob(tr?`nW_mv-
zix|)Cc1Xy7d%>SQeIqAJFr(RYRxTDRwzv5#piNw^Tr6gc`={4%v6$DdyaKC!L^D9u
z&(tgM>L;%qUj48xx(BI#;9dO6E1>F!)$R;JjWbj|Tutf~P-T;S1vCc&S}_megDRur
ztnpW%6_9f;t7SW=tI8S)F%UW!5DejYvVpt*y%3&1gx3z?O@|B=cwPZlMAH{|va|7C
z18vLgH4WLw!tla*`aEtHMMlf%2e?_}nIto&KjdbSWBfUdhee+8=5z%f7EM0mHc(7F
z0o4NcUSv!U=V57Ll24z0n}<b?@&EK+AeHy0OYySEGwz>m1)}Cpj{;Hk)2nz{lo(^C
z&jnGI(+}{nDAkLlfqH~L82MY9!2QtLhJBzF!r+l0(4ny3QepB*5cv*N`D<`_Cy4w6
zRQYXic_oPa0r0pP%zUO7)3zt`v4}A;`cALnXYpYCH~la_OFT2v8<y#+0xWYmteaRE
zHZZ^VI{lOY%X~KBCKiSlG1Kz}S>$+x8==AQLOpr<OhJ|qChnx^?*&;37-vpT5MoKt
zOKJcmD39*a6WyT~TsmLAc$)~y9<>Kv_<<Om2R(Xi%fM<n&%L-f{hbhtn(mwgkP=u9
zniLP}55cA{y5f=BVsd9#A-gwt&%)ATVLT`;{yYOui(U<gboTEmT3Wmd+Kk%EDpre7
zBL`IvPm3qdutE;u>|{N629zvMoMB}EwNW}*k3qEms|OExupWSLq5ExjL3queAn#<|
z0^v16))K6P@YX<hD<C{Y9&nOf1mR^vcyl1U3lQEk2=6>ESmgu=PfG~Ymg!{ef^c0x
z%SJm{mz;s5?gkMSUXkNQpi%<dyz=NZz1Ypd@WNsGLJ<}j!OiiY66UyPr~H1<P{fPH
z)6a>pNHM;e{!)a+U0)>u)O2#}n7<lScz|*scv(T|x))pt%nXhl@u8rBiCaRTPSy7p
z_ol~-vg9%5Pd_KhqQUrV`gc(lOGcmRhGHz%jAhev#aMjnx5a|uwl@RROz(7b*w-M%
z#sE6Oiy?*?w79REwb20NQc&6c19S(?0gvvfpgHyzpJPB8TfrK;BP2Y!cZ2F!P?^g5
z;yp+XHud)i#OdA(QuyLp40yD;6RM3>hS6ZUl{gD%0xv<F#YS+4KFBg~uz<JI)=Xb3
z&eF)}GhJVT#f0(g^b`peEv3FN@H%h9+rHg;j{N&-8D4CNVrFo$d{8O`;xfKiIDLZz
zON4}36f?vBR)hcl|G%6K8N$0%%fj$t^>hVE78{o%kH9sj0?6aN;A5a(n|t)KN`3<!
zfzHC-=_2UT{2P3@-!u%BCA=QJtn0tCOkW_$V#1g){i-BOARAi(3&V@6({-d+Dw)rJ
zVVS-{ibYmXJPI6}9^KUzpq3&>)bwjoEVYa;r-w+hq%zK)zDt@#Rxz{!+}Z@qroWJl
zWM<d}iP!fYy<0)Oix;uee@L_FGwDW7*OXyVVB(IP?k&S&$#`LUs|-sbW8U=VGAzc7
zR@0?rSu|yig@G1K@cjS(pP`h?qr3IRzyJRmI6$WaebbztAj_h_xM_N$EK4L)mFDz2
zvMi^h*M%`NxOA<p|NsBLOUGUi<<Yyh4Ad{%GX0<&i%NZe2s6Vc{-^_>GwWPbL^@(S
zx?(4~bkt7t=&kK|QHUZd(Gfe*qdRtnOGoVtkKWpeFM?2{WjbPKcpQ9f;nGn%-=nv7
z#tUN<X@!p1`5wJ<1;9?JUFOkSJO70sW61PWd6w-=7V6XG6j<a`zXd@G9MF`<Z;x(k
zNQ#RK2BpSo2MBN8^h5;~ai2Dbpaev)0>p#&A+v%Z#(*Zd96@KcUGoI5{n{`S)F%iA
z#Txj`Hr4$epskc^ryo&ZQIsrK1Eo(;W|-RrYv}xX@j8fkx`6_t==1{#Osvx-6j>yN
z?ZGCv3V=6M{sXP}vYhUs$nud%UUj;;5{oOxg<=+l4Qwxxr?)7vXmg)^!@>aC?|bqM
z%k*7JEK}^yTw!6TlY*Q!>CtO?xqyYCoZF+9cbhlJ0VW4`ftEXi=F*S*Gc)k-tL=Sp
z!JnC-!?l-xUv1xuBh!18S=vn{3RoCk%NTy!1zO|{TK!(Tq4D?s|NP)%!+8UWSQtPj
z-+%Ihj8pQu6tOV8crx8ng~gPKzi4`c3X4MU$3hkc(23+NFhx%bSr}fF`7wjGSj3xw
zQ>sU=YqJOFto*Iuf}t@0G*j}#r6aW+Cfxy%1}%7cku?3Y3QHWP7wD3lUeOf=)1y>b
zlo>Op*Qv6Y*B^fg35UZkSs3_xm_TQdbn}4jPHAgofh=p@1#U2f`+>@l*FhfLvL%Y3
z5V7{?HO<HeRc$VvpI*H31*Hbih1Ik2S&%PImiL26YynAtCXOHmviX7Lf<QUYqnlSs
zak`Bfi$W#?*k}un?x_)=Jt2oYdQE45?RZh(%gpe4+l#F}kVFJai!YSG7FP?rNCz?C
zi7nC>qRyk+UBaW2&F}zZlOJTxXVFeb`|`jYMz-nq)L3|!vlLjTH!v|u)SvfZX7I2)
zT*BvgjE!M8XyWkYeQ-%;Iv-TQ_0~4*0yW59DEcuo>;}!xgNDvGLR4^{1hqeF8+L)T
zz4-479xZACot5g*Yq~B6RN}xSANevf>;@$$$Qpdpg`g#cy|oSX5WPo0(x6~(Jx~(i
z(QDd(qInre7BoWGdZ5J0qt`SCsu`lU!xvOvwH_z|-R2z%(+INbMJ`l|f6C$J(<~mn
zr468}OV=0F!TA5;q&G8zP4f@l5-!kk(0||%_vmJ|mj}f*gNL>2gHqnk8y?L^GNK^|
z?7v|0h6FM=GG6?fZm+>o$247T`hE=-L!J~+NcPrFcv0=eJiVWVQGwgS2V~Lr7Xe<(
z(|55jDsyu|1(dv)r@vrfl;?cl4N>u9daWjln)F5}_oOGHJY@IiW}PX^Iz5n;QK~-5
z6XF19k>c6;&$HX^#UW47irPBxKo;+d9UjaKp2yw5J8wO^>l8pm6Yq;f5K&MzW$^5-
z1FsX|ebECE1+{D#JiGUS&W;2r7kE(&mS_VBfF}7pyX!zj97_rBi>T?*S}Ycf+0&<J
zv8XY+Oy8}=qEJ6^8>}t%)*aLqtK9}~i<#vh+F4cm(Ar{&;0tP5m5|hML)q}QnC~`F
z11xwOC>etK1t31?*r?;I?%P;F;}i@Y^}Vbgv%&oWM~H#YgZ-@`JT^#Az!bt$Qvf%l
z%ptsF2u~5hTMXf8LwGrmEwri-UIAnatvrNxLK$p|B$&s=dLP1ly%o{``>D;stL`Ta
zNl2Zp7xsg8Jil1)1}gK9Iv#fgN6!8X&}8AP>AE^B`XK@(plPV@FKXODP2a<wo${cC
zPpKZgdnbH{F6sr%9|nS?TMv|k`gE@C0Iw@v3fi9N(`))83pDt;6twvRyo~GHi`CON
z=&*?B3Ai&eK<~|NJy3e}r2#W&6wJ0F3$!rAqt|u<=o%`+|DX=_w-;xpf6`%5ssA($
z<eE<}9=U_lr$?`8O%@Boi;wP*EDqU33YwhA014lM3dezlY`{xUV?n})p~9hX;SiAU
z8mO=jT-X~VJQXVJ%*en{4{mXqI)cROpyK9m<whXkbf~a4Tv!<-8~_ytotptML<A&k
z2^AKGtL6d;D?x?X;llqjSr}e$*F(jBgO5l7`STY@{EHjJ`=AqNAclVe3EzbZKZdJ*
z3KBjB6}}D^z5@~lB?3?xdKxZ#2_!rNs(L>I1B2uA$$Bi;WU^f#<K`_rpyKxbVd#`c
z259fV^j3WqJ!wUViV`=+|3@3Z*BmI9-Up3mh`CNbr_Z9zCY;T}@Z!w$|N1Pd&L_a<
zlGd|sfYLLdbOV&mfYJd_+5$=|Y+_|FJn7NPD!yrYx&ccV6SLFw{RS*D0Z$!4$+;a=
zMmY7dtOb=59?3smoC6EHOL!(9_5A+KgWvH6Xd-$CL{z}>;8SML<i9UgK==x;LFY7V
z2Zg|b>Dq=Y#!TNtrzaS)$T4o2UT?@E%d|su`#eLIY9{rXWEKYa@$4WISJ^{@=LWcI
zf8VF`+Y1@T=?*3=vYHmjpg!tbxO&i<jAWSliR_@R%YTsitJ~X5SUeaRmrXx!%A%^@
zV2dbsUFNfR^zJnPEg#855eDtb>;MTzOjkBz@nzz&onB<dqQtwxj+w!ee;>a`ujt*?
z(-)etcrZ;~J^i&AixyM*>gnR<EUy{=OlP)WQD**km}R=A1&axju+8*%3zij(xzjl;
zS@aogr(0OEm@%<gO)s!yab%o7eUl}NwG!w+e^5uHmcfyKpZ$vvOJ)Y^R*j$k|AYG?
z^^7l^rt@2|#4&E4o@d3Pz&z<7%k+s>Eb>k<H&__Dc^W&tT^yVLgL@fKpoP!fdnJDU
z|6ju6(aZbmCb%iY()gKQ(AftbSkR3GFCI_-WW}<ZeSSO(!wU(^>07K>d`!|}AZ^kY
zTP>IwUW<72+MWVQZ?<4&a6IOs;=pKlyX7{2i!G##v5RA2crksti4BViW6kzR8x}c6
z#@Oi<wk&GS1u<yRscHs|PFe8sJaBYQHwTNATmzj9=h3?rw7TWRH&f95Ok4e!=?`sL
zgzJ|?gPLR>ovi{tK^M)x2OV=31kuOeav8RZ_!W2}*YtTSsFt|(;yTE(POu%X%pjS1
zCIhHI2W{_8jAmhYaTzK+2`(H765azAE{TWiM+}W-@n?9k5+YUu5eon*n+6f8gb4Y7
zgqk5jWe_0`kWc|cNEjmI0uqXye#nkxigcX`*yH@I^FUKrsgTe#1SyD`UTDuE!RR`@
z%bw*|eM>XMKP4db;B#k~B3T$-G@GFN=~o135*aFt@Y5%da41+9=BIZcAt#6s)Jrcx
zLi!LPsF$9Cgk;npVo*Ol1c`A%grI)93ljP^UDJ_emYARs)K9nmg7>FaMzJuw_%!{d
zBZ~p!>FHcfEIN$KrkgvlC^EK8k91;@GnsD)YSxITK+_|5jnWGbL$E0&7CybEW#OPE
zCTzbWC_itQzS@aJQe6O|sPvjguWbz|K)!+mx?6Aj`2WAbgOL$@1Xni8^w&--&Wy{Z
z>pQb(SV)3w>vT~u0F^B~P>uz1!kcS=#XWA@`<+?X7-j7B!S3R3W&QvE|4U7X7Z-)I
zFuag9n7+}4CBr095487I<tNDVdqJ1AyzmE$D1b%gHh@xS=lvIdKnC&e<M!z_HJm%$
z*OjG;v2^+gSC(gt1=H8Nv6wPiO@HdfV#36#H(lDD#hCHJbbogib;h{q<?bxcOl7sv
zE#U@>KrGn{vgE~X9cBg({(Ze5jz_QTo0-!md9XAxY3fWD^<=rmWUM`XgBy#~bapQm
zDaOCkmAqJt8Bb0R^I|b&oIJh9i^YgZOmq4HFO~^1djeP(UX*GwGrTkdADM2uI)H`Y
zWfo`$)bZ&#-YnlGlhr^~#IgMvtPBh<!oZy4p!(_H^co))Y0jg$pk~JN7mm{x_^`w>
zhEM<J!;-|9Fg?+iMS_W0eR{Po%Q<H5pDfdT{8%InPI`k>e|rHs56iQ69|sGl82|QS
zHRKqGjZoP+5bm$zEYqj@vD6DGd4mp009||K7~~l281&-mbTxk#U8Ngd5Yx^;>i!q)
zOrY&}b}w92K>at?N8eedm-@5FtIt!0G`YcTe$cjRPy?Cu1-~+=opv8I$R8d1l2Lj3
zZhsafiMvXmQCqYd!>T5NdS4RLc>`E@nVfb{_fKZFXVO-l9vi^&nDNha$3PYhCSm32
z*?}ysjAy2A3}lI~S5abSINr<wY4S2aECC<d;?Zk+VFIkJJx2l5*4{G#-qtqqLbSCt
zr=zvC7fb+;!Api9)bK#n!`s?D6F_b4N%0dPHXmmN34nTD$64DZKpWe=tiL@$r4DNY
z#6aj6d=-QT8~TLsIzc5@C+j*0?*eFXS|@A41V|&fL4<`}+@qV-?F;A-5%7o{=!kw$
zTVVfmrC^p?CSA|z3xioC1UnTW<r(OfSWxyXo_;Er#X>deGe{$7vSWb<%8FA-1<?4w
zf6%$rpQo#buo$y7ZDnD25ji~}ghi42_j1rt?0US_hgqiggs>Pg$$3oQAHt%|EvCQ>
zJq!8L^sgZ-nv9F4%ZIYKaQ|Eey4oO8v~ml}^t@1(d(6*dm?5VaCmdtsWV`Co&3f&_
z^oB4NEk=v!tHW6OWu)Xl?dIn%EM%A&SS#NA|Nn_!>j3CRyqyPFriX>I*fZ^aKYe;Q
zi=17pG)nTae(_2gl>Vy09W>S#52TQj*$pX(Vo0x^ryG>6gs01a&N^N!4GJRgS;uzo
zVZn01g$4Pn<5q|o&{@Y)sA>>r9p97&4SQgmb({op74)p*d+%W8FL7Z(I_o&U8<sGQ
zr9cTYx*MJ_=eWQV9q)k&kc0_YcfeoIYY*CO)XTfU7orBVHlYBj9<D~a8<a2&yJ6`P
z#0L#w9%ohU2Bk~LS;uN%lVHme6d=4%P=V0N8U^7+LwF$&-V+E<tb2MuB#X4j%eNq(
zfl}fPk6zQ_WEO@ONz>~iSrix}r!R<PkrB6%0*y7i&iCkMoeEY9N_;)e(=SJ|I59q+
zE*8b2%-B2KDvCvgF=={y6w3oAS<u-i;A8MioLG<#kG~@UN~2Fe>mXi3Y_)d1Q7Yim
z`M{(3hy(26hr=&6O>c~5iC~hKn0`B&MO``ytQchN3P+S<`6MN#%f_(C>z0Tkr=Kh_
z<n)syhMa!pwL{Vm_ypO87?$Zw!V=RZV_BSaML=eN7vYzJR(5{`9X|tJQP={ywXK);
zwgafm1sVoR5M!SH?j@tx^!c$Ye2o3m*Tu3(xyOLD-+z$<qMLuP6p4ED)-eC^=ryf(
zU}1P+E)GtrBA}e?DbCDr%!QeS;W!JkUO`T!N3UrZ`102KFD^~zk7GH-7&!e_97}|}
z)(cP|frdqO>_L`;I>QS@m>KqihRt3?O%IG`iD#^uzA>Jq+;)oysMc|p@a(Qv@Jucj
zc(E8Fpzu1_qnlOiIm{$iJE%$E0v0^R^Rj7rY643vbA|}>^!IHnrqh2Vu;>JsfsRQ5
z2f$QYkQUH+F>8cimZu3pLKQqH1G<veqxp@5XXhVJ(22yowtcq9<BA@gH(%_ZUY5ur
z7oG%?03B)fTFRr>wgtok4bOm2ql*CX;5Q9`G!+Sf4$P@hQDCUk_35>pZwu<-eDmyf
zQPJ?~7Wn|0mAnsX`~I2!I*~<Msth4-fg*o=x<V3*JX414bjKtX6*d)H7KRr!)3cLU
zOzMAvZn)~a`Jz{lnZdEUTmlq97a15B_Jf=ST572y$jtECWFJ3hVhA)^=h16>6RIZ?
zB&E8K6G`eERLTxw90$m_CI(O~D-Lz-yBAjkm>E3(AMs3f6Y!iam&~G4-(thUun&F?
zpGW6SkLDv1pzHv-<?`hv0Z{s8{R}$Q1RNz-tU*!oB1ZrgA8G>344of6I)C&A{%`)p
zQ7q<>eA1&=^q?hZIL79bN9VDZ-U5&)^XO(>1vkhE6u0~bI#0b&gqwAH`h{c`HN`Zz
zqDx@gKndUuKg_~u{LGUJw~0*GPGQ-_ByKs~CXGdDI%g`23Hwni7KRr~_@*C7W09Yp
zoXTRw=s$g4D$5+EL*^h=evF%@cc-z)iFNZbGkA5|7<(j_?%4$jS<u#@vg!NNSYF9*
zz7I>U4=h1Gb?H3yLX!t(_v7g&(pj7%<H1rduW*A#WKDg+JeSTxFAsAwGwf(!WMJT5
ze4?1oqt|pwFbl&5#+R$P;Q=59H(v>?t@G52UT&E2?$c8;So*acLFP6eQHVY4(ajoj
z59S~%3y_04PrbOz1=G+wT`rSlC6j~M^plw^<^tSipeDMhKMRPm4K|xDki`<f^4ye#
zVY*Egi}dvREEZ0t6Q<L<vRKquR=|bNXR&xP{W6&@mCe${RAMrHSvHFjQ<BN_Q`s!;
zCduqby>t~G&=kcjc2LtCbPr_d6_4J~6E7Ztx^2C-swN<NO@*1JyXLUWWb~PSKZhm9
z>|i<QlzIVB^YK4uAxkA2s3`vC(R!f7CG9xtymnRw1%@usS>>z@Etg7c3=jD9>h`uz
zZ_H(}5D#u=Wq1i1q;WdNVxi!4j75W?i`A}t`h{E;PsYR3rSe#=@>;Wj${%)*?rMP-
z_0#|4v8Xccp01S7635hQG<{V*i|q9I`7E4FSzwL<W5D#=`7Fka=ce-)ummuko}N&^
zqRF^$dRGBUUXlw7Ged6$>psv0j4xc@fHox@hVE1lWC0iLFBCyEN-1li%fj&D4Kt#Y
z{l|<^%1VRo=<2-xqJ4T)A<KFuMds<;MJyLo8?Qj(wmbL%Xg0^RSr^nw{`lfE1E^tp
zSi|%G+0yyb1$|jWri&D_9FlAU9Y4`+0UA5-=r!$v?nL|e;>Y&)#VnzWjL)XKma<G>
zQrDP%y_DsERr+5hP-`{=k)J^cYCY%#g>F!tCa1;1un#mi3eE&C^8PYG3;0{xFP5=z
zFfz&inSQ&RMV0Z#bjAvnTBbVH=?xVukC|qwOi!(3xgjop7UKL~(`YqN(gdw9p8At%
z`odOb>FN1ZEIN$+)8|yNWHTxMn$B6xa-50h=k!a}ETKZoKbaUjJ6#z(lWReDV>7?7
zm~L6aqRu4nV|r2z%TfN$Z%m*QmBAH7?8}qW&1zYk+>U%_VsPwrVQ2J7{^8ktjKkyq
z>C)$*p{D!aK&BmcJjTx8+WMr<+427wkM7tDp53JkAnBy<ObouQPfGYfociheYFVTi
zr%%6C%VMRN_LYgDli9J8{S&_y^Cw4sLAKWly^cSde=rp*zi|G_#4x?DfkkY(cO8qU
zDG$i{PWDb_$8Ppd9{gGdUa#}$W_@-776ie{pdjcx^&<8wEEvVVPM=!G;x69+SHuHW
z<kETQ#kVgoRU4-Nu45@??3$im&mzy5HNC%{MUK&X`nq}+c_!^I)6dtl$T4w$nf|_>
zMW6B3bomAr1ICrp0~%ON7)z$NHn8Z(tp;t91sBdg6rgTU`V2Gu&h+yQEG2T1a5Xo;
zmtb|CdNJV>OpVv{#6}i<rZdvhCpEHIF+Gr;ey))vLT=k9CWhDi`#}q3_Pyj}V0a;X
z8<ZoQH9*rk&!@XIvDnH*BdHPOVqkc&;}%$r1xQWL^!ZIJwM=}Urpq<6thRXmo(X(F
zf9y-`4-i&xK<CHSlNGF%{sOgf9^I^khhd?qA_p1y>OA%0*>uJhmTrj)puMTx79QQg
zp536L^^!EmuP>aZFKJ;3luw7s_L|zsg2X{p#@%-?4^E#h(#m2aH0?bop&+$XTBk>}
zvLrL*zn}iDjl~Sq`Vg2dzl4=zI(Hk3qw|D!AmuKgn-XeN6hJj{9aKc&b+|`2>j%)0
z0^o4}26l@_=PhuGb&PR@)}9g5``cJz8SS>eZDT28WI8E2J+*_SkSR=b`i%~jLP_C$
zVDEZ%^LciM34lw0X_71qFIuN3b+V`_T-ghj_UJXWkc9ck>lMsTEU%`o=wu0$Pll@!
zhpIaC;^s@3s>#zOx>#n2>%0PGC}#<e?rH^(<YEzzgU^^=h`*YCyo)6<_Dv-#1857m
zV|Tqkr|rE;R)&MmnfKZ7FfhDezXXa+)<c!74Bf0pDp?s^yUPU}EsxcxdM1B!=``I~
z399977lEjQ&zN6iz69CBIti-sh2o3pt=%jgO#dsU^Y^fLGHt1t9@WF*z*JN*eNGRH
z8<SSW^d~(m_DnC!r>pj|m@sWFpB~-IlI=EaC&=rdGOARRg<+pNtex{B^cl=&2cI%A
zcyzPofK`H8s*^=Qf%M|(Q<#eR(|P(>92xIU_v>R(WMX_ay|9nPKyvpEkkKFw?jj%!
zKAn$zIzPV9dpdnrAB!S?06#0k{}NwU!;?O}tS<c1U-hy0)juhP^|dBEW@0$bdZ85F
z*V-Zg=|_Rqfy+jr^|iK?f(8M2ce+E=fcjeLA`mvbueG2Q)Yn>83hQfu_@J5J<E*nv
zL47R-29Nqq*4bc_V7o}CLU^F&oku6@a|kaIa<#zBQqYxLkojnE8#x4gkV@xok6v3<
z5l}N0x~6W^6DH7U{5N$#!wdIc9DNK*?Z<sv|CcC2_WsX&1QI#o+d18A0*fnKp$H4Z
z3$N*o6If*B>p*PvCrk{E-K7Gc?PtQEp!Dc;Jz#j?1@n{Xdnd4H3p^GA&5@ZN2UDtH
zqSJp&VA1k&6J}xPy!T@2V^B(oUEy)?F*EoCTTuS;cmxu3-Qfe?<B`D2%JAaFC-6A4
zN3Urmh<g*xoy0pmXCjM~$}>Jtqr;Zv18AI@RUd2_uNIgRRTE-i;P1<2ntpx?i~Mx0
zNh~6I?jTdbL8f%aUhwG^y)6iGB=1Eq#d<;zY*;_&RPJ8WWWMR#lUR)P_&|ETef<C5
z2coA6teCd|OtGdz^yoqKF!4>#nZ#nEcZG+Q;l&h$9tp5wUOq6z$_mkQ<{h{Jxqx^2
zIgp-NAU#G1J=+ApZd(JUSQiU`-IfK>W5+w)U^0t|UIIwZg%5DIg@6_FdVwicM~EH{
zh@Lw<AU&efmrrJq*HZ&&%tL7W#1FRY1(;&J&kwe2*;}v!t9Yh=namQ$Xfi!`3X3rZ
zj{rCd4X5`_VG&n(cn=(D2Ryr7C49PFFL-sc9B8f(0HrNHh$&+H(@#!ev6PhJW@UI`
z^d96^*9#uKwx_{SXS$Vdy7W{Q4M|3j^v8E_=`M(L3E%XXsVuevn*~@Px8UvrU!Zkw
z`pT&+vZ5b&Sr}e|F2D5YHGRSh@`7ry!1UWwS>)KZ@v<-&o}8{YjYVX-@H7@f#<uCM
z(^!<0o`SXx#oc29U(4Nf7nBQZ?fJk7xI1=3=e-wZ(>tfJ$S_IYnZA4)%YEr@yetea
z>_O@}Z?qn$vvce`=F|BabW>K`^o7$|<g)jI6tLZ8V({s%-Qm-nd%&kVbp@!Qtab-%
z_*szrvpY=S=83p#=QE#9&_bsd>>%mp!yKOf&y~IhwNAd>W@0cr0Pdi2@<Atz4}dhU
zyu$=Jw10YI2D|XI5=KtltlOaSuNr!&cfu`DB)|qpBW^+JSIEfKnjGjF&e^%JV$A*)
zs2FR{g%@Ktcp=3Ss2DpFfL4rU=Yor|Jy12EVr&hR4KK#Rb3w&eY%Z)A1M%4yKr09W
za}mW@5ZEME=n33D5S|<4WC=G2FBdY1=>g$A15Zz}Izf1UAUqogF95R8zzo8B4dEF;
zcyGY7l&o60NQL3_oEt2h(<jVi;ZfVM7E}p<hMqvzY#m}_VR&H(4ngn{QxTBzZ~gQ`
zGg%xYXMrN%@GVes`TyemO(q6cL(o{K_1fvuvsg6L=HCL9f-EYIo$eg3k9zdlI`V*$
z5@>z|6e+Klzc_n?iDA0n88-3h4YOEy1&@PvGD7Z80L^#2=$<}r7Ry#y##<nhpSW}+
z?|`hb>fQ@lUggnS+W6w>^n%$e5{zf2cg|*!cG_^0iNU2~X%2W*UGf8uP8k(Y+o874
zqt{dnysvkv3TP2z=S9!X3qIYwpaqjJ)Ng{4B4p9#)alP=v*={#TxVkVe;71f$=^Qr
z-~az0*BIV5yyVfn6|_9+#f|Gs46kiHdTl>)voO5Y^60f)!Og<(qVWdE!{GCBZ41G7
zwRPTmk#K_va!On(NJ-ocCg=fg-K=+3O|P26qQEla8WY2`8;s&Spfy>brFq?~Q&&wt
zIEQ7aEZ25W-|Ci6_tqc(K&AahpYF8`|Ns97ovd3oy?HK61!Ls&KXX|m8RMsm&12D#
zH@eCMU%}`q0$adXIuX2pQS|Ec#Ca?-jNhl%&0~>eyg7Z&JQfAU9n<&DV^OX5;$&fX
z&Ewko1T-aUo5KlO;dvFBw>-LegI9pk1*eC#?}bt!kH#aQ&7nxWrx$`(AQ=lfJpo;-
zSa}6G^X-JHfmXhbpbc1{{h<G)SQu<x)Lns8s;y5-<RHoH4_NnMpH5|$&SDOa<Idpq
zL9ao3AfnkJtzghdlk(N+g4<Z6r|+20BB8nfY>GQ%HR3Z+uX@%MCI-iE#{^12@wAo$
zylUa=d=@RXy&(3o>8cA@N;o!uWd^NLbeq0#0gEitLbmA#7O*%oKAz69kVRQlmkoL3
z?8U!J;Ic@}qu2HZD=0;S&c806?z50ZMZ@6|xa<*l(F$U~SH+cIf`ksF*y&G!4|qbB
z!7)u=I(`2_7RmZQ7n#7T;G{vT;6UZx*^5jJhPPV}Kvs@H7x&gSys*B^#L%#Z6|{zx
ztCZtd3z!9}SeAfCIAE*g)GjkIv>qr4^XN5|1g!@IEu#aKJui4661E<_rsqC_YBKNw
zxq1eM7hf)cwPbqqnjVJ9fETgdhDaoXoCaQj_gWCPl5N^0CWhUR;iCU9bT2Y7AgyM*
z0t$$3*2POe=?Ai!%@}1h8_bZvOHB0)yFspdy%Q#82QnCB`|D*d94<h^u-8^U1y)?2
zJ`XCcrBmR=wFn!cxQ=i`E3W@1gNy5ew-9kqas7f7q8?ma*MH`(=Y5^b%CHmUnNHph
z$)KY9RWd6BCj$dRC+`c8{!Z4HAgUL3x7A|^Zvv!rz6;@5KyIwM4&i-)teJOA0a?##
zBM6$|XFUy(+XUeq1@TOKSzRG3==X!Ty{s1@+ZGQ(cxEzSjZh0aA-u22kXbDGB`mxO
zpe>sokP_4bbSt7bXkMY$R1<WsSm*s0Q>XhZVUcFyyf8g;2}`4B&;=&&bz`6raL{5$
z7VzeZ|4Ufp<WoRw3y^&0eGkwwp$p)FEYkpxxWa|$HcMIL+4Mo2U(*wpvZ%6gfY|3j
zY~ktim$C@4Jz@q8IZofcltqngH;7#^{qa&3rTUp5cEEYC&HODNK${Rd@4tvY%f#T=
z$@cQ`zyJUDF@oFc_d!dE7oG)Y2>zC3|Nj4XJPt}7;M;Ff&w^^5_b*nT1=S62AsM5a
z_16MWDg$+4J~4qB^lw1}ytiKDo@HWqUEREQ&-efJ{~0`bS<irXg3EpdQT#49x?6XA
z|Noz}6?D*aiJ(WX?QbSfz6LeCxz8~%H17o+;>`e-VPS^Jd<0qD`oBchqt{jnE_xf}
z;9grHP}u@vJ9e`<cDizSbhCzo-8P+hIg6}<&>2Wt2A723q58%*GZ;bVf?Nm93@n)L
zu$;wH()$b(gQw*YkIuOs|Nj5yZ@tM18Y+DLV)pb!%UP-!W2eilU{PaIVVdr?g2k4x
zc6!SS7A27fjG!QxngFUVdRy0n_PV=I-?f6}AMXp$wTIncnHM(GkFI2y&LnYidfX}&
zNyfk1D^{_*WE8Xi$IS3z)(KFB*!l$&HN7?xFaAw0U&Erncz61YH7p7BDYHQ4gM!%g
zFR0*{dH}Q`@4$;|$CwyiCx8y?Vq<|+j$I&z38>x&F|<8;Z8<;;C68X)^Q<fkuO&Tt
zZKr`4pnj4sh{5jBYs<pQ!tf&ZILHaMnqV8YLT&H?2|9M~T>x@eH|w35pzhgk5AZm{
z;y<A2LePc{kcYjGfl6WP7rY=Eax~Bm(EN-?H}AZe(|4?8kz<URetj*Afv7LY5J-jr
z?ZN=<f&0TeU1lANxu`5ib7w0kAU!)>!S{7>9h;u9j%6QP>u+X;7dNNttY^_=te+mX
zo<)ms&-BLiEC;l>|1&eZXgR{f@R9@6cI&lW_Y34O&(3?Groa)fuh>CZC1HB@1{Q6p
zW79yP3F^)Z{$gg>2RaK0GUV7geZvM8Gg&ug(8~2AFYX)$Yjp#g=F<5LH0QNvI`c*r
z7tzc^OtAZ}AV<e`v;LYoJ!T_|lJdQ&Ak#r{6$rY#t``<p0f(3vUW$M=K1`ava3hN$
zQ`6MxS2nVgGpqb$p6<7aMTPO-^x{n{wTw@uf84~9A#D7Inc+pwK_&)JL&&4ol=lbo
z^qkEsa*WTWcW-7<5LN`qOCjVBd}p4%4<tWj`dyGbKS=(>0l5Cs@66K$wy-ELI!rg*
z!lKUh1r(mS)8n?Vlrc3-ntp8yi$cB4K1ddUG$>kcm*m5DK+N9<ir#AQI%C!s_aQt3
z5Abn{7a=_8?uf$>UI0XHD}<K-;Vp;o3Lw0hARfHF?%v191io)d;uI*dJokZ`Cg2f(
z;QgT6HD4T`zG^Frzj*RQSO9l^1<lBU7O#R%ycO8SQd{5u8?@V?`6pv34=59W{HV2$
ziNUeCHiMy#!|}MQ2&k6v?Dl2w=(RomiJ4&^sHTHNfA(ImLLSCaDX4<0Uzi#8f%*^-
z1zr#ZG6)5`Kng%}(GUfi^$-;z2o>`{DiB6+>;*+gEvVJd^@W)Mtj+Mii^Y4uRtqpd
zGeqqdW(NM2Md0#Z6vQz+@S=VXI62<?$;|K~d@q=-^oyC{h4)@2hL^3NJKt`*PVe5%
zV!>EB{m6C}J1^!hpltBs?rxBkr40MIKs!yYf_b$Jj@_Z4dm4BkYIg1h+t0zk-}iw5
zbiTwBk6zY4pv&HRd9}YVPxsluqQRW?g?W1U4weami$60nxO6^pHN4~)<QNqE;{0@p
zoh)*U+oqfEWYN*u@EL4v%`UK!Dh&L6OF+wAdrkLz1`UeXt^rf3b3QXq@7>Ab$t19A
z`i-3|N{pYT|K7<WXMcGovU88_WMX)&2Mv|`pO_g8FM%$00ILDVp^*YJ!#>am6*wqg
z+?^h=i$%@w-&baa7w)@2CV{;Q%8oxlx(~eY-3fM=1w&odZqQ(|Pp>WGXXfeacd>|z
zs_g{TY~LK4Yh@UGI{$g}vYz<FJpJ}A78%C((|_z@k+n~iN3l)->=3XOpcBN~Ay%x}
z0k*<}fxizl769J+;L~e6;S=+8fjunZqK!MytqK0bJiTEzi%E<TNbCP&;Av4;kLJTH
zo|Z>yCPI_rN;wqELw3OZ2iiBm46*#fcCh6UXqI332(|p^c67_9e`KC+vxmimv21$b
z9u}E^x3VbK%-9aG26O_}NAP4BI1Y>v!igWD@gk29ONEJXZ=Zg54~w)!4p{GhP*l2F
zmdf~aKJ(~hH3hk9FN-GQ+UZt%S(GCbKZ29Ug7eIvEDMeVPkz^LAPYS@&%emp26Boo
z!~esj4?KEp-^-vlbk;UdyWP<;Rt98=M=$H051`7@^wS6C>09@*C@2eV1J6JSICh6-
zv|i%x16}J2QECdh1kmuni}%xi>}8STIt<pxs``O>y23sdPsZBmS^HSzgg;3m+vn4H
z@x`p^v-h!NGns9huDhQ_65Nwh@a(M@cp(TDG4qT3$jtB}X)8Fl&IPf<wt~C>E&vX{
zg$7&P7P#0kn3xwr>=aDQZ2HFiETYM;HX|3sT3f(8Xi+Q!;X#XHJ_rw56f;10(4zPg
z#1v>z`~<{<7sc16YaU=x*H-|!q0>c01G3EwwCq9>WJc%x7pzbz1F+OLkkr5F^#@pd
z>z8Z>mD}zPV2O92nU8rOk>q#}kAsg{!0P}&{7&}(u!?6Otu-K#<oF1fiUbh9(>(#a
zudCDnq$Cm~lpLSoaquzta5GyFztg<{q9g;P#B4JYgW+W1Z6ed-53;Z^A9scH_^J=G
z6f>o@PXBO_MbZB7MsVA<R0re`IgqDY50u=4&Z_D_`R72A_8UQ6s{bViU$es6F>I~V
z0}ioBF`k&7eTYSu@6roUK?gpA`QeM`>B|nW1T!{H|8<DPfJv)my3S#iSVr&ZU58mF
zGFdiHmp#HFSO0w-6T<}X*8g7Hx6ZKsRO32Of9j?)yg%js0n%3jovO#D3Sq;S>Fsp}
zcW4}t)F?pNa5XEPL4Bz8&Y*e+H0TB5Gcz#MGaP4K><k_M>SYxKrSeYJxex<E%^;6X
z*69#l45;eqWPJ(Y=|MV3vz?K~uV5#lAD_a^@Z#(`(3k^wxJnLkp3B0uAQ1_V;|`!g
zmI2(2m~MHLMc?{OBdGock9PTX>w!nx_dNjZhG7L8(#r7n|9@A*Cmy|XL8C7Fj)7fr
zA2h09G=1?=7Ins=>8FpfIH<6{2i5*Qy<0)bK#hQJFBYt0VgPFZA1C$d#j@%8$5<?F
zzBGVrv~c`?1hkFs9eDA2H|srQ(N*t2aS6IyK5#7)gX4Zk%awIg!}KM`SW4Lf-!U`1
zcr;!9IEyyu(DLIfa$<)!feM$sAj>^^r+)YYI!x_F)Aah|EE-I@Yo@O}&Z1V|3))5p
zZY$4y%gpd{Eu;}$4j0`C5}ghfl}!YTf;JW2d&|tQ4{`3c!WvKpx9$ep;n8dQA5<J1
zc$o^(rUlo=^^TcgpEG=J>g8%CQwEQ2kb$Nk8PGmcNF8}$HKZTswHiF?;0`)&rhD!K
z$k|sftfn`gU@2sLF#YQZ78PFMjUZo6ee>u4{};EXtDR)AVJw=Se3HeSNoLjbIVV{(
z#rao(yOkxJ4dAd)F1ZaFYrZ}G&Pf(&W{$Va(|?_0iDO(bJ@OQb9Hag8ic>7Qpwq>c
zpJLHwZhQllR+#?v6pI<-)#*B?Sr#w}tek%CG|Lpms_DsRSTq?uruUv<(PZv;1yy?U
z42u|(;EL%V&#)|F@?1W>?kbDe^mnIOIHv!*z#=xi?i`EQ^!sO7Oc+m27dgkWib-zS
z^aJNuOqC8U0r{4{bt2^GuNT{){6;8Wc<FTU^DOd=^QN1hXHn$6vI^nxInz_mvzRkl
zOrLw6MV&eRIrH@6=ULnsKTqeoz@p1IbGpq17Io$W&zPsDU0`uz44J<60?Rta#_2H^
zS#(7k7lDU0JMVPQ{Q?bPg+<fnU1Vuz+&*3H63Zo~CksJ-2%heHndJoYYXg?)5?5H7
znH(2@M5U+ixWaOTF=2Y`RhDk1EAt>?s@GW3JPhZ8{nO(7>Hq(ik3RkfjRNm204H>h
zUQ?|Hu=H#^mx<x!<M;pnH~-}KfJ8HY>*e?V|G!-O@&Er93DYlMV~Mw_n*(kY_;ebB
zmN~!JI|r0Ria9|0&_L%ygVuz;OqtEZ0AfHEBZChwIc)$P%->}QE6v<ygG#eyhVatt
z`h7?V1{%!2EC^wPM}9y9KV62P(v0^wR1Ii!XbqGNS5syP+Jw}}TW1I=)hY~GL3cnh
zbn=44Jvv#-4OtlyJbGE<!370tA=pILLdeiiHG~%i8LDRm9gEP*S`6W(L*!Z@yhI2O
zbiKMqCu=f<#{wP|VU0BejrS;MT+Rc9FSzJ3yxln$)LZYI3mPTvocjlq9eYhZpD;7L
zu$aE`28#^i>gmUBuvl<in+2-<O&8u{p3ZTTMcIEPm@nIX54249J7~N^a}Fd6eE^+|
zU@(h`p|cgV!``FUH0>U!!S&Yg{|i>A8WY2BAXOh`gAFaa$2`62CX2eP{5@vKbd=$N
z7q8erM_IXpu8jbX+hkAQcaue&+5H~#^cy!>y!id9KsLYf>3rzh`Qycv>4vvh?D!c`
z1ly<A-C~ho-f)+B`pjD_YK*Sa58PrAW3Ii+JpJY^7I)_4yUf#-Z?l+bZ=3-toLIkP
zLjuOy^+KtrN9PTX#v`D<IPzfi`sppVSsa<e^;o8#xXmIj+*tw2V4-I`dVMeW^txVo
z!82p}uiGq%LZavrGp6U>VM%1JxXnEM;vE)oCYkBeU)^D`)9<~_%<x*&<KPPg&`p!>
zB8InL>w5H>&biIZupiW`Gd%FZhna!lHRuwg^|zU)hu>wfGME991@!?954`xr#J~`1
zcmSN9Azj{X>lgo~f+{Z9+?Cz*gLhe^RVy+f{_AuFEe?KH&CKxP<5W;P=QwDFy4a(a
zcfxJv>5TVSB<h7B`d>&-XJYV};n7>e+ORW-fq_Buphxn>eW2BpFMOskF{B-L4&VYU
zD*}zCFP+N7uphMa>4oGpknM+kI;~wgiv^B5gF+GFgSWRp)g9DhpkX>u&^Ti^>*)-L
z)4(f;Jvyh)xW~fJ*gbv4Jr+~rYqyvgHZX#Y)B8V#iQ%;%Xo)?@m;)f8H&Z})y!M1^
z>;Jk4@F{|-J8v;h7r4(N#&}@5`h6CC#%a^T@3WXPCQR?W&!WgIaf^BS#``R?OcGP3
zU%1brE&p*c6N9hi)0z#<wO1HQcs;s}A$`o7lR=5XdU{|fqv&+~2P~r8oj1Wl{j(=C
zF-%wVV-cNJ!pJG_3{nPfb2d+gj6Fbx>o;pa8gJnB$#c6HqlCiKApY!hy|Ev39LtNO
z>HH5_jFUwsF)?%=YWxKftC9EUX5|Dc1oim%444^qg2W9Eyr`YT#PAw)PQ@t=R`38U
zmrLh&pU!9hFT57==w`i>3NqaQv_B<&5-41rzet`0@&)UrRF>%n5}2hKi?$zp$a06N
zzTB9F0kWXMqt|wpDy-a->jRa0ZL08c&-^N+tOK>;R<l6Z@D^H@DyZCJ)kado3uVLA
zgsH+0qKQ@o6@8(qtPHI6piyzwV2FOstDw0mR$mAYS^~O5cv7JB(aG8f;VD3P)es(d
zqf95OErbV}S@7s&HHYxtK~z>kcq)+7z>QU5O~2_8kt{s*2B7P3x>=Vcf`ScHAcFG6
zhF#1IFXa0``2uvf1%HbZcs$NjB@CR^_kbE{&tE9@fg09~{H?lRSxD~p=rwh_0#<bf
zqUujCNEI`GE9fvek6u#)0Z{Vy=nXyK(d&D})~DC?1VrH#n8J^s)ym+>_~ssv6OQ|K
zs)L)I;L;GBk@kc39lwa1p8Skuv*)%e%#iU=+pC~sNkPM)AO>hW^z;>Gh8I(MK~*BC
zS`|rv_!6AOd^&%4G#@bl6>V{j@v(<rT$vvKoF&ZEIRxZDkej~ybp8W1S8aPhUSKR0
z@c4fibSj_W0Uyi9HFrVT&~_!rhDSZqeHXGQM=b6Jr8L;KkC|PdA^=tZP3(eX3rA3U
z`=3XzsnR88h8GJ#Iv|Vmr9HY?`Qkwi1SNU4OQ3om)az>LW&*9wmz-Yrf`yOiMBMbg
z7c6V*FG_>9eMTKf<JV(-E6>8f-ws-~^O;}3^$dRq>t-a`^YSbV<ryHE9sD7zGm&Jr
zf@J(aG6(oWSnH8wW`kr*Kr(CiLs(OhWEw#-QlFjq1zb1qhp>7hNu|rPFqC<FbhEa_
zf_%Z@(QCWu0yD!tP@xHFu)203=0qc7r~iG)QX@23iiLqc{N!i;s8ebDdc14oSf+Qs
zVsTfql0tYeOpb+tzbzNE^QfD(5VW-bywLQ+dFJUqUa_b!Npwz^d(D!<_-=diYnCP^
zi8W`L88)zZbngWnqVCf9$))or=x~x#(`DbW=rh-xWuET;jwOV}xs{1wdcaF&k?A@g
zSR|PwTBl!o$CAN&pam3*V7)IYrhC6<F=943!#us=J&Ooq(DbSAS=5<%&M;5k|DGk3
z@zQkB4=e_Z%cr}2V98KwX@bNtXjGIf_T}d$CRhOjZe*29LK|6WQn142Q6s3Z36g>r
zHoH$l3K&pflmCMWd;loCATg5y7dG6_5Nakt)x*^&Nr6fj4JlZc5yXdV{*sY`_86Ue
zS*uQi%NsF>fzaJw0uWvpWXXdUgck$hxj=XaAUrmy=_@|6$jE4%W@dOH-UP~}ptJ7y
zTi${4ZUbn1^7-@!A6e8GcTH#i#9}PHuMylb;%`~XzyLbIruD_||Nr?lc)i3~ru%+o
zQJr4(i6y{sQV1;JNS|V6*rx>V0|hoRF}%D7ivM0)-!se%FRp<E&ayBtq&f1}9rx(9
z-41fef$7|zS?rmE#K4A@v7bD}%<zJ#ar&vxEM4^{Pk?gNi{u6-hVEhok6zm|5P=}D
zfCFe^1tQ=G7SQnMwY>xpFlb<6;156WnLo-o1+;hX1gJ88A%zf)@aVNY2N7jKh{ize
z*uePWT|HA6%m~ml&nbxF8})F5eLQ+?Pe4QuAw&Z_dTozEMAslhLp*wIk3dAHP1pR&
z5-C}J0@S?xZ+PH^Q9TobM{;q7;U%BW?=K3b&;H7i&n(2oGM)DuOSqDSFetNK{>(2p
zK?k&-ApFv2{;1%X&-_s*Kk*BwE@Wky-u8{9Kt%jFGw9&BgSDW>scpt_W`-9Br*nO0
z(dPJl3@p<$-4?{V1>yNmFZj-)t+Nxtlc{B5cnvy?ClI7h3S>q%tW5k?1uhd`e3^dy
zJ4-&}q3Py7SS)oNszEsprp64S2E6Ds_N87GG*5xE&?X^h7Fs9_%R-`6pe)oY49`N-
zkHNDC@1hToECla^6bgf~5bvb55H+BFN;XtITurPnC<~<v!?IAMFe?M79eSKKTo{^#
zB0E_lz$U@gP6k1E&<p66KzM<W+!7`Xt8+V_f{TC91$32%nHgSWfW3-5++s7m`zMQ(
z)OKH3PPliJ8Tpoyvg!MOvKVP6gXKZ>^#$K<b)Vj?po5~p_m_c3Odh>BR0)bY(<w)p
zr_20ekv2IAvZ>d!_$Vmf-+yte3e@Q=(emhK<pvuCDy?HcR;j=<-Kpu>zgQINJs~DZ
zgLFa;-2&H*pn<w5h@tu*sm}W^!oi06bnd<J@BjZ2bI|m0>jzMGs++aP2j(9RR7<=o
znHY|@f)?+9+wv!0t3$3!J6aA(C<i@`Pv`p0qQu;Ign7FDZx#i{^yvY=S!5N`D?rOg
zz(aQ5Kvi^eC8(_jI%B)x2s6WrhUvY(Sya@Op{m~dbbj;c-3vM}478cR0<0Lcc;@bM
zX3)XjH-59IOGh37HCv`a`hUHk;UJ&hRu<4a-}C8Ge^{)g*uBAiK+H3G^xFOf#p1E)
z`F~j4Bjn0a-DFh(bJISMD)S0Zkn^{eGBF_C0Qcy{^D<Oz%y4bnK-w58rt|$}5%b)D
zrtC~P%=8T)WhcwQrnf*&I{^hm`ypnA7n>l$t!hjR&^rL5rsw`;v1Sq}o4)EVi){2%
z&^BOjZ5nx)nc?LMP*bj(wH_|&eTbQ1pDH{}*p)FcIPQZCs_lIMird!zC4wHHyWLin
zfQtCr;Je*Cx>-#;rz`zqabt{_p81a@i1GjQJ^xtz7&lDk{?B4uFXsUcN{?RKqX(EF
zw=2G!1v0Ihl^HGty2o;#8Uq8v%X)~^3wM|<kAu+p-j^v5sk3mYIFOVPNS7yQHoL1B
zQhdO>h2M*r7&Jj+BcMu}^~KvFP&&I0Eo`0^K~zKfE`>a-kW(r_ONRG>8lErC6oCpG
zA6|H2V|@@(kbvsz$d{1923{8%@PY~(*00wPYJ{Nb;c8@fL4}PHFRZWu@j>k4tYW;-
z!p6Cm_3;5vzGW4F7znMexgb2qz$z;XgqIF!^|L{E+aRMS47^kKu}am8>|thj!CVaT
zF}Td}25$;{(O3+sz>j-&%7f|*-4YPbUBIK)RHYJBWr7FQAH8^A1WI9bGLGGlRf(Xn
zb-`j#%b2V5^J`^S!~d^An=KSTyGy}CrE&+Ll@h2GJGqF7f!U|?$MgfISY<gNosR3S
z)9V>oU4#USKsFu)6)T`j`D{P)^s9`l%1j)^(|<9tDl?i-mt$g;V*66g%<$s<bUP+i
zi~5`*P^NjE>(gy|+XZw8iJeFHT+sFB9^Jtpmz(Sdx%`D^A!tIzt~;0mGG^=x7Ix`;
z_(H#siQ%=TM>i{IS2JiCM0YDhdw>8$X*66ZOCh4wn&tvZf}GR8GO<cBsT52XU}lwL
zQgfMZz|5+^*fKqknbk?wu>kBHkKWcZpxd@PSyVti106tgX&>|S4a}@^j7HPXGqVOT
z**Z^GWMLH*kJtxtZRgDw%kvRdaXL@;Wnq=GJe~(hlkgO5k`JjZUsQq^@P2o8K13ZP
z?e6A)rrlMXu!@o|50rMNal+FsJM<(kP}-gS1TF1Wae~wCr@e@@dk4yfr`<G8R)*uO
zIh>&M3Ywk(@j>k4tO=Zmw0mVQIPFG341}iL5D4!us7=?&+6UpCgz!2byhD&NJ1<Vq
zn4K7p26&0j6_0M#9gfrIv9e0Bn`~!hc%hs(eLpL!lDc>v6GJz%?E(e{hEmWfnce%D
z8D3n;19ko0z6RYs{t6^;csd6gtE;L!h+UD##NfCWRPA{5g3B`SMLD}bCV&p_ZJ%Dm
z#(G0Z$N?1Npz84y=vGo=cu{yU2UGz6f8jbkhn-cDD>fHY;ffyH%{;xIomE0^^=?pg
z0yY;kGIRpe6lgtAvcaQQbpLMV=||aFHJFd?W}g0momI#5Ne*~IQ=$0>JAW%^4#lHa
zR0-7pdx!!2Ez18vhmVLd@17pW!P?CDY5G+TRz01)nV>{>%(t^dMZlxG6}0N76%?;)
zc7dE>dJIJIyM6#=@Nd)gIa&8GW!g@E%gL(DBeR>C;pJP<Sx6F@(-WSvC{H)wV`2eq
z-u3JREvVwKo$klQx}Nd(^nYBeGK}}8OLMbIF<zZ+#?3m3Y3GjVr?^?O<(qdfGrVvC
z6+NK!ZlL9ih6g-5??Dd5nYLp(J1?s~Xpt2UYYLOlj_I#>Sf!aBZ-)q<nr_a^S{ZY3
z8#4ockM6(!|6hYTk#j9!;qJ7JnPHzb?C!2sxOf^!+!7uiE@{xU!oeW7oJnJ1fYwv2
zUY65&_*j)(?`>yhczyE4-xNqjfoG_!R7i$`)CdVFpz;w`BSb(ILvq!Z|197$z7O1C
zWS!p4$I4ePn+hrwOJqEHZBw?w1`fWx;7bFg23yq~%nYy9Kqckx6tFs7k6v3FBz4a~
zR`=T81*K##8@#%c1A12BzEIGDi_ZU`w$>%EvkrT--Y&i6(QEsC3)nKy9X#J&EQFX6
z0rKBY=(MCY11#T9PX^_Cbq098-?AN^r+HOwLGnGk@ypEs%J;mxq4gA~f!qyM4_EX3
zKWGa?C-49N{wxf~S%3a#VE}b8J9$A89-XW|{)4u8z>aYE1mV4g49~NG&1ZcM;mJXG
z&5*1v!2r(c(_EO@r@u2~Wn=O-pUy47s?BIM-CTgxjI$neg=6Ra7unOx1Xz_gCZ&MV
zyer4_gQlz^rV7cR{P_Gu9z;~YvpbXleB2OdERZ=F6d$H4FF_;b&tJ5G1M~Qcp6M?I
zSoP)iB!OxZpU&qVy{0mt8wGo(ZUNuR{nNMe!;4eX%>`L!G0jb!zR#Fdk*O+i`a@$@
zVJ6wc>D)rB(o77A(=~)x?U`9$F;CADV$EWkmB7UC!gu;DA=a(TcV9417tCeVoW5I_
zRbTp5JQIWCaaS48DQkweK?_!%LENLBIQ@eutEiYyA}H-0gv?X7o&?>Adj5s?bORAq
zbtzV3ScXvA%gnIP4xaFjOfM8+RhOQW01geXzfn$GQjVWK&x}=q+3+dz^m8Jt@_dyE
zpqAQ!5;@QWM8ovoBCI})z0*BJS(Oz&8iFhV4M5G?2&%o`f~u}xFH+(_IfV7J;q-1%
zRz=3P>1#z<wU}xRr{5H1bxGMC3klo@AZqFn&>2X*y(d5c*xP#MH)uW;G?TbD4%Aj)
z_USg|Hw4w#eEh8&K&{PQTknm`4EuE9{y7oL#BjWsfr$Y;J+$9|m4V^Khv|)Cto~9y
zjG(PJERBZWc7YC!1np1YHQmU}@WOffD=}7eMm_)apqdo4#N>1|6T@ps@TN}N_3N1#
z_Bp{V_!kZKjkx}FdkI!W#!J%^C0G@hF6&KimSDB1&sz_wuI|5>90LxeQW1|{(?qCP
zJw&X;*Q1-YR1XwX9FEO@7)zx+dTkejEQy0#q8H7?@bVL=(C)Q;4w5p1O9@AV`aElX
z|Njq42(Ps~x>+?KhI#bb3jAHi%&-q(&hzPhlB}y3Urqlh$*Re?X}Yo$>q=&aSIpDT
zOR=gkS+AS^U5YhQfd{nR4%F%j1D%TnDtM=YPQCN#Y}Ejj?B&}Fq*<pjGB>|rp3Wi5
zs>J;39`kfvSynmTwQ|f19=%gR(ez^N^axqje&)ZgnWvw%XO*4KF2`ET`wKFE3RX}z
zy<Lvgkk>&Ltmn<I|Nmb&Og}2eYRq_N`cFAlOU`35p!EC;bYqb`tFiIEC<wPN1Qhj*
zuKccF{+}*=;L*)`MI97)7N7_;eGkfU-BZC1b(_9Wo>hdYdgb)(@~qlgRbXYH%6G>~
zX5^7X%Md1p*KF|VeJ}OtJPNFeGOWRnq8;_*T+R0^4F4}o_jhEKuJ;KB#XW3)QxAj(
zJ*TG*%-ao4m976vSYPBq1USI;8b}}pBmi%5`GI(l8!@4U?xy!F(3^eOf<T4ty!R}y
zn|-8Kf(qSw{yfn1>Esh=rEU}GD4$+ltqmYW{CS{K_u~o(8(!+>y@!;#W$!_SZozw4
zp$iiC=w!_Y8^H=~Uu8mgmmw{xWC-sW7v#YCR0x-!AG{<!{{8fehOA=KdlgxEnRcm8
zpQFgC&A4*<2}M>TwNId%6g%&~xEBa2Tv$}V%h_jvI~8+5IUH2A@dQs-P-2xAI=vip
zeuIb#xX=Yjv`i0FVim9d6a>ylC6_#UP3M7bSM3F#atSI~UcIOe0&V+oWoSLX->1q9
zx<Z#7beAKz@GyOVZlYo!#HcKApXA$%=}@C@`E)+^XgquXbPO28be~?`gz2CX?3<cr
zH`Gm_Js}SQK!sHB5075&KOh(U_vw7+*?Hr|m+8F9tf`EDrWY%-Dv90n2kitBY(4NB
zbn25p>jF?Fs+qo8nN@}{e)<VzR!8RK8_d&rR9JJ^zWFgRyjVHCPK9+Fv&D62ai5^d
zs-&FY&&2S$+@qWIq9Q1@gOc&P)hI>xgy~CFSrzQ3gXKY`Zu%0?Tn4DdItAJU(al-|
zms-CB<Q>p1+wQ5Lpnvh&7nGD)gA}K;sIe+C@%m0zS7TLX;!>RMqsD5-l(S@dj~c5q
zo7EC#h8OFmuT^7}Rh0v=4gEkBCHQ9W20uu6#zRg*l?6#xOn<M&s=)UaG(8anlJ7kJ
zB5t~@I;#<5>+}G1R!QEzMWFn@_W|gPxTn+0)L9kkS9pVh)iequ(|P~JR$nHDV-9TK
zYr-9ajxz-Khd6umnr;Bi2zTCpA>#u|O-Eh3YgA;woyK-~PyktYc7ykSnW`*iW_bC7
znSsI8@U3g>f1l2!9^d}|=kGhh#K6F>!OM9Ubase<C?jayQ!j7U2j=Ob8mvwhwID~d
z9w?CjjXZ%4fy@MzEWJ}5zWx9IqQ{4cfq&m#F#CcR6GP`={(XBLK{9)$_iM1qG8Onv
zU#G!pY5LX+5+=}%9j{j~GrWlRfrwpqZ3T^5Gu?qW;1_rUEN}9A=IJt;tWgoWKzF%x
z-uuiiz&igDGefEGXD5DvIjsTTKrMFJISARtOUw+f^*xi1d-RGHf``UT4t?eqkZA;M
zn=9o484v|h!UK~3z&!n&Cab5gtv3^cXK$SV^g_9BFLb=8YiY6O3l-mjI42vtt(N!7
zTjuGjwOExHA5TB0#j0fd!~?XP5}b2)fZCJ2rqdRHR%e29p-=BxP>}d^gM%0{p!ULI
zy0SK_k#s#s;{hM=dH47GKt=g0pU#({?Q;{S7ihD}GjT4MK2e)hlu6HH`U-7Ud3|Y5
zP&?{1=(wpaX_Oc(m=CI#U;J}N^luZSr+?FCRWNcxRXG=|(xvm`i|y`A46nC)bhD~J
zRCsg;a=f1T;*Hz%+9XzarngelGj&)EJgnWpapSlLRGIR(bb!kM+r;@GFRq20qzpb!
zbfyQ2I`EWcw=lS{0yR&*On<1us=;^K4deyLPI2wt>4Fxl;!H0tPB+kHeI)pAF6h)E
zgqBU)mGxMS7=?LVK&3?_>-n3Yc!*=&f0KE-bUCa0^!56zqQdi>A+iZj*?^nO)4M>j
zat5rTI{HxAk2fHCAA)JfEedWjh6i557cG7ln;vh#D#y5WdYu8QIP?Acpst9_^aMv%
zuKG_-prQa)s~I_idC*!-1<XUL)r27eh+2&aBml3~zJSa^snrr5z-qNMj-Xo2=K;J{
zdpZkLNkMBh%N=O7n!y85KY;hbe2^kYt+ofOfj<vktI0fo)M_dZK((6O16ZvF68Gq2
zl?59CtJTCIJZM)!6T*AW3aQncAzWx*!uA2ER#Rq55CwN3nEailTL`e4a!%=jH18Uw
zCmOLTaV&QN6-CfKgqf)$sAzotq8TCzZc9T`$nzHxj^HxR@;E3bJby786i%JTUo3Q(
z{z`yVPvN2iB;|lQ5r*K4?vOhX_Z_EO2(r#(+%$c!F{=_||MUmOtRhTC_K-e=s6C_)
zA$0=MhhSfC$Hed=$!_{>A=WL-pN>Im6;LNa>c1^oCqnE9#6dRG-<z_Ei6`1)=|d#g
zPB#=`Rg;nu1Z7K5O=LbBr6#&LJ;sbxU23@<I5@x_N9jaZOrLAUD#`427}AH}@3RBv
zCP*J*s?GF2BCOs_i)^NQin2;i_cv!{S6~Aj5&&wFnx3Bms=1(DiAoz#;$(fm59vzG
zo<75zRf}m7Ke#KAdd3<O#-I%)y*RrPmux`oNl;fpg&(ymQ8NXlD{<Evvn#=BGd<UW
z)lb^-F{p$<?Mry|Gc&x1u-g7wj8%<MuVE6X&;oTP9#|qe6Avb#bS8wY!2Z$Ug>)vK
zPxrB6RbYC-Gd<6W)uz6=7ZNusK&n~~fIAaqP_ZcxF>q(13v?}WH-}^MKS*a{6UY)o
zC&1Z~iQy$Lq%-jiB!%cqXjp<e6QJ%YsQd$WCTt;wfjSdBAjJrC{!F*DW?jj|U^)GX
zHLE(~$>}^ctSgzrPcTp4VZ*A%<TG*l0~^+01x+qcDzWhB1@$I;I?s7@PIUma$U0js
zKn<ZO+k<Ucr!g|mKgB%#jUB5Jv)Eqd>4NsGioD1EfT9o5n>aSz-k!CaS?UzHH!*?f
zyyf(G2UZEUUSm+?G425E^>E>L{Q&I|oMQvq3GNYG=>-+EQ^A%w7=yyMbqA<dY2E4p
zqIyO1d#CSpVAYN(0c!#!=efNo{R3lTaQ|QrWTt}E1*{IVf%ZbFs7vPqkH#Y}SQr?h
z;b-a`e(~QB(sh6g^jKd&DqY=-Ku&;_u5Az=v~;Zi^N>o{bcg_=bPWRuz)M#T5D%qv
z-E#p}x-uAoO4k(^;HB&T9#FvvEnRz;qm`~bpcA)xc~$yBiXf%yHLwPx(zW6Oq;ze#
z04iOpF2G7xkhn)DYbDqSR_MVA#Sq>~P<N-3H5bA=&*ls6CFDc6Z~4HyObG8KgqIBA
zML_x!u@K%82rnGMTOk707kB|wDvM1&?ZnE<RKqg;mJ_QZ=fz4$k-T@hiZiQX{Zm6w
z8RW*{*)8S+Y0N{5;Qud53_#`c{}+cKN(6R;Mw>mm#o!8p4VW1IpDumlc-##>%CZ#P
z2<X*~-v-HxtzgZ^K}%v;4FA7o2H&*s?!_uYNV&-ePBXB<mzC2mIkP%QN`Upa33zsk
zp%ja&rfa*fN;2)(I^E5MRe>KAgP;@Wz#}W{`qMAwu}VzubzxO9G&W#jc&+Bs`TfN~
z&>H-1);Ubz^zPAXs@(-D9>0NlBd=cY>x0r7YZ=q@2QI9NOon=(DF(6WlCG@0OnOYy
zHC$OeG|uUQa+zs%CnVTzgS50B0N-xD1tiuBX__CNKEst&o^NXuqO~roH~pw9Yn;zU
zkO{2^N<?5S<+<IUuzB_3h#n|_-@o`F2<nO*^Xb){+|3LbMgw=be!VDzY83$U-@SM<
zJ>QL0B{p+2GsBB>dY~XY{$h?G14FOJfBx{3%|G*edUYGXm$keDHEUD1GBcE$dL&=)
z=;gg?1PTI^iypnaU00bw%R+c2HveFRw0|wOGJ}tP;MKp*JpF?kYmkVL9;p3WqXKIH
zKYPKTH$BXqbs^)<=|9|Ajm%bQgZh&063qvg{vWnHT=STJAGnSCf?XR_<P`gK{w@{q
z=oUta!P4mo9;}iQ$3YiX_O87Fnz4bm3je=wnLg2jRWvI~2V?+qskw`Fv5aG{8>3_A
zv6>U0vs#pNK(+pBCy#E{iT^;QmW5|`7-&OYUK^<Lc)_O4#PAxlnz0xn>(LzylAQ&X
z1+{XYY9X4$?*Evl3wW}svi#L#VwkRQmRV%FuO}-f^S{5$(<41u4M5vaJXzHwRkXkf
z!0{7^nhGi!!SVRQV){u>Rt5Rjnjkkp#@@XPK(Rk{54iaL=-c_=#n0&+UaWH%PfcIy
z#i}H>Tm#fP6>QxA?dgI~=l7a^*Nat#Nmpa~Z!cDRW}}VF(`~(3v)GQSGcmlVn!eVX
zbt^O1256(C&xh4qieDYPI=&ke`2UcDK4<!UA65z8yK3Ox7bqvbaG%cN%c{$_SPkJy
z=G^J_zN`|AE4N4ZvMyp0&QJ!qDw0)eC!|#@wUc=|Zvbne@E0YB#I_v}iDf&Or#A+$
zCdM~FC7hrVMqoPX0O(c(8P9HeSHo|H-#~|sGrah#1YJSu_6-_g;n3;9Gj*Ui15FQZ
zRYJ^jvx<FVp6(dPs=#=0dQu>(uH@MaP-gl5!cz&9+?hccUd*TS`-|r3D*{<%BxZaC
z8|%?)S_m=^eBJ7&7d%SS?*y{iDushJHA4oO4wMLjH&1;7ElU6y=W6)GW%|BTtkP;P
zSV245zd(*O`S=B7BzU=pNAF&TU;qDuOS~81(`$lQefgrdK|%vWzX+IqJ%}}g@8?#C
z7>It6Hr+Cq)scS{R18GF5LcMq8O*v<=8gh*W<m=bNdLk0Z%GZPWV!XCb9!6|t3BiP
z>GMKZ4W)WNfgAy<Y&TY;v>kn>zYJm3G~HJXvQdE5X*qa()KNLm+^aog;Z&>2FK{1t
zNi{QQwI6@@r47uW74r+GyN9wWf%fHvvg&&K%YhCvdh6NEU!mjp|ENdrTnF$@d{ftI
zW`=HIP$EAMIsr!=Y&1W3Tjl?=rB6M2Z8bnn0_{+OtTYUs{wS2SlW9iP^xQDkCdTj6
zKZLQmFe!YPZWhie$8=A6dc6Uw7_-D~L@l2rEdwffVYPfTga@tVeZf4WTHXdCfT-oQ
zK?3kvUKYed)bjfUm>57A=X*G-hP*B4L@)4)i>OMJVEiKu$`F&+-<RS4CIvdt;TZqE
zYQ`5&q?o2}Ok$R07E@%Ieldwzw;ps(z%E#$fnN&LXxP6C-e_1cfeE~75H$N|TLEbs
zfM#qDe&(-dUAzn2BQu7IA57!VIRV<fF?$!JodA+Q&N_D&tepT7_vmDu1J(xZh3T?R
zgK$AZ^d6n86CgYTPH+uB3BrqpoZ8W|3sT=#M6&WSoqs#MJ(5+6asTv9k*ubitjUmU
z^l|!!NLDE(1?lNLQLJ(zt0W;+ICK~gG?4gqx?L2jv`)1oXg2qWPp|IG`OM(MH^KEc
zv?6*h1?iD^f@U?oO>d22Rg&8J29{(mm7#=n$@GI!tg=ijQqvzqvC1eUfYpHp;0((^
zl`;4trB5#|OMsFDtJRz7GSRGxj9;hQMYF0feR@4TC7RVkV3Ihf_%-D(17()`FXm6*
z6U{2eI|+2153~mUHT`)sYobpNNFj1<TTu$~`L7rAB|x?9{}=bUK(*~rpI+O%Qsmn9
z(~Cf;R!D98@5S-yQ({<E*j(l^gT@^9#juJyM4N*Q`v<CA9p)n{R|5rj<@)sydgUrS
zA6mK2I>J0%G?q13_>DMv<$7y+bu8-=#);Dv;#f7^yG6mV^4g=<bP4E4vfibjvfQV4
zE2zc<HC>*AR(VVm0|(f%7ocFb0A+ng{wOw&Uehhb;4&e6`h+-E1$h-wP)di)x3xrr
zE2tyjd$7RsZAR12$Fa^~ViuX68_%j}{6H8~<O{Z*_zoG11zn}}qFI=UA&p<NbpcpV
zu=fI(762=Hkv9EcJgWn9_8jKvFSA({rgsUk%1(DoVAW+~5N2X{v3Yt)0_#?0=h@H-
zY_~A0^z?#6R!LCxn#d|EH8TR#Gh7OC64E5%_ZOl<(+?)Hib!b-Ls|pjj@Gd<z0QoC
zhiguPwjaOvGW~rbt4z>IL6G<UpDum*+R>w%)#)iXG&~_2^-tu3>X;YX1(_JYL!T-r
zvcJHxoi|@h7eq7*em<EVo5U)|xP5v}5~~8!jwjRSC9%4xe-Hp!0~x9c2nUBEs43vl
z+Y7Gkd%>gEFTQQ(PG)sy5*FYC1!E-ZrNy99I*#?wV(=hUjPOEUh(t0}B6u-)d@3g0
z2rBVq5k$umFbx};LT^Wv@q(5x{9u$k@EUYC!TSebPlK8}ko7cbIUs+7>ee`3gx3x{
zV4j{}z$(jB#{(&n53E5H$)US>K*<SKB>#r+phfaqFb}Cnz5@|J6v?MS0`MYvFNg;!
zlEDS+D{e#qdxINVz;=lu3fS{&U<E8QH>iN!y#`*uKFWj?s-TIS35}4#7CxLcA9M^`
zFRwaO4QL|gQ5Hl!Tut{HNMSp94X9Jry9QR+g2X*KS$izOW<X0@);0)_8FKVo1B5pp
zvYVp`!rKAqYSpZP6t)vGSb3SY-<v)^gH?m`cLt<*>YjcfgH>L@p9@@Qoq;xCVy6Gk
zU=`yG2bUq=UmTt;m&vMB|Bn-_s2Zw>8x(Xqo&EhnoE?K0JUT%QSWc*pQjmF_t)Tn|
z9$`KJy3nOt_10Zx2IzSw?4V)q-l?G30>c9@yt$YdAl2b%E>Jh`m~ZPh{uVD51_scA
zkv34X$aDJsOja3HLC8I<FaC0Z)Ukn0mjjvJxfgV49;jZ>;hvVos$jYW<lN5tFPOMN
zD%}LYZ6k24@ax44kX*0n&VEQJNOOalY{y?Ha!wD;Vl`6s<pkv+NK<*OKR6HV0d)a-
zdqJzgKttW((^qA&E@P780F_2E(xBq*#cy^{mO(3$=1uR+W|d)VoW3lZ)q%Nf0=V$W
zVv}ZPVt8?GdSnjkR_3^VaFLU2m%s)ZlK1IVt?vO9-v3`LWd}L^C{myFzfb407pK@k
z&P7`faB}*lTvj8Vikpxe)@v%5I{iZ~s~A&l@^p?oR+SV3xXhMRW`>vGW7NA@rNE+~
z=G*TSW`=z}@agEAte|T3+e^@8c8<s0BtU&?(1`eUHjta#1dzK+9^F$xQT@Vo`h+}I
zam`Rrx3L#I%8ul8@NoMQHb`|0?h3D-ej$%l(QQ8qsDtJv(|VwU+oQV|6pfvXueCsJ
zXJ=6Bp_|q72Fz1Zsi2DZn+H7Q>|g;E2CVWorkm%pDl&m~xG}SeO)to2<z>2leR_R9
zt7ljlGdSUXP6UPO_ZQ8qSf`=t3?S04m_Z%{@B9Px(8907?5;}zrvzw{Jvm*jfHm94
z8)P<eEpD0uGUn5ZI2KSX{{4k82dEZ5;?rxYn}}SC|9T++)e5P_zrARiezkyABldp>
zGsBA%kheOIzu3%<(q}dmQwEv-4OFfF?m|@S*`TveyTN^ChfV0!`nfJ>wf=N7^Yo}f
zR&U|;ATRbJ_nGHT-%-fAgfV1#Y!R!PU?3x;T8H(Nw@;r^#Hyq$$H>I++TWv_buMTx
z7r3#?m&DAl&kLStVy53LV%4&}$N<sr*zKYs13GK3F3G2NE2L>)s{p=u@}W=fQc$ij
zyzSX})}vbxoI62LK6Sc7F{>2gvgy&qtZIyj)0>J}l^yg!1|Hr4I^xDr+eJmf@^H<4
z!vo+cr8$?u@dKMA3{C`9C@%yU5Vc9sW#;LAEUdCj2LGoUHnU1{cz{ksWi`A!UA2VO
z(;)3XBWTAUe@hZ0sJMZ&KlZwU;~GoNnY?{o32Pi9<BjcqOIf)Yg`@s3GJvlCk(mUk
z4|yg*YtYxfArfmRLL}x+gw&vFHBbpVsDvJvhSi|p3(UOFLn=UK&fkpF8w^-QnS<vb
z)qrll85t0ZmD?aZXbo5a<{{O9=@0=#4HyOzfY*Q?ARfF1Ed9mE;MfW2VkG}!gmf{c
zvLkB1q&ct}u<s`$!*N!>Iq(`#IR;XrfoeeM0<;>?Xb!lGu_+v)22=xnkA|?}HK5!a
zNDZhq2UG(p%z@Q_AaRdQR(VUX8L%2q62dzVSu!RJ;e~?=j80Zj2yYjpyTLyPTm$k~
zuz)(x*C5gFbauK(6{|L*;dF;8R%6aeCrDM0I=!ZfRf(}@`ur+ZJtp>_)6ZA2YO{4m
zF*Ce~o>t8&#a0etT2EJ~W|d<v1hK_`O?RzkRdmk#!N_2E+oyXiXjy=(;eVtB2H#%<
z{(vU337}h2dP9GB_WFWX8h{o6gRXf8RVoqFS5~visRjOIWbo)b?D79FWd40?Bs0T{
zI*?%NffD9pp#IeT7k1O%R<nvrUii+)0BUE0jOmI5<pjtofG5*sYgkPfo2LiWu+}lo
zn|`r|RY|=18z@C0)-QlYcV5VSo6c3sD$T_BZMu3bs{=D@J@fReTGkx48DAM0UU*Nx
zQ_H%I`Bp8siqf2(pvo#c{dOIzu>Y5@j0~^qJ-S&_Pk^ii)gVnlD7`6_uZ#??hEHBc
zffg>T<N(dvKY8s7;>-ap?CWOL2I~a%ulmEL+t#y6E3m*tHim%;deFLt&RZ|azkt#^
z>%HUCE9zMlnP+}xoW8M+Nu2YFXXihUZq`}Hr|+p}wP(CJ{ZBosExUXeGs6p+uhShG
zSQQvcrYAPAD%b>n289!(M!ymY&fB0>952$pFfug%VB~Lo1lsttZ!cJI(I-a8LV$yy
zd5ym5dmC8gm>ij>-)&$uW>OHIF4V}X<nTv`nc+3BN4LT8R?xZ&&@_u@=N0HI{P!1(
zUl<vDI@f}N*f;xah<9&{jsRE^+yeRb;^Fj?Mphlm2GG9z?yaD5=Cu)c=AYMdDKqGD
zPv=e_9hc@G;M+aJ5UM~&$?`s1#ytIIBdY~lQV3{)?R4=bRxO>$AHhki!~`@T0$S&w
z9Rl~KM{n;6&{$t@D`<V$iz(A{n^@Hu9i~rhVl{Ua`veM`*A^b#tgWEkE}%O<z=M^m
zg26lRyIJ#4gl`0ci`d5>7$L_*dvx=<9+@uK%qqvk`~g(L$}_PXnI6>4s;%}d2-M(%
zuDArX&D=hK9m(HvAG})VKBzgfWBTG|R(%5|m{cKBIeZ}y><3Wzp!Hz>Z)a*@O=S}P
z{RWh%BU$%0L5kV6P0Z7)+E|l>+n^F2Pzj4B=IQU-Sd;Vwp%RxHAvz9&X;}FS+OdFG
zLUw)s^!j#IMaD_f7q+vCGe7A?l*0ArUxQL5tRKSv2F!z&!i-=ZQYriatavw~6uu7<
zfS1A-K|D|?4BvX5+6OCWJ70kc+Q2?|L3_v#RB%EkfW#8fN?OxCNJ$G;1epMu24%xb
zTE#v{NvqihDruGbSU`g|44u3nagR<`C9n~!pwnhNI$32PJV!`D8wTO|vO=!K4uEj|
zApH<82=4-<6lUoIm%BU}T%d9nv})XF-*lBuRwsitV`hdIrLPznJUfs2w!Y<WsbvD)
zMFl!0$n_;i^q6mN8pl2f(5j8j=PzuhPwQm$^@;WcC5E}6rY0zj-+OWD6(a+9$tS4N
z?!5OR;58$I<FPi-o*V{`UQut5deBv{?_Pv)GJqD7wcY}+EfqEQovz=-YQiM#J3Y0F
zRgtl3dV3eEsrWVUJ@0!#7I^ed1)Wf8c;JQptLc}!SWU#{ph$u`0)_`(Jee-r&1%A*
zgpe~l@M7Wggl<;#`bG<obD^fqo$w8`<Q24LJMkqW=zu^uke<%_FA82Vf}GZ}9CW}*
zuc;$QxOXo|`HN7f6zKYCk6zmrUuK3EZ(o3P+eU$vZ3Q{i@W6{RFBlnK$AgYU1SvW7
z0#xv_ee>vM_1Zn1r-xO&{--Z!1(`>$?Ew%2bUJ7|hymIS?+4OS{sL57eSZ=EjFI8>
zVvpXrJzxL-haB_i(Q6tBy1c#@>=U2fr4zn_d;(q+^vI+0=8M7?j0~XZ6I(lPP{9Do
z(lTJ<K&$9pWPs+Ur*G<E6|)4%gSri%L7m>cFk^m!%#ekdp#e4H--{E^85tlu`VUNJ
z>}3^a+%;XYm(`N_R37v6&|cP6!nJdl8TbX8Z5SCCUjF#||Njf6r_+V{SaXCWy_gwZ
z9DWKeX-Yt+o4t54ePSQ0m=Tv3c)Upf<VkgpUfZSK%nUF1o`DJw0oED0pyEK#bp!a8
zwo@Rf&rhc_PGnV|*3TLuxXlw3o1qgtdVObr4pvz(J++^857$=@u#wZAFiz(SXO^C9
zaGzzm*96v>DA0xKFJ?bRa>SlTjG$5OG=9B<pZEn`7nCwpgHCV-UBteD@x_bBj0~?q
zj;i%!W_a=JF~m^?*$_u906S_CNb2;oiL8@ED?qo!_fD+<Z~O3V@ac8!coDaK`9xL`
zM*nCxu$%ro1eNPAr~Uo^Kh&f1DSTtYwFjV*YB%`g1@MB_llMUl4%ps?gZCN1H|Id6
zyyrH9N<7F-lxjT>KuNWP)1%jx-GiCoHRvkf7qt*U&=KO7+?g3(R8J3>%qmu&2eJix
ztz@rlmpe1V>uVrKIEFih1qXO`UVqX5|Nnna(B%gIU#xxzN__u)I=^{z9(u9<A*l9k
zy<Gyjg8HZnBuRm%LRdjEH^7_n9KnY(fK2r0wY}X8D=NR=0~M9Wn^_p@LAURD^s+X%
zgUU+C`r4LIw4!o#Gq|X%f~q;_(aReOWy6cg>CK=ba&9x|7*Nn|CJ>(&eAmFlW){$L
za|Vx2)=6N4Sf_)sa3^aI$bOGr))a6Z$Jz#w1f8_((aG8X;eCe;)l@-v7LXb95(sY<
zgqH{5NkfKlG9bKY2rmi33lRpj23cbuyn_&48HmT-%X$dHEocUp!qZu%vI+{@Zvr*e
zz*9#19T*rGUU=P~UbUE2dAj#hR!%0F`_sdwvdRm@-UXF0rXRRKoz3qrVy3rFWp$9`
zzXwhxFW%n;r2_s|(8efGoqlury{W8Xo~vA$8D50m2g#L4>;fGt4QakQL@_bEumy{k
zvi)y8^Y8zEB-uxQnHXNkLuB=QI={bQyg%J`8mqC>+8`!|7dP*LjWYmWQUEbd0c6cV
zh`7Wq&<1RXI3GxSC0M+)8e~xS^i9)PRhZcBO}{aX)tIqxI?r@gb@s1+m>6D&-J5PT
zomGypYkK5#R!0FRkXG%xpys<rH|v`9(^pMrRb)(`er7tWN_`4wkw4@(W5;e+g-$l`
znC_iBj0`@#OAml2qHMh)K$BXaW)8H%T7R37!LvISbO6wc?%N<g@V6cUFQB;pq7=&C
z#Kgd`3$&pMywc#`i?4S;>Pol!^ny=kKHj?L-~ay%)AMJr3Iv8CnP&*qUkEi%8p=-u
znFmUxknnip#LVzwI@rt-8KeMj3TI+?Q9u2{4AwwK<LOE>S(TUs?o4-^$*RHlY<m7o
zRx6X$w;35+I`(e=2Rf+lKPZMDfD_&Q7u#=wdWSA561yOyLC-yUxBdt1r>&TNcP6Wf
zXfRl3?Rk)%KB%7f>0+~3RV5|CQhQf{Hs*HTe-Q|kRk}GnWEQK6#GPAUJ2yh5MWE78
zr%#y0s+u_;BD)(ZdmWrV?!Q=f1L7P9q-5anlZoL)<}FZA^0zkr{r|rk9FC5it`gA8
zPOO}m8D4`bK1NUo?YfC*#agVHE;pN1j`7=c+u5wTOs`f?&za3?SAXmVs72xiKCXHf
zgblt)9Av#`r<;Xmx7`boo8a_t0g@g-I~&03PoT-+#dT0}kOKwF(d!VW?FE+&_g}1s
z^4BsmFo3$N4A9h|e-osxbZ6R*>6&v`eMRH0gR|u7?@SC}--66KGQE2at4@94cTnmR
z+XpI)K*GET+g@D*nZn;H54G(Il+O>c4U|Pe(`k@U_2>oPI`_i!21rYZF}Pjj(Rtq!
zbocz+3!q!iJMX<Pyuk>uA6)&vdm(*;Q5STdSHsI=pyUTi7N8m)q`KGCAef2a#jop(
z44th$Ad$}dFK$gwp37>;c>v^_&igO!O`kiL)tIy8I;aA8|6<Yfn{!!XnLmAHnr=Cd
zHJx$J^o8?Sqj@8)f&9ML0#wK6Oy``>>cM>d3)A$F`K;=UH>cOkXO*yZxPt1gRaZg2
z@abME0kXJzs>WZ?Y43mk{Qv*j7j(6$9q0&<tDso1d+}iU#rdovvhB9a3@;vB0o9q{
z>jFDjR6IM`UxV%>$+4Txw172&>DRL9F$-Abn0H)aoX#lAD9yBI+4NZpSk-M5uYg=Q
zcLF&2b^HB65dzv?0BUV^-hc7s5+j3ew~Y#DtHFg!AeZsCP6MZn|1Wk;|GR)yoY88!
z=t5Rq*-4i`Zjw;}#bX{+Wh&H^i0SbQS*6%it(X~JT$o<JkX4LhJ7|}|mdlLO73CNW
z`8I&EV&i2<DLr%gorSFOhLKQi;YCn`La?;~RQ!U*(L8!%mw@}jTaSRW8A8>0PS;t)
zn#vb#&CKw^<PxZ%z`A|O^!bZemAPM8F*CeA`y%rKBg1rq4rX!fGZ#SeutURnE`oW`
zlWPA#<SZb&CqGQ*U(6~le*+>2?IWE6@!&n6Jr@`u$AkYCV`g|!bpe#;z=N>Xkc#TZ
z^vcDo=KTB?;2n+!K&?!si;U9^6d0w9A<H3J7lZ0Hix;=gGctH4yGwXv-v|MPV<p%u
zcMiy!3Q!BY_yQy3-bnQ&th|{9P<?G6eW2_9Y+HSp81{h<*n=z^xDS@FbL<Y2@aQ!y
z^<iQ#Jn*6hEXe24Yg-0VEdn0{-3XT`GG}JkmjRcUF@5e5)`=lj=Aee8Xr>wHl<l9O
zd+Qx{fkqF&hi(5a-SEHk#EU8C7(th5I)HBLYd#v{*?fe@)w)iCzb63P-m}#PSqa+H
z199Ny=}k*nwPcTgbalFd*5<$10b%d(IQSb}?yQ)8aw)44<MZinma-Z!GlVfumtV%J
z!uHafnc+p#bkAk1GMvZFL3f*ee-S%9Zy9Ta$agPLDz*bJ{dfr48gc8z+v&fSv1<Ar
zKEuf1`TwYAw;gD$g|Fq`nx|k@O{Sm-2tDy)5lBHdAL!^gcc1Ru6`);>s`;j%MIHw}
zJMu@lGHhV<=sXXK!}93`%ULBQOiY;>I&ZxQgJ=YwGw0EH?uF0vh09r$yrsOD82Ec+
zL4NP9Jpf5k>SsX7t#${5Ckf$Qfbh5>#(4DFhW}?`*axZ<ApxavW;)*rR@M00(;&^T
zuKQjP@3=E)od{@H6?zE%a)_t~C~iEutD)(7B1F^xDhf^C)gV!LQqG+|X$7l~&ZN_z
zH0-Y7)0uh#H0sp^;T!mLryg+aOqcQKW=)<43NecpJEwE4WOZRuIz2sLC95s7d>*LL
zEy40)@@dBDjv6eX^%Ew*4i;XS2W#x^JppR$PR)al3oI~!w{=;)>>+Jk&>9c$T8>K4
z;g-Fu`;#H!pmiW6Q1x&%sd=EbZgw6hz(8$X5Fb=l9M5Ep&x1C0ds!1rKtrXhkq`p|
zA#L7Z2+sx5^Y?}DlE4);t3QO-4O#5z3E^#q@RA|Coe*AZ9;B`Me-$gQh{qgI;DFnz
z9=)cQ1i{A*DXeCdXKbJDu$ong@x=7x)vT2|KaPVtS^O<iK&Rv%0F4Fonz9;$+ODrW
zdV9D0`v2djw{-<*U*gZ{9BWuz7(1r>u3?ol$U6?IcAmc|6lGv&{=r)M_%(}Tr@Mw{
zxBUy#<B(GN6dMDBXSY147|}RBecBpU6*IPD;Al1Q>=p-CxuB?JI}WNgJbG;lj6l{t
zdvX6bs2oQqcsl*V8rCSrvgzJyS!E<eK`!oY?fCWozhkGn1!$6t2V{lm^oF&pHbOJd
zG;<uAer_$RMtzwf$nZ}doxKep&-?~C1j!NmkAfTl_CBxwGSC#^Igj3{bHGcidKW-K
zVF^g%AvBF`2#uy<%Rtjspl}22*!AfJ4{pAg0Ma3eWLF51mM2T6_pM`<u!sUFLQ*4#
zq-Nbx&=lNMP$YQt_O5|AW&_AED#y0pTgU3o$hdyG+6LBg=5}x9?F%-rGBYx@>rY?0
zk=2Pw_R#c~8(Ga6w@g>u#45o!d%D#oRv8gKD^M{y6%@Om(M^z1)2C-`V%27}pFV99
ztAdu?L1?nr^%F8)0osBw(-K3M(xK@OHnHjioH)S909qvcGUX@uv|WcOpybD~&ka_9
zgAV!9W@dQt{{SPyOZ%Uo)pp=I{5hyf={f+ht##)Q(B)?KFWRTaY-W{UdN6r<*=ANn
z#@W+nY-TND@|rxIXA7$q<C^K_TUbpQGp6TmVRc}t)tSD23#%s+&;IGZwy*{;AM$6O
z?z@#$OL?n5GeemI=m5)!5XY1vIVM<#nc>Ck>9e-7DvJKz3rVlq%nS^^-L>Gmh~G}X
zu$5Jj@$vLeTUmpmB_=R4d~<2EW#MlH-6jDUi|*YD9`OFMj}f#B4$OYC2h{!M-?tY$
z_<dmyBSXu93K0+feJ4D+MKAY*4C%6EDPb}^;KIM}ut%@0{iW&ix3M}h&YJ#k8>@_}
z@m(f{7eV_#<?G%V-~a!2>Wr}ua60Z{?*b|^K@*pZuFTVwwzFz8Uv^=h9<ZHN&M)sG
z$af|uAdc$Z3tGSP;^JPA8NHx|Js#Z%qda<9-xo16bhC6gb-LKQH2(&VkmtBCGk}K1
zStpk;Pv5hhRf(}|`u**!n)NMUwTuw8zrbo4L2I$Pw}LF;Z_xo&D!r_-CE!_87RHy-
zpm7QKApyO64}eCiI{&|D-VJJ39R^LdfR3YC-v&<5pdbU4G2cOh87DkDPrhj114;<D
z`CI!zEzkOH*2{gM;_|RZx3y<?sDekY>0%Agn8piNkb&LSj@_X=khL)Tz~Z2_Fj~7A
z8D1NJJDSpaKx28|z*C)_Ad^6&^PvjpI)3Z|1r}>OSOt7X!v~M)Y&%(nn5A|xPQN&j
zS#-L=PF7(i!M^FPJ6TN_qo-HxWOZT6QJ;QbC#y3P<F4tfyI2F5w|hYo-zqO?;=9-b
ziXM)A$cfKGotfdqgy~Cnv8sx^*#Sv>AuOQ8rw%F*?@zzCi&cT~+VuasSS<zT>;M&+
z$3S8C-lNy_MDujd-K_GAGqz{$W}VNh9?}6a-@>yyT*0He7nErJAN1%oZB_z@(}68u
zuc>!T*Wb^oVEK46WOxcboD~3;ht<z+n?b6p6<)N1gyB`P>1M|1nZFp7r?1}6D$F#k
zefoj@tg@o@pbc5z%}8ZnyL>tyzW6%*(|%SX^L-%gz2L)x9QT6O{)3Bq@V@E$FD8R5
z0Uc@L&&a^A3v?g>cvk1xi!alo53ow9$8Tn2KvwUM#<z#?r{^4Cm7Tux0Bg3&l`1BN
z7q>ToC!<QU{~vxW1#VI81s|n06_m<e?49m$kk!x5XEP{4y!Gg2-O>sQHh5&e@Mt_@
z!NGvCeI<V*B(NZ3d5^<D%?jb^;8S-SVp!OOJv;vy-UhF=xewX{+WGy3<#d)qtUAg%
zEzAtvE<0>o6d%0i+Q;C)!0_Vk22d=Qh<pA&4jNv0H9hzctCF<(QD#ur<_@T9vwIV$
zJ_VhR3L3}TKYhX>R!Nz|N0}MCyJOUUfGW5)hzbwTQ3QuxbWJ~ch}DtFuVp&NVOD!4
z^$pWK53@?^a&3TgRX~T=ec~5r1s&J<V(ofHhBSUn*M>BHP2UM1VUYBTY11bjW_4wr
zX2CrD=3&+-HtY3_3@_eIw>-jH!@S*`dHRkctO+tUO|XD^QOe`dc;o;BD3s!255Hho
zH{IkYt0wb)d*<y4M_C0Kg+HzVSsux{+YU7F8V91Mw;W^j5}pE;h=WSR*)dOlc#PFu
z*a|Aa0+nE~W1en(ob?#9v<dTemJ_TxjP*SMur}L_m7q3TMF70b_I^8}J*KJvVZ+;F
zF#(|QNmf}&M7!>b44N8`02YQFpyP@<S$zXQ%{TV|7Vx=*ovf}9?V|OPpc07H9>Rrg
z>#>CJKqtd_bg~*lcroAv&T0zbZH3JE=tFqWiFQp0&k!`M-^r>B;Uz(MvJf5<WHLxR
z0CcZg?BUR0kItu{fnP_^?a<djbGE&vt3NR@yqL8TT&8-o-Y)Tg96Bbk3RF@Y@$8gQ
z0VT4-V6KY_=<u$c>p}f4a7O#}qGfvHDOO>1zg3J3phL!<fEP{f0xeJnXJ-Wo=<G3Q
z`Kj*8>AO#{8Zo8UOn-lhRf_TSbgt8^N{lO}>z-y!V0=5h?=-7iV#^68h8K%L?&$_E
z7j^3_Q3&wtJm!4dMGana`5Q1ZynG6(f<f12dUVbO-Ejx$L|*_+6(_F**P~!|@N&@L
z)G_{jdoO~d?56XcVO3z#KQLYY46CEZoBhlTUfm`yAT?g+{TG*4fXc02&~jF{&Jx7{
zk6zY_L}mu3Zk82Joi2(lpgn+|o##OHXMsL5=s50PR`F!!={wG_nlPK_Gf#hihE<ly
zW5x6b+gZh?tDI#OtG|@M%+M_&=-e5i2AfDeugA<#GS{P*wJZr*-@WdKti0)63Ytm+
z72V0pz>xwftU)cN{z7m?2l5kYMVG!DTG8zXRdn65n?d`vz?B>*w$enS!KJqb$TV;*
z2U;IkCkhgD>HPUZU>PIBYdw$7>o1s=g9cu~%R>vnMp$@uhYC3UKkm_M+5%VqU@0T~
zmRG0B=_2P?6`1}l0nIiGPghvN!aCjW94n{gU(itkkilB$o~-YnW*Q3v!;7S)Am<+7
zZ}|dRfdSdD1($T4KH(gzohjQ=Q0hAdDtf__T^_xrdIiYd2QB^uwTVG(g5F-xL2fVp
zO=mvO8mz$vwi)d7|A#?$DT#o5+IjOu`4Yqc<IQsB=^vR`W$ULehLp?jN{nR*DEg}f
zUU-5S@M_C?2}B(<_c(S!b5G+dCWaRbOF*s#9mQRu1j#*hV9keJI;%N+I+Z~gNDbuc
zPG^DFvL4;6-sPZj(88lv!1S9iY#8O!i~Wni!zc=J96s4ULO=z%EZ7`p3CM^EXcvn3
z67YzL()6witX#gwyO}^MI}8uJ@K_A0>G(Z*ZD$BGGwc%r<qc3_^rCh#BZFgeJqJTw
zpl7$7Z+E_gPp@gaFf)T^vTJ}x>j9t6S9RPTy}Y%%r$4;FD$Dp{`u_{8Mh5kZz~LbA
z;s}Hx@M1TJ0S}P1iy#34snB9QrYBxxRbwelU}l(pkdsAt`n-#*T)t~cLH>kx9AjsI
zDjxL(j12qq!Clq+FGLoAM(a!$2!Z+nwKHD4nGfQ}&iv;5pV6bcn%{%p<+n$#>0eMF
zznT8^BC8_fqv_(8SY0^RF9g?cFHTQSxx{L(mc9_=`&tI@CE-4uk9;~mzHkI7v3$Va
zDg?fH<ok;k(@$Pvb+7j+0XfRTquX`IHwH$JZVv$ueiz>jptNTCQV=v2^y$T>1&j=@
zjhcURmFjwQvr3`q2mt8_h3F6#VrF>JynvBmH>iK^`Tv+_^Kl7Z%V+#eplY%8b_wYC
zpqs@AD<wd7`fl*xcl7{ePeCDY^1SuJVfymRtey2b5T)N-XE1v3yT-2Y=ruJJ0F|Mj
ztv{W&UQC<M$nZMQqnni(Qz7W=c2`5F!d#F-P><zS5yW!1K|8&JU0pzHedj~MkQW^4
zwKHBg&1Ga`@aSe;STud>6;>7LX0T3)7nbuF8M-ZAcz|N76VxF5#XtSa71ls*b9GSN
zEFgMcpLu$~Rn`llHia;|4)KHh1uFG7O*g&9s#L!VEbt;>9wWm`(6%9uUR#iw7uV-P
zivw-Y@OL-sUC@p=aNV($pBZ$QLO1IvxX@{^AwHd-UM>ZVLATFgWOxl;qSaeF<Av#L
zP<eU(#q?Pq`uK~@3=Gg)pt{+8reC|px`sVzHY39e_1V)que16v&YphlI;$RcM<g>t
z8h;Gygh=M;{5M!VnL{F(r$^sl)u|5z8w4suzVm`A?)xu(&j95LQ=L4JH$|`JLPS$%
zf%5+`Q1Z5!1qst>Ga%W+F)Y}l`Hg@lXh!w-F3`XhXi}*2-izRwprl^R0TX-S1Q8H`
z3m6(hL?qxM3J?JWxBx#yKm#@__u}7l%bTpaVi&;9EH?1y4z}>n{8YjLDuH%Suer&p
zkre}y>qWBI8zO+P*a{+muvZfzfUs8rB7m@$eFkXOrS<{LWuPM!KTqeo#j4D5emWz=
z^g;zj$?1N#SnasOrZa-3t9wPK^G~0Ci`7u@%uG;gmcJtpG&9mGdVzcT&0DN$@>6Gm
zdcPjMdtZPe`r$N2hSuBs9TOpnws23EyUnWVDtVuY;l&J)V>%CmHr|0w1D-yOk-??2
z^aS{h;8kGtrjxiqiP59;es}1VZr=+pvS)ys1fU4hnlZiOHme6uEH^Vlr|*)^Q!f-|
zPQP=TRaI^B42Z*87#SFvYcDX=MT0ge9)N7<kl}_D6j!FJ-(l4fbcU+E4Q{+Yf6+TV
z=?<%o;6ISF5Ab*Rf`=#mzX+H<{|>93;C`qu`0kuu(bJsM@7-Zlt?!%$^)mP#_PbLc
zUhV*Up?1ZKGgBBDJQ|PuU<9?9V;o~4Gw+bw#Ai(fC3#Rvea#6fOZQ5EGE?tVP#N@M
zCg`4;ZHzCrPi1827VzlZ3YP4=|004Fv=s20N3UtzCT50uk6zKE;D+Y?7wuCS86YM*
zPKBiHUeieslNrD!hjzShW@BL3%=jV+W-3Sml+Ku085j(2d-R%efu^{7MGL_<`+k36
zJe85*^(u&|uR(qR#hIxG#8iWS{{{Yg^oDl4c+1Mb;JA(P1^3kHg7;V@<u`$E#uAl;
zy6pB8MuwOE|NsAo7&KwJ=RH=rdMgfQhFzdJuNRJ!89}aEGzIEc@JvwW_ZQBfEes%6
zc|pwE2;Qpj{Y5dzyyyR5=4ng;dzU}_fJg6M&@>LeCcDRRcTg)6v{dLZJ2S&BS<rO-
z%}HQ;tibk6e|C>mME=nRP|%BdLQUodnOqMy`M`9^`>b+a>p&)mgG?xdm~d$_)TQ7l
z%g*mFikYF|R|PTeAu|I5C|nm$W@LCN4mU4idgFaoIiXaLd14^*I3ea`P2YH*RZ?CE
zqPY^P*&3vI{a=_jKTLmlpH;421f&_XKI6s0iD2(A!5jlQi~IYF#Y|AgtXdEDoFLS^
z%aa%xUb@50>zD*fe^1#!>h^*zb@u2DUGbs|bZFQ%#uqClLA?o<>Ae5KlZnBD!PO9y
z`aq`wdi08JgU+K@fXoKnga(OX-AUjm@#r<}f|y+aNr5X~=!3I{=xx^N=N_<1Xq&*S
z09|Vg3bCt<P{-d{2Xd6CGqfSVI%&G#Lsq}~{t2KmcrVDj7tIqG8D3X-b{_ZW1v~yl
z(F8^Y*OqVmE#T`@I`6;8oXE)VQUQF*El3e4gkJc9bU8tEeE`kg*?<HLAp)QXeW48!
zP=E-4($fnmkN`hOpuTr6D0RNzoWRJ?a+|;9D7f(W{(=!?5$Gr=&(7noWkG}mNO|vG
z1CR~3`=RdYg*KutO<-hr3A)n(q6m}?Uu^3K8CjAG3WZG|3zI>{h(J_;vj2-I{fzY>
z|CMlnN<nByfQyUjeny7ZCJ?3Ik|+x#paT(b02Q&3AOY#uY_C~fbG~K(nal^KJbG(8
zUfA@50=0I<3*&xJRrvqK)ILz!IR0Yem;e94b0^R?w8!*2k5~m5U8cW%#3~~+9i*za
z_QZ=jU<Rx8y6Mu7S><H5g1DXcUx<V0<1dV1ro_GsnjZR?)s=D4^x2PDWd#}fK-N9?
z=q|kgY9}-IO+WdVRhp9vEd2dN&h)pBSq+%vCr+1t!m4ah*2~D?*;~%&_>G;>li#&m
z09-BKdQs2|GUWs4<Pq?~CXY_g+V2;&y&yl_e{p|$)e}}fYXuOu*R-4oG!5|mMQ;zN
zrYM#1=&fe_#tdq=RfCFI4^UVMPXNi4$bw45+8Zz4OlN+|YRt8x2V$O7&vb{UtTs#?
ztESgIWtC%$m_GL@tDA&oA~S<W^8o>mPG(RH{^<re>iLVf>A#<{8ZoISPS=0ND$TfR
zy7x0yZzi#X=`)_ODoEVxW@PX<?g|=HVL0x30yI?S(aq|YF#W<a)*zv(ZbpXJsvf<j
zjypjU68B%Moo@1+)llJkJg6yS0SX6SP&jz>nqK}7+WiFTc7A%1G`;mXs}|GKxak|8
zv&u6GbxptYoYjb@r4#IaP&HpXUEl?)G-Ld9ofoWDQs3f0#(~zL|NO_qu#X?!4cR)q
z;RWkIr5|0O;NWkCtg*D64_XAYr3>5wEK&66X5AM%eZfmsTlP7i)krK|)1SO#J;Hcv
z`pQ?V%NWb22fSt#V{%(MJ>xZNfN;q#CWaTC9T2^S9^I^yqo<#K&8p0{@;4L1i_hD?
zyk?!n$aF4p`-HcwI*j7%KOw$)q1XyapnDZS?F!lE=>{KI<t#w^snYuy7(BX7KY+Gs
zHXq~g=-oR3q=cav68L@1U~LH?F%>URGmup`V!GygR(-}>(<9%rnoGu@>C9<@==?Q(
z<$G2GNntc;WvKMV>7U-SDod3%F*3a725pXxeg6MHXxl+A#El20>wjR?i|Gel?u6v7
z`Hf)rSb!3lW)qkVcH4draMZjw-2kEwzm@_S)omJprab{k`>W|YKd=TfzL?JYkyVLt
z|8#?otkR70r~7<l)n~NdUh|PPl95S&?)2-QSVNf}1W(ud%qpe7tPWHvg9jj=c7g(q
zbrWbqVDkY1Ptbae<|7=SA&iDPP!Rlo@o0MaXI32%@p_OZa6_4=9whVq#iHrkKeHZU
zx*asV`U|TPlX}qf`CnKi8ShQs`Gr+lJtGKIaC=C2boPQuX^-Xu4j!GYFF+MQ=lvIL
zwcuzl4x0Y^3u^$^;u=sWnBMuqG(Geyt2N`b=@Y-Qiq%^~gzLV5=F{H4;Hv?Ra(MLC
zE&z8!4KKZzRt=it|M9=X%cGmM9kk9J)cpuu_|54*C@%-`d-R%md;yJlz4%-US~+^a
zqqnvJwP6qdI->Z}i}}@z3@^cprF&f$I`VIG`0p`Y?HlXbxc<+e(Tmz+h6g%Nb>4g-
zQOC&eTH%=M35K-euE+HBUxQAuHT!^2^Wq!Krq~94O=ged&fq49PjBflP>CQ_2a4SL
z(1n^!(+$6~s&bW7f&5?F@S=Zu!gp3xIadgO!HWbi15(eenFNlk&HmFDe`i&!&jUHQ
z7c>ylc?{&M7m`(s46k!MJCD822UUm1Uh{Z@Wfr{nUkNgPFKDIRi_ai-=lvJeAl2YR
zn|~iP@p8<g+w`p;sPF=3AW)pWPz0%A2Cp!E{vr>=(Fdh+yZitDzt&~|i@$%d7-V2?
z?SdDxDj6AGgH(I;LLB^XBBc5AdV1au)`^T?r~PDg(SGrUiQ&axkhfY7lz=+9>>x|Q
z8{wMYF)@IzrGP9nI5s{1Cu=L?vh81gvW7A;=~Pbl`OR9&xOMuW->eyoKGU`TuzKnQ
zm4VZxZ*QG~Pv?J+?yVW1Toq9YPNE*o$1QxiQ&)KQmZ(^~aGt*459>}7W-m}VXYtLo
z0hB~yCwTOl&V2<s>8s>F<k(=)y7*f!(#jYay7y{;Ok*#b-usu;SW>Tqk>NETC<Hd$
z1m*L~o}EWQQTk~5&A+TVVfRZwX__|xw8*(z(xV%+SmuAAfCsqW&HM_K3PIzXou^)G
zFJ)wSv8M!@Aom*l|NkE~P5yn!!~pJ)y@;3|{g1VTaryKM|5!5_ZKqrPXVv#^EdtL{
z_ihF0bllG9(di00_2<n5kk4ce@`oSb*K7sJc^q#ARr{b>Lr_~`HZ)i|V^?@UrVsv4
z-}0Zep3!-#30uC><zi3?U&2z!{hHO&@@_GUPjBiDABZg=e`*&_J<4XoZ(RZjT!;ya
zrwcH$nMtlF06EE{cP_|U$E`3Y>Gw~MXJnHX*jJ34>eULS_c5|nG3HI@WMa!yWGO<}
z>udQ8WN+;bs8Jwi$4sBh#HP<<QwWcdqtnkZu}L$r=1+gk#1_M>_>^h77c-jylS1M4
z8fLa2M#dG>&$F;qGwI|{_hDtrW!yV`7b{yT<MQbWY;2-3YqLQfNWI|O`3BT>04I{%
z6`sAN7B41E4`gH8!gz2x8#|jV_tz&(47)(*ufIs0?#Iqn&bV><F?Ke6#<|nKv9o#0
zndTt7`&}`MM{jJ0M=v-&Urd-D&%vgtwc#<$2!%{gCai7n=q=sw;y-vh$1$j4(8()?
z(>HOjX)uXoPQSy!W>W8C2Z~G3zAm-Lpp^6CXckC2#O#9^pp>>(0hBmF;@x{eYuI1-
zWic|mR0B72k3vm;F)f3U;bk3Yd4Cy*D1^z@Zg^1*l1c`NMuS(!fs*sfX3%W_ik{Q^
zIoY@vL#NN;WYaRx$^eDe`xiawphyHM^XRU<@Ip8PmK~;_Ma~Y#r+?vO({Milb|kN*
zEyyG2+2PSckf)&8VF4&)x*^_KlL?Asuy;%|85v&mO;6@x)8UN=Sq<sdy$GH@hl|aK
zNhxFc1uixfp<ii`Vh7}9a5MeobT)1_YbE_maLHhJ3AB6V*$a_OMg||t2c^ZH-QpmT
zZ!hwuCv&qY)nB&;IS|zDNx9F&un*KBgOoqupgRs~s&}()f-Bl{j|utKs6tR6u7W7)
z1uK$x;hYX0bPED`3!M26-eY2TUF^}j6}0rM^ZpB!3~<6R^5|xb)P!o{hiH<6Ybv=1
z8X*1#Dvj=Ybe?*#Yq~BEo4CFNRQ<U$uqAgvp$xX9@E%f-)}(`??E8zJ>BT&3R!qyS
zwy)=5i(ynZ1dBiS>HG(pUYwZ>PDe99m9q8T1)#g7gnT-mz1TS2h>uO5v3GhBADf=k
z8PFaaZ~-lImx*B?==3*80Ci7a#mCko#+C-Q%cFBHsM3HIEa}sI_}Na%L??o5Xa#ka
zynA`dJbFz|fY!ExdPAG08w#)mFcwd55@1ska7zRYLv4li|IDZF5MT?eKc5JWLr^a5
zHGO=GiQz?M0>rXz)8*ima-spI%nUCcCo(d;d<Rd(pu%cXA|u0VHjhqla_!v<?$J$4
zU<BP13l;;ZX#?>&K*NwARn5N{`CE^J$9vwtNCY{YrJMDV>GU2!Hf0qRkmW{6j0`W#
zL3X_Y1sSvxSfvi~BWtti^vi;5diB>6K)D1op!5F*q`lr4&&crd8v_Fa|4ENtQ{J0Q
z44|Fd|Nj5q<qICp1v%w#5+eiTTKMTu{g6cJ3epQ&+X#`Yf=c$9a@>R%t^!gp6LdKs
zsG0F1vL3F22daWOo{`~oHAKHPT=pH*aZlqI8D7UiWM$#97of7oL9+G`+5hn{kM%-j
zSAt{}UpOSd+<qsXF#s~CYZ?qy(-sE`9n<Z`pj;-J0HQkYzxV)h6VGd|*Bs!!C=;j?
zdK6UF?*vJNd3J(wGbk~<STNmRm`#zfZhE0Gn-1gd>GOoyIvM?^YlyJfFbO40PZMDa
z72=KqClk-!It7pJ(j70vW2c`LVRPqP77KFm{TDXVWkuPXG$Lad865fdeFNE37z2{J
z0luso)Jy_xB8vehtrwTJw~Ml^XY|=7#mw;8kw3;w;WK|6>lzS`Kk5KzpZb-LObjn(
z#)4+K1zit-<`cU>vLLl8Ahiu39#riLklLlwo5b0yP4q$HAXPFTRjME!RF&^X@VOVM
zCqD5D#$NcuFX(&Y6Te{TgBSm%e-vlaW_EbOG+kbT?Wg>y2<RXz_eF4%^MXg`u@~y6
z{{Q#r6`gaIX}Y;2n_RtkI}^i;wkVJf4|{-`W*rfrzSixMa*tlqPnV$Ogiq%$&}2(f
z6llc+6SysQP8SqQptA7dB_@V_h%0$|!G_&`!59TDxvD+7Sr>uTO1y}O1Q$f<(ID$U
zQw*n+U^ak?Ew(5|hSxqXj3XHtnk|@0ojiI)(=Rbi|0c;Mml)B;#PH&HBuFF3ojYEf
z3<tZDzttAJq^S17i|rth<|7`^ds{#~qTbpaFBXJ@g8?)SS-arHBoL1kl#fBiTzJt0
z($snX#gpx&QfxJhj4P*ql4f&|Iup*w(0TtwBuF)T=lvG}AZ4K7Sv=iGhE0XDE)?XF
z`!60$uasdkU|OxUeYFgm6C-2i^mnps9ZU>i(<|iIav3L1e<sJ~Bt9<~l<1E8_U0>q
z29~?Gf-Y@)v1GcvJewF}@ANQvwr>XZCzu$(`$k^G1cIw?(B*d?y;}wT{Qv*L^fRc|
z1QiqtCn0(H<@6c_Hbu_;=1dHRmtOD%PG6?LW>GH?$jIQi57dSO-D&|^{B#@?^?SkD
zBQpRLA^a`pK~+$%=@cX>Kd96eh*T$%lrdE5A*jggHElqWl7LDbgGf~$2VD%%3$g64
zKg6=PJPe>A)f^;kkDyYQAX14)QpcfEp9R4Emkp}Z*D10|a9SM)rNbAJLDSDGvgvUD
zw}dr$*G^|sVryc2H@#Ddt&TB&I)^fw6F1)}m~`CqP-Qk<tsFnlVixdVFX&{&G}H$4
z!IMl3kTVH6{HCu_X47F3^P7H4nN5Z}4=%H5I-?4kF5`je`YLR)+|qFInCaml@vP~s
zDs180eV`}=ZIOC$X8Lm#HWkL}(|J_cv>10xH&<no<(7g=hfI%GWm92{pWXtJc9^~%
zB;9q0i2*#t^Wx6*>mcdp)Bk{^PfS-=W0U3P1WALYmR_Vx_g7<6Va%UiqQ<7h7_fc5
z8e0mJK;UI2hEFd15f4A{3y6wbX4)>S$)?N<vRjAEoV!OK7A98HD|OgZ7+t5&(_zzM
zQgfYtN{6kOTWL2;K6|={E?YI@=IKXt*$flXL2FsS75eFYObm!y7hkBkF)}#r2Ms^H
z^aI6XH>(X;DX1BGVjn2FI&b-O{(P~)6|PPSqD};?4peX`>}Q%Ds>f!)b9o=kc4g=3
z6ZP117!9ZI(_@q6ZUaex&M1CycKS0tHeJozPVlG{`2GJsT2vatm6uPq(Pz_TY@ME^
z&nC<BU@t6+6`iI})@RdU(s!DEP@nA%&(7_zK<9RxzS4kAnMurX`Z)tOO~&uje;BaI
za(jUkfP;PVbOl2;6~=kfT@Bf^80)7O7_vntPZWiff*W=-G3*nDkAwv{!Tr4iw92QO
zH4Uz`6;-J!T&V|iFzBp3xC96QjY1uqu4lv+&iHY9n-N<8w-+d$K>HzIT$=vSh)sp@
z?sPU|HZ8_|(+!Q;v>7K&k2Pkq=GnZ939`HCg@E1kCB|&ZOwxAKPa3mnGX9zV*_h2p
zbo*Z>hEM#0t)OoHCw@U@&?wH<=~gCePCSRyp<A9_=-5v0Fku7T{I|x0O^ZpwcKQty
zHd98|>3pVaMoL2VpgJwGRpLMBL^wfb1^(~@pB(wMTvRyrKLqtQK2A?EWm9I%oZe>2
z=FHu)2^Pior(ZE;QvuzjW6Gw*czU{u8JmOD4*^&>+H7ZH*e3}O$L-VW%-9sw{H?(u
zVgM=(ogr)i&>CcO2>Zd$|NmcTTTee~#%9cTX!=hxHWS9)>3ZgDCX5l&lg-&InB=Xe
z&oyV0W;C0=)11wkJ9`7nIa{XxH)m5}+&^8#f=!EY!E}EMHeIy`d?4q5((?Q*ptS7L
z`RPTNH6z1r&|(YFoDs-A-|34i*tEHC!i~B;{e}fwHIuUS^o##kRi>{~ViTF(YsqG&
zwAl(&7?!Y9^1WvDwR~O-x?Kfy+p0(JUhrT%x5f0QmTcPG)7HaWHDkK86`L;Ovgw{y
zY;yJO=3w80OYv%RMuwO7ASZg<<$*cVdNahC4_^dZGBUg@2OXc)&AJyX56WsDo0%B)
z>47ff3<Omr-K>k?QduA=8F+vvT7vBYZCrZ653)<^b3J&0b|G9xBS;5g?TG<I#{*Dm
zy=TVA@bc#;um%UX24j#0gcbiSz*cMkX;=%=aN^Vd|L(miWv}f$x>-5l+H^qL#2FYQ
z86cgA6BdXV5CHWH3a8guvsrO3UIR<AAEqC+W>aDOJ^h6>n-=4p>B2T_YTC-&pilyZ
zLfj@M<V7=&%n{}#fKpcX^b{Mm8pfjO4{g}Y7_FyE*s`fJ37b!Mv}H?WTr>T)Et|~r
z!?tYVj1?fZ4x=}SlAf+?$L7cAIlah^%^Os3*|AA8i5gG8ZO3NJxMn)PJ)0=wsp+cr
zY~G-jsXd#pXqFKp!%IbG&?ya|ZhZkLA%{($Y0sw0XfS=hJ)1<JI7o#UxC0JS0V?WV
zFoVQE6&0ur+Pn7yNY{HqMuwNmm|!Md0EyiOiA{owfg|$xbPWeKS;dux;D860D|120
zLg2~*K&$3Dr>8lvnWh9AGBUibdYuBX2(%RKg#$?ScesN<=d8TY0f{|^i-D@v7ZM<`
z^Kh{Okf|&nF;LEdn0Eja(jTV(cVLsSxo!Y<5I9?(Heh6UEdm;o<cBB(kKJ#Dr~qg7
zl@K;Kv(GgEXLcqN!|A`w*o>L}8%)<XXESCzHT|O_n}yj#kYV+noyT4Zffks91~>PD
zy}d@Ck>TaPf8b%vmrQUuaP&`@9`D2^%~&$M+KEj|%Tu3`;WgAL;GAcn4|XiLUDjRB
z@nV8MWX!T_`gtcdQAsY4dhn26-xN@5?J{`K^Z$!|)BifLsTdpv>F(w=VF4vZ^f3<O
zrJ(E!9pjj7z{v1o!Sq09HhGmN%pm3PMaMrp8jn=4p)3t}F@O3LXErVFOQ5)IJy6N>
zB53+aXEtTmH+rBZ>fsk^`rt;lDM-HaKBy1Srwi_9?Pmg+Et&zMI`6;up$BTDf`{$T
z>p{9Vn!3{sUD)JgSfQ@ybiMInrY>ksElvWwGW6ezuIbq>Y<Y~Ar{8j6(`B@r&f&_Y
z%g=5A(hoX34>WX;Ki$QZ&BnJx2ONAm-v9sqA_>C&@b3Tr7hw=~14!Hp!sd7n3c!0W
z^by<_Dxg}lcP~ilg|g1{v#x9bOx}y8%e%43%5KsI8?E^M|Nn39;Nkpw&~Sb$=%CS#
z>5*=13ZlC~e(t>gLLWr;?o|NUmN>o7jZKQ__}uBMK&GfeObJ9Y<(Cj>6ngp-H#T!;
zNnOyi!fViIj2Qzc^dw%q(FO<aZ;-j*!IcLKk>YZe4x)$&0NFWldYn6(0>6zmc-_a8
z10LPHr~Wfd?{#OB3^URO#lZ0wIS?bOb-|$sim@x2;22~54?2BMblpGDB**_3c3}0_
zz_XYCUkGV4GQ9i>9^?lJdGziD2leOaf85z*8Lv*4@?ev#->wPD+Mb<I6&4^TEe46D
zy^e#6g2T8MBwGEt7$W*w2ts@G?gd9$KFC46d%=;G3{n~R+7qq<>``Bkr~qgL{9@n#
z|DaC$HIL5e+dSCh>Yst6IG{p@Jv#4$R@;_FzxV+%w3|2cAIO*JStNKqc+?n_f=|7;
zpvB1W;wo4<s}Wc^D2v=E6*4^F(Rf5a5RyZ{bGt7-XfiUq5Y&LK)CzYDn;z`R<}WR#
z0ZPZ1bHf4}jME+S*~K`eH9-02{)^h_cRbmw8H1-wc(K`t%4mV&2y$R1Xq?8Q^ZpBq
z>6u<^F+!T^;P`r>s191DX!n9qYx;FBHud^8EpY800vQ@P0~!MAJp6)91DtL|wZOK3
zA~{bD9Le*4gS;>50irtZzqkQ5_4|um8jK9D1$?`61whl7(=<V5mI`?^9ytMCUXNHR
z1RmQ-1G%B|_=^SVjP;;Zed{&BZUb4vp$6K~@Xe#!)C^=rx9I&}kmQuF&dBgO1)7>%
zKpY`ZLEL%&g*k{5^jaI#rS81{LJY(;195t5SG*8XV`O;E3YzQy^{5ZLU;^=(L9(6q
zU%XahRABIJ{RUZ_CLYMZ@PZlav|}&ss)3yJ{e|sz86UR&OpM>B-|=H}XI}Y;X}X#}
zTRAiTBc|;O{Mon}nHe84O<xzlR?QeZT`Q1Hk<oCvPaxYe<urLjoH~X&h6H;wzPSM^
zB|1NY7QJ_~I)0rl8pLL7GUq-ML$MR+AebT>k8W1hub==1HSS(bV`A9A^rB9Yk--sk
zyat2g_j{6{EP3n8^qL?xQ|?<+VV&~t)At0i$qMh92J0`JmjjJL@~)UV{Y?;CfXFgA
zP!Uuu;nTYm)UpE&jZU5(5X=_BbWC=7bv&ET^iRQTvW(lO3xu$FF?LLk4q=mG%$;5q
z!WJbcB+JO)-CLt}!MnFa{lW`o+362M*xFUwWI#sl1+O@%g0Mjsz`V$VuoXacYtr=I
zP&Qd%B{nAL%BX+RU`-9br!S0V6BRx<8Rp(=(qQ*SPM-cWl+9jbA6OmOy&L}g2Nl&X
zR!_GGV~b<DA_Z~plQ1?}rlZo+1w+_`r;CNNnK4eA?i<b~#aKN(Bb+TtP(cdC)q+wW
zS1V8d7S5KUIz<xfiW#7)z5~K;06Dh?!cG9O3#Qjcu*nMlnE>mn@IWLFK%CCq;|dG=
zC)3YIu(^wzkpLMAcJdFXlXp(nie!spdL#~U^0i1dS*FVp5GQj)v6(S0nQkA&CdJq}
zJt~SVN>EQ6#mVyG5GTKgVoOn7BnC2l?*ovNr$N}@eL!6h_5zTT>!ue*v&r&E^ue0x
zQex9*MYG9pPjP~U|EK8(quE?U?uvp;1H0AXFC=(RO_z*ei(~pM0&(ln7&cj^C!!Fy
zeve@@W86AjFP2S;an^LtShgrZdl3}38i+vLdOemcTXl^v$n?FSQx;w<fUp@r?w$f+
zKLEM4V|scVn=DV+Uq<Nkpo;MH32|&P-1F>VZv8WTdmNjm$Ri<;X&|?5?Et&=+l%wl
zMdH~~89z?1if7AWdL#sK<<EFFGoj6bpmMY3u7pP~Sow=Z(;XAo5(OOuQQT`N2yySV
z1h#C|wE`d;_7;E|{0kv$2atQGLf8r*cIWi8L^ge%Q*E%Y6&9GjFp*7$yVnNh-q+Jl
zB(jBy9OVa@26FFS&^Z~P<tdw{8z!-ZFg@i1g{{H#?MZBwjMt`rOk(q9TsGY{nN5nZ
zdwN7NTa=&yAJ~<4psZ$l;e{gK^ux()eX4VLK}PP~0dn9(2)hB~s8$FY+&ZkBUY5cZ
z!+2o&<rFqw#;WOxscce=o2T2Pvbiy9one~Zn#yLNS<eSvWx!bK({24Cfe%y>)Tl(f
z_{IxkvG6f6bRK`<I{jWMn}M|7Lr_r!>Y7Y%W@6X}S}_Re>hSVS*GywmWz3oGpT?$E
zU&#%wC0-PAGcvrs<I!E)@WP0Pk>TaT*Z==Rsuf2bkcz`Es(HZGN*Bl-pt|zdi^p8x
zYDMG$$STpj_aWnlzC56M><VbTSLgi~iad-AueCipL442@11C2l!^=|8!n@AnFS-h*
ze@SDL(tp6k$neq-++zT#1J!(IK|-!jb$$h)Ry9ZpWW=WFw&`rjjD6D+)7hjLi>KG5
zv&l0CPoI;{rWLLM(k2bnwlW`C8!t#I6<mrRf6<r!|NqM%@G+twV?j2)<z!@d84cB%
zhobe;blD6x4Vjf76<e4<Cp8^^p#@g~(%d&aF@w#LF=YDe3^r9oJ&?jlP@~r8!Cc|d
z3n>KnIj29&U{hm!KAj_zO^)%zboER&Cy79iCeQ+9NMM25L!h2$-t@*ywsoLYHCb%(
zjPs`lWU;ARma`*LRW^hTPF3*`HaJxUvokWhj0d|Gw740Z0_~@7$YPUXQemHdCW}qY
z@(&x>7;x_S0AYi3&l3n6oO^DtF*3Y-0vd+}jdMeC+L7tn*=$mbE2q0<v#EzRLR5px
zj8X_2TxMiK*x)iF7Gz2$+!U}{Pmq`>*n!7ioXUoWQs?~_dTi4VWwWVSvO$di<(OZr
zV8?=s&UX+txafSu3YvBU4KITo2rg#NO;^l;<e?lk^}ue3YH*!V4`GArjA95ITxX=S
zGBUg_1GO!B_ktCMfs9oGyZHEv>siRIv!1>shfQ5o7@{3qi?T!5;9B%I3)rFHTJ-(2
zTsEc1Ga!-9`!9~Lz%yAZE2xd~AAG%Z!i$9<?cKaWw?H`wy?vTqgVgM=WMgD_Q3qDe
zdi&<|>RdKu?<uT|3@^4agR?0t+1P-r0<Ww&kO}JYfEvRuwq}C70q%&&z~vV}1VK5A
znRWWhTsB4C8z8fKt0jCo-@Q09T|AFXgKIrA$i3fR2r^Ii%wv;v)d4%9Is$S|hYg6=
zTP^XT5Tvv7K4?bkWhyhMAUNg$5|3nt%#VZZ_JNwUZu;sxHY3LV>G$&3)Y%Qeq93N$
z-(-~(^y#gA0xEt#GJ$+`|HaYiX8CN2j4P){<g-;XYaU{nel4FZok^2vx_tqg9OK97
zaRqGhj2EZZfq0vy&n;jxQ|M&`#Y5>umku>>(Ff`=ly7HX=q}a)G4rN>E?~=aU2p(2
zk5PNz1!&z(>wywbJMPU@P&|MN&-e<IvDeig=X5iBbUVE8=(S<)E@4(^KF9Ln&-8_b
zY%*Gj44?|EOa)}RCj%pcZ*QFgc<0r>7gh{lw>$?)=`k=)e_qI@tg?Xtwn}~z10#ds
zNsmqs0gp}(4v$U_&~a3ta^>uFy&^X8h|B*O7(9E+!0tZ&A5;L{f3XlG)_lwZG%wwG
z?}bb{X!@=8z>8Y2Jm_>i4V3w+122-nGWTB`{RcAP_=|@r(<g|siSmE*?ELG|TYJIq
z5-7smrXMU~(`8&Y{e2Oey=)XnZMSLsWpF5+c;WI7G$eG~1GLoEVY+uQTO^~!^rgjY
z+15S(7#Ln#ycPqGw1DL^Kq8#4Szd!@R>2F;)`PTnyE1rmSG@3HeE-7x9|OaSWz)S&
z*d#eY27vthW_oT3TRP*6=~qkGni<bbk1S=AW^9{YTFPc3Df<`X^axpx&Ik#Q&IkdI
z&Ik^VUfwrS+Ygnp@i5kZTg(i-q5Icw(7`8<7Bj<c=w>NqVo37<A0WuuUc?Ay!#C(2
z105aI%lfSdq2>mZ4Og>iF*Cz))*XwPLHooRj<bUJpi$f7tZNp7=4KceJo0*3j~9We
zLDppu1LMKv66*p84{~xGtJ4x@29I9WtKg!Kbq+-C281^a!n*_EO@QzqXN<8<g79{N
zD;CzC#mv(u_Am-hKUdDCWatA9nETK*6<dCS=EiCpUR3A&{|_n_Ya3qN`N_c0a=XNC
zzXxcw|FY?d6>QQ>C&Z`QRj?^AW<a<`64Prc*!-B-eojAA!Dhg;qjdVe3bt_d=f6P%
zQm_>p{y#vbmo6~81nOb`zv>8D^<KN+Me+2SN;YLi|LF@V+3Xm9Out{rCa3xFI|IXO
zQE<Up+wkHsh{p~}5D<|AFD`xu#pwMP#?#fR*fJO`ruSE|#nt=&0$B(<Npkx)uo_T-
zpmp;9e@D=uTkVAxcfK)zmY|mkfl`ejX!N=B{)@@q!Hf1gK^Z^-ngO7l%?gm^(DjHH
zUd;Ojvf}#-2C(7BU&zG#2OqB)`?BNO^qguoMGf8Wpx%C5>|v;W+3ye?o4+z39jqxh
zfBM#HHY1VC-#|G7T)>@x8XY(NcQu=>%>u9upgGn$aN@ZC!s{z&7Sgo(6sVjLRRK|*
z_g`#5n9vP1;py~}8aDg-y<b4;nZ3GMK7fkW!{BxB;60}=Zh)lV+bZwDoYu{%3Np1B
zv<RHtqxm>T?8|RoAkGHuDeL?V+5!ky!R*mn&GF(Y#3+yrFQ<Nm`=;wF2gKhBU#45t
zvKcb^PtU1klNB*UC{g<gQL$(G+*&qirj(P@`MB7X>Os2-Ji1LeK{LzE$H2SDWFdCE
zSp5a8191lE%Z*<^HXeVi4B8MN25LTbo1Q-bx^)Jk^YLeJB6v{<(fOhgO#go&4i-QD
z!Z;FC&mDiE9r^$N1TdH$UB@QGwEV>M{5m!bcaY6p-4huZ7+Ox2@OgAsXF%#MR)~wh
zzCH{!OYsW>!wZcs3=FT=L*stsXRv!;R8PNG$EGc^@iWM=;K*JEm9d#FThAuRnRXmB
z=JEZ7%XIsCwp1p8&(oLHv)M7;nf|n%&5&``bnynZC@JSp3=Cb(V7DAVc8m6>>D>)%
zevHqj-)dlsVeFc2-pE$Z7&U!+BU=^|@2Ba?O>AmP{U1O90j|(PK+JB_#v|Z#<OHHR
z@4r|zJ-dm`k|XCM=&0n9sOkF}*+Qo?HnXX*hkj&Wczt@p^a-BqVr>6Cx><RSO!sPL
zd%(o?VY*HWn;c`sbng~6f5x)uvs>6gm{Jc-|JcG7uk+|F1H*psRAt>;xZTbmX18g<
zL9pG1Agc5Ji<#4FTG@6o`c5}%V^e3GJw2|C&6e@`^f_&88H``1v$nI%S2B4GH{<6k
zP`Wl%+YdJ5Ip|v8&igO?rypx)yTdqX`r;0@!;I&qr+2coFnUgZ)5&I}wCe?2b3KUJ
zZMtR;SaU9j>b(Er>U4)LHfg4Zd#1;BvB}hL1_^_6fis6kZ?(sZl;@y`eE#CibFkIf
zVEJR<T`Y^iQr}^lH(tJd4vJ)Gisbg}JPw-7+yc>OjHE9cqVL6CF#Z2U_A`(hkH2X5
z`9J+f7n`Q&Ot3-V)Y1o5^ZkX&v*~8tY^Eaq2q_n+)UE0D-E0z!vD0UCv$ZnroG#bH
z7Fxe^7bquyax*BeI=sk!3bF&z(0czA<W8{hPo9E&_x;7TCm`wLFD`jO3N?71FGMp(
z8Dh?h)est-3vNTqd(90^`~6QD_`oNi9)_A8xviIN7Za1xqv?D4*_1#feLvd`Hr+=I
z3@=Qk@14N5gh}+l^r`vmYD~5dr|->Yx1D}sBHIz;r27!ZMcoHE4&rvH2hcLsqw_Fm
z`@&&RJJb@Q;Dzpk>H8<KNjn#CGcmkqy$4RtpgkyQ+>kt01QF8k>@Jh=IQWbSR1ciF
z&%p57%CkF6!n3<f!Q<c~uxP?`*~x4zOjqwhob~q}#90cyEUeRcr?7ELT5vHjyl}q@
zw?c^vVui_c!zpaS5`Fj3Ol1byrSxFB++;Sf?L|}Aelm)FOl4w7<JY^8#;<XrT<jCS
zfa>*Brs)mS*p!(!rZP=mHjPcKz5}Gjkzemjnj^o)kusJvevN}K+V3zheBu}2_09v$
zokt%0#2?4%4ra%k0L^{#M;!#;bNPv1!1cq6NQi1t**uVS8mB(-Lv)B@>QDgbc=19V
zqJ#H!F67EDum#U^nWjffXHzqh4r5|?@$e?-cr-tWR?wA|2OomM40LRt#cc+L*TRs1
zgbJQ|ad!HK>1=(*$)QXPFBGxstGI<lAMc&%g)`Xd8LOs$oWW+#xM;fJOg3A_i0Sz=
z*)*A~Zcab5ip_=b&h+~;*{qq8ZcX=F&E_yYW)_<^oAC_>hS<Z?6|&exr*Bxs#yb7&
zN;Xr*zUg;ovDq_jn=U(>&6X+W`t*XCY#K~{*TLp6eYiIL!Av$Qrm`C#gIuP|=Cg53
z51GTJ%NRJlX%3qz<HqSL=CH}}ExE$L;MHrh6|}PH#pmf)=CHY|&%X+?4|FCqxQg}Y
zwuaOcsn@{i7F=h=zTCUrX)c>7Bjf++74z8a8TU`$F^{cCV9sSwUOevETdx2bsa-kU
zYCfAPXY^&T&KDo2XUu1-lH$1p=7KZZnM?2taQwyl>3`<4SuvVSH($V(%A|E^`n&~f
zri?46Us=GW!MJbw-vw+Fm|k9*{!y2GDpSy<=^c9Pp40Oev55*eT|lwcfBKX~Y=)d)
z&x7rG(LMd#BDNEZ52jCF%x1&5c>0yaY;A5+&VnVujtDu2<cRWf(0%U^-}ka=ya6?7
znGL_a*yjW4WK>tYPz1GWyIJ!VO<%BtO`Oqu`i>=Ru8e!9|69VA%*1(Sdh$}X9>(j_
zKP+X-W0E^JJz*J}3X9np28QW&nd}nN7c66&z}Pq4a5<Yg<Fx6K%h~)m-A{pC^J3-n
z4a?cW7*nRRuV71LjGLahf=!(<X!^tzY&MMD)6cD7Gh}=`Z6#ZYO4SJlhSx8kal;Ar
zh4D!wUxb}xV3@9;&2BXP)JnDpCXeIO@6BSfV=6c?U2Zm;4U^glNP6Ko0ZuQBtELOC
zX0v8AnC`opt%z~;^aHEe5*e3HS6aiC&7^y5djA?WOQtQyA!&(kEgKtW%281L!TNLN
zblJ6Rib+$BGBEh`7IXOY);<6qsr&7PF<6DE%S=#7^8ba*5zzfnpq|r%7jj2IE!Y1g
zj!4Q`Aj(Cd%0C|l1xPcv3DsNs;Kl3d3)ZsPX{<TI0Gbm4?Rx>0KogHZiqvGV>f<l!
zH6e|lr_<Tiv1u^gn6AH$t&q`X`oeW=7OIC2GcdeXg7n8g9ns&1L7AQ%v}J|4;>C*@
zhZz`Ne4hSq9h*4kZLoRwUsz9<ThC_fIrk9AG523gJ;cE9`VRQK&?6k6Ou-FlVZZb^
z3=Vq7cz9zu3#1f00P#*8Jn8@{*aN4}TF>Ui*f#y?dbT>o<mo9J*zy=(OuxK=O{M;7
z7Od-b@gS({b}$Rxb=zT!=$6G<pmp7rf-j(BU5ccp2g-(b-6m#%x^C06n861s9cKmc
zLG792tle46psdf}QQym2ZVO81tgR3Op=ZF?LwJ=^pb%iKgz)+mz`SAzZ@Uth$C?f9
z*6oJy;vsSwYGAoY2yZHc7YyN<s)OZx!8~==JY6ssYN3W6m}d!=WZeY0rQJ9S+~*V3
ze*x|TPOSi)*wYDW%L`2fwSvG$rTFx21?}qd>D{{kB;C#GH)VRlCN?=Hi38IcHnE8?
zbxfH)Z4;Z1(60RqkUgD@;9LIgzj!<S%O*B^#>vx7HnSxN+&KVpL2JPuP?Ea;B7FLi
z&1~8xde+c+AD_;(4WLo&OM5}RLDs2vK_divK_h=2o$eoeI`e;c^lk-BQM`CCop}qJ
zF=)Zy7B*9+4~wVgZDCWEUJWw7cdr0=V&ENUI-eh6(xp4o*KA=^ViMUq{lXSDH~t%Y
z7#JM?9|I-RUQ^4((^a>!c}cyU2=Xszh(^hQiD92K0|Rs^&zk9-TiLd9-?3t1*u@9x
z>1Iv$+{QM6aqje6+t|vPRQFB~-p-~08aCd}_Kt~d=k%N%Y^{uy(?9KCo6P7qy=^C3
z8DqorzdPBC8M~$%?qUmId_TQu7h64J=5(grY?B!cr%&6>R?JvDoof%90b|2->pg6C
zjNhkM?O~hE7&={SFWV9(o~_gO>}9KAbeV3skIj?OVtVsFwsnm5(~b7C*^0bv2RYmV
zd|Zr;852Y2trscNoA<MwXDrzse1L5YBjfRDhuCg2_D{cah;15U$n@gFYz2%nr$0H&
zX2&>VyYdmXLPjRFwbL1s*_{|4O}}}R&6aV=bn#<swnAxZKrvBm@M5kzDCX|J2%VmG
zjLnKMZu-JwY^Uo#)PrsA4hEfFxJ(^1sQ3b;1vKmHV$Z<vTG^wU^)#}gbr404Ye0p}
z`xo-|5Sn#01H;STpb?60*4YsC9=)b~dSDYp)-XW#5d2vMs*{d+^qR`*F){c^cYc4d
zY$d4BG`(I2a*1d|9jIjd{z72&bhZ<0O6=!Wfz1Cu?FgIbbe9us?o!Ds85mw`fwxZ_
zc?ntz?Adt)<XZ7n)0duL^OF2q3u+XDw+e#y+VX;o@4WwF_I8ewY<!GtH<mLnyq2H7
z;Ut^HbiN~O9Mf%1u_;9?SjoW9{F{lt^$d8!{PP#3D?qN|eO3c<75eCFnF`2T&;>NU
zD?u)N|3cdaLJO{7VDRZ)3O>->diu6gY-)-EAXAzVZc<ndQu_VHy5%5CSR-qu|2@T~
zC?>K36gWp-3qZZpvz&q9#op;Ar`hzpx~fsVHES6tUiX4B^$Qh{mr6m6W$4D-STx1C
zNQ%EtUvrwxP>~-^i9AS2=lvIJmw}x2{6+Nkf2Y}wGHE6*1JwsEDh6J?H5MXXy(I=B
zFMN^3ctB!2FD$3OImc$qXgXctJX;atjp>umv#nt4o^Er2t%UK+^o<wT%o#6De|dpz
z1>@`KlP<E&XHuWP-S`sQ9wyP=`3&HTokcyn%M(Bc+;-l2QMsMvDw_wRlmO^_GVp@n
z{qjr<`~2WJ`uy~?YiuXQbXA!c(p>oU9;ESW+$fg-Ek+hnWt#4KolTYbl?v1J-0N&=
zItNvl7}6a1^-h7>*N33(>jSeP?duj@MEklymudR`>ueHU6CskKp}MHeX<x8nL<8KB
zU(gNQp1$xR4x)uu39JOt`j*pWnyz?*%}g?R7Puya*Mq^cK!N=I#mnghH`pW@ZKrqL
zVAEG!oCiv4pp^m(WkKl+bkLFHY)G#C4z368zqmX7-VHW$&ZRRU23Sv*yUAw3q&9nd
z#7#CsM#hKJyKb@dFm9MGew(d^@#XX>x7n1Ln5R$Qd7EttlkC*#{&(2A8Q)C5eTOZN
z(RjMoT{dM#-|cyK*|-=Jo@9V*=l1BeWsyMH?Yej>D3O9Bgg_F;@Hpt2$^bdF?X|Mu
z?e5S8t(QuqJi1wDgAD?CLrem?Jzi)k1H*Lf`)r1c8>e&KXA9ztn+);Rm+7hZ+48kk
zOaUdby%)g6N9h5O$EQwVU~p~yU#IWc&7#undj+(YMNx)n`oH^Zk@c+UAh&`F`uSo^
z4Er?UPC7D~f#IdGJOcwrd43=h(l(h?5D&VkrB?%VjO`Q#(4mv9pf#}|<qjYPpgl0)
zoib)19#nZ8NO|-mkaCR|pB?$9Uwgo2V)ZBhYCL$)%nc9^s-8gulx#GoD*XHZAGB>|
z2IyEz(Ak!2!KYoWp6>FHO^5l76w~zLhiny0r+KHpeaNOFTHX%|Xw#Y$aHY8dG|?B=
zKb`L}o8)x+M{KOJZW9<lyM(@g+IY7>YCG@0xB;SjO;3wVPkh9tBEk&fcAIiQi~#MM
zd+};I?_)M8B{2I^Kf;7GkkZckFH%5suW6RZ^s68f`uo6+n34>31ZV@^i!zW2^0IMA
znm>V5fp$xQ=w8!5!qYt;v#E$kgSg$M3J}c!ARjP+G)pOg*{}K#*4KfQcHVzc1EPCP
z|8h^?3o>DOFWCAuNnq>2t4aH&H$G;Qn$G`(ja94+$pkKt&d&QUIQph*Jz<mMWEKW(
zUsGiho*wvwO{@MnXd&G_X9k8{ptZvupy6oKXCSdtsA5k+V%t!~o`A#_p^7~QiS?n1
zJpzeUp^7~OiKRJvqgea^Bp8IM@IFY)4kX3~>NtTNcn>6|1rh@tJOpv{MWN}gPuY|u
zHi6_mIx#SOa^@FkdF}wpES<++T%F$Vlubh9LpQiS03GMz(QW!Jfr;V8_33M#vdN3?
z?*WJUS5UGE?t$dH!08X3vdJ;Y2u*v&CaQ1W1FCn9dV=R*3SRgyzVqnan*oZwNQkK*
zwnw*VILK6o?&)VfvPt-Z#9nCjFfj1%`wXgo_jQAcr1vlObTcq`{y*Z`{D+ypC-49N
z|E`8lK<kJ>r&fFPnzjovF}yhD2=he&)EBF!uYSfRDSD&}><iHTVUKRpL-9-uFIIPf
z?UMqDy_nJsw@(vlpL+Ln?&oZ(^=}237+z>Pf|Ac%P?q-S-n;`6t}hh386bOIAOU(7
zr1HN51H&$5aAglV@p&Ie>@`RXlv*Io%5xyG>mV`EA~%Q_Snpv}u~Q&*_3KdukAnnf
zgTz3~EFhYXfW+ES#ZG|4ia}zaGm{|d&Va<?L1LgC9uP6GCEg%0Py-f8%p4>pz)%kg
zeUML%f;1~b1Yu%_Kw|tLG0;{Ah-T1@+%JCHGcfD|Z7ha}f%QHIi6KG(?7+()F@!p>
z=k}wB)tiD{xEdsga5Xr%rh~)~7K6o_?Ln3P+Y*~y2ycVKI}4;3AqEbLFjO(HMNS|w
zP<IXD@)L{#({*36l`(1Voxb!XTR78&J=6caWOHTO$v@ro6`P9iW-lht#habIF5nG(
zyq~?8rq{e;Q>ynfVrFPLP@3w|YwK*p%<v+l13carYIwk-lU36QbQ&M46ole7Vusw0
z<I!vT-w@QXGgabeVt8?}4V3C^mqddKEz_r98PRE6KmWgY+zv|5wyzAC8D21UKvN;a
z#c%kS7+yHrf-X_$j&0~J247`oHeLHQn-Y_7`*i=;Y&wkhr`Nn@(_`E)eKm+`oPO&y
zn>J(gbhbBaCc;dh6H*}ChkZJqfx1d*(|zBtrKl?#Ff(*s+{~zO)1%u|%>d*~TLBQo
z@ABQ_;;WXE9{jGNYzEVBykWBz*6aW|5PT|`Pbav;)jM77EnBwZ`4$F-W3J~EV6)^N
zy`|?~?66{B03Bo2dHls<u>4tM`Li!(Amp2;UwX^tBCG}u0Pqfa=>F@j>6-7@`h{CS
zVFo#V3M%np`ssIUDe6mgk(|E*w3V~hb`pp}c7BKM^sx7A>Wq)4*S%-cWn4df&3iUQ
z#>vyqy=QX~)@lX&2~_1kjqaPS`hhL8KA{mV@gfAm2A5(U5H_gnd|?A&gU?wqfUv<O
zj|zkhIwt0Y1cVLV)6WB8gO=&PV1TeMfJ)9U4Gat(&3i%nl^FP2W`ath>AWA=q#2E-
zYkp)iWMXKX9`ljSfbrb)-j8frA{XnyP6Ju%(QSG@go)wBj_IdAvdKv-Yyfp9avQ+K
z?Ee==Aa3XX7Y5TAKe5HjP6k~y|I-wd{=lUkcuOB7f%ULYul>ZP#?;3?ed#AQ?Zi3t
z(DVl>1wB}q7+zGFLNBI*ih)c^1BrpIE`x|Ufy9D9VxWQtB4z~=vjd5Nav((P2-|eS
z&unUubJ&;|UNE7#2%=;vNb0!>1H&%R^*az(-UEqU28khziUf)62Z@2sdV;7s%r<?)
zXEu$*DRn5maA09#cu@pW3M#Q6*0h1N$AQE^_x3=<T0vr7ATcy`W*{*xQ1pN+;8wQj
zmS5PEnG)Eh$9-XwWQt>(UipPhzup9-f1@!doHt*9sD81b7R4zs%uEa~`ivPEc8Nk1
zfcn26ZB?jZ0wA$8R52ltSP)1|4z5=OBxVN^lK_?O5P!&n1hqhd2!$#jF)@%BXwwr!
zojyp63FO}9+6IOan_Y-9*$^c4+=zhzECx{y7Q2i^Y(Gehi-8MPlkl-l-|&^qSr|0c
z^dilOfx)r6L<L-QMNen@#-_)lRx{n~8=D^Ex9O?h*z_5XO`rOW&0RR54xGF}IR=^~
zk4%66jjdPYKrL7Tlx3h2Dpk`bd}r$sR)ENWG9Of?WxD<kwi2(sm0&HPtn$Jh!UidN
zVGLn|bD}zg4KntHG=vS#x%?0|$Q>`3E2qEx!Dhi|I$iB2n?4h3<@E5MY<hxME1;uB
zkaV|T!SrcA*}|F5GfaQ~lTFg@ECUn6i$FbS%tO??{?Ewp!WJY3+B^yoTh9n;j)25K
z%RwMwALdVY`^9F#{NMq@^u}LoB8=CkPy5BD!70c9syKL=7^WZp1>S1=<`<iqphr2>
zA&@8%o<CjrH=D2Eq<@SIFJ9_^+HuESI-k9GHofsTn<3-6>6?GE=`q$%fApKpK)H+;
z)B~~NI>7mvU*`j8T-T-y#Wcow(@p=db#e9l0<F_l?f=C%{p24uH{1Iq;J^h3=w%2S
z9H7S`Y;b_?hOof_x*oy?2k7GIK7ZLHZQA9T8D2~(Wng#-x(^w?O#>WXoFL(k&;@kw
zZvOiZmj*ZW{iZMc%O)&qRl>mV@*x8Q!^>;P8%)4Tc1^$dmragw_Vf=Rs%AR>KQ=kW
z*y(y8%5J*vKeosuk7BSNAjLU^4Yu3>!Up?IrI>-?HTTN}$mWAR#0^md_R#+#utDGe
z_zYo#1K{~|j{j_mjEU2={<Fz4I#2ib&nC;HT0A}dKbxFNJjj4<-V5%aE-LcC(Q%K?
zdoTP;7#Lo7Okeq*O`37a^rQdTEG*`OOzyn@0&;~YWCnC)5vWCe4Af+wR|Lv?-(Q#%
zLRM;cbbj#YHJv5RJo(}Y@NEyQQ+?Tmm_psACbCO2Nfk}4W0zv;0rAAPZeV9*RC0EO
zjvRH~f6-mQ06q!pIB4MgMghp=|1a96UuI;tU=l8#&dbE^$arD8KNGu_#BLWR2H)Ot
z2cORJ2_C&$K|Mi_ZdP5F=@XgQB^cjMU&X|3&N)3FR3fsvxJ-Y=#2%u%ArBm2phHza
zcd5N$gl-eyPz9~90~ZslARWD?vY!~IXEU>F2&^mwIpRCC@gbNueK9k;HuI5>jMFbN
zv&%8%I!*t`%r2}elMiZ@dGyLkzhPwX<afOT3L0gIUTE=Pt^%^$l;aKKbVC+)1tIfX
zklRdcoIshY_QDIrTu@(HLc8|D3!Xf1mk8XGUI0?odH=;c5Zzn5;YDyRY_QUJ`Z5-F
zMXAd<kRxroO@BLrB2{z=i0Zum!eshG7IxA4A2}e4_uc?i`)?p@P-wj<$OWY_Q07ay
z1WM^gJi1M9fwV$K0>R1I0i=f6v-5~Y?_O{^iw6nhfi&quHTBlccrg{^gqCk5W*~1*
z04dP{>#4o)LJYL8gOy#*JPKrWw`n5ChTgqk(-px%0x|e~4k)0XznGg1Dmp-`f5G<M
zn0}g-U6ZM!d-^w4_7d@c90mr@=HmjO0;~B52XrPUZ+aseyPhaFLh^-iHpsZ|FQ!gE
z!p2_2^v-^|1v|UC*Hn8%V!N9KRsx<H1s^Q@QZ*ZttdGBjuH?x;QoI48_yrT#-2X2&
zOkc^)uFMo*Km8m#ySn#xJA}F15T!`w_Gh7(dkRVMy-ctpUgUr^{eK~qIo*MS-Hhqk
z#_1It?8^0w&lwqB7dHPguNQ9qWl)md{L7?thet23Y9J%S>&WI`7A3yTzidjEdi3(X
z0NpI@=F!W01H`cP=;b{FVwiaJ@?Hcnv^{!xn?OfVD|z(t{@l#S@LJNNmv<3JO2DI+
zcPWU$?$OIT`59>a>UYpw`tj*foa`EWC$d1PyF|>RySm~<;`9Jc_B~7jwxIP=nqFIN
zAU+4>*pum?xP#o~3<*)+3>2StASs>$QT#$H0~7-PU)<Q<$i=S0$i$s7eK|L~0q0Gq
zeC6~9-0UJu2G*b$R0wn{0&S-@y>11u7L?%R(?BMCM+)%tG!$!BAu0Zp3Re8W1+3}+
zi%-+jdDyi?HNiT-C7K*q=KG5+DbwfGvPm(eSWQ2~!>;Mg2{i@e)4)`8pUzB0vGR^3
z#C;&eDiFml%D`6tf1#2x-HexAi|L5v^dw$(&G<|twHs5w2ESkit3~z`C)5JuwPyNA
zI?JItPo_XTcoR(je~~}^6)$@PW5sl5KK9~37LcmmYK0g2$zY4XlhE&zq2s@xd@Yp1
z0A48wS$^~4=Qr?F8d%-&WRM@hfwU(XVoT6;c7Aq6=Dr7v)3y28b(oVMFiwx+XV+lc
z_JEP$#og&0{OmqVQc2UV@w3~QX+b>&IRI}`BG?FzUehV}85v%fCV~<ff6FZJpvQNQ
zUQ=lgMur!1iPJp<*n>p;AgV#Def`1A_b(i$uM=Qb=28Z8zrPSooPJw?-N0ylBB;DG
zU3L$&`uqKhb07ZyZ#lr<@*dQ3?TtO)(_6a0r`NU}BJI&@s^~u5R*+qu{{bXKpuJU(
z>DhwprV@Khn80@t?F3zLt9Sx*9}y!1!;8%6I|SL)nV1u%KNMsa<@^y34$K!HrvDdY
zmt<aWmvOqZ5WA@b=(cKbXW~T!NJVe$0*~IU;Klbbpfg>1O>cuPyY4*x;&mJY18B`F
zWPe-w^bR3*RqoYy8KDPP{GPr;h+URRGJg7XA$C3PT)4#I=>o#+vfRONf$HfNAOTCb
zK=AYgVfKxT$<u{I*tHqWr`w6JYcp}jPtO)%SF}rt1qBu4Y`icqyY|2f-&oK{a`*wz
z$qs)pP8C^xn-Owz^oy6%Pl>S0GO@=_e<{MQ$sGchm^NKjlwFD68s;bPvC#{s`-!rL
zNK7(hV({s$cJS@2o8Z&C6m-(PM>i{r;q+ai>`IKgrr#B1x8zKU0acBx{D#xz#n^)k
zYoo!g1Rbg1(QE2-6IN|s6$B~sozYzguDZ{Gm6`s%$vAzH7`wC2;wX@`=?Z;t1v}wI
zFPP8a(d}um589*pe-W|{c*2W{XmFML9aNt1fDG!q|AH$TR@1JSZYa(!TkjJEs%f8i
zbeood4DA+`)d$T6{(rGH8k8}PzAo|XJPJBJ^eFi7s6vp1y?Zr46>n-3D6v0(@iq!p
z=|0^5??33cu5QzCkYSKY_X22kdM`)~GxUti2T=?RFYkfUZfE`R7i*!KdTSTF5C*xX
z<w=RMPv`#^e9;UHuO&g|_0~>!F$H7-cp*a#R71DvCp}O&fH#S~*dz#Y&G#2AAj6x$
zh9g$8<%68vdH;pu{(t{L1%f5Sh?ldc`$(`0Fix5tE5R-cIu}5KT~<6S66PO|C~z2f
z^wu7D;V^x@1iOT$I!My^wI0}6dqHRTy%326$E5-2OcV|<8?=pK`UeSi3C3sBIVIWM
z<>y5(FucC!(G78GOeDyu?_Ych2W7G2FKVXeOR_sKb6;bezDbhZi{Bv{BoAA4y<$4I
z6nlh7YdA>oJ*Y+72G)1~MaA@TDRyN>kLk0e*bNxxPd_8Y-p!alJwlq@oH2O%1Zj3_
zCh@T8XQkQ81y+TE+$fuW8B&1Eo*p8@uFbSnYkH#$yNJBH7APD&96URHGd!9PNPySp
zJMwF~z5ta?kEd^uVYlS$1{u-KYN0j#n+$t^;ffHDiF-j4E*`z6xtCxmn1LIVM16Na
zQ}9o)GSlEojMK|y*^MR5K?*@f?}MUYITtK7iib`=EX%GawJjLDY`oj_z6QA6*P#JQ
zjo)8Lgiik_%P#J9GZ<_ucns-mFgQeBgoeQ4%X23v{T=t{Hr)@>4oQFDgG5w8YM4Q*
znV|>uxlE6jV^{Lb4F<2q=LOYinQ%4TrpX}vy?eoWl|ep&YWoPXvll$6^g0&2b{=y0
z`_1X6<k(f17=ovNkYhLCJQoCU+Og@H^6V<=3xgOKUO)2ewo!SJ1TvuW|BD}iptuLG
z9v0jINtET&OXS%NWW*rXIKL<g1yvp;dLF%|j8LKY=?CQ5bxb|fLH&e02cORT2|m4h
zLDN<q-K@LRV3FvL5{d3FKnwQErYkD28*{1zfntaCqT2LW1@-`aN02Le!KXcX^qR7r
zhehH{cBEm3DPTpWYUdfJ-%((fWlC0sbP$AsKo0cj)fGI?$l$~8`WiGRAsGVl`EzLJ
zLKk#%S+D88bBxoi71<SpbOS)vn;NNtoLYO~g?IqCgP>G<;RRD5xU>Ry5T=2Yb>4q5
zB><K_jHWMFWS6bK<_{{Z{(E$r{!;;`kL4f=w1GVklv9tqF7@m@0xGSJc!2s9zx~0f
z1>DPg4?fJ}|BLbfSZc}M3Q8@YF2X~QDUj3x>PWqC2dRN}5x^yV8b~18Bd_!L3p1!L
zkoj{!&T08yq6{ixr-Rf;!uklZARf55VufnxHmwF(15HTQ;E>r1Hk~s79A+=J`$5t~
zFGTp$_KiyHER0Ocm8Nf3W>;cT^qYQLncaZ#{d67`c3;MY)1y?_gBbm$uT^1pWa9Ci
z{y~M^j!92(x`8UYJmc!=0jlgejCIp%RoNYx<ou@}P-VAe{5$=hDtmrPzXB7(i!jjI
zrRLWS9-WX5u!0XL2#<L{gkA{xfE@Mx#eOf4qmIA0z2P79-2bp(571gCQ%{g70w7a5
z?|U@AZ+LOf8>AFs+N<do)!2pW_d$eSob!g5mI5`cVZ%T0E)PhH%%l162aj&k*Yco+
zU-w_E2hC7HoB?j5ReGbiEDLIu1k@}OY-Y^|n<ah!MKZ`Rr~?flt^pfr3vr+zMCgSg
z)X?poAU_;`ad|zOcbPqyBVKrPn_7VlzW?GMXh;Rgkte)R9J$jA;^B0tdCl0(^XN8x
zB?s~KI*@@-ht`0-1_{Xyh{2GPYM}Bl5cwB5P+OQhr$=b8>oD$^-m1ZFC3w;UoXyV3
zg0tC)7n`SF&|sHgoHzZg273@!EXYZq<oj#7rzX2>sEQ{8!)qZ>dCar!ANU{-_;KMI
zUVyeKfeOb+kS5TUyNVYcjQ3xB^I%|j5eU+_+@tgG3wMxg=lvJU!7HAQzc{>h`o%nU
z$>~=#*|j3|K+b@y{g?3Qt&Vtc-yIY-&tIf_fO@{*MgKmX-{9;0T|mN}$3g4f!At!e
zKzvZ{gq(t^>H*UI{{^%A^l&Y9bHxOA28P#9P*$KydLT9aZKki+VwV;C1$NqDkKSqp
z(28Jo_vv@F*v+^=E(ZC})@}OvMQo<igS6QvF-`KAK4USPHB+d^^s9^6qNkNGvTSeC
zVb5h`Y@hx?mwg)Jhw1Hl?BzxuoIp<b{^ErbDA7QoYlSo1ZbbXzI7GpV-O~;9*#qSE
zxPtWkhmNACfFyfORS$yd=Kn8_PoJmHF2;QRDC6|)`t0gV^Ae{&&}SE8d^7#KKD!R@
zY0!LY?_SUu6fgEqH!xt=W1KKO-hf?6(A5dFq@#?(vD;6>qgPZWarz_!c8mHi`$6VD
ze=*4cR9y47Ob2C%UehN~;cBRG94I6An%;y8r$B|lJGFaFZ$O28p~BBW8@Lg|W>DcE
zR?r5?I?#=1C-#GSIt~n046O%B#XWjWPeP60hN^u4x(cY*^dMCDi#^17IjjuOJBwVV
zHyg4mGai|~+>pJ1as6}&BX-M3ZE%o3@aVkd+gWD-+Mns$ndjiqdI@v`%Jmms4xkd>
z)ERtVa_xl|GtPrnN}FC)1#OY9z3`#~!dHdKS3vmudl{#%GGcc#JO#RKxV!ek3;FY)
zTh4WNLHVF|(4BLTUKax>0K021c=Vdus!mrlW;bB0pB`k)uF2$WKmCIlyU6r>6LwxE
zzqsiOjM;ZG<=P<$?ueaUXTm;LXg>IU;o1u?zMKI&uy@yVT~l^D-ewyHhSv}FTYy$f
z`cJPgWmo5M*v$w%c%0K_x}zDpFw?P^=?6^N)wO<GgFFkK>3acUzg!8ro4mVr!;76Z
z3=A)Qe*OOsF=^X$K{Iw0?!&ua^?UJj2Q$zB1lS-&nbHX_GQeilPI!@R&A{+d5~NiF
z<Oq}Llg-!_nH0b(C8nP<V^?6jG5x(6yAo3}LX2a&u{pa0WA$_&b9M>g1E5*iPSDm2
zkLKeNpxl--z1*B#U(&-0w7l`P9Q2+W(8*`up<#pR`_0+S7{5;cX3j1rbjuPlVhWN5
zC-alj)hyVZ4B9~APdq^WbGHKf9Ng{9w*+OT?=LP|fHL9n7jNf5np45kXIQYOFvd*(
zYr(E8=mnBJ_?X$FS0)-%TTh#AXvuD^*JJ@*z7DPv94z5^_xOusOX&Lh*u$Vb2(d4f
zET_-1Wba{IuwC7Xot2TXZ@R8EyH@?pt)Tq%(Bt4kR-fJ+4i2Br_n-#XH&aM@mW3Q5
z?a^y`U@IfTi~CSv9=PxxknjnpFzEVN&<V1=rrSWm8==Clzyk=NyPj8qgl9p8Z!$12
z)I*fd0f{$5#X%<qL4^B3!Z}dk?Qm0?LBgR>;bm~)a*!}+lCkvwf6G+3a5hL-9jdwo
zE}Q}q7SMu<H^RlEK;l15K;ADYfj9#!^lW;)4f_^mMJ}f42Q*m3r~BHnFJkPT{=t?#
zlS$EZdbAz8B-0D_>1B58%8c#PXW6mqII)2jwv`+NUE=~;VFJG1^+kmlDE4FLfZ{O(
z#BM!MD&^SiFW}KD`g#*1!#)-U1_sb#0?<-w4tw_bjAy5>uxD3iTsr-NJ-Z@f^Yl;l
z?4681r`I^Jt1@1mzQ}=Hjb)7y1H*JVCw7VHPaN21GQOQ&=g2;lar1N$C-zRp`_tz+
zvFkCun|{`bJ)cQWZ@Qf`dl{3E{`3HUcFF1Io!K)OU8h^Puq){#fYyt5vwmg*HBUij
zR$Ty};WPvF45t?x^%xi?OqWSwH)LYgo9>^)E<XK&3%i^Y17y)5I5i&7MM{m2r*pWn
zE3!>p#mMl&Y`VTHdzf3Y4g-VZHx?B}kKWRQ9{jFl{GQ3zKpp38`k)-~{Dp@O1H)^<
zmIEIAE}x)Mv-LrXK>qW$fO^P2-KLWnrk{3YS79`q{=t>ql=1g;H8=JKP?77#UdXs^
zx}-aMDdW58{qF3oBFnU3+i_qSVv5#uJ!^LPdNW2)tNe*iuWi5@ta;&&1}HJ`x9o+d
z5tB8H3@@HSh1bA^wLrq>pu)4^!nam1GQ8Lh74Cuyp92Xm(1-&WUQ!E5X~#ffy<nv!
z1rVXfs~H(yR6&H2AwthULg^5pFo+OXRR~1L6Cwmw<v3l%lf9F9`CrEA8$8)xFg}_-
z(~Es6quF$OZ+2BC0gdTt-t4N3FQ@l-v-dE@OqcXwS7S7t?%>0&#3G~)N>aY;64UE^
z*k^(c81rSH$|R{eeZ4Px2Pnb#vFkC0Oi%Y?&u5yV1Wr?o71RCw*_#+wPru~PuEcc=
zw27gcHS#;-^oey$vSH%N&@#!Rmo*kN%hJj2(R^GX_T?@`<PlDfURHasENGLW!i%|z
zppp^NJc(6;G*dh8zX(zSB@@tvs)YgUYW5vVu*Tgs1#s}{K!PN12_wUc#SkHRh)^;}
zXoAA@h-h}d=_-Nj0Sas&SNHnv=yd$y-OG~V*;{jraRXzE`+pC9*LwaJ&!<lbWLILe
zo4!4ey^XPRx?K=^F0ZFNC{Ne!cwr^az%YHnayC(w9WUfTf}QtYG|GWIaQwyG7HFd!
zmI6;r{}{xsWv{ddtJ96-ke$xHh>_uiJVZzf;&cX(5RcsSs9^Ryrk>B!PX)7EFcwW`
z4q-Q8w4H7d!fwL3W&z0P?=MzOFAZUDU@V>fErh*<DMl8Q^ChOYgtDhIPMrQGlwH1l
zy$q<)&Fb_K)YO3Fe0~q`Y31;v+g>osBI55QXyO1Ie-g1Tmr0|=-)XQcDE=f~bV`G~
z4~aid8F>8J$w1=oiWEribfyJtBGc!EvGZwfoCk6<xJL5mjo|=oss+_Z3#GupAqiSU
z-)lN`9{5I$>tXD3<k@8y7&=`~cpUt#;L*zx?b%y%oYAEv9~xgTr%wuJZ)J?1E)l_Q
z!=xlLJuHGfP)J@1<Ph)<JCE+t2`{uIr|*nlKgRfadP5|84&$xqZzI_!F#exj7sW2k
zq$n|cb`-mv^h0s5PhOOZLBjzSktf7KMTzY6{s49k`!MkBt6=vd*Qh39VE02)qQxvm
zh8KzuA!tg}0txYnfl^`{<DBXDquFH`>!<&TX4e%A6bCI();jQ-1GMh=>3qiNRx#|k
zjEASMh+*$zoG{%ymOY#C*7U`(>_#k4MHm>S@7H7(n{JTB&N6*p2_xI|pRw#&jLF+m
z;@Arr8J}*y7SCSJ#F#tXFNu94<L+t6?9NQ({L^n8WwT+j<ex5ajLnAe_w)nF>>}*X
z_`roY=r(1M>F<--RhYtgrypF+CN^C=h24`Wh;MpND!bA26)EgSj1Q*YPGR?Ba^yiM
zV6>UuoywjHI`uS_-H$PLx<eZKbx=u?&RztPOJ~<(lH{JgJDoj%v2Z(220IHQ<F@UB
zne3K~j5DTtXR!xy#rHEZcy|7O!OK2<c^12zm_9os*(icXAYvzgYEe=4>9@1kP1)Y`
zF*3ZEJ6$ZBUD0GO8%W*%7wf@y(cgcu97OllPH^q~?)d+xtL0z*CMEE~KGWZCz<Kw;
zi(k{Tv)Rp=cHNr3B%584F?#y3Y<3k!v+1w1*`4|B^)f<^VFy`QKHVmVJ%O=h`rI6L
zZJp#^Mur#PSwI6b{QEwFsxT%{=ivWg&;Msj=e`yMO^x=NI)GGNoc<+;-7#Z7xc>oZ
z`mTkr!TT~6LfD|T!i%Y3cIg3+?$`|=J1fEb+5<0YK#a~C9*svpcYJ~Rov>S2L90$*
zxPv+|ptCJZOM0fy&1JXH1RwR$&6;r&boLkMYBV-iL(m}9^BbVNE;```D8GGwA;CKR
zUoN{;{WWk`3erV8#SGbE7!B%V9tC+Z@O2$z;1JyO1zm0Xn*DY5YjcPo*cVfo85mw`
zz7BgG0ucnA;{BolB&ZG%08f19BME>#4C=zYR(WkG4^adjoc0DO5(Ep>PIzGp;(?ED
z?5#Zjxp=el{)>szPvo)3NrI0Q?!`PXvuC<}KDz`bxZl`$|HaSg3Hj{CjE|>J$!Aw*
z;${YI;kK`DxX#G%U$qHLwt&etFxdenyTD`*nCt_S6TsvoFgXQGP6LxOz~n42IR{M6
z1CtBD<RUP+1WYailPkdFs(LWB228F4lN-R~CNQ}LOl|{{JHX^FFu4az?gNttz~mt?
zc?3)z1CuAf<S8(D227p<lNZ3`B`|sAdOgVZ*T9?`VDc82yaOihfyoD8@)4MP0w$k<
z$roVq6_|VjCf|X{4`A{WnEV1Jzk$ggVDcB3`~xQcU1zLk_^--v1LO!MFv$WY*}x<R
znB)SJJYbR!ObUQWAuuTdCdI&{1elZplQLjZ4ooV5NhL6;0w&eKq{a<KhWh`iT40V2
znA8K424K<%Oqzg6GcaiZCau7v4Vbh8lMZ0g2~4_xNjEU*0Vch`qz{<%1Cs$@G6+Q0
ztA>Cm)i5v_0VbosWDJ;$1Ct40G6_tkfXOs4nE@uVz+?`X%mb4JV6q5ImVn7JFj)a6
ztH5Lpn5?e@Qw?CU2~4(t$u=<A0Vcb^WDl6^1CyYV<G<=8FnbD^oCYRmfXP{4at@fB
z2PPMQ$wgpt37A|4CRfyhsa0Td4VYX9CO3e|O<-~hnA`>?cYw)VU~&(b+y^EPfXPE(
z@(7qb1}0B{$x~qR446CzCNF@=OE<vj{|cCM4NTqulefU+9WZ$hOg;dUkHF*;F!>Bj
zz5tW2z~mb+`3_8e0F$4<<QFjc4NU$3lfS^^pBv!x{}0SzxCzb$V3Gw)vVlnsFv$fb
zdB7wem=pk$LSRw^Op1X?2{0)ICS|~+9GFx9lS*Jx1x%{l1gC!uFh>ha>VQc-FlhiL
zjliS{m^1^E7GTl}Oxl1+J22@0CP7oe|5aVUY&S6J0Vch`qz{<%1Cs$D(n2)|M5%^=
z$uKY(0VbosWDJ;$y9r(y*(-bXA|r!i@PE~#7pGU2vYXX+fL8u(`Tzfa#tIN?6^I48
z$N1#}5bF_0Y#N9K8lHIB17Zn+?uu&yu{1y|&?Rjdt{@g@|4Bv!h?N48%?GifK&&1R
z3sfg%EC8|GKw?`!ESvxJ|Nm#41Tl?3f)79}&}EAmp!4Wo%7MhVnHU&eihx*(AQl&h
zWeH+|R#av9fmq-E{r{hl17f`avD!hbM<CWx5DQdeW*h>s&Vj^0hkm_00%E;pVqmC$
zxeLT(W@cb`30j7jAqQeD1Bsb{SaU!ue-LXDh?N0ib%0onAXXiSH66q%0kQUgSXm&}
zB@hdAvV6vC5GxEM#>D~}nFFyDKrAN^%c35{v;Z*!KrB5FD;>mA0kIlDEGZCcK8OXH
zlg!uwVzGh5&VX2d{{H`;@esuN1Y$9;GBCUZtwYF=0kQ6Z#7se~D<BqVkoM&%5Gx-f
zcHr;-`u`b|K+J6*!6hKp8W0O~75mFYAl7q`*bETMf{lUUWgm#u3u3i^SXV%-DiBMW
zoq^#c=p4(8WDqM2BsLMmiUG0qgIGZz))NrR1H^LSU|@JzZwF$ggP0~D)=3ac3&hgq
zWMFs+x+fsR2gDKsiOmJEctEU=AQlsd<;KOp@Dg-raK;P}>)oIK|1(~LSWiGKdu|4X
zm$yKyNg&n*5bFtubqvI^;HhU|c)16}?BHQwc)1D0x({Nl0I{@r85my91F@<>tSKPY
zP7tdL#QFtdHGo)-d<+aP%RsDJ5Gx170&RVNnFL~e2Z=?1SSI`o3@`matU?gW<<I~B
z^%?6yOe>J!dl1V2#4-|KV0ftpVpV`xG9cD&5K9Qe`VL}ofLO+Y3=A*-{r>+yBOk>2
z0%ENOv0i~#&p|BE;h!1GLZIcnAhCE5>kNoB2gEv54`SW|F?WDi62c4&FV}%smLS#=
z5GxGCngwD_1F=ANL1gR%vD!dlcR;Kf5KCBuf#GElh@}T&Wq?@OAXXfRwGhM#0kL+2
zSY9C3O%aBAhL@ltJ2O6l1kFH#e4-2tFLgjH4G>ES#Bu?#BtWbL5Q`7QDg&`tK&%U(
zB>L;u|Nj|oAX7eoSkWNXGZ3o>#JU4wb%AtT0<mU+SSLWN`n4eDJ`nQ=h_wa8x&>mb
z0<k`WSPMWb4lxFXm(xHjSrDrS#4-l4nm{a95UT>j3J0<BK&(6vD+R==1+k()tS%5M
z0K}ROV!8bSm48b?OdF8kCJ@UA#M%#HX@FQ~KrA^B>o$lb0%E-cvA962?;sWfh{Yk!
z!0__h&;S23L_n-JAeIV<^$5f=1hH;_SPmf8IS|WN98~@t0Wo7hg1bPhY!GV$h*b$<
zEd#MSL996-)^reS5{R`7#OeUCwt!f5Al4BOs|3Wl1Y%`@SPwv~1Q6>Th!qB6{RXjo
zKrF6$2?mCjP9UZPh-Cp{se@R0AeK3Zr2=C4f>=@@Ry2qu0Agi=SZp9x1&H<M$N&Es
z?I6}C5NisE^#a6N3}W2_u{MENS3s<TAl9iLpz`lLh<N}c_z=X}24cMhvDScCzd@`;
zAeNvc1H;Q1AeI7%)dynfgIFyfmK}&y1!DPuSOp+fEQpl`VwHhdF(6h8h!q54O$4#(
zJwVKrAf_FNwFAU50kMvQSXv;~RS-)7#Cix~iGf%jKr9{*i$RKk;UyD@#S3En`2PQY
zh7^eP4#YA7v7UffP9WAT5GxSGx&UIuOM%M2V<2WWNN^8`RRdye0<n5PtQ8>EY!GW6
zh_wO4ngU`S2C=$8tV<wP1Bmqy#3}=^K7d#`Al82nD+$EnlV)Ie83AI+gIIpwLFJzT
zi0J|nv<I=QK&)U8%K*em2C>vYtYQ#L2E=Lxv4lXZNgx&nh_w*J`uFYs|BMYF))x@#
z0EqPp#5xaRJpi%pfLPZ+tk)pc8F3Kv7l?TX#Nw7=V0gLX+yDR5Tk6>Twr{FqpT@<c
zuy?yxC;KZ#CX?OU&AQp6*qCl?**<9^`#(me8=JOIn#|6`$#iAq_Gxq2-ME>0=54>X
zoV|{fiD%~axV7v_LfaSqWOrxUzV;vcaYn)P)ROq(lA_Y&lG377hV;~usX-h{Q|&oe
z>(erGa*(8oQWI0+QN=WJ^K%Lkle2Xc3X1Ye@=GcUQZ*HH?Gyqk{gbj%lS>q|7z&Cq
z^Gf0qi;5B}p=Mzb(!i#j1*Cs^xFE;$=>g0fQldGTNd=X;`8jEsIjQmGMTrG^$rTmT
zGnqLQr`s}eTwu;G&zsJ}#Bp%?J3)?l(_>$A$!zZy;+V-e{VWrQQY_f@2!Hxpq59k3
z-wLb()qf2BR#@C$T%MU8Ur<tHrNEG!kyxal#V}p4nOkJ~Y!MEj?JXi4flT$z8L7$H
zx|w+jxs~xCiy;0_EGa39&&(@HElNvFPUT{NsLC%b!LKYH8hmh_@$n3vx(cerTnzpY
zsyHLDAeA96#Y#1Wi=ntAwY~t%3ei;n351w(F@%_LF}M~L<ri5gBq!!6<mHzrq^FiB
zfLxTBR9cd%ke{ZIo>`Wfr;t~gTTrP0cCa2pN@{U(5kpF1Ng{)zqX8F#qoX01(1lV)
z5S}rJ0<(?4GWCu|x?nC?!Wb;(XbcfD0jV|A1si4nkx_6<%*+7^D+HyMlosW2F@&TR
zmneWFK@0;3-;j&JDL+4l!8t#-ASbng!7V30v4p`huY>`T*bEqgONuh{(hV3w>N9gw
zQ&MwE63t8)Lh~|{^HWj{7(zix!}2pz3>f@Mb5n~llXZ(rDsxg5K*?4Cq^4LQu_#p`
zCAFX^H94^)HANvYFGZm|Gbcx(D7CmWr$iw$Pa!c+Ar%ykAa+ScszO>RDBtLTU2Ft#
zs4-VPm}>&zf<iyFxWtSL9F7p%lvInAz>!dzmy%jkT#}!k!r)sOQ0WNHCoZ5+ch1i%
zOD!r%En<MDdc9<ZfJ&#zlGNgOaMIDpPs-9nG8Gi7U;~99CW0eeAu%~QwYYfteK8JE
zWd(2|hi3zYw9>rflFa-(Q1ln%l%{9q=}o^P#-Ut~k_y0<fl@POX5eCgL|JMIa&pF|
z4iuB%)B#~Y!^%k47-58hAs0h%Y6%xZP(3&uq^2ksaWUj2=B6^#1RI($fFg>aD76?W
zVgX`jrZCuKnlKcnre~&rvSVf*Lrt&|Lt;)zPJS{&W?pe>5y*oKHfbgdNok46CHX}R
zxrxQaAhkv5sSHJlDVe3k42dQAxtYm%rMXF|MGPUX^}!*ATnr(u!6Am=R0w8(oD60d
zL!_V-D4Jb^!I{i87?jUS3gU}XOF&r*9L0I1IXPSme)$Rrad=+L%U8gXyA=}aOG=6$
z`7$$4As<|p>M<bnD}c;YNGdHsGBaNxvlz*~fJ$h>kM{%>IC*YG`MHq%p#Ta#E(X8E
z+*FVjzfd0^E(TbkP+FV{GP54)fqaGHlEjkIVsLQ+PELsOqc|0mA)tjBq9oB{$j#4D
z02R^<@yU=h9G_N{p9?L-ASDXIb>Ot60dkTigN8;xrDL$Or>B2C*vkr9nh+UHUAyw)
zk|KsQ)f5JFttFWyIjP8c;aVXwaJ`wSIVlS2s>SLG`N_$pMa2ra`9-M;B^il%3i)}-
zsSIG{3W+(OEFx8@P+ANs0E!h7!QrKlU!(w5ptqe}oMXG#_5->c(^{rSZ{n~PNXbmh
zO$BAt)ST4Z)Vz}In>KO8ac$?{%c0rK0X|5Mfq`NAh5hVeN(>AkPyx``2Z#w;?*O71
z7#i#u7!KG^|FECkf4lnuc2CRc77m;q^#=ku85~3z7}hW|Fr+XrFl1M;gVlrh43-QG
zA)V|D1`Z4i4V~-^3h@jK3p&{u{@rF}IMB(?@aG{bgGm=V!-glU3<+KA3=VHu87z9)
z8BV-qWoYSTXUKTR%CMuCo#ER%R)#md><qi!vocupu`@J$U}ebZV`uRC&05c(F@c@I
z<S#2j%mj9ZKYv*n=1gE`IQWm1Vb2711}A1Vh6@wf8UBc|G1yFDXAqKOW6+q!&M-lq
zjUi+jJA<7v8$-u5c7_isYzz|9*%`j5u`x7EXJ_E?V`FHU!_Kh8kBwo&9Cn7?!E6jI
z^Vk`}L)aL0%wuPm9>&ISW<EPZT1-6~gUAAQhL{RAhMwi@450hy&MaqVm{ZNhAhCj-
zfxniGAz}qPgFzD;gUm{HhNmrT3@28yGu&%sV^CSe&fw6-#^ADwouRLdjUi<fJ3~%8
z8^eTE><o|E*%&sgVrLNOU}Lzjik;y?2OERVYIcUCPBw;$)$9zrrm!*0Sk2B*RX>%D
zfoBan!>*}p3_5Gr8LmxZWAItS&LB6PjiF}^JHw`#Yz$}Curr*R!^ZGs4Lie@Wo!&K
zYuOnZR<bd~tYv3VS;fZCv6h|T)*3d34QtsM=B#65xU-g>L1-fz1Is#g2Axf83<2xd
z8IEjbW2jlj&QP|UjbX_;c81CwYz#W<*%|6*?POzEv!0z{;vP1JFYDPE8n3Z2T-n6V
zu;LLLgTQ8XhR2WC7z{SEGfaHU#!#`DongT%HU^e0><kuM><j@r*crBPu`|@{U}xyz
zVQ1L0gPkEnfSrM57dwN4AUlK0E_MbTA$EoZyVx00MA#Yr>|$qlBg)PYv74PCM2wxG
zVmEs|!z(d%hAX?-86?En8NTdhXV@Xm&JeJNo#BWCJHwhi><m7V><m}-urpLivNL?y
z!_M$XnVn(Hes+czn(PcZ2iX}e7_c)q9Aak>Gh}CIIK<9SV93sJ;1D~*9z%8phQsU(
zaz^Y74u{zp@{HIS8V<8FTry&3IB=Mq!N!E0A?HXvJHss#c7_v2*cp^e*%>|@VP~+h
zWM_~$%FeLblAR&tC_4j>Gdsh9<LnGOoY@&39A{@R@MmY>IKj@aB8r{C-~>BEOEfz}
zzzKGSJqhd#6Hc%*G$gV!Y&gNrFujDG;m!$mhM-DzhJsV<;A0?p7+9EPK+B;R7#I#H
zGjKW7t1vKp&|=^!&}LwG;K{(1;KjfYP|d(B(89nVIf;SMXBh+Y>}3p$!K)dV7p-Ps
z{IZvUL0}&PQ_VgG#wQmUm`pD*Fh0D(z#M#)f%WQj28QW37#MdxVqiG)h=I}MDFajb
zQwE0Srwq*3o-#1zzhGdse96EV^_78X@mB_x&tDlB>Sew$Fi!u@!210M15@Nr2FCfn
z7#Lc9GcY!>F*5AoU}S6*VPyIw!pM><%E-D#l#%hB3?oyiEF+_n93w-V93#^KIYx#h
z@{Ei-l^B_xDKWBGsW39dsW38lsxq=HQ)gt@rOwE>SA&u1l?EfjRZT|52m?lj90Nv1
zaT7)+7Zb*M1`Sh2#yNJ3OvmjQ88+B6GEVVlWLV+P$ap4#k?CgyBg5TDM#g^$j7)lo
zj0|3hjLa(&85ve5F*5R`F*0eVF*3NPF*22;GqOBRXJpjLWMuNrWMtf$#mICei;?+%
z79+#^Y(~cV8b+qOHH-`&YZw_<)-y63t!HF;+Q7(gtg)Vv@n#Pri}?gb=9USJjQleh
znLK7PGNjC8Wc1y{$dt2*k!AK~M#hF+jLbWBF)}poW@HRJz{rq#fRR!E2qRO>5k`iT
zql_%SPcSm@pJZe_bB2-W=NU$3gR_i``!6ywyt&B8`u-9lbJ%4@h833?882OBWYE0M
z$Y^kvk-_CIBje8cdyGua?lCf}-)Ce@d%?(%^pcTr)_X>Vb?+G&cYb7KdiIf#f$0+?
z<A+a-4BtO9GTQ%UWVrg9kx}eFBZKyTMrLOQCPs5+CWc^UCdSH8CYBeWOpKRGnV5pg
zm>4%UGO>y^F)>*+GcoLFW@1ffVPZJY!o;Z6!NgSG!NlOu$;4dW+{wh)KZ%KH&m<;>
z<&&8hV`efj6wG8|<eA09WI2n8L3TD1<Nmo!3|HndF)GeyV)C2M#E><giP3Kf6U)}6
zOpNR+nOLW;WMVqBl8L2k6%*^$RZNWc)-o}PtYczOUdP0EcMB71_EsjQX<M0CGIlVr
z&fLkwbYv$J%aeUfO#J(q>X{SwGcjcDXJTYN%)~PPFcVYs5hg~SJ50<ecbHgi-(zAt
z{E&$?`w<g!!&4?!muF0jtDiG5vA$qpocfZ9Ve)Gx7LNB!jC@SY3~5Zvj7!*<nbO&r
z8Rtqcv+_zYGrg2zW?+?OW(<*KW@3<IX4H~rW_>Ep%%G#l%(%jXnc<p8Ju}NgPiDpd
zA7+--!OTo|gP9qA1~W503t?vA4`XI331ep55zfr46~WAq9>L6XCW4t&E|Qr+HHw)f
zE|!_0D3+N~Dvp`SJ&u_nIgXk6eH=5x_IPH-^ekqk%~{M0=d+ku-e)s2h2$_Z9?E5A
z70F{}$jxVFF)3tb+*rxXBwb&{%(9@0ne~1ZGh;$6Gt+}wX2vUZ%nTpunHlrCnHie9
znHe7}U}oT6#LNh~2IR_OW>(Q9%q%TSm>Er0Ff(mg!OZBol9_>d6*F_%DrQFU&CE<L
zo0%CDw=gp@>|$mz+r`Wfw2PT}(k^C(+TF~IpY|~`N$qE5-MXKdk^LYuQ@#E{W(L+n
z%uE4?m>G|pWoCGFmYLP{95cg{^URE&?=v%KJYZ%jdBDtY;sG<`hKI}yrH_~yYyL7b
zz5C0|!1a%rx#=G>>z9AbjCcMsGpuG{VLZ#m!tjudh0&aYg(-!Dg<%0F3*#0c7KXP%
zEQ|%BEKDavSy-&aSQs}-voPJ1W~pajkzrv?k!4{zCd<OeBhSLZqQJr+smQ|kz=4H9
z+mVH-(vgMngbNFkgewb!i7N}!Ojj0$Xg3x{Id>MOP<Ivv6%Q8125%OIDc&rMFMU{;
z#C%y8jC@&`_xZ9gwE3~HYzbgtI1#|Y8Xw5Q)Dy_Uup*F!u`Y;(`A`rGV@pUq3&Z&k
z7G~K{7FN?R7UqgD7RDVBEDX$%EX*E}ER23JEDR-aER1K9Sr~pKv#_?Lu&|s@Wnth<
zV_~$<U}2t<!NQ`S$->~8$-)?y$HGvP$HHuy&%!z>pM~*MAq$I35etJ?5erjh5eq|I
z5euVQF$?SQVityg5*8MfG8P8o`f?WLm*p%Bd=)G#1r;o;A1YWF*eh9>!Yf%Aaw}Pw
zA5^k1e5zz&)vIP<yj91-6j{&0kX6sZtk%H77}3nakkrh=$lSuhAl=Hs($dPpnAyw1
zG_99~VN)LqW9SqXrphTSEVrkyFixJv!nAuD3&ZtkEUaoXSQzYQvM_3`VqvOZw~B?u
ze>Dr^%PlNSF<V(!_HJci?B2%0z`C7<b>4Os7Rwzhj0HPc7z}r@FqiCNVGKFL!rXs`
zg<<+x7RFVVSQxHeVqyAniG}6%WfsN>S6P_WUu9u9eU*jf%QY4Tx9cp71vgn3PTpc+
znRJJRVc8uPMuWR7OtE)anCIPPVSMzIrJmv5GZt3fw=4{bZ&_F;zhz-M@Ro&P+B+8J
zpYK>0?|fll;{3|O@Z~ED%j9n?jPrl8FdhHN!m#NV3!~qE7KWt%ER31VtW49GSs6Al
zv$969urkQ7vNAs4Vr6*6#mbl{%F0kH%F6Uwl$Bwv7%SsORaS=Us;o?|YOD<G>a2{X
zb?R9euIjKdrkk-cG@G$9eKccbcx}$gIMt1nVZIwHtBgA<OPM<>V}}nb!#W>UCK+E=
zh5}z!=10D)3^V*#8DB)RGVsN)GS$SeGQW#qW!MnQ${3r=%Fvw4%Jeapl{q<&l|eP1
zmGMdqE5olER;G+vRtAeYRz{a*R))A{R>r^e?W|0?9jpwV9jweNI#^kMb+9t1bg?r2
zozBWsJA;+w&kR;pubHfjfpb}z&dg<HxILGZaq~P@hV%1SnM~%hGRQArWo+KU%CvI}
zE5q3>tc>5cu`&p6XJwS%!OEPri<M>N9#)3f{j4lM_p>sdKf=oN{Rk^d`cYQaWk*>V
zLyoaB)wdpFW!QI&mHppoR)!5{Sh@F{VdeOCmX&$OIabz!^Q`O)H&{9AZm=?R++bzb
zxXH@7?ItT*)h$*|v)il;4!2p^xt_7IH#}oyJ@br};m<QxX0PY0EZd&5GJSc@%DL$U
zE5n`_tZc7durfBjWMyCVmX(R=9V@#V0~^a8MmF|K9BlRM0bFcshq%}n{dw3}Pw}!b
z{NrWg*uc-mzD1CY{fq@0M~WpIXSE$0hqyf(d$=PTyP7*2yG$}0drLAK+p}agh7ZYX
z%&sYHtg}+s7#^gsF~+2^ahy+QV_%WU#u}By#<(e)jp0KM8+&3t8&gw08^h9kHjXI;
zYz*@X*w}6s)Uz=#6tc1D6|yn-6|%9dC}d;URmjHtrI3wDpoon@r-+R$r-+SVQ4t&4
zg(5bN3B_z|N+oP;0VQnAQKf7w6=iIU^UB#+<0{w~H&n5){HkGNaH?fvtg2_@v}#~u
z%V=O@sA^zi+tk3uI<1k7?Or1rn@tlN!-i%yrfbb?3`O-VZ0w&}*_g80*cgAbu`zYE
zv$6eZXJcN~!NzFO$;Qmn#l|$RhmBdHmyIE=myP*GFB_v$KO1vLKO4i5el|wFiEPXz
z6WKWKOk`u0nZ(8rIEjs^Y!Vy8vPo==4pZ1TS4?4Jcrt~J&0s1U<E-gyoJ=#=m|SMC
zF~-bfV_Pwkjj8_4Og09SS!|4#X0x%snZw4;G>?s?WgZ*biFs^HT=Ur&Ll&?x?^?jd
zcwr$Mv)Ljx4$H-CoKZ{IIL<9$V^LVf#t^uijotAe8++<;HpbZ}*%;QIWMj-Y%f`0&
zEE`AQIX3ngSJ)U6uClTJ_`=2(@s*9C<SQG8%y%|spYLq!BEQ+{IT-%1alHA%#?kbb
zjhW{^8-vP!HjWGb*%;O^uycqovU99rWM{j<$j(v0#Ll6|%+Aol%+AKc!p>&J!p^>k
zkDYym2s`^PadyTD((G*4q}kaFWZ2niWZ2p6$*{BO$+ELel4WQABgf7;OP-zWkvuzR
zfC4+yBn5WHRf_CPF-rC942zW58UHA=vt_HWv!BsrXEV@aXRgp=XWOI4&TvDIoiV_G
zogu-1opGBbJM#xib~YO;c19*!c7`ZhcE$i#c7_aBcD5z1?2ImM?Cc^Q><lU%?2IYi
z><l&D>})%{*%=*t*xAJb*csFU*cmSbvoi^Wurpi<VQ1!xWM{OJi)LpkiDqYb5Y5im
z7RSzXB95IQJf59hD21J4P73?<!1bK!+c)gtWMY)Qu$mLxGrzD7LN{!H&;e^Xr!xj{
zss?X>D%b#3uwgw!fx%h`{b3b^wpat96QJrNpz3!()mcFG-B<%Q*tTA#0Wv0_2Bi(4
zv=x+gfzp0ZIs!^3LFpVQT?VBapmZ0Mo&u%kLFpAxdJ}}MXV?Q_FdT!@7ohYlDE$OV
zzk||0pfpn>#Nj+pS`11nKxr)~Z33n3ptJ{+4g%Bl3=A<~1_MJHlrDhMRZzMGO7}tO
z8Blr=lwJd+w?XLxQ2G><z5=E1LFpGz`V)w*XJBCX17a{RFt9a2d?Wy+rJ%G5l-7gN
z7Esy=O8Y?RFese>r8!z5=4C<oB~ZE!N_RA|gHDHIV3-6Im;<GkLFo-pdKZ*F0;SJE
z=^Ie`5tM!drN2RGhGvKZxS+HMl$L|i8qMq=|1&TcK?Q7}v>TKTfYMP=It5DSLFo!8
z-2|n3p!75-y#PwDg3?={^gbwkqPZU8!b?zrJ5c%=l>Pvve?e)M7KnO2C@le{m7uf^
zls1FX4p7<)N{2w{I4GT=1!WXL=^7~A2BjxJ=~*r8;DVrD2pXv}P<jbeff|&*4$9vF
zr4K>rGf?^(lzsrEUqR_FQ2HN~Hh`LE1*KgebUlL~guxI2rIVm^4wNo~(hX3$3rbIc
z((|D73Mjn^O7DTv$Ds5DD18e`KLOMA3=HqU3<icDP@1U?5+^)RS`11nKxr)~Z33n3
zptJ{+4uaA#P&y4t7eMJMDBS|0LFu&*#9&}xm;t31LFqM6dK;8J0Hses=_^qB9+Z9o
zr9VOGKTw*j9pWJYC@lr0RobEXRSzm)0i~Uwv=5XHgVG65ItxmdK<PRt-2tU1LFqYA
zdKr}70Ht?9=_BpX{CW;5a05y|g3@oG^fxHY&;juY7nBx((sEE*14<h~X&Wf*2Bia_
zbQF|M>44_fJg7hglx~93Jy3cYlwJU(S3&75P<kJfJ^`gKLFqeC`Wck|0HuFHX%?GK
zh>!T7v;>q^g3>xr+6+oNKxr=!Jw5OpyYTdaO`M#P7a+zMfNOmOk>Ci*<!amuTp(fx
z7K5v4cTUhwKn8{hi#aDhWE5peaGmVPF30#_`opE1=F<fNI18pHL~%+erC)^@3)=At
zF#tjuBtYnf1du+a1&JVA^ri<a=Tw54oUoj8`ocY&ck3tJfEY0yO3#PVOQG~iD7_I%
z?}XAvq4YT@eHltGnFpE2*w6`~S3vnCb`bs!sJO&pFu$Im&kD?7sDUb|gVGI9x(Q03
zfNJc3^0z<@?t}8LK;`#9#cx3QGobQEpyCgp;tRmy^$ZMWpb`_H4$*+PjNuAYd<|G3
z1H%)jMiZ#~1E~BCsQd@0yaQDJ4OIRJRQ?ZC-UllG10)YBUoJouaCAXJf?+;{z5x{%
zfQkn|HS$2^pFrhhpz<+Lc?qce2dKOTR6YYLuL70-W5)q$4-`Npbf6L}_7Df?KsDAt
z<t?D{0#JDisC)-h-UTWz1C@7y%1?pH2SDXDpz;A-93cNQFf4#7h=D3FfhvfB8n6Z`
zZvz!ifr@W|iYGwzc|he0pz;Tx@;OlX5U6|&RQ}B3dWcUepb8S83Ob+)Za@uafy(DV
z<)=X9d!XVaQ1LlX@jFm`GobPfQ27;5`4>?6CG}7RJx~Q(pbEY~6>NaY&w$DwfXXv0
zfjE2*RDKCm{tQ(9-#bXQW_u5z1)#JPlvae&_1aK|5tO!o()Li=4NCh%=?Ewt3#F5w
zbOw~ph0>)^x)w@zK<TMadMSjiXV?Z|FdT={7oqfRDE$ITe}K|opftk=h|jp8v>23@
zhtir*S{F(iLuo50?Et3h85sP*3<ic+D4hwV3!!u+lx~93Jy3cIl%55p7eeWkP<k_z
z-V3FVLFo%n`UZ#wrT@nu1_J}bb0`fdyBQc>L;3Ha^cN_-;1|T_-=X~9P@3T*M4TN;
z^Fe7*C@lr0<)O67M`-&(6Dpt&rA?r;C6u;<(k@Wi8%hU4=?Ewt1ErIobOw~pfzky~
zx&%sBe}uL#nxFz5P`VFFPleJmq4azxy%<Wbgwh+J^mZt{4@w__(kG$xc_@7uO5gqn
zZC^Zu3cP^QZ=v)jDE%Eu8$f62e?$5Iq4c_LNOolV1c?Gz6cVfr>!Fnbv^u1FZCH<5
z9n!rvtY<)}4jC92=vy1sGcX`mhoE?)Yi$V1|47v#$bP!kh9LVH5Y-_h71Oac1l!L5
zuMVNL8MSM}^Iss@@+Opi1f^eof#&~@P=Vi2n(-?{0|%5AgwhgFS`kXCL1|qmZ4RX!
zptJ{+4uR6qP&x%lXVpU)B~ZEsO1DDkJ}5mMN-u!YtDy9HD7_6z?}gGwp!7*7eGy9E
zhSHCrbp0DB;|rAj1EpENK|+8ZN{d5jMJTNarA?r;J(Tu@(t%Jq8cHWY=`1K+2%+m4
zN+Aq}Iw;)%rTd}uR46?MN-u`eYoYW;D7_C#pMcVrp!97h{RB$Ch0<TaG${Rjhxn8O
zO7lZ$aVV__rL~~65tO!u(k@Wi2TBJ+>1ZgO0;MydbRm?k0?{D*>p=_#28MPhJpoG3
zgwpe&^a?1w9!l?k(g&dQStxxKO5calFQN2jDE$jcv;2V8{{lZCAs_>#RiLy1l(vM@
zE>JoMN=HHIR4APbrAwhS!P>7A+WsG?+V4RpwEYk14AQ;!WALemw)4TALAuv|3=H)H
zTKh3D)H4iZ?FX`dAZtIc{WP!r7Arui^)4u#52aldp#6V+sDLb#=7G|G<slkBLTPa8
zgn@y9h<puJN<_8>m46Hjv>oHYm#v}spQd9x__B39bc}|UV?3a^z}2X&r^6Tz$bMXn
z+Ij}skMTefG4@7nJp%*H$9V8HYC-9r+%cYn6o}6<p>zwBUJRv=L+NW!`VEx+1*N%D
zq4{4f6=IMPly-sA8BiJ=fz-|SU?ZFCp!Gj(#&+@Ldx(eE*g^9@O~!Wd<$GARuZND;
z(PC^D6vnvnJuKVT({OATWIwKa56kxT473~Dg~T!Td=Ja^^$ZL&8{5T~?->{vz}X&@
z|4AL&rDF998UG)+>KB^-2dw&q<^O@Iesy5^f1t8q{lHeg4D|zB{esdzI3I$h_n}iL
z#7?nLB^!eBKYeC8vDbzm`{^^&iM=)i+s{CcnNCn`gjpLx>wj2vNcU`54^4Cfl@06Z
zHq(i{Hmql$bf%NCY*^30K;H!iXxR{y{^`2l04*DW>}R0of&;W{2(h1z3l2c`BQ;8)
z`Ja9Z4$vB<u>3zz*|45k3l7N4hV=uq?gy3)>lqjZWZe%e8-mjRK&<-#Wdl%c2(q7H
z0M`A0><48-u>B15U-tvchS2;^_jNz8+7Ooi2PzxZ5A5<ghWdeBeg|s*(|5rE+Ij;}
z`UmAhP<|MQYzVR+ln+7n4@5Qu+s}Z1jE0s&G|>D{?F9!!*M_k9zk$kz^#eBZ37Pn;
zXBeoNPsqe)Jp%)187wII4@foyrT+lv81O)>f(6;na0U_=1Cb5E_A@MjRfo{tF#T#n
zX#OW+rV^Ays6SB&TmLsu*|2_Km)|ke5A5<gQ2jrk3lKo*e*l-?f&9-v^92ZaYD19!
z85qzuh0t*oEHwWQ*eY09{vW7pSdVQ}2&kx|Q*Bt!fMrt%$bLFCO6wUIFgJz3I)@ON
zrhP+D`p4K5LZjO7`Adk0enRQrFQN1QY_A{^{7_mQO4~wde<&RfrOTmoFO;4SrPo90
z<4}4>ImFz%Q2ui${RT>ZeFdHW`wJCddJWOQ1*L_cv=o$9fzsdv!oa|w2j#Ot1+1Wa
z(3SEaAvY)=vYU>9Ar{Jq*uub2@>(3iWCf{aU|{HkDgbS}6R*cpZh_U)xY(*^AZ;%j
zY)p$<Lt6C=3?%JkgN<o1FfdSMNDGuVNZHE<iW6!UTOj)xNZ88;vY(p87TA6U;`g#a
zk}~!B($Kn*=)G*zF1BEE;{%lq>&e?vO0{fQ&p_6eQmSP`&{-MKp5cIGLs0rBV@oO3
zvLVQR2GX~bQY{;T?Pnl)ODWZ|p(Mm7uq~yaJLW)P+h7B#9YyOG%!V92^XV_7_WT2-
z8$LkzJbxgx4V3PJ(l6Q|)%7nZ{S7K!rT`ItQ3s)CfzERRSqR0aK0(}*mj<Tm8O}om
zpz;g{q5R8G8YbQVb*LHCLeN34AUV*9v>-YUD$b=0vA6=tZ-UaG17ShxKBz$CnZOQB
zWnfUKf(U?4m<1_-h0p>UNXR^Z9?}Dn17Vo_2ORPNvmpBRy@iCFNjux*hm2zNb0ET?
z<5)q)fKE{b(J<p2>>%<WF%Wius{i8*+1A120-<@Jv=Eer>ED2+zX7U$f-6K{{WK_J
z0hDfYhe*H-xBxW(W--VSAbbI8P*)H{{RAjI3raJDK*T|6K^SJ<2UPR4KyqNL0J=hl
zfq`K{6htHF*jA9l6DYrBy5L++@p=J!NPwWbrvR!wBo?AQ3QDIyX}LIvILJs4hPlT8
zhj|B}<}FEp=mVV^3%c2w;RjRzbbKtxAQ*-j7=Xh-fq4*zhowRcjDgZ=P?{|bB93le
z0g8FkA01&AnjZ6xoda}KgoJd}X;fYRp<uy0@L?0Wx_8e&6f{6X8l1mib}%q7e22;}
z0Lg<7wcuqs3(;br4LYzIbj}4Y4^-#?LP!!S6rclBRj&pW63~TM06W~;3M!rlr4{s0
z<*T9M6QT43H2DQkaXqM88T3*0?|{hHGkk<F7#2X!;($4T^&G@U_E6fv2-N^TsCXxo
zHZVh#p8*x$2c<8d$)5p>+cGeG1Tz>I3d~UrU_B3UfHjmhut1gfI}be)=)+P-Dp6Pl
zp#z{aL^%TkEC>`p(Z#^P0PFo&LW9N|N;}|?kA})8pvk8}#HX_ca4KqTI0bPnEJ?#?
zm?Ih?iW%menO?PoQ%-volz$LP!-8D_rU6QyI0N>jF8F{GDIut8^aD;lsDVy2Dd%E=
z_)P|)$&~xR0!WZJECeTQQ=t#)P;;Tw22GI0Fd>-p=RqwvcxL*fWt{t%9KZ*%%&Wf(
zJ+MW<9ikCp4+Fy!s5sk2i1!`P<oTfD22i>HDi8Cn2~<1^N*j1U%!g&UM2NTzLp_AS
zumP$7=71Kc_+lsxJ2?g>zvd!1{8Tvuc0z)J8RTJg?)WPZ2k*ZEk>@@J6}SZxcncL^
zz6w#Hya1Z69zbb@<q#7gE@oi(uoN7~wu}nX4I?@283Vx7^arar4YV&LL40%(N?(K0
zx1sa{DE%~v19ZYoeZmTe`V1(Y3#E&pbS0Fohth3Ox)(}Mh0-v$!OUa-0x@?HRDK1N
zUIV2!L1+<%oe&1YJ}7-;1;=#%C{EGoKUQ-Z)Jv>|7z3&A85m@sd}gS93Q#^Q7F3{o
zCaAmyln<%b85s1Sd{9XYQeq6{E3bptqXnglAm<9OF@PeEeX=9FG*e0U^iyj%)db5R
zQV<zXmwWO<MscPGtENk><x~@7?SU8s*2loWAOMy%UpGB#EvK4*CDeGB>~zJYoDxhn
z>!$Al>9t3bRhaC^F3;q&Zo1VvPBo@LFs-M20NRKFIUj^!jh%pYNFe33vw>1x==2Bc
zI0d2<pyw2Vj*thb1|6yoq9gu+g5dvu7!6YgI$|Cq4?1)oL{~u1H+%u51)%0FSUufq
zJ!c%VfGxODYJC7I?jr*78w2=|evtkNoe)>e>VnWax*_zv9tb_J7u3`ewf@i#;e+&m
zu+=0~eiIrWR_r<0a!&W&z$u%w0DABu=vDxb0aa5W226nX^FNG+sapY+2VEKfQV+u)
zpdQJ9nl}MTORSxKY6E8+a{<J|!Vb^_A3>K5fb_~u2YZCOW;(>)4>Q;%JF?4Ki_L`a
zL25ua0*w#4oB$*a!!VB>u;rY7dLyT7k^=N3Nzh^cAVsglAR!F8Clcg07!6Ygx&r{D
z4s-_qh=$<;sDocXX#uFYGuBP_+60P8JI?8=H*w0=D{O=mH=s)aK$^usmjEy@Fcg3|
z3=9k(K(_w>{~x9fbXfpM3Vc}r0|P??R31jd)PXJ$0I36AA^@TTpbn6Lp20Z-LNhTO
zn7(lXr?^xGgwNmrr58ZeSFGP&wV6|okvYK*oc5+4*uu$C4?FiN`VS-nKAr0<xr#}^
z0d@{n3RL{A3R~mU!_p40bFs3a;!4KiJ8amL9AIOM#Zd7zGEphk^Hm*SGnKVa@eHM$
ziYitO2j~KVdWL4Ggz=G$dU?z`4zP2zx}f5#?ZTrs{?~VaEqk2|6+dF35;gt5kppZs
z`Yfn;r1<uW40<LGuuUS1q2jmtMJ6WxHFJRN-C6+_uV-Lb=l-xt#LvP3c2L)Puml4G
z!wF7dx8GI{u!FmHLd9>M`yTvQ)W!jJkk=uo_({2iX&yiA9AKj`r=a3H<XT?`ayU4^
z21l<##a+5{p8u}j>F5AE`Rfi;!f>XR#MB;V2iOT<Pod(MeUk(temXnAP6&Gs6$cx{
z>EZyJ6#5DkU-#A3DZ0wd0XA3r7b^brg3|4u@7x_g2Z@3E>}-D_ao;;VPpG-V(*d@^
zkRK|3?P#t^!+%c)*uq~4sQBg9h`)jr-VU&n#}uLBG5v?WYP|7wfNhh}hKhe^JsEN^
z!q)+IBALNo=y<wEz#oa?a$g77wl;I925?Xx^>=_BU1kRrmt+a!(~SynfE{J#3KefY
zaB87zUZ4YP9LftSt_gNgkOORZI0z~}{eS(0y5GBk9AIak#Xu!&xvnoR*c<EsI}0rZ
zDxLriyI=>{*=V^?@c>ZJeGYMeO^cO6#nW9f^FPFfI=~i<)I!BQ9#)C0dmid=0k)sE
z4Ju*j>R$BIGRy%sAUy#pUOHKVCG1?718nK@45;|?d?!UFt8fR{j)X-}aj=K~ggd}C
z3ax^Qi-1zQOQZwrOt$*1P>ItEUAKMS8R-B!q-{S`yc(oqR+Izm(6-}H@e?z4Pn+;P
z$^mwW+eN7OpOqgk`AWq&z((M1K*bF?*2qL{iE)4(^7a5CUe5py>b0>Buv6cjLnIgq
z!4h!}unE7{Q1K<b%GVz4jCX)7gZTm#PXmEx@eYu6G7JpAq2fN~osJ2a2@bH4cGiE8
z#10PWIrRw+uw`uAP>Bf3Ehoyf5*=WRyoI3R;HZyDbb#%>kc5gKJhjkuTXUiVY%hi~
zRQ!$`a|QR@L<iU@bXrhxaNM&eIe<^41LZ$+sKlGV9dfOwlN?~j(>X%LnY7!*ZvIPh
zfQ>DBLB&Cp0mF)92iTB*FjV}+)`dxP?j}3Hj<bt{ii6b$q&UEiw@dp6olg_GRit-x
zZi)kJYO@fk!QM1(m*<NV2iS^(N~pNV<~W|GvZ)TRg+L8ZaZsXmUzq9uTNu;<70-SC
zd*#P_sSdDZvy-6W9uKSPMb`PJIlz{)&xT6K)Fc{(&P#KE?J`*m6$dBAUuh1oJ(z2t
z;#*FX?VInG?f^S)Z!1(BR1U=)Pj`Twzqc1E4t5Y*hQk)vd3r~n5*L+j|Ex>OaDW}q
zcLpjR`_K8;+j$udu+i14P;sz>gfbmqlODIA;uj~z{B!QfbbuY`_XsKuN~3AdG96$C
z{Jl<sN<7^1z%^bz%K<jI`vEFGIq1S$)rUC_u!H=5K*c@w*UDNj<~qPOgR=gIr0NF(
ztFF8`kn1o7x<-rlKgafkdpP5nK?ivUFoOnI%(w&<7chmmM7t-HPUkwnDa*KVy2b&{
z2nokv3|OEL>=-ot+5t`rreMeILI*jS8T~;w6~>2D7Njx+7BWn5h=<+V2NnYJof8X+
zOLI~oiXbA8iw%)PTr!hOz})F7hd7mlT%b1-X6EOGCl=*p=A}=!ImG!--K{9UDm5=S
z6`~emolj;l3O7G5eY*Z(PNn(_LJK;W!S=y5G|YGfZB{WtByuv7ksTINT7cqE*v)b<
z&%_5*#=GX^WEK=>7DMi0WN6@+;1CZI_sh>q4F+E?3UXI`!1VkRT;kIg9OhJFc`=o7
z!u0nyImI|!3|-3@8YaA&{^T&{GNu<>r(Zn6DKY*3eNOr50Y^Dmx1Tt|8O_YxaO~go
zg-1Dsr(2%j%;q_;mGJ<R!h#zdTP8S6H(bUgGX2A8PPyriPH-OLeQ^}p17Tb+W771E
zCpqPq9=x4?@g!#?=Ypw>2?E;}%#fXSic@5|`zcOI@fY`CzF)9{Y4d^`j0adf7Ier=
zFF(bp!!zL^%%}v0=^syVT20?@hLe@4WAFA4r#Mxam{y#cE^vu6aC*jBPBEq%tEM-c
z<y2;RaAx|_vz!Wy9n+7U<&<aqF#XwCP9sn^(qX#5GA_~S2H)6)xC09(OlRD@;D8*&
z{U+P%&vDLWWZH0Iy4(d$Bd!^nL6H$36%sr>(S%!fd;0~>c1ETb=Rwv*N_}7!1SKlR
zqV)KH#G>L<a1=32U?}`Cz4;QSGD`!Cpu_Zqhq;8!CNLCsuz(eV(<JB~K%e})bdcH!
zP;u~$l8(iY>j6O$GgzkIy2L4`xB#L6mQ>wSOPurbN>VFIK#Ep?thjfWOH6J8L*WKg
zm7ci;`9)w=J6NV0T;>$1KLAkxPSNhEC7vazxgbMMU<xCgaREuvFSQ(`{sxjzFv6Gz
zn8FBSUa$x{1jPqbx)v41JLjY(7J&@<0MP*wb4x8r&H#!1KoZL@%1s1&pn(+}cp!y-
z`M#;S`9+l=wH>U}7hL8P)tP{h4gg(s3zD0G5DQ8zF3B%S1&J<To&NALr<mjlge)i*
zyH<cCH?RsiOkZ$>OPqBAL*WkA>E2g3C6x|9R6+tX9zyx%r<CS^%{u|o^6w~@nBD}2
z!V3_k;9L(2DyUF?UV6M^F)Yp>uueaJg;UJ$1(GZ%O@J;&4Jd&G4MfT}H8(yevD~dF
z6>QxPs3_R}c*m3!XilHNP}smWUG^%cxN!#?IH({_jCW5h0mU}RcM~8I5FPQ(i8(nS
z(HU$YKOf_glb*m(xBx{7%+eKX(-&Oj6ldDNHht$+PTBe$D5^a3GQm-F09CX&q^K0^
z<P#|3zKJ<G`N<%QFQACSqwNNYaBymgV+kZc9>64`K$jZFLuHT>7(^bN2SMHr29=*6
zi#{MrK%?acRIIWfH9jacF$J8O8rY|=y~ZgU(!mZ6!BEJZwegO{P!`Cr38-?;`FY8Z
z6gmS{0u-BW@Z`IIeY*U0PU-p;sEW`p1qE5K0iq<{B{exHH4P-P11bUv=*+~N%qnoO
z9sr5P!|r&Fhx+RTyRbuid}v;IW?o8sP-<~$E?Dseb|HuO_^9dAu5)@Z-C&<S@j9pT
zbo-NByr6{sfPH%14Nl|f|4wr8gZMANd{>qa>_QIH&z$6P1PT6NpU!)eQ-`U6W4bkn
z?%<f7d6QF_X#&UezMGtJOfxv93*O?C;tcQxNA3bJH-Tvdn3k9xf11k`WXuLIUwrzT
zTbvwBJ2<9)xXtM_-QqSUFVg`q$BQe#I~h_YLHOJtK3L!aSRjDu2AFmhNGvEw%}a5G
zTKE7WI{n5SPJX5rP|p9eT-+dAKS25QcR6{Pet<bn(=XiR6kuxL1UrGx+0Zq}JJ>WH
z6y6;WvFY09xdcGECqVdI;QDa_L*WbvfBJ#*T$~{J1)S3tKHxOsF-}h{aV-OxumU17
z-QWTj7f8hhD4*{UCm(wfNW~7Qi0lJS4yFTOju}Me1eB8rQg#8%v1Ymfrp?&F0r7xy
z`oc$?M$>&Ca&j@ffO5JYa`G^JfO1Yh<m6}i0p;*L;uK<P;DYGkd&J2O_ecj+5bTHv
zV2%~j3@~lVo&vIe0h9wyhby2Qu*)`ZO`rIf(~4;aM358gvIAT~4$~8_a+$GDU?@BR
z;#|DSWi-A1Iu|QQ<N{m-WTV3kE^wms3obE^k2f^S$xlwqNrgm&0XQNaU{e5#g%@1Y
zo^skTec+nz@RU=L=?91_I=$j4Cl5;lw~)j1IXAcrKw;m(J$>&}PD%R-++f>+ODs!L
zi*hsb5=&CSakYaRlw;x(i$Ql3#}}34f&6^{BA8T_T9gmspWvP@`ixWF_yR;cxgs$>
zu_UzuQt;gXn;Z`kOiE49%!^M>gjQt_Kn{6-hf7>`0z=^ogtFAU6ojG=+|y@2<CK>B
zfsjuxO)N@@PfUW=-VHoL4$~d(a*2Zd!!!NeGft`c2|OVGfNd>GEy*a#2iMFq5TbCg
z1w3FMf-lSld1eKKpPN{mT~wL}E*~~Pgo-oslJko}H^irci}W2(Ven1TY4OP!*&zJ~
zK%({W@x>*H$=M*m__V}Ka9wf&Bm<HtN=_^R$$*q!KnNC8!US)?1wrK}O!NUnv?M<#
zzdRLO3%-Dflok{~L_R=7rn9}^6sZ3J;y|v}23gg>E9?-Tn4Dh>;&gyH#hKs;odD*P
zB<2}`q-H>P`QT)|0LlR;>lIKA*gG3QoMd=~wFAt}$jt|5jRU;G4)yWLIr+ul5Ig~v
z1o2Wb!7jf57JxYA28f+fl$e)dVga)M0f-MvJ}*F=G`K+@z}!@b+kQYepsUV7`WpCz
z9pcl{a!QNAEv1fnFh4!D1YG7$fbj|-w$6a@!NIWr%*)J4%>$?C6<}_DK`J<SHh_7M
zXa-rd1Hvzb7<>T60~>S#%mdxe%-{!V^FX=aP`Cl+6elO<frIt|gqxZQPB$;$Jg^Hs
zK)EGQ=l<ZE{_rKINPPo8$dkpDd0<a<fO#dUkjBacI1g;Z3^2F6D6<4?`vMRb78)yH
zoN{n<ZGdu9^B}n%$}P<V%N_u6b5c?(3K;4^MHiS0DvwGsp%o}Z1l(Z10cICNef0ps
zD@iO-@$~a|aWyjm1>g&iXf8bId;oJ(bCYumK(aqz+yY3uLqOOeJ~uTtH@_?uY<~w-
zpcs-3Cm^`-1&JjksYQ8)W*~EBfF-h_DQ*FX2aC}aFiuKl5wgQJfW!;nsci?C3ojZD
z2ng3Z#23H}IRTc1lq?s(Y*6DG9JM#V+|rWd3`k4<0hA9;A}>H3a0;2gQ1}7HL37Cu
zs5q=W*dQqE5MPv94{ExAJl6r{=R!R<0mOr5<{4mi9wNCe01F`aE5LksGTZ>>qQ%e-
zh+t82VsR=oS`L7O>WfQ2r5DHrCqR4<Hv^KRVO&Tg-hgo-k@x`0O(_LO@e3#y9<(2z
z0%@=$^#dx91IdC7Lc$K9lD9q&$weJdK~NzHa?u1hAL51?a6ZHl3!r?^HSH4^3Rgh6
zC6FR(1Dp%ak2~PpQgCs10L+i5EQa+8L425NFMv3ud9d7d1H#S8%mW+s0K_dTM#R7i
zkN_-Wf=BZhrtg2tsZ@V}Gd;B=o?!(~F2g^b0)|$BB8Jrh`3&DxQW=)2W~3&jq!z^|
zgNI;BQsWD9Dj5!{r!l<JhBWr#8Gh-MGi=vQW_YAq%&<-me2sl(QffTI9R19^%#!#b
z&{z&g*FXIdP}3fCqkS<$pHEq8QAvD3QGS7ZF~b_4ywco)oYM5nykdq~{tP^Z4DVSi
z85Xh`F&yQbUjL5MmZ?{2`o4FZ67mP7Eedif<3TAoz&t*_*v-?&H6Sw}ARw8cSJT8`
z`uy2kveW0h<5b|=ZRE%B(bC+-B^Q(%rzf7~lAhk6&8<4U;XNk{YrAbuanSUKr#W?}
zZ+p+F$U5Jxs5of)hx?qm(>XtIDyS@V3t^b+&cJ2BaG%wPp_$#1;V`>7!%PlihOero
z;P5)4F+KVtr#x4qreR`AN<71S&FK!axa7UtwN1eCTXYzhQ&Mx{A^r+5kIzp6^^zFo
zuz|*xobz+?ON#<PLwXGBrNMpS_{@^j+<@fF%&ZiKM>@<52ehWY`^YIK`;W~zCo|7E
zKR3xJAT2F8J}o$&VXHJK6c|pZOjrEGDIq>t6CAPei8(o$0p7_u4F6r285*>w2Ylj`
zRNu#*2I_jG=A`DP=9L7P2jo<`W#*&?Bs08M1-tyRCNskU?dcOfaq2Kl;h4Vf6Q>gA
zZfRzQ1|0?l*6H(Sa%nT|=A2$VlS`g^w=%>chU4nf9X@l)GBs*XkN?c6;kHqmnPGzw
z12e+|V+IB`bB1GFCJb}9!65}s67h*eMTwR1nRz9tMQMr2sYv0$W5BRm(x^DIq_lYY
z{aIYnjO(Y*oz11Gz14_;DYr5n6qpdri6tdP*i4wlJ-zWAr}Xp*v$?pU+of0-E}Uj$
zU|=SwF(5f0Ga!dy8c%U*3DkW!tjG)~V_3v9J?;aiYW;R?7KRCD7#Ua?He3gh2W~Pl
zFt9^nnc)XdF?dX`v?!I~p8zz-;~8daCFkdYLcbWCfqJ#`876CI=B4F>xhr(?Qp>@4
z0U|xkfQ8}0M@9w)mVAaCypY5WDu+swOG=CCQyKpAgIcqx#gM!O%1{g|3{o=l<I{3M
zV^GBm9X<?9Icb?WsqqY#c~dgeDj_OCxv<56L8O4;BOfSlGTh})V|dJ;$j~B~#PC}%
znc=la3d1q+)D&o5jAxiEmCo>1DytacyLg5TvN`pMxw!>!fxEJ~3|(@0iMc6BnRzf(
z{}uAn(qNo5ibV`t4T~8L8kJ<`Wv3Rw#6KICW+bJ+cneI*7|xnhFdVjEV9#OL%%514
z%WzXMDYX!$;FMBI62o_;jLdqN$UEgixM8;qis2S^7&0(}N|N}T%;FM;>-;4!4YO4$
zVa#;~EDRGqfnx8$Cq@Parp&y|;tYnL{KY0P6$hkP7#doc7+4r4bTKh7FoSAYa2lzv
zghmC!Qh^+XpK7Hg@eEBGEDQ&xF)=VOr7|2802O$kNP#$Dfe!;yVoE&2eSzen)Wnih
zP*Iwjn3octlbM&wuug}8DJ?T62WloL+58Xy#nVPz7KRTq!S*i%8Jq-)Fp%TwGxOpZ
z77CWZqu`t%12agHVUJ)@YI<gINoo<pA;GlFyiA4@f-DS6&VUTrvW%I5h2g|9W(KI@
zmk<^25qiD~vM@}&1yZ*BD~MeGm6?HoC6QsCP&zzprweD+GaL~v%B%o61>}-_A`DDP
zsW~w2UZLX5;^I_zn7<N&+IK?;?znqGV8=ZXVqsYS8)VbtsVodE44bF1z#P{q3|HJO
z3|2f*n1$i~e2}vGBRfIVjh%4Sn-HpZKveG&W?^^$R@U?!q<GqM76t~Uyn=jqpgj@J
z&&^LxPK3F8q6pNT{}G0@ih!-|7GYs%cmXnI-e(pDmU@OwpW#-ofhgG|0(b8Y5f+AB
zAax9@{($ss`U6*d6QSxpMBh^p7KUSBWi69g8CV!*OlD<ZU`vE2>m8!W1@IL4R5TwX
zQ4i|QGE5RH$c1N~{bEIM_8YO%q*R!%W{N|7by*bdz?-6AU)>jFVORjRw0#B0>e(w;
zVWHn323OoB23Fi7#=@`!tZe6<dXVa~ci^hmB2;gNsNN~Y!f^EtNZGqLAhHRxz#Ec8
zZy^*vfGB<@#=@}i9Z1>hZy@sjH@L~|;&6BLii6!TS)7HTzWqB$-INA41{Q|>4Qw!1
zZ$YTu1yOxKoQ2^ySlP>!AjN-IvN15QCc}fOT_UF-KL=hWY>_C=GlPZPLkV~a?~^P6
zg*!Od54$ncLwvGG0`9mK5@5%zlVD+3x&~xX$6XLP=PulB=MjppLKNSYU}4z(9;EER
ze0ByFh9C3UVIKK|P~0R5Hn~HRg`r^qNZFjt>}H^fXER*&N=djo)<aZpm1JSqu^FU#
z!Z{GR1hfK|Y5JX6Tyji}Qq%v>;!>)gs>Q-E?IK9_1(=+44Q}8%DY$`Kq`=nil44=_
za1Eq*`)?3=`ZrwhZG_^75XH}>SQsvYl`ZSzU|?a`)yKiWz?7JqS`5#7P15y649BIR
zNpr3=+`h%qVEa}|voLI!0Mh(@1BmS22qG73=3-!B*a9XSwt(2Lc5#6UsNw=xr2UbG
z$L&g)OgQ_ROnz=+GTi!RSy&uSmw{V7R|ahLVi^{O{kuVi|2YpLCtToyMavO{;!_aC
z7i3r%W?TR%`*{yU_TGmp{)kZg9isTJ3=6~5`ygd~FS+U&SQr+)gsYw>3wOs7S+F}+
z$+9racnwm0eg!uJ3&X;d+%R{XMku}rQG8vNg<<)Bkg}Bzco<k1_CDZ&DgJ>_{12kI
zMUI8xN&PF3y1AEl8CV!LUg8CXBEvel6nHWJRW3h=VUc`sE<DgKDKId>!})|<Dx!Y>
z;0BGz$8vCAyp#j`;=LRT!`!<dOWL1<$l1?%Ar7lAVVEEfS3ON0ta^?-3&Z*sAa$Sr
zgUI#<J_ZJ6BUt2~mQP8Aw=jOlr{<;>XTao^DnQ-v3}NaUh^e3CSs13Y^D(e6Oj!XU
zSFGS;fW`l01-Kh#DuCTEUx9^T16bXUk08}OpFnN^*RBT;ijP4QpHX08X#ERP)-sVF
zRC-V3hj_1q;VnY(XNcmT3M>o@z{<YO;|Ilm*L=9@S&DFXEKmfyW0@ig!=?EkL*K6f
zk<Dx2ijN}{pM@yCtjNO9y%wab?-+<&bc~;Yfyo>eI3E;Ythq|iV5;v{g4;Mz32ftZ
zB^HL;CqUY_yatgcUc+tNfl#~;qWFjs3&V%EAZ6>82{5oQ99kv-^Z8SR;@1$xAC*`b
z=BxrKTe2HO?$|9*&%nS0b5x%)yrey-40Yd1Ww`U!D}$Z4Rhfn109gBqM<7G?fXOp2
z;P&1@Xn6$D@<N$~;m9kH;u~888CV$JY!QSxGO$wxZb82a*n+7lEDTe3g4A6*0wP}>
zfvetzP`n4C_>c+<!@r{-WoOQU$OmVqKlsNfA^uSXJc<MFVlgbzVPSZ2b~^umPKmVn
zsyQj~NL}D5J}eAP7X%p?m~v8c8TP0amL`Imfth*f#SAkw8JJS@O5z#Lsm6oalEn<m
zKyCWO%KXw2aG&9&YI1&Q9)!JHorPihMUX>|T%O+hpHrFXv)c6N8C>!rH?%;VAW$zG
zY;!;|!xx?DPychOg*<m*Vd%dCvb{2%p+_CjU|!%4>b4dq7lAtQAf2g2C6x?Y)j<X^
z+|vSkpcpjaHOq&E;qDcXtzWN!$Q{?GW^+k#{83NJ%u6h)obEW2OSryWlZD~OZICta
zzR(hl{F02+qIjqPq|5U}n}Mk~wWPEF?71BppeFD>4HkyOcR)sW+y$8c?j)x`ddX#(
z0hs|=0Vxc>H6YeOgkd8BFxmPSIxGx*k3nYKc>*G@KLwFno`cBl_aL(O6Uc0+W8g6t
z5Rjb7a8?uAYeNVpGjwXPFzf*9fdvji7Nn_JD?ceK9@MuBFb}AQceVSqSQw6c23gqu
z4MeU1lPA9kGBB`!JII*@C7JnoVDF#NLIlMnEl@WGEPO{76e?Z%EDS9_Kt|mB2_pah
z0=XaN7KX1{P_Hoj)?#6(zw;ZU=KUWK+4>hm9%&L{U}2coF2umV1a&Cb^wrwnSYg<!
z&BCy@9i(OtnEcuSQVBH_tn!{V)V9o2NaRh^XJP2-0cq*#11T;_O^s*xubr5jY76Pr
zGHmi;V8RmXb96vHTA|0n(9#dq4klNE$$kAo(*>Bh#Ov?qfW}4Q%Mx=+Q$YdzPKSlz
z*#waC_DLXe!ekKnWEzP4GF^y)ff*WWV8<@ig+&LLyIL3Ic5ru?VUYm~!{-?wZRci!
z$d$9ej?aXSa$VC+%}mcIsfTz0tb2k13&W9FAhqYfYV!*!;~Bo`f~FY2@{9Bsn4p$J
zLq-q9_Bnbi3>#*H^nU=88|Hx6d*^`cO)X(KrdN^(9TbCT?=oOusxK{wXLz6ob_Lko
z5UDu^3{0>{0S$(M?QhWs`3{s}!Q2V@EDXoNR!pA@vS=-sTrdw5Mlijg2snbO?UX(w
zsu(WlvoLI`p9j*~J|E;psOhkH|D+E!1>&S1`Ya6Z7JyXWSqvhNF9DIWR)ENvD?#Kc
zF!^j1h&^K?h+G6F4{riF30%#dG=P`P=M6w5b3MaV0~Usbn?b6t9R-oEj>1)cL#X}(
zR?X04$inamtnBx7kmCLuaK(!a;YP1C1R2e+-jIdi*)5Q=)6<0+SQze47X~#}L0xEL
zSo5)-;i_SA3A{FKGJ@7o9}uQ}gP8WmkcDBxT#z~E4}-|ZhlODk&Riq7)r*b5R<AT-
zVR#Kz_WmkJaq~40x#b3kY`X~}H{1nluP-Tux5C~S6=bF$hEQf2m%uyT$Bd!wYBz>k
z)oTp4YO*m4!{mD)BR78ok;lJ*4F;_d*@95K3!?adF$=?au(F0W5m2kCzD)$?i-!o+
z&mpSc8nZCW0joPX1*H1!6u9C(6SzC3n1J0e%Y=pDDOg$iJdonq^WchiBNQKmC_Zk&
z!mt>mte)Z8Mv&@P8%4lzQ^4@hq$C^GdYERxz?z(qo{Z=-&o#|2EkWX+GA&^EZfaVQ
zl87w&(X4`Do;ftgc9??Qx6c&r;v=Rk46`<atX)`t6-2GP3U}*MgtFHVjUP=}7*<~c
zDf|5uMD~9JJGCe|BOT_>>1O%GNRB#U2DN&V8QjhtW)N4Hu`slL2N|<`x+nt+L;ddQ
zqOb_Kk5K&-qWZNN3&X}4Aa$1xgUDxx;fj0A;YLp~2OB-ZoP}Z0F_5xNk3i(HN1_Z2
zOsD~~$2=FFre1;qs2-F~t|QF43o+}lISa$OCm>Unw~8^aFzjv>gSoQB0&a1a1=!*V
z7Ay>l+d<0aEdi06mcSKnL@3@4QM}iJg<-`~kg~VC#6aUMjk`grlMtg&uPhLwebX%~
zt6+hA#1a~+t(I^XbX$U5Fwv5QVb>mzp`V|F$o3Z?Gr=X!CWPW05XJi}Ss1>&04du(
zLp+v&h2iuJahT`sBUC?ysD5q9!Z35WI0FmA(d{7e=5}!g1}3wV)Z(JlV)NX5@IWlX
z3@dMRp&Ql=%+m|za!E^{u(Alr%uUTstt>WSIA>+a&}+-W@BwVj^oe|2?#v9Atf%uY
z<T9&ov}IxV2a;emG|El|4Gkyf7p26PF#NWL8^N&I#**QMJp+>oL$8flep*^FcoEE6
z8wMs&!_BpfVWACZ4#~BQVYv+p!@R>FS8oH8mkxv6o>}2q$?(<2B&9UBz%>ZE7{t&x
zDY1C^e_k#Xz27!041d7tw;coN{c#*bZa4|j8(fkNTD+B7#IVrTrKE^quJiOdZmuAo
zMmuMQb~_V>{dO)4OC4DlzTE|>HgXN{3pR+ibSWu<=yGM)Y-flmxYLe>Vb^_-E#Dr9
zGfeO2<MLs8WIz2bAD1-KQwMO+xbJmiVQ6>=G8N&5CI`6545u9#m`xbwI9P(_vhwp%
z^GaNUau{Aam@<5HfQQU|hv{#5xy;12yRk6z`~X?F2TXST1Q|Ttk&jC@V7?<L^om_`
zaspBq9=fnFd;>``8@ZM->~sVz*xm1F;9ACT)RBc@%P)`-pMHbLKflEp7+5URiV|~E
zL1Xi-ISeP9Oc~BOP2bDQrOWiwW%?UlE_1onZY&I|{(#b39%!Dm*%`^Q+b&=i7=CtP
zU;<e*(HUgvbY~WZSFI8ZEDY1yBp4W&AR%eOu*o?bG!0+G(CP{av8yhS5PRza4l%op
zZY&Ik+CUnc4uHsSV6y)(h~0GzM1D94BEOskkv(%H89-^O-_?bo)s2A(nlgX7PTw=1
zOQ!z6D+|MtxsnVl49|9e6oOnf*$w2%nQkl$M?QjNmVE+|8^C1iXApbA7Z5q;JBWPo
z7evnbFA2+Q_uSyw_=y`h8^3a6Vc6az#lXTavj;@3?U8~i)??^)hpV3G4pu$gorU4S
zH;}p+Q)L)f7}iXcVPIem_G8%RKD|+ZOSrzl+tZI>g*Rqyz2gp90cFUr#Djs!lHr@X
zp@|zP;(}94Ai?X(FvEj^$pw*aCwah=oh!pU4;F?6KUEl5SPp<lh7Uhg7#LVhk`jwE
zlj9ktc!Ba#X7Y6P6<mr;kG!S_2y@vnz3`eoL72;m>7Cc~iS67r%nZN0rhgRVQf9j2
zHGSd=F2(vUUMwsVet``IlOMq3f!`pJ34cK3gFh+^3`|JwnB$G)!bRRJ3@^5*fu=OJ
zsbMLij(Nj8z0U{a=?C5@o~}<xEplbp;e+DqKi){THTkeGG;9Z1umDU>I1gf90Fw(Y
zfY=|v<bsPJ_Jm6yasil}a8-?gh2_CjHKb5l=LZR;cu;0ZDovZNzk*AW>5m^Iw3_@O
zq1E9J4Xr8ukkI<(2MMh{e-@SnH$cW7xCtT`+y;>c?tsVz_rT;MkON+v(_mm>_;3!i
z>HdJ0gM-5cwhfF2m=CZuur)9@uoWmYFdbknP*6}%n7{~v2N)+X6%;IBUcmf;eF5VF
z#siEC7!4X26$B<Q8eCv{z%qfcfw6(9L7Q;`qrw3;kn9G=1OtNuj17zl2?h!Z8#pI0
zEnrI6z#1@t=>n6(2gV0X(*s1gWHdi8Iy_)qz`THI0@DYM1I!P&9Rd~zG%!tIy};VQ
zrl6p(fw_TQ;eg;3$?esmT&isK6Ra5+bQo9|Do!ylfJQk=QWzN$KwimZWB{f13mHrd
zCZHDFStbThbE4-Ogtqtyp?&<A!Qv6I%nTD4SQrvIn8D_}*viac!N9_BMUe$8{~(lw
z!GVE=!KR3XK>=i5F_^ArDCh(;7+ks`^c5)GFoT5wRA6{KWMS}OU}50d$I1}Gz`}4t
zn4O^nlno8o8B`cp81j7>7*Ze$5y0ePH2zK>28J|dMh1JXtC1iDpi>3(7#SEGL_xfI
z1_oAN1_l+l00RR^feHfyg9AvO0mAnK$s_SW1~h;TU|^7g>WA@()qen_AGG(%6lwri
z0BRvI4qy<2xF`UsAI66{zyP|_9>fQE0GSW+fPp0BE>(s)r~x1WkdYt_AO~y!ai9(Y
z8Gy_O8Sp?7qF^0VKa3C4e*nZl(vQps>0cnt0P;Tr!x5+f3#1_iiuo}xv_P0(5@Zg@
zK@Mm>Lgs@Ed>{u_&JgAYiBcFJrk?>#KLazwesG+F4N!y_Py#am%7+=y0Ae8d2$>Jk
zpP&rUzX_@z#y^h3Lk#s8E`k^UvIlIS8iX(55Ajg~ln;^zg$Qh8H;504B4j>D{{^Ue
zSEzm%AEX|nzaDm$2uJ{A05TtBzz3)SQBVV5{91qPQ3MW3q!2>pgUy2;F47G#ubu&R
z+6c%2AQvGg5|D$C`5*%}XhK3{JH!A67$2q|IRrrZk@+C~uoGUMg7w!kFu(+01|Ww3
z$N*$M$N<<8Fzf-4D1q^b)ek!&Mh~RFo{@n8CP1tKup@^8Kn5@}Fu?f4>IWZ5#K6E%
z69Br)nvsD4CIB;F0wjdNQ3nbEWIiYazy}yHFfh!AIsnEeRzLW(BL)VBg8`tktQi>?
zU;@M%06rUufq~%})B!L)O#cBi4<PeF9)KOB#2r`<i9?tG%m4up11S|F^Fao{PFgY#
zgy@IyLE1ox7&*~_LJ*k`(hoa{DW)E308D^b17JrrHAD5o_%QtoKnx@gAoD>EfSu%2
zzYJ;sOaP=0<O5_4ARi#}K?cB%db$MF597o1e?TkPkoh3}(4(O08Gb?yfC_*U9oPYA
zakv194>ACDR+K^zBnn`Bm;;d2gFS$zA99pbJp+Rq)BuP8q`n6^06Ecs3_#|C9AE%F
zYpMvUAI2xv0T)2}LG{mEr~zOBXq<r@06lCA93mhGAoD>EV6cREX(LoWj1O}_14J6G
zADIu*-(U%?|1Urd011Hfzzjex`9Kap=7S7a0Cm7)sD2n9rXO}53WyKVkIV<@-(U%?
z|Gz;E*Z?&UqyZEH$OR9`0AxPM00%3Oa~T-Kf+1-D#)s)g4l$5^WIjlLffXqHL2W&#
z0R>P4VFm<%7|<vI8Gy_O8F0WF;(%DFei$F54dj6Y=wU`6K1e?@AEaNQ-VS2GET{nr
zP(DZl$N*#?gA73CgACXJRlggmAI692M~-uleq=sKf4zY{!~xHs2Eh0*1Hh>VDFl%D
zAOj4b&1AI@NEE>MF#X6DVsSt{!v?4U_D}<0e3${qJ_Z?p%m+EZ!4cwt7^r?2AEqBU
z(Sr0N^Ys|(85k0v1~fwrfbn4lAU85W1|ai64uG8|wj8P-#)s)gE;m5>k@<Sy`rj4e
zgL6;=5}<sT0fb621~-U)hEPZp!1yrz$jx?;1CaUkARlai8lVF;0LF(IkN`Cw#0MFG
z%m?X*9rzXr)eqx?)PoW+a<&8MN8;BrfDC}02v-9&0LCZ60I+`8iE#^{`eA&Se&iqr
zIRL@0X8;=jJ5ug2)BqSCW&nXy3_o%1B~(A`1Ui_0<PZZn0L}-MKcEm0@PvdhR~RG?
zVSIuHFhD#|0M)Mp)eqyt^dkj11IPg|J}CWxLtp{a02`<QFh0xx<ZJ^n0GSW+zyYX!
zKd62fpMd^)aCrhU-~rTt0;mBnKFoj(pbh>=1rahIq<?}RBm_4@^~3lu{m4x?kOv_A
zdPsc_GGKu}#DH5+17LiZ0SX`nk^_+WApHjdAo`iZAyEk9gS3Hi0X)tb7{E~g=7ZuN
zqyS`qLLkHd9jE~?K1d#9zy`F+1ep)ge<2v6KLV;B#)s*Lx(^)Upb!A@LH2_MKn5s;
zKny5_8UW+N41fd~B*Z`lAoD@`4MHLMS3>o}_%Qv*wI@h_03)>i2Pps<&=3YO;0e?K
z7#}1L3IS+U0d_FR0AxN${{g7}|4{ufK1}}yi1Bd!AE5Sw1waOD2#2VUh=9Z)j1My)
z0mMK`1IT=kegW_h69a<{R6mRl(gyOt1&Hxr`#>JJ01khsfgl4OKn;k78UW+N3?Nh&
zG(<scD1qvS@nQPGi4JNX$N}}p0$>L~4VVNq-~p5mGvEQle7Fyg`5^rVq9F<nLiNM=
zF#TYS2nRs(A5;KrKn%oyS1<#he3$`P5)oJfNFJnLAP&rBkcfmtA&d`_2SouW)q_-k
z_<o@JA6WooKmybNZ>Rw<K1c(|07T^h$;ZfikbZ@Dkns!*Wl;SvK1@GKT>>h9kp(~o
zEPxu&4>bVBhZ%s}0s_S$G9RSh02-%jp!#8an0{mr*Mkf|762L005#wO)BqSCW&m=@
z2hxws2kBps2nhkEC`c5*_%QuQX`mil6e0;gDx)Nb0h%xapnRACnE4o@9wZNPz=UK7
z-yf<U#s|rRq7dpo25|WU@&Q5sQk{N)8c+x|0LF(I@DgG^*xexgF#e<{1_m`228NJM
z$U%=wq5K9Ye+QJm0LnjI4-#NwU`Sx&1RMDZ#OG#UD2Rmcd7~K^)VLWK7@{G30}!8w
zfx!TJ>UAWPzW~b5hVh|?`Zh!PutR=lL-`I1A?DR@h6+4@3LJ;>3l>8Z{DJZ(K>6A+
z3=C>K3=9XL{3Iy<!4io2YAF8z^uXm_C?9qJ^CBo8dJuCx!(pfZ>_p~gP<{jS1l@m7
zKI~*&;aG?RU?=RFK>4tfcEh3k1n9}TZ6H1`1A_weY~Q(1KIE)l(AkSnfdZ(4b5MQ-
zl>Y(BZ-DZZ;usjzco`T3c0+vZ4dqKf`B6~50+e3|<!eCsi=cc15Fb?jUw{f&fCNB?
zbVB(KP`*$+#6k}!-v!FQu?OOSTqyqmln+XzDIfxzq8Kn{Nb2JeGbSMW8M@=KPmw%;
z&a0e{hvZ`zA7nNt8xhKe7g8ZE_z2Yx<HPhjK*t~8*$BNp7f6E`Ae{hl0E`ba-~n2T
z2$>Hm2R>v#^m{<{!}u`$3qa*RNC`*)l#kIzxh7<RWEmKWpa#JBAoZXSKrZ<}`jPn{
z2W-fO=${1D597o13xLXhkP?sp$N=;v)qxz4ECa(Xr~xoONIl2_1!%2eWIo6N289s)
zPoVl?e3<@v<l%LY1CaS313nZ%3}8=$L;;KsGvERAcxDhEq#v0N(tn`>qTd0kAI1l%
zR{_O8a-4$<K<0xC5U7M0-~%-P#)lfffLwWj^ds{@`V*k~6QTNHe29L~_&?;-I(Q;f
zK;nZ8XlR5uARlS~j1MsY+H!$XAP0aAg7U%on;`n9!SqA<VEv%{HvugbBlAH92(&^B
zSOzr!#s?b!y152T{{<vINdJR&i2j{W{V+aAe?2G>VNQ!dG=LO<4d{aK&%q3U^1mcv
zp94bf8-hXvnGZ6Lp&MeJV-j@yA0_~@5ab|a4cH7&fEtjV1WA-IKC${8p!)lgpyU5A
z0hj?BKn!Rcf*gR%2l?Pb55xzHpbmiXLE1nbXh0kNM&^U`7eL!=+v}kQzyx3h5DI|_
zPy_Bm^~3lu{RfZ|F~|eRe2@bIW<oqr{|;&ZOaNxUB_4<Z5Fca!j4zQ4sf=DgD;qT^
z{{xh7k<7pVb3Did7c@S|JfzC0o*^)qfq@S+2?d?|T@2;J=57zd_|U1?|4=?`YE>i!
zq8~Oh>Imh-W;(;5eAvWgC5#WAh^%K|SPB(@O(b51@?rCWU!i>1JfBP|)Iu$g{}>qT
zpnTXgTo#lMn^o(D@?o=N>!Ez`q!%dvUx5n1X0d)k`LIbT)ij8Out_E_C?7UwR0!q6
z=76R^`LHRS15iF}ism_#51MfS+0Ve24zU0>g<=Bb!)8PhpnTX2M>muYo3NM<<-;Z*
z_N6m0$T2oBz~&P!Liw=yfhSP)@bQ0^42T0@<M(<{K5RJN8_I_buXjNCu+j3BP(Ez*
z`wEl~8_X8TgqRN-oYsZ%H#mU(&%odX6@U#M7ee{4vEZptK5T4v50noZs(lCL!-ig^
zvLF`1MpE6OeAvin7L@N$554Q64=Ml~x!efl!v-R+L;0|Q#UD^UY@ARk8)6}B+)oS2
zhYjP|K>4s?xi~1l9yZLj5Gnv0Hah|3!$!eALiw;!EvX!cg|I;?Hz@xCbPy^T%7=|1
zO^5PfV?vi8{CWo17|&aX00V5yhAkIj0c;3H3(AKLsdz&9uo03ZC?7WB(E#Pc1~Aq`
z`LF?r8(@At1H%F600Ubd#6sABfhCj=>;I=f`LO<cEtC)Ip3j2vVcqS0P(G~p`~k{`
z^@hds85sCL?Y{-k-mNW2fRTX#)?1B-@?o9NhI~-AVqkzZ!xzEip{?9AP(G}Y`Uc8}
zwfXo9Ao^iVIFAAbhI&xZ3v1Ej7eGP))<9^1@uBtoDkvXTU0;CmVb$+<C?8gt$rnP*
zgVimbP=4fcNXZ#l$WRY1`#-FP2xLMPyj&0A*FyO{yCM8ODE~H;KOf59xCbJ?0m?tT
z55hkH<xhr=(OiP^A3^zV3hN;*>^KF{z*Gd`2V92mrJ(#hP`);luksus?+WFYLiv$U
z{>~Q=`79`ZI&^@b7|K_C1(9#4hYC!F3QU3WufK&T*b3$U{0`y2gYtQPK=}N{5C@n1
zg7CGW{KHVb2b3@N8zP?%<yZcL@ar3(0wK(xnwf!N3Y6c<4&kqW@@H{D_&cEd7;XrE
zAC!Nc2f{xO<(q>N76Svr3n+gkl>ZmXKLY9L)HCpvKzy)E3Sxi)lz&JX!Z(HTzeD++
zQ2rlTh<qxPKT#gSpA6*-DM9!Lp!_0r2>%0=e^3*|uV-LjFNHY3NDCyuz@QA}uZ8l1
zp!_#belwJ>X9Q6{8_M4b<sX9b=NUufA3^y~Od$L(Q2u2zMo|BUfq|n8;((v#5CxJ@
zzM2JuuLI@pf%0vj{3=U`ydRX`X$9fuL;25aAp8|j{x2y1B$WTx7CipN!0;3*AZicM
zz*G)#&<s}y-yF(c1LcQ6`Qe@r`5Y)e!wbT%hVqp`4MzqBhJGmDA`l|K2+F?`4DEk!
zf(m>Hfhaf+<zIoe6j>@D4tfFQD?<4^c@XuMP`+$Fgzo|6R~A6{F;M>9VhBGU%C{>6
zmA|0t=b!>zWe^1&Q2t9Oe-@Pgx*Q_E3d--Pgz)!4`99SU{&^^WOAUm756V}rh44Q@
z`8oA<5CO(Yh!4A=d_gE*5$ZryDE}*zZwBS-H$wCWL;25pA^avN|3p88zZuHkKM}$|
z4dvI%PJ#$9R6!hI2<6K{`K(hR@@7yz+jI!u70Q=f1mQ<Q`Q=L?{46N{2$Ww1<^Nv=
zk?(@=>lyslK?LSN1Q?b;`OBevm-P_&tx&$tW(fZ*l)rongnu8(@7)UFe}wY&w?p`U
zq5StdA$<O7kcaCT7(VWX2&jPt7#ISfLm)O#e(!OJyg!t`2FlNX@^7Dj$hSfH$3e$N
zF)%PJhVl<zfXE+!@+V$}@V|oipy*r*6%eWcxrl)wA9NHH0|SE=l)vN_M1w1oZ+#EK
zuYmIXq5R2EKF=eF{7NX_63RaU<rhHt-)f-s|NmzY4ZO7w2k1P9@YSGv{TC3v9h9H>
z2Evbm@(VzxA2Bd6^g;P8Q2r_?|L13j`h!ru+7}4_ZY{L_PlpN!)Il7u>@P%t29&?(
zAB67$<=<j~3~^LI`R}0oDNz1THi-OcDBp=4!aoV+n{z_=x9gzwKMyZN;1g8AJSd+P
zDqk-Ek(Y+@MFk;z11LXC1j6@#^0T4*WGKH`6e3>)<xiG?@LTJl0xX#jfyq$*&MXLj
z9+a<<4dJhW@-1^9{Jl{Ai987ZER_GN6~cc8<tueU_}`#>p>7Djo}&R0<ddKRQc(U!
z&_PrT3=BF@e%N$~216*nY6gUF3+4ZS@_nHEhItVAOep^_ls_BFKffF-U(c`^D)4*-
zSb*U?ls{)3gwNavao`3hUmnW$Sr3sngYsjc)8WBT{{Kx7`3@*wWHW@n6v|KB0^-**
zFzkg2tO5%#Fx-an`*wm9Ffe?F^1tqa@Ku{24szcI;fF%`SE2kID4%IRM7{&c-v;Gx
zhw{II_@Msh3#fqHVTcBXW{3qLP`)LUpA6-PLiwD>AnKc;eA!bF{$?nDHI#n}%D)EX
zKZEjDoMnQ{e~Yz1EWCLRVt_7`&vG8Z_k{9aK>1ZrzRDGd{3IxUC6vDm%3p8|B7XwP
zcfJAPzl8Gd-(UjypMl{oRABZ^hyuk{h=Y7SLipBD{t_rZ4$7DQ0+FwT@|nLw_|u^L
z)lmLADBtV{ME*FG@Ab1DB5)rn!1@cq{|V(EfbxafAP#Ez4Usp1@?Zaf@V%gX*S`>c
zCX|2mAB5iu<y-%U@E1Y(m+PTpuN$BO9xRZN!^2R%pE!hn3Cdpv<v)V*n<OCeU!eRa
z(hxp#JH)}uWgvVZC|^Pj!dHXx>zlM80%lNw6defP9m>C}3*kpW`M&xPeioGP3f)yw
z3gusd@~1-i97YiJ3!(feQ2uTRzn<YXRNxpyfWg5SqTw=>pJf8!KZNoxL;3HZd{tA3
z{1+%c#|*+}>wtv7Gz$n{7RpcXgYb>P{CWn47qJilZ?FIZgIFAd9|z^HgYpZZe8qT(
zd?%DYArZn~0Oh~Vfbh3K`Ieaw{&6T@EepcG2I7P2fB$TVz!Q)FBLl-0DE|wT|04$?
z&)5m^QC2R5F9_u?hw^2he4adrye5<%2j%NS`KkF3dGAhW{Xee=B2W)iunEea4dq7_
zL*zF>`HP|a(@_5R5{UeBDE~<rgfH3!aq!Lx2;T|HUk=^%64?c<|M{Wg<3&&f`i&3`
zT~PiMD1R}O&(sW&KM3WAK>639{Ix9*`7cm@NgISO(G77>K?j8I)(x!=zxF@`%ApEA
z_CfglP=0hjgue#Le*op*f%4@iK;-#)AQmi`1mUYg`3jREe19n4U@C;4SPvC&ngbE2
zfb!QZfbb_k`G=wW`A~l65{UdRD8FX~gnt3bSJ(#OKZWwWw?p_ppnQ>?5Pm&NFT};6
zPyv1@{|J<?2<7kJ4bh+v<(KS*@ExK2FHn9Yl<&MBB3}mOFN5+|K>6V(!1DDB2cQCp
zC&2;?ccJ|AryzX(K8OPy&O`X>Q2rz+-x12+djTRJ0_BHXg77n-e4{H6ekGJ21?JZ?
zF!VwNzJdi980JFx?$;n1)<gNO*CG5fQ2qoc{~wgk@)#m7)(>&87L;!d<+nolfl$86
zQ)Wp2KOZWf^9EwTd??=-baW;I1H(BeKLg5t4&`5f@;N3zEadnG(QgFhZ~YG8`$PG&
z`5=?Ubx=O5APc1aUjr4`BLq=!1j_dkhVY+3`G=r<v5621O++B_K~Vl{Q3yXD%IB4V
z@RvaOictPRD8F2m1ycXtgbF;6gJ^gG<-bsb@c%&hU(_Ldj!6&)=xRXtGEn{oEeKx+
z%IDCA@NJ>|YAD|i%J0yrhbV}H3Vbwx@C%@PNka&~1Il-S@@GQ%OTgDoF)(a`^4W|b
z>W@SDk!BG76Da?aHH0rb8R7wj`Y?!q3sfK*%Fl)JcS8AHQ2vB)i2AKi{-Ov7|IuWK
zfgDi~{%<H>7s?l&0+BC)@{OSU`kPPzFQ`CVG{k@$D1SDT-wx%+#X#hjLHQ}M5dI-3
z|3CtS{|(B&0_6)$g*ZSn2_mlv;ny=1K?R&30u0BJAqwK4{4c2x{v;@$BMrh|2j$O)
z@{dCK`_duu*P;ANEf7BEG>8MDXF>RCV17LV!x5-J1XzH9VdWx-f&wW2(_#p}9?HMD
z1j3&T<?}6v@RvdPQ&&Rx+o1fNQ2sF}UwRcp{x*mYs{fBb1>S=M7#SEYuZAdKm=1BV
z_!<ab5X!G#2jMF~`BOGR_*ziD*A58Z49XYT1K~SE`C0oR{NU-(`u`nNAQ`Hl{{Tcm
z1(dIO3c~M%^5;PL)1dsnQ2r7q|M_W%`mIpD>lq0D7?ghx%0D+9TK`v`g(!FpRZw^y
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%0AO<i$
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
F767BLygL8@

delta 263609
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%0A;f3{6kR6a_*8Zm;cY=-I@)YE|
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%0A-`E2r9BR<>7nSvi;8V`bQI
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

diff --git a/pymolfile/molfile/_libpymolfile.so.dSYM/Contents/Resources/DWARF/_libpymolfile.so b/pymolfile/molfile/_libpymolfile.so.dSYM/Contents/Resources/DWARF/_libpymolfile.so
index d66b822ee7cd1186e842d1ef8fbd9025fe68b6cb..2cf277f2af4c15b5ae011b054defceabfd4abbcc 100644
GIT binary patch
literal 184310
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

literal 77982
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
J1~wAR1OUb76r2D6

diff --git a/pymolfile/molfile/_numpy_swig.so b/pymolfile/molfile/_numpy_swig.so
new file mode 100755
index 0000000000000000000000000000000000000000..e5907947a6fe702d7cf89b0bce5fbfeaa9ae1da5
GIT binary patch
literal 44744
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
H9?1s)M&uSF

literal 0
HcmV?d00001

diff --git a/pymolfile/molfile/compile-numind.sh b/pymolfile/molfile/compile-numind.sh
new file mode 100644
index 0000000..680fa4e
--- /dev/null
+++ b/pymolfile/molfile/compile-numind.sh
@@ -0,0 +1,2 @@
+Cython -a numind.pyx --cplus
+g++ -fPIC -Wall -Wextra -Wunused-function -shared -I/labEnv3/lib/python3.6/site-packages/numpy/core/include/ numind.cpp -o numind.so -I/labEnv3/include/python3.6m/ -L/usr/local/Cellar/python3/3.6.1/Frameworks/Python.framework/Versions/3.6/lib -lpython3.6
diff --git a/pymolfile/molfile/compile-signedintbuf.sh b/pymolfile/molfile/compile-signedintbuf.sh
new file mode 100644
index 0000000..8f50f77
--- /dev/null
+++ b/pymolfile/molfile/compile-signedintbuf.sh
@@ -0,0 +1,2 @@
+swig -py3 -Wall -c++ -python numpy_swig.i
+g++ -fPIC -Wall -Wextra -Wunused-function -shared -I/labEnv3/lib/python3.6/site-packages/numpy/core/include/ -I. numpy_swig_wrap.cxx -o _numpy_swig.so -I/labEnv3/include/python3.6m/ -L/usr/local/Cellar/python3/3.6.1/Frameworks/Python.framework/Versions/3.6/lib -lpython3.6
diff --git a/pymolfile/molfile/compile.sh b/pymolfile/molfile/compile.sh
index f25b34a..dd69ffe 100644
--- a/pymolfile/molfile/compile.sh
+++ b/pymolfile/molfile/compile.sh
@@ -1,2 +1,2 @@
 swig -py3 -Wall -c++ -python libpymolfile.i
-g++ -fPIC -Wall -Wextra -Wunused-function -shared -I/labEnv3/lib/python3.6/site-packages/numpy/core/include/ -I. libpymolfile_wrap.cxx pymolfile.c -o _libpymolfile.so -Ivmd_molfile_plugins/include/ -Ilib/ -L. lib/libmolfile_plugin.a  -I/labEnv3/include/python3.6m/ -L/usr/local/Cellar/python3/3.6.1/Frameworks/Python.framework/Versions/3.6/lib -lpython3.6
+g++ -fPIC -Wall -Wextra -Wunused-function -shared -g -I/labEnv3/lib/python3.6/site-packages/numpy/core/include/ -I. libpymolfile_wrap.cxx pymolfile.c -o _libpymolfile.so -Ivmd_molfile_plugins/include/ -Ilib/ -L. lib/libmolfile_plugin.a  -I/labEnv3/include/python3.6m/ -L/usr/local/Cellar/python3/3.6.1/Frameworks/Python.framework/Versions/3.6/lib -lpython3.6
diff --git a/pymolfile/molfile/libpymolfile-backup2.i b/pymolfile/molfile/libpymolfile-backup2.i
new file mode 100644
index 0000000..52b95f6
--- /dev/null
+++ b/pymolfile/molfile/libpymolfile-backup2.i
@@ -0,0 +1,576 @@
+/* -*- C -*-  (not really, but good for syntax highlighting) */
+/* SWIG interface for libpymolfile of VMD molfile_plugins
+   Copyright (c) 2017 Berk Onat <b.onat@warwick.ac.uk>
+   Published under UIUC LICENSE
+
+   swig -c++ -python -outdir . molfile/libpymolfile.i
+*/
+%define DOCSTRING
+"
+:Author:  Berk Onat <b.onat@warwick.ac.uk>
+:Year:    2017
+:Licence: UIUC LICENSE
+
+
+"
+%enddef
+
+%module(docstring=DOCSTRING) libpymolfile
+
+
+%{
+/* Python SWIG interface to libpymolfile
+   Copyright (c) 2017 Berk Onat <b.onat@warwick.ac.uk>
+   Published under BSD LICENSE
+ */
+#define SWIG_FILE_WITH_INIT
+#define __STDC_FORMAT_MACROS
+#include <stdio.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <string.h>
+#include <inttypes.h>
+#include "molfile_plugin.h"
+#include "libmolfile_plugin.h"
+#include "vmdplugin.h"
+#include "pymolfile.h"
+%}
+
+%include "numpy.i"
+
+%init %{
+Py_Initialize();
+import_array();
+%}
+
+
+/* 
+  Wrapping only high-level plugin functions to register VMD 
+  plugins and to retrive the data through molfile_plugin interface.
+
+  Only modifing call signatures. This will help one to access functions 
+  without dealing with pointers from python.
+*/
+
+
+/* plugin status codes for error handling */
+enum { pluginOK, pluginNOINIT, pluginCLOSE, pluginNOMEM, 
+       pluginENDOFFILE, pluginFILENOTFOUND, pluginFORMATERROR };
+
+
+/* Definition of molfile_atoms_t from molfile_plugin.h */
+%inline %{
+
+/*
+struct MolAtoms {
+    char name[16]; 
+    char type[16]; 
+    char resname[8];
+    int resid;
+    char segid[8];
+    char chain[2];
+    char altloc[2];
+    char insertion[2];
+    float occupancy;
+    float bfactor;
+    float mass;
+    float charge;
+    float radius;
+    float atomicnumber;
+    float ctnumber;
+};
+
+void del_plugin_structure(PyObject* pymolfile_atoms){
+    delete (MolAtoms*)PyCapsule_GetPointer(pymolfile_atoms, "plugin_structure");
+}
+
+static PyObject* alloc_plugin_structure(PyObject *self, PyObject *args) {
+    return PyCapsule_New((void*)new MolAtoms(), "plugin_structure", del_plugin_structure);
+}
+*/
+void del_plugin(PyObject* pymolfile_plugin){
+    delete (MolObject*)PyCapsule_GetPointer(pymolfile_plugin, "plugin");
+}
+
+void del_atoms(PyObject* pymolfile_atoms){
+    delete (PyObject*)PyCapsule_GetPointer(pymolfile_atoms, "atoms");
+}
+
+void del_atomname(PyObject* pymolfile_atoms){
+    delete (PyObject*)PyCapsule_GetPointer(pymolfile_atoms, "atomname");
+}
+
+
+static PyObject* alloc_plugin(PyObject *self, PyObject *args) {
+    return PyCapsule_New((void*)new MolObject(), "plugin_handle", del_plugin);
+}
+
+%}
+
+
+/* pymolfile.c 
+   initialize and finalize molfile plugins
+*/
+%feature("autodoc", "0") molfile_plugin_list;
+extern molfile_plugin_t** molfile_plugin_list(int maxsize);
+
+%feature("autodoc", "0") molfile_init;
+extern int molfile_init(void);
+
+%feature("autodoc", "0") molfile_finish;
+extern int molfile_finish(void);
+
+%feature("autodoc", "0") get_plugin;
+extern molfile_plugin_t* get_plugin(molfile_plugin_t** plugin_list, int plugin_no);
+
+%feature("autodoc", "0") molfile_plugin_info;
+%exception molfile_plugin_info {
+  $action
+  if (PyErr_Occurred()) SWIG_fail;
+}
+%inline %{
+PyObject * molfile_plugin_info(molfile_plugin_t** plugin_list, int plugin_no) {
+    molfile_plugin_t *plugin;
+    int *plugno = &plugin_no;
+    int has_readstructure = 0;
+    int has_readbonds = 0;
+    int has_readangles = 0;
+    int has_writestructure = 0;
+    int has_writebonds = 0;
+    int has_writeangles = 0;
+    int has_readnexttimestep = 0;
+    int has_writetimestep = 0;
+    int plugin_list_size = sizeof(plugin_list) / sizeof(molfile_plugin_t**);
+    if (plugno==NULL || plugin_no<0){
+      PyErr_Format(PyExc_IOError, "[%d] Error: molfile plugin handle no should be given, be positive value and should not exceed the list length'%d'. You set '%d'", pluginNOINIT, plugin_list_size, plugin_no);
+      return 0;
+    }
+    plugin = plugin_list[plugin_no];
+    if(plugin==NULL || !plugin->open_file_read){
+      PyErr_Format(PyExc_IOError, "[%d] Error: molfile plugin '%d' is not initialized.", pluginNOINIT, plugin_no);
+      return 0;
+    }
+    if (plugin->read_structure) has_readstructure = 1;
+    if (plugin->read_bonds) has_readbonds = 1;
+    if (plugin->read_angles) has_readangles = 1;
+    if (plugin->read_next_timestep) has_readnexttimestep = 1;
+    if (plugin->write_structure) has_writestructure = 1;
+    if (plugin->write_bonds) has_writebonds = 1;
+    if (plugin->write_angles) has_writeangles = 1;
+    if (plugin->write_timestep) has_writetimestep = 1;
+    PyObject *tuple = PyTuple_New(17);
+    PyTuple_SET_ITEM(tuple, 0, PyString_FromString(plugin->filename_extension));
+    PyTuple_SET_ITEM(tuple, 1, PyString_FromString(plugin->name));
+    PyTuple_SET_ITEM(tuple, 2, PyInt_FromLong((long)has_readstructure));
+    PyTuple_SET_ITEM(tuple, 3, PyInt_FromLong((long)has_readbonds));
+    PyTuple_SET_ITEM(tuple, 4, PyInt_FromLong((long)has_readangles));
+    PyTuple_SET_ITEM(tuple, 5, PyInt_FromLong((long)has_readnexttimestep));
+    PyTuple_SET_ITEM(tuple, 6, PyInt_FromLong((long)has_writestructure));
+    PyTuple_SET_ITEM(tuple, 7, PyInt_FromLong((long)has_writebonds));
+    PyTuple_SET_ITEM(tuple, 8, PyInt_FromLong((long)has_writeangles));
+    PyTuple_SET_ITEM(tuple, 9, PyInt_FromLong((long)has_writetimestep));
+    PyTuple_SET_ITEM(tuple, 10, PyString_FromString(plugin->prettyname));
+    PyTuple_SET_ITEM(tuple, 11, PyString_FromString(plugin->type));
+    PyTuple_SET_ITEM(tuple, 12, PyString_FromString(plugin->author));
+    PyTuple_SET_ITEM(tuple, 13, PyInt_FromLong((long)plugin->majorv));
+    PyTuple_SET_ITEM(tuple, 14, PyInt_FromLong((long)plugin->minorv));
+    PyTuple_SET_ITEM(tuple, 15, PyInt_FromLong((long)plugin->abiversion));
+    PyTuple_SET_ITEM(tuple, 16, PyInt_FromLong((long)plugin->is_reentrant));
+    return tuple;
+  }
+%}
+
+
+%feature("autodoc", "0") my_open_file_read;
+%rename (open_file_read) my_open_file_read;
+%exception my_open_file_read {
+  $action
+  if (PyErr_Occurred()) SWIG_fail;
+}
+%inline %{
+PyObject * my_open_file_read(molfile_plugin_t* plugin, char* fname, char* ftype, int natoms) {
+    if (PyType_Ready(&MolObjectType) < 0)
+        return NULL;
+    PyTypeObject *type = &MolObjectType;
+    /*plugin_handle = PyCapsule_New((void*)new MolObject(), "plugin", del_plugin); */
+    /*MolObject* plugin_c = new MolObject;*/
+    MolObject *plugin_c;
+    plugin_c = (MolObject *)type->tp_alloc(type, 0);
+    /*PyObject * plugin_c = MolObject_new(&MolObjectType, args, kwds);*/
+    plugin_c->plugin = plugin;
+    plugin_c->file_handle = plugin->open_file_read(fname, ftype, &natoms);
+    plugin_c->natoms = natoms;
+    /* PyCapsule_SetPointer(plugin_handle, &plugin_c); */
+    /* PyObject* plugin_handle = PyCapsule_New((void*)plugin_c, "plugin", del_plugin); */
+    PyObject* plugin_handle = (PyObject *)plugin_c;
+    /*if(!plugin_handle) printf("Not assigned\n");*/
+    /*PyObject *tuple = PyTuple_New(2);
+    PyTuple_SET_ITEM(tuple, 0, PyInt_FromLong((long)natoms));
+    PyTuple_SET_ITEM(tuple, 1, plugin_handle);*/
+    return plugin_handle;
+  }
+%}
+
+/*
+%typemap( argout ) ( char **MolfileAtomT_CharArray )
+{
+    // The result variable is the return value from
+    // c_ephcom_read_constants, the number of actual values that are
+    // defined for cnames/values.
+    npy_intp     dims[] = { result };
+    PyArray_Dims newshape_location;
+    PyArray_Dims * newshape = &newshape_location;
+    PyObject * status_check;
+    newshape->len = 1;
+    newshape->ptr = dims;
+
+    // resize array$argnum to actual size needed.
+    // Follow directions at http://www.mail-archive.com/numpy-discussion@scipy.org/msg13013.html
+    status_check = PyArray_Resize( (PyArrayObject *) array$argnum, newshape, 0, NPY_CORDER );
+    if ( !status_check )
+        SWIG_fail;
+    Py_DECREF( status_check );
+    $result = SWIG_Python_AppendOutput( $result, array$argnum );
+}
+%typemap( freearg ) ( char **MolfileAtomT_CharArray )
+{
+    free( $1 );
+}
+*/
+
+/*
+#define DIM 3
+typedef int imatrix[DIM][DIM];
+typedef int ivec[DIM];
+typedef float fmatrix[DIM][DIM];
+typedef float fvec[DIM];
+*/
+
+/* Reading from xdr files */
+/*
+%apply (float INPLACE_ARRAY2[ANY][ANY]) {(matrix box)}
+%apply (int DIM1, int DIM2, float* INPLACE_ARRAY2) {(int natoms,  int _DIM,  float *x),
+                                                    (int vnatoms, int v_DIM, float *v),
+                                                    (int fnatoms, int f_DIM, float *f)}
+*/
+/*
+%apply (int INPLACE_IARRAY2[ANY][ANY]) {(imatrix intdata)}
+%apply (float INPLACE_FARRAY2[ANY][ANY]) {(fmatrix floatdata)}
+%apply (int DIM1, int* INPLACE_IARRAY2) {(int rnatoms, int* MolAtom_resid)}
+%apply (int DIM1, float* INPLACE_FARRAY2) {(int mnatoms, float* MolAtom_mass),
+                                           (int anatoms, float* MolAtom_atomicnumber)}
+*/
+/*
+%inline %{
+int structure_read(molfile_plugin_t* plugin, void* fhandle, int *options, 
+                   int* natoms, char** MolAtom_name, 
+                   int* natoms, char** MolAtom_type, 
+                   int* natoms, char** MolAtom_resname,
+                   int* natoms, int**  MolAtom_resid, 
+                   int* natoms, char** MolAtom_segid,
+                   int* natoms, char** MolAtom_chain,
+                   int* natoms, char** MolAtom_altloc,
+                   int* natoms, char** MolAtom_insertion,
+                   int* natoms, float** MolAtom_occupancy,
+                   int* natoms, float** MolAtom_bfactor,
+                   int* natoms, float** MolAtom_mass,
+                   int* natoms, float** MolAtom_charge,
+                   int* natoms, float** MolAtom_radius,
+                   int* natoms, float** MolAtom_atomicnumber,
+                   int* natoms, float** MolAtom_ctnumber) {
+    molfile_atom_t* atoms;
+    atoms = (molfile_atom_t *)calloc(natoms,sizeof(molfile_atom_t));
+    plugin->read_structure(fhandle, options, atoms);
+    MolAtom_name = (char **)malloc(natoms,sizeof(char*));
+    MolAtom_type = (char **)malloc(natoms,sizeof(char*));
+    MolAtom_resname = (char **)malloc(natoms,sizeof(char*));
+    MolAtom_resid = (int **)malloc(natoms,sizeof(int*));
+%}
+*/
+/*
+%inline %{
+int structure_read(molfile_plugin_t* plugin, void* fhandle, int *options, 
+                   int natoms, char** MolAtom_name, 
+                   int tnatoms, char** MolAtom_type, 
+                   int rnatoms, int*  MolAtom_resid, 
+                   int mnatoms, float* MolAtom_mass,
+                   int anatoms, float* MolAtom_atomicnumber) {
+    int i;
+    molfile_atom_t* atoms;
+    molfile_atom_t atm;
+    atoms = (molfile_atom_t *)calloc(natoms,sizeof(molfile_atom_t));
+    plugin->read_structure(fhandle, options, atoms);
+    if(atoms == NULL) { free(atoms); return 1; }
+    if(atoms->type == NULL || atoms->name == NULL){ free(atoms); return 1; }
+    MolAtom_name = (char **)malloc(natoms,sizeof(char*));
+    MolAtom_type = (char **)malloc(natoms,sizeof(char*));
+    MolAtom_resid = (int *)malloc(natoms,sizeof(int));
+    MolAtom_mass = (float *)malloc(natoms,sizeof(float));
+    MolAtom_atomicnumber = (float *)malloc(natoms,sizeof(float));
+    for (i=0;i<natoms;i++){
+        atm = atoms[i];
+        MolAtom_name[i] = atm.name;
+        MolAtom_type[i] = atm.type;
+        MolAtom_resid[i] = atm.resid;
+        MolAtom_mass[i] = atm.mass;
+        MolAtom_atomicnumber[i] = atm.atomicnumber;
+    }
+    return 0;
+    }
+%}
+*/
+
+%feature("autodoc", "0") my_read_structure;
+%rename (read_structure) my_read_structure;
+extern PyObject * my_read_structure(PyObject* molpack);
+
+%feature("autodoc", "0") get_structure;
+extern PyObject * get_structure(PyObject* molpack);
+
+/*
+%feature("autodoc", "0") my_read_structure;
+%rename (read_structure) my_read_structure;
+%exception my_read_structure {
+  $action
+  if (PyErr_Occurred()) SWIG_fail;
+}
+%inline %{
+PyObject * my_read_structure(PyObject* molpack) {
+    int options = 0;
+    int i;
+    molfile_plugin_t* plugin;
+    void* file_handle;
+    molfile_atom_t* atoms;
+    int numatoms, status;
+    char** atom_names;
+    char** atom_types;
+    PyObject *npatoms = NULL; */
+    /*MolObject* plugin_handle = (MolObject*)PyCapsule_GetPointer(molpack, "plugin");*/
+/*    MolObject* plugin_handle = (MolObject*)molpack;
+    plugin = plugin_handle->plugin;
+    file_handle = plugin_handle->file_handle;
+    numatoms = plugin_handle->natoms;
+    atoms = (molfile_atom_t *)calloc(numatoms,sizeof(molfile_atom_t));
+    printf("Test1\n");
+    status = plugin->read_structure(file_handle, &options, atoms);
+    printf("Test2 %d\n",status);
+    if (status!=0){
+      PyErr_Format(PyExc_IOError, "Error copying molfile_atom_t into Python.");
+      return NULL;
+    }
+    printf("Test3\n");
+    npy_intp natoms[1] = { numatoms };
+    
+    PyArrayObject* oresid;
+    int64_t* cresid;
+    
+    int typenum;
+    int nd = 1;
+    npy_intp dims[1] = { numatoms }; */
+    /*dims[0] = numatoms;*/
+/*    oresid = (PyArrayObject*) PyArray_SimpleNew(nd, dims, NPY_INT64);
+    npy_intp* n = PyArray_DIMS(oresid);
+    printf("dimensions %ld\n", n[0]);
+    cresid = (int64_t*) PyArray_DATA(oresid);
+    
+    PyObject* npatomresid = NULL;
+    char** MolAtom_name = (char **)malloc(numatoms*sizeof(char*));
+    char** MolAtom_type = (char **)malloc(numatoms*sizeof(char*));
+    int64_t* MolAtom_resid = NULL; */
+    /*int64_t* MolAtom_resid = (int64_t *)malloc(numatoms*sizeof(int64_t));*/
+/*    float* MolAtom_mass = (float *)malloc(numatoms*sizeof(float));
+    float* MolAtom_atomicnumber = (float *)malloc(numatoms*sizeof(float));
+    for (i=0;i<numatoms;i++){
+        MolAtom_name[i] = atoms[i].name;
+        MolAtom_type[i] = atoms[i].type;
+        cresid[i] = (int64_t) atoms[i].resid;
+        MolAtom_mass[i] = atoms[i].mass;
+        MolAtom_atomicnumber[i] = atoms[i].atomicnumber;
+    } */
+    /*Py_DECREF( obj );*/
+    /*npy_intp dims[3];*/ /* PyArray_AsCArray is for ndim <= 3 */
+/*    PyArray_Descr *descr;
+    npatoms = PyArray_SimpleNewFromData(1, natoms, NPY_USERDEF, atoms);
+    printf("Test4 numatoms=%d\n", numatoms);
+    PyObject* npatomname = NULL;
+    npatomname = PyArray_SimpleNewFromData(1, natoms, NPY_STRING, MolAtom_name[0]);
+    PyObject* npatomtype = PyArray_SimpleNewFromData(1, natoms, NPY_STRING, MolAtom_type); */
+    /*PyObject* npatomresname = PyArray_SimpleNewFromData(1, natoms, NPY_STRING, atoms->resname);*/
+    /*PyObject* npatomsegid = PyArray_SimpleNewFromData(1, natoms, NPY_STRING, atoms->segid);*/
+    /*PyObject* npatomchain = PyArray_SimpleNewFromData(1, natoms, NPY_STRING, atoms->chain);*/
+    /*PyObject* npatomaltloc = PyArray_SimpleNewFromData(1, natoms, NPY_STRING, atoms->altloc);*/
+    /*PyObject* npatominsert = PyArray_SimpleNewFromData(1, natoms, NPY_STRING, atoms->insertion);*/
+    /*PyObject* npatomoccup = PyArray_SimpleNewFromData(1, natoms, NPY_FLOAT64, &atoms->occupancy);*/
+    /*PyObject* npatombfact = PyArray_SimpleNewFromData(1, natoms, NPY_FLOAT64, &atoms->bfactor);*/
+/*    PyObject* npatommass = PyArray_SimpleNewFromData(1, natoms, NPY_FLOAT64, MolAtom_mass);    */
+    /*PyObject* npatomcharge = PyArray_SimpleNewFromData(1, natoms, NPY_FLOAT64, &atoms->charge);*/
+    /*PyObject* npatomradius = PyArray_SimpleNewFromData(1, natoms, NPY_FLOAT64, &atoms->radius);*/
+/*    PyObject* npatomicnumber = PyArray_SimpleNewFromData(1, natoms, NPY_INT64, MolAtom_atomicnumber); */
+    /*if (npatomname==NULL   || npatomtype==NULL     || npatomresname==NULL || 
+        npatomresid==NULL  || npatomsegid==NULL    || npatomchain==NULL   )
+    {
+      free(atoms);
+      Py_XDECREF(npatomname);   Py_XDECREF(npatomtype);
+      Py_XDECREF(npatomresname); Py_XDECREF(npatomresid);  Py_XDECREF(npatomsegid); 
+      Py_XDECREF(npatomchain);   Py_XDECREF(npatomaltloc); Py_XDECREF(npatominsert); 
+      Py_XDECREF(npatomoccup);   Py_XDECREF(npatombfact);  Py_XDECREF(npatommass); 
+      Py_XDECREF(npatomcharge);  Py_XDECREF(npatomradius); Py_XDECREF(npatomicnumber); 
+      PyErr_Format(PyExc_IOError, "Error copying molfile_atom_t into Python.");
+      return 0;
+    }
+    PyArray_BASE(npatomname) = PyCObject_FromVoidPtr(*atoms, free);
+    PyArray_BASE(npatomtype) = PyCObject_FromVoidPtr(*atoms, free);
+    PyArray_BASE(npatomresname) = PyCObject_FromVoidPtr(*atoms, free); 
+    PyArray_BASE(npatomresid) = PyCObject_FromVoidPtr(*atoms, free);  
+    PyArray_BASE(npatomsegid) = PyCObject_FromVoidPtr(*atoms, free); 
+    PyArray_BASE(npatomchain) = PyCObject_FromVoidPtr(*atoms, free);   
+    PyArray_BASE(npatomaltloc) = PyCObject_FromVoidPtr(*atoms, free); 
+    PyArray_BASE(npatominsert) = PyCObject_FromVoidPtr(*atoms, free); 
+    PyArray_BASE(npatomoccup) = PyCObject_FromVoidPtr(*atoms, free);   
+    PyArray_BASE(npatombfact) = PyCObject_FromVoidPtr(*atoms, free);  
+    PyArray_BASE(npatommass) = PyCObject_FromVoidPtr(*atoms, free); 
+    PyArray_BASE(npatomcharge) = PyCObject_FromVoidPtr(*atoms, free);  
+    PyArray_BASE(npatomradius) = PyCObject_FromVoidPtr(*atoms, free); 
+    PyArray_BASE(npatomicnumber) = PyCObject_FromVoidPtr(*atoms, free);
+    PyArray_BASE(npatoms) = PyCObject_FromVoidPtr(atoms, free); 
+    PyArray_BASE((PyArrayObject *)npatoms) = PyCapsule_New(atoms, "atoms", del_atoms);*/
+    /*PyArray_BASE((PyArrayObject *)npatoms); */
+/*    printf("Test4-2\n"); */
+    /*PyObject* Py_MolAtom_name = PyCapsule_New((void*)MolAtom_name, "atomname", del_atomname);*/
+    /*PyObject* Py_MolAtom_name;
+    Py_INCREF(Py_MolAtom_name);*/
+/*    printf("Test4-3\n"); */
+    /*PyArray_SetBaseObject((PyArrayObject *)npatomname, Py_MolAtom_name);*/
+    /*PyArray_SetBaseObject((PyArrayObject *)npatomtype, MolAtom_type);
+    PyArray_SetBaseObject((PyArrayObject *)npatomresid, MolAtom_resid);
+    PyArray_SetBaseObject((PyArrayObject *)npatommass, MolAtom_mass);
+    PyArray_SetBaseObject((PyArrayObject *)npatomicnumber, MolAtom_atomicnumber); */
+/*    printf("Test5\n");
+    PyObject *tuple = PyTuple_New(2);
+    PyTuple_SET_ITEM(tuple, 0, PyInt_FromLong((long)natoms));
+    printf("Test6\n");
+    PyTuple_SET_ITEM(tuple, 1, npatomname); */
+    /*PyTuple_SET_ITEM(tuple, 2, npatomtype);
+    PyTuple_SET_ITEM(tuple, 3, npatomresid);
+    PyTuple_SET_ITEM(tuple, 4, npatommass);
+    PyTuple_SET_ITEM(tuple, 5, npatomicnumber);
+    PyObject* vars = PyDict_New();
+    printf("Test7\n");
+    PyDict_SetItemString( vars, "name", npatomname ); */
+/*    printf("Test8\n"); */
+    /*PyDict_SetItemString( vars, "resid", npatomresid ); */
+    /*return Py_BuildValue("O", oresid); */
+    /*return PyArray_FromArray(oresid, PyArray_DESCR(oresid), 0);*/
+/*    return 0;
+  }
+%}
+*/
+
+
+/* 
+   python wrappers for functions 
+   and structure data in  molfile_plugin.h
+*/
+
+/* molfile_atom_t
+
+  char name[16];      required atom name string             
+  char type[16];      required atom type string             
+  char resname[8];    required residue name string          
+  int resid;          required integer residue ID           
+  char segid[8];      required segment name string, or ""   
+  char chain[2];      required chain name, or ""            
+  char altloc[2];     optional PDB alternate location code  
+  char insertion[2];  optional PDB insertion code           
+  float occupancy;    optional occupancy value              
+  float bfactor;      optional B-factor value               
+  float mass;         optional mass value                   
+  float charge;       optional charge value                 
+  float radius;       optional radius value                 
+  int atomicnumber;   optional element atomic number        
+  int ctnumber;       mae ct block, 0-based, including meta 
+*/
+
+
+/* molfile_plugin_t */
+
+/*
+%feature("autodoc", "0") molfile_open_file_read;
+%rename (open_file_read) molfile_open_file_read;
+%exception molfile_open_file_read {
+  $action
+  if (PyErr_Occurred()) SWIG_fail;
+}
+%inline %{
+PyObject * molfile_open_file_read(molfile_plugin_t* plugin, char *fname, int natoms) {
+    int *plugno = &plugin_no;
+    return plugin;
+  }
+%}
+*/
+/*
+  void *(* open_file_read)(const char *filepath, const char *filetype, 
+      int *natoms);
+  void (* close_file_read)(void *);
+  int (*read_structure)(void *, int *optflags, molfile_atom_t *atoms);
+  int (*read_bonds)(void *, int *nbonds, int **from, int **to, float **bondorder, 
+                    int **bondtype, int *nbondtypes, char ***bondtypename);
+  int (* read_next_timestep)(void *, int natoms, molfile_timestep_t *);
+  void *(* open_file_write)(const char *filepath, const char *filetype, 
+      int natoms);
+  int (* write_structure)(void *, int optflags, const molfile_atom_t *atoms);
+  int (* write_timestep)(void *, const molfile_timestep_t *);
+  void (* close_file_write)(void *);
+  int (* read_molecule_metadata)(void *, molfile_metadata_t **metadata);
+  int (* write_bonds)(void *, int nbonds, int *from, int *to, float *bondorder, 
+                     int *bondtype, int nbondtypes, char **bondtypename);
+  int (* read_angles)(void *handle, int *numangles, int **angles, int **angletypes,
+                      int *numangletypes, char ***angletypenames, int *numdihedrals,
+                      int **dihedrals, int **dihedraltypes, int *numdihedraltypes,
+                      char ***dihedraltypenames, int *numimpropers, int **impropers,        
+                      int **impropertypes, int *numimpropertypes, char ***impropertypenames,
+                      int *numcterms, int **cterms, int *ctermcols, int *ctermrows);
+  int (* write_angles)(void *handle, int numangles, const int *angles, const int *angletypes,
+                       int numangletypes, const char **angletypenames, int numdihedrals,
+                       const int *dihedrals, const int *dihedraltypes, int numdihedraltypes,
+                       const char **dihedraltypenames, int numimpropers, 
+                       const int *impropers, const int *impropertypes, int numimpropertypes,
+                       const char **impropertypenames, int numcterms,  const int *cterms, 
+                       int ctermcols, int ctermrows);
+  int (* read_timestep)(void *, int natoms, molfile_timestep_t *,
+                        molfile_qm_metadata_t *, molfile_qm_timestep_t *);
+  int (* read_timestep_metadata)(void *, molfile_timestep_metadata_t *);
+  int (* read_timestep2)(void *, molfile_ssize_t index, molfile_timestep_t *);
+  molfile_ssize_t (* read_times)( void *,
+                                  molfile_ssize_t start,
+                                  molfile_ssize_t count,
+                                  double * times );
+  int (* cons_fputs)(const int, const char*);
+*/
+
+
+/* molfile_timestep_t
+
+  float *coords;         coordinates of all atoms, arranged xyzxyzxyz   
+  float *velocities;     space for velocities of all atoms; same layout 
+  float A, B, C, alpha, beta, gamma; 
+  double physical_time;  physical time point associated with this frame 
+
+  double total_energy;
+  double potential_energy;
+  double kinetic_energy;
+  double extended_energy;
+  double force_energy;
+  double total_pressure;
+*/
+
+
+/*  molfile_timestep_metadata_t
+
+    unsigned int count;                   total # timesteps; -1 if unknown 
+    unsigned int avg_bytes_per_timestep;  bytes per timestep                
+    int has_velocities;                   if timesteps have velocities     
+*/
+
+
+
diff --git a/pymolfile/molfile/libpymolfile-new.i b/pymolfile/molfile/libpymolfile-new.i
new file mode 100644
index 0000000..65670f3
--- /dev/null
+++ b/pymolfile/molfile/libpymolfile-new.i
@@ -0,0 +1,578 @@
+/* -*- C -*-  (not really, but good for syntax highlighting) */
+/* SWIG interface for libpymolfile of VMD molfile_plugins
+   Copyright (c) 2017 Berk Onat <b.onat@warwick.ac.uk>
+   Published under UIUC LICENSE
+
+   swig -c++ -python -outdir . molfile/libpymolfile.i
+*/
+%define DOCSTRING
+"
+:Author:  Berk Onat <b.onat@warwick.ac.uk>
+:Year:    2017
+:Licence: UIUC LICENSE
+
+
+"
+%enddef
+
+%module(docstring=DOCSTRING) libpymolfile
+
+
+%{
+/* Python SWIG interface to libpymolfile
+   Copyright (c) 2017 Berk Onat <b.onat@warwick.ac.uk>
+   Published under BSD LICENSE
+ */
+#define SWIG_FILE_WITH_INIT
+#define __STDC_FORMAT_MACROS
+#include <stdio.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <string.h>
+#include <inttypes.h>
+#include "molfile_plugin.h"
+#include "libmolfile_plugin.h"
+#include "vmdplugin.h"
+#include "pymolfile.h"
+%}
+
+%include "numpy.i"
+
+%init %{
+Py_Initialize();
+import_array();
+%}
+
+
+/* 
+  Wrapping only high-level plugin functions to register VMD 
+  plugins and to retrive the data through molfile_plugin interface.
+
+  Only modifing call signatures. This will help one to access functions 
+  without dealing with pointers from python.
+*/
+
+
+/* plugin status codes for error handling */
+enum { pluginOK, pluginNOINIT, pluginCLOSE, pluginNOMEM, 
+       pluginENDOFFILE, pluginFILENOTFOUND, pluginFORMATERROR };
+
+
+/* Definition of molfile_atoms_t from molfile_plugin.h */
+%inline %{
+
+/*
+struct MolAtoms {
+    char name[16]; 
+    char type[16]; 
+    char resname[8];
+    int resid;
+    char segid[8];
+    char chain[2];
+    char altloc[2];
+    char insertion[2];
+    float occupancy;
+    float bfactor;
+    float mass;
+    float charge;
+    float radius;
+    float atomicnumber;
+    float ctnumber;
+};
+
+void del_plugin_structure(PyObject* pymolfile_atoms){
+    delete (MolAtoms*)PyCapsule_GetPointer(pymolfile_atoms, "plugin_structure");
+}
+
+static PyObject* alloc_plugin_structure(PyObject *self, PyObject *args) {
+    return PyCapsule_New((void*)new MolAtoms(), "plugin_structure", del_plugin_structure);
+}
+*/
+void del_plugin(PyObject* pymolfile_plugin){
+    delete (MolObject*)PyCapsule_GetPointer(pymolfile_plugin, "plugin");
+}
+
+void del_atoms(PyObject* pymolfile_atoms){
+    delete (PyObject*)PyCapsule_GetPointer(pymolfile_atoms, "atoms");
+}
+
+void del_atomname(PyObject* pymolfile_atoms){
+    delete (PyObject*)PyCapsule_GetPointer(pymolfile_atoms, "atomname");
+}
+
+
+static PyObject* alloc_plugin(PyObject *self, PyObject *args) {
+    return PyCapsule_New((void*)new MolObject(), "plugin_handle", del_plugin);
+}
+
+%}
+
+
+/* pymolfile.c 
+   initialize and finalize molfile plugins
+*/
+%feature("autodoc", "0") molfile_plugin_list;
+extern molfile_plugin_t** molfile_plugin_list(int maxsize);
+
+%feature("autodoc", "0") molfile_init;
+extern int molfile_init(void);
+
+%feature("autodoc", "0") molfile_finish;
+extern int molfile_finish(void);
+
+%feature("autodoc", "0") get_plugin;
+extern molfile_plugin_t* get_plugin(molfile_plugin_t** plugin_list, int plugin_no);
+
+%feature("autodoc", "0") molfile_plugin_info;
+%exception molfile_plugin_info {
+  $action
+  if (PyErr_Occurred()) SWIG_fail;
+}
+%inline %{
+PyObject * molfile_plugin_info(molfile_plugin_t** plugin_list, int plugin_no) {
+    molfile_plugin_t *plugin;
+    int *plugno = &plugin_no;
+    int has_readstructure = 0;
+    int has_readbonds = 0;
+    int has_readangles = 0;
+    int has_writestructure = 0;
+    int has_writebonds = 0;
+    int has_writeangles = 0;
+    int has_readnexttimestep = 0;
+    int has_writetimestep = 0;
+    int plugin_list_size = sizeof(plugin_list) / sizeof(molfile_plugin_t**);
+    if (plugno==NULL || plugin_no<0){
+      PyErr_Format(PyExc_IOError, "[%d] Error: molfile plugin handle no should be given, be positive value and should not exceed the list length'%d'. You set '%d'", pluginNOINIT, plugin_list_size, plugin_no);
+      return 0;
+    }
+    plugin = plugin_list[plugin_no];
+    if(plugin==NULL || !plugin->open_file_read){
+      PyErr_Format(PyExc_IOError, "[%d] Error: molfile plugin '%d' is not initialized.", pluginNOINIT, plugin_no);
+      return 0;
+    }
+    if (plugin->read_structure) has_readstructure = 1;
+    if (plugin->read_bonds) has_readbonds = 1;
+    if (plugin->read_angles) has_readangles = 1;
+    if (plugin->read_next_timestep) has_readnexttimestep = 1;
+    if (plugin->write_structure) has_writestructure = 1;
+    if (plugin->write_bonds) has_writebonds = 1;
+    if (plugin->write_angles) has_writeangles = 1;
+    if (plugin->write_timestep) has_writetimestep = 1;
+    PyObject *tuple = PyTuple_New(17);
+    PyTuple_SET_ITEM(tuple, 0, PyString_FromString(plugin->filename_extension));
+    PyTuple_SET_ITEM(tuple, 1, PyString_FromString(plugin->name));
+    PyTuple_SET_ITEM(tuple, 2, PyInt_FromLong((long)has_readstructure));
+    PyTuple_SET_ITEM(tuple, 3, PyInt_FromLong((long)has_readbonds));
+    PyTuple_SET_ITEM(tuple, 4, PyInt_FromLong((long)has_readangles));
+    PyTuple_SET_ITEM(tuple, 5, PyInt_FromLong((long)has_readnexttimestep));
+    PyTuple_SET_ITEM(tuple, 6, PyInt_FromLong((long)has_writestructure));
+    PyTuple_SET_ITEM(tuple, 7, PyInt_FromLong((long)has_writebonds));
+    PyTuple_SET_ITEM(tuple, 8, PyInt_FromLong((long)has_writeangles));
+    PyTuple_SET_ITEM(tuple, 9, PyInt_FromLong((long)has_writetimestep));
+    PyTuple_SET_ITEM(tuple, 10, PyString_FromString(plugin->prettyname));
+    PyTuple_SET_ITEM(tuple, 11, PyString_FromString(plugin->type));
+    PyTuple_SET_ITEM(tuple, 12, PyString_FromString(plugin->author));
+    PyTuple_SET_ITEM(tuple, 13, PyInt_FromLong((long)plugin->majorv));
+    PyTuple_SET_ITEM(tuple, 14, PyInt_FromLong((long)plugin->minorv));
+    PyTuple_SET_ITEM(tuple, 15, PyInt_FromLong((long)plugin->abiversion));
+    PyTuple_SET_ITEM(tuple, 16, PyInt_FromLong((long)plugin->is_reentrant));
+    return tuple;
+  }
+%}
+
+
+%feature("autodoc", "0") my_open_file_read;
+%rename (open_file_read) my_open_file_read;
+%exception my_open_file_read {
+  $action
+  if (PyErr_Occurred()) SWIG_fail;
+}
+%inline %{
+PyObject * my_open_file_read(molfile_plugin_t* plugin, char* fname, char* ftype, int natoms) {
+    if (PyType_Ready(&MolObjectType) < 0)
+        return NULL;
+    PyTypeObject *type = &MolObjectType;
+    /*plugin_handle = PyCapsule_New((void*)new MolObject(), "plugin", del_plugin); */
+    /*MolObject* plugin_c = new MolObject;*/
+    MolObject *plugin_c;
+    plugin_c = (MolObject *)type->tp_alloc(type, 0);
+    /*PyObject * plugin_c = MolObject_new(&MolObjectType, args, kwds);*/
+    plugin_c->plugin = plugin;
+    plugin_c->file_handle = plugin->open_file_read(fname, ftype, &natoms);
+    plugin_c->natoms = natoms;
+    /* PyCapsule_SetPointer(plugin_handle, &plugin_c); */
+    /* PyObject* plugin_handle = PyCapsule_New((void*)plugin_c, "plugin", del_plugin); */
+    PyObject* plugin_handle = (PyObject *)plugin_c;
+    /*if(!plugin_handle) printf("Not assigned\n");*/
+    /*PyObject *tuple = PyTuple_New(2);
+    PyTuple_SET_ITEM(tuple, 0, PyInt_FromLong((long)natoms));
+    PyTuple_SET_ITEM(tuple, 1, plugin_handle);*/
+    return plugin_handle;
+  }
+%}
+
+/*
+%typemap( argout ) ( char **MolfileAtomT_CharArray )
+{
+    // The result variable is the return value from
+    // c_ephcom_read_constants, the number of actual values that are
+    // defined for cnames/values.
+    npy_intp     dims[] = { result };
+    PyArray_Dims newshape_location;
+    PyArray_Dims * newshape = &newshape_location;
+    PyObject * status_check;
+    newshape->len = 1;
+    newshape->ptr = dims;
+
+    // resize array$argnum to actual size needed.
+    // Follow directions at http://www.mail-archive.com/numpy-discussion@scipy.org/msg13013.html
+    status_check = PyArray_Resize( (PyArrayObject *) array$argnum, newshape, 0, NPY_CORDER );
+    if ( !status_check )
+        SWIG_fail;
+    Py_DECREF( status_check );
+    $result = SWIG_Python_AppendOutput( $result, array$argnum );
+}
+%typemap( freearg ) ( char **MolfileAtomT_CharArray )
+{
+    free( $1 );
+}
+*/
+
+/*
+#define DIM 3
+typedef int imatrix[DIM][DIM];
+typedef int ivec[DIM];
+typedef float fmatrix[DIM][DIM];
+typedef float fvec[DIM];
+*/
+
+/* Reading from xdr files */
+/*
+%apply (float INPLACE_ARRAY2[ANY][ANY]) {(matrix box)}
+%apply (int DIM1, int DIM2, float* INPLACE_ARRAY2) {(int natoms,  int _DIM,  float *x),
+                                                    (int vnatoms, int v_DIM, float *v),
+                                                    (int fnatoms, int f_DIM, float *f)}
+*/
+/*
+%apply (int INPLACE_IARRAY2[ANY][ANY]) {(imatrix intdata)}
+%apply (float INPLACE_FARRAY2[ANY][ANY]) {(fmatrix floatdata)}
+%apply (int DIM1, int* INPLACE_IARRAY2) {(int rnatoms, int* MolAtom_resid)}
+%apply (int DIM1, float* INPLACE_FARRAY2) {(int mnatoms, float* MolAtom_mass),
+                                           (int anatoms, float* MolAtom_atomicnumber)}
+*/
+/*
+%inline %{
+int structure_read(molfile_plugin_t* plugin, void* fhandle, int *options, 
+                   int* natoms, char** MolAtom_name, 
+                   int* natoms, char** MolAtom_type, 
+                   int* natoms, char** MolAtom_resname,
+                   int* natoms, int**  MolAtom_resid, 
+                   int* natoms, char** MolAtom_segid,
+                   int* natoms, char** MolAtom_chain,
+                   int* natoms, char** MolAtom_altloc,
+                   int* natoms, char** MolAtom_insertion,
+                   int* natoms, float** MolAtom_occupancy,
+                   int* natoms, float** MolAtom_bfactor,
+                   int* natoms, float** MolAtom_mass,
+                   int* natoms, float** MolAtom_charge,
+                   int* natoms, float** MolAtom_radius,
+                   int* natoms, float** MolAtom_atomicnumber,
+                   int* natoms, float** MolAtom_ctnumber) {
+    molfile_atom_t* atoms;
+    atoms = (molfile_atom_t *)calloc(natoms,sizeof(molfile_atom_t));
+    plugin->read_structure(fhandle, options, atoms);
+    MolAtom_name = (char **)malloc(natoms,sizeof(char*));
+    MolAtom_type = (char **)malloc(natoms,sizeof(char*));
+    MolAtom_resname = (char **)malloc(natoms,sizeof(char*));
+    MolAtom_resid = (int **)malloc(natoms,sizeof(int*));
+%}
+*/
+/*
+%inline %{
+int structure_read(molfile_plugin_t* plugin, void* fhandle, int *options, 
+                   int natoms, char** MolAtom_name, 
+                   int tnatoms, char** MolAtom_type, 
+                   int rnatoms, int*  MolAtom_resid, 
+                   int mnatoms, float* MolAtom_mass,
+                   int anatoms, float* MolAtom_atomicnumber) {
+    int i;
+    molfile_atom_t* atoms;
+    molfile_atom_t atm;
+    atoms = (molfile_atom_t *)calloc(natoms,sizeof(molfile_atom_t));
+    plugin->read_structure(fhandle, options, atoms);
+    if(atoms == NULL) { free(atoms); return 1; }
+    if(atoms->type == NULL || atoms->name == NULL){ free(atoms); return 1; }
+    MolAtom_name = (char **)malloc(natoms,sizeof(char*));
+    MolAtom_type = (char **)malloc(natoms,sizeof(char*));
+    MolAtom_resid = (int *)malloc(natoms,sizeof(int));
+    MolAtom_mass = (float *)malloc(natoms,sizeof(float));
+    MolAtom_atomicnumber = (float *)malloc(natoms,sizeof(float));
+    for (i=0;i<natoms;i++){
+        atm = atoms[i];
+        MolAtom_name[i] = atm.name;
+        MolAtom_type[i] = atm.type;
+        MolAtom_resid[i] = atm.resid;
+        MolAtom_mass[i] = atm.mass;
+        MolAtom_atomicnumber[i] = atm.atomicnumber;
+    }
+    return 0;
+    }
+%}
+*/
+
+%feature("autodoc", "0") my_read_structure;
+%rename (read_structure) my_read_structure;
+extern PyObject * my_read_structure(PyObject* molpack);
+
+%feature("autodoc", "0") get_structure;
+extern PyObject * get_structure(PyObject* molpack);
+
+%feature("autodoc", "0") read_fill_structure;
+extern PyObject * read_fill_structure(PyObject* molpack, PyObject* prototype);
+/*
+%feature("autodoc", "0") my_read_structure;
+%rename (read_structure) my_read_structure;
+%exception my_read_structure {
+  $action
+  if (PyErr_Occurred()) SWIG_fail;
+}
+%inline %{
+PyObject * my_read_structure(PyObject* molpack) {
+    int options = 0;
+    int i;
+    molfile_plugin_t* plugin;
+    void* file_handle;
+    molfile_atom_t* atoms;
+    int numatoms, status;
+    char** atom_names;
+    char** atom_types;
+    PyObject *npatoms = NULL; */
+    /*MolObject* plugin_handle = (MolObject*)PyCapsule_GetPointer(molpack, "plugin");*/
+/*    MolObject* plugin_handle = (MolObject*)molpack;
+    plugin = plugin_handle->plugin;
+    file_handle = plugin_handle->file_handle;
+    numatoms = plugin_handle->natoms;
+    atoms = (molfile_atom_t *)calloc(numatoms,sizeof(molfile_atom_t));
+    printf("Test1\n");
+    status = plugin->read_structure(file_handle, &options, atoms);
+    printf("Test2 %d\n",status);
+    if (status!=0){
+      PyErr_Format(PyExc_IOError, "Error copying molfile_atom_t into Python.");
+      return NULL;
+    }
+    printf("Test3\n");
+    npy_intp natoms[1] = { numatoms };
+    
+    PyArrayObject* oresid;
+    int64_t* cresid;
+    
+    int typenum;
+    int nd = 1;
+    npy_intp dims[1] = { numatoms }; */
+    /*dims[0] = numatoms;*/
+/*    oresid = (PyArrayObject*) PyArray_SimpleNew(nd, dims, NPY_INT64);
+    npy_intp* n = PyArray_DIMS(oresid);
+    printf("dimensions %ld\n", n[0]);
+    cresid = (int64_t*) PyArray_DATA(oresid);
+    
+    PyObject* npatomresid = NULL;
+    char** MolAtom_name = (char **)malloc(numatoms*sizeof(char*));
+    char** MolAtom_type = (char **)malloc(numatoms*sizeof(char*));
+    int64_t* MolAtom_resid = NULL; */
+    /*int64_t* MolAtom_resid = (int64_t *)malloc(numatoms*sizeof(int64_t));*/
+/*    float* MolAtom_mass = (float *)malloc(numatoms*sizeof(float));
+    float* MolAtom_atomicnumber = (float *)malloc(numatoms*sizeof(float));
+    for (i=0;i<numatoms;i++){
+        MolAtom_name[i] = atoms[i].name;
+        MolAtom_type[i] = atoms[i].type;
+        cresid[i] = (int64_t) atoms[i].resid;
+        MolAtom_mass[i] = atoms[i].mass;
+        MolAtom_atomicnumber[i] = atoms[i].atomicnumber;
+    } */
+    /*Py_DECREF( obj );*/
+    /*npy_intp dims[3];*/ /* PyArray_AsCArray is for ndim <= 3 */
+/*    PyArray_Descr *descr;
+    npatoms = PyArray_SimpleNewFromData(1, natoms, NPY_USERDEF, atoms);
+    printf("Test4 numatoms=%d\n", numatoms);
+    PyObject* npatomname = NULL;
+    npatomname = PyArray_SimpleNewFromData(1, natoms, NPY_STRING, MolAtom_name[0]);
+    PyObject* npatomtype = PyArray_SimpleNewFromData(1, natoms, NPY_STRING, MolAtom_type); */
+    /*PyObject* npatomresname = PyArray_SimpleNewFromData(1, natoms, NPY_STRING, atoms->resname);*/
+    /*PyObject* npatomsegid = PyArray_SimpleNewFromData(1, natoms, NPY_STRING, atoms->segid);*/
+    /*PyObject* npatomchain = PyArray_SimpleNewFromData(1, natoms, NPY_STRING, atoms->chain);*/
+    /*PyObject* npatomaltloc = PyArray_SimpleNewFromData(1, natoms, NPY_STRING, atoms->altloc);*/
+    /*PyObject* npatominsert = PyArray_SimpleNewFromData(1, natoms, NPY_STRING, atoms->insertion);*/
+    /*PyObject* npatomoccup = PyArray_SimpleNewFromData(1, natoms, NPY_FLOAT64, &atoms->occupancy);*/
+    /*PyObject* npatombfact = PyArray_SimpleNewFromData(1, natoms, NPY_FLOAT64, &atoms->bfactor);*/
+/*    PyObject* npatommass = PyArray_SimpleNewFromData(1, natoms, NPY_FLOAT64, MolAtom_mass);    */
+    /*PyObject* npatomcharge = PyArray_SimpleNewFromData(1, natoms, NPY_FLOAT64, &atoms->charge);*/
+    /*PyObject* npatomradius = PyArray_SimpleNewFromData(1, natoms, NPY_FLOAT64, &atoms->radius);*/
+/*    PyObject* npatomicnumber = PyArray_SimpleNewFromData(1, natoms, NPY_INT64, MolAtom_atomicnumber); */
+    /*if (npatomname==NULL   || npatomtype==NULL     || npatomresname==NULL || 
+        npatomresid==NULL  || npatomsegid==NULL    || npatomchain==NULL   )
+    {
+      free(atoms);
+      Py_XDECREF(npatomname);   Py_XDECREF(npatomtype);
+      Py_XDECREF(npatomresname); Py_XDECREF(npatomresid);  Py_XDECREF(npatomsegid); 
+      Py_XDECREF(npatomchain);   Py_XDECREF(npatomaltloc); Py_XDECREF(npatominsert); 
+      Py_XDECREF(npatomoccup);   Py_XDECREF(npatombfact);  Py_XDECREF(npatommass); 
+      Py_XDECREF(npatomcharge);  Py_XDECREF(npatomradius); Py_XDECREF(npatomicnumber); 
+      PyErr_Format(PyExc_IOError, "Error copying molfile_atom_t into Python.");
+      return 0;
+    }
+    PyArray_BASE(npatomname) = PyCObject_FromVoidPtr(*atoms, free);
+    PyArray_BASE(npatomtype) = PyCObject_FromVoidPtr(*atoms, free);
+    PyArray_BASE(npatomresname) = PyCObject_FromVoidPtr(*atoms, free); 
+    PyArray_BASE(npatomresid) = PyCObject_FromVoidPtr(*atoms, free);  
+    PyArray_BASE(npatomsegid) = PyCObject_FromVoidPtr(*atoms, free); 
+    PyArray_BASE(npatomchain) = PyCObject_FromVoidPtr(*atoms, free);   
+    PyArray_BASE(npatomaltloc) = PyCObject_FromVoidPtr(*atoms, free); 
+    PyArray_BASE(npatominsert) = PyCObject_FromVoidPtr(*atoms, free); 
+    PyArray_BASE(npatomoccup) = PyCObject_FromVoidPtr(*atoms, free);   
+    PyArray_BASE(npatombfact) = PyCObject_FromVoidPtr(*atoms, free);  
+    PyArray_BASE(npatommass) = PyCObject_FromVoidPtr(*atoms, free); 
+    PyArray_BASE(npatomcharge) = PyCObject_FromVoidPtr(*atoms, free);  
+    PyArray_BASE(npatomradius) = PyCObject_FromVoidPtr(*atoms, free); 
+    PyArray_BASE(npatomicnumber) = PyCObject_FromVoidPtr(*atoms, free);
+    PyArray_BASE(npatoms) = PyCObject_FromVoidPtr(atoms, free); 
+    PyArray_BASE((PyArrayObject *)npatoms) = PyCapsule_New(atoms, "atoms", del_atoms);*/
+    /*PyArray_BASE((PyArrayObject *)npatoms); */
+/*    printf("Test4-2\n"); */
+    /*PyObject* Py_MolAtom_name = PyCapsule_New((void*)MolAtom_name, "atomname", del_atomname);*/
+    /*PyObject* Py_MolAtom_name;
+    Py_INCREF(Py_MolAtom_name);*/
+/*    printf("Test4-3\n"); */
+    /*PyArray_SetBaseObject((PyArrayObject *)npatomname, Py_MolAtom_name);*/
+    /*PyArray_SetBaseObject((PyArrayObject *)npatomtype, MolAtom_type);
+    PyArray_SetBaseObject((PyArrayObject *)npatomresid, MolAtom_resid);
+    PyArray_SetBaseObject((PyArrayObject *)npatommass, MolAtom_mass);
+    PyArray_SetBaseObject((PyArrayObject *)npatomicnumber, MolAtom_atomicnumber); */
+/*    printf("Test5\n");
+    PyObject *tuple = PyTuple_New(2);
+    PyTuple_SET_ITEM(tuple, 0, PyInt_FromLong((long)natoms));
+    printf("Test6\n");
+    PyTuple_SET_ITEM(tuple, 1, npatomname); */
+    /*PyTuple_SET_ITEM(tuple, 2, npatomtype);
+    PyTuple_SET_ITEM(tuple, 3, npatomresid);
+    PyTuple_SET_ITEM(tuple, 4, npatommass);
+    PyTuple_SET_ITEM(tuple, 5, npatomicnumber);
+    PyObject* vars = PyDict_New();
+    printf("Test7\n");
+    PyDict_SetItemString( vars, "name", npatomname ); */
+/*    printf("Test8\n"); */
+    /*PyDict_SetItemString( vars, "resid", npatomresid ); */
+    /*return Py_BuildValue("O", oresid); */
+    /*return PyArray_FromArray(oresid, PyArray_DESCR(oresid), 0);*/
+/*    return 0;
+  }
+%}
+*/
+
+
+/* 
+   python wrappers for functions 
+   and structure data in  molfile_plugin.h
+*/
+
+/* molfile_atom_t
+
+  char name[16];      required atom name string             
+  char type[16];      required atom type string             
+  char resname[8];    required residue name string          
+  int resid;          required integer residue ID           
+  char segid[8];      required segment name string, or ""   
+  char chain[2];      required chain name, or ""            
+  char altloc[2];     optional PDB alternate location code  
+  char insertion[2];  optional PDB insertion code           
+  float occupancy;    optional occupancy value              
+  float bfactor;      optional B-factor value               
+  float mass;         optional mass value                   
+  float charge;       optional charge value                 
+  float radius;       optional radius value                 
+  int atomicnumber;   optional element atomic number        
+  int ctnumber;       mae ct block, 0-based, including meta 
+*/
+
+
+/* molfile_plugin_t */
+
+/*
+%feature("autodoc", "0") molfile_open_file_read;
+%rename (open_file_read) molfile_open_file_read;
+%exception molfile_open_file_read {
+  $action
+  if (PyErr_Occurred()) SWIG_fail;
+}
+%inline %{
+PyObject * molfile_open_file_read(molfile_plugin_t* plugin, char *fname, int natoms) {
+    int *plugno = &plugin_no;
+    return plugin;
+  }
+%}
+*/
+/*
+  void *(* open_file_read)(const char *filepath, const char *filetype, 
+      int *natoms);
+  void (* close_file_read)(void *);
+  int (*read_structure)(void *, int *optflags, molfile_atom_t *atoms);
+  int (*read_bonds)(void *, int *nbonds, int **from, int **to, float **bondorder, 
+                    int **bondtype, int *nbondtypes, char ***bondtypename);
+  int (* read_next_timestep)(void *, int natoms, molfile_timestep_t *);
+  void *(* open_file_write)(const char *filepath, const char *filetype, 
+      int natoms);
+  int (* write_structure)(void *, int optflags, const molfile_atom_t *atoms);
+  int (* write_timestep)(void *, const molfile_timestep_t *);
+  void (* close_file_write)(void *);
+  int (* read_molecule_metadata)(void *, molfile_metadata_t **metadata);
+  int (* write_bonds)(void *, int nbonds, int *from, int *to, float *bondorder, 
+                     int *bondtype, int nbondtypes, char **bondtypename);
+  int (* read_angles)(void *handle, int *numangles, int **angles, int **angletypes,
+                      int *numangletypes, char ***angletypenames, int *numdihedrals,
+                      int **dihedrals, int **dihedraltypes, int *numdihedraltypes,
+                      char ***dihedraltypenames, int *numimpropers, int **impropers,        
+                      int **impropertypes, int *numimpropertypes, char ***impropertypenames,
+                      int *numcterms, int **cterms, int *ctermcols, int *ctermrows);
+  int (* write_angles)(void *handle, int numangles, const int *angles, const int *angletypes,
+                       int numangletypes, const char **angletypenames, int numdihedrals,
+                       const int *dihedrals, const int *dihedraltypes, int numdihedraltypes,
+                       const char **dihedraltypenames, int numimpropers, 
+                       const int *impropers, const int *impropertypes, int numimpropertypes,
+                       const char **impropertypenames, int numcterms,  const int *cterms, 
+                       int ctermcols, int ctermrows);
+  int (* read_timestep)(void *, int natoms, molfile_timestep_t *,
+                        molfile_qm_metadata_t *, molfile_qm_timestep_t *);
+  int (* read_timestep_metadata)(void *, molfile_timestep_metadata_t *);
+  int (* read_timestep2)(void *, molfile_ssize_t index, molfile_timestep_t *);
+  molfile_ssize_t (* read_times)( void *,
+                                  molfile_ssize_t start,
+                                  molfile_ssize_t count,
+                                  double * times );
+  int (* cons_fputs)(const int, const char*);
+*/
+
+
+/* molfile_timestep_t
+
+  float *coords;         coordinates of all atoms, arranged xyzxyzxyz   
+  float *velocities;     space for velocities of all atoms; same layout 
+  float A, B, C, alpha, beta, gamma; 
+  double physical_time;  physical time point associated with this frame 
+
+  double total_energy;
+  double potential_energy;
+  double kinetic_energy;
+  double extended_energy;
+  double force_energy;
+  double total_pressure;
+*/
+
+
+/*  molfile_timestep_metadata_t
+
+    unsigned int count;                   total # timesteps; -1 if unknown 
+    unsigned int avg_bytes_per_timestep;  bytes per timestep                
+    int has_velocities;                   if timesteps have velocities     
+*/
+
+
+
diff --git a/pymolfile/molfile/libpymolfile.i b/pymolfile/molfile/libpymolfile.i
index b502767..417756e 100644
--- a/pymolfile/molfile/libpymolfile.i
+++ b/pymolfile/molfile/libpymolfile.i
@@ -324,6 +324,15 @@ int structure_read(molfile_plugin_t* plugin, void* fhandle, int *options,
 %rename (read_structure) my_read_structure;
 extern PyObject * my_read_structure(PyObject* molpack);
 
+%feature("autodoc", "0") get_structure;
+extern PyObject * get_structure(PyObject* molpack);
+
+%feature("autodoc", "0") read_fill_structure;
+extern PyObject * read_fill_structure(PyObject* molpack, PyObject* prototype);
+
+%feature("autodoc", "0") print_array_struct;
+extern PyObject* print_array_struct(PyObject* prototype);
+
 /*
 %feature("autodoc", "0") my_read_structure;
 %rename (read_structure) my_read_structure;
diff --git a/pymolfile/molfile/libpymolfile.py b/pymolfile/molfile/libpymolfile.py
index 504cde2..2d4dae8 100644
--- a/pymolfile/molfile/libpymolfile.py
+++ b/pymolfile/molfile/libpymolfile.py
@@ -113,92 +113,6 @@ pluginNOMEM = _libpymolfile.pluginNOMEM
 pluginENDOFFILE = _libpymolfile.pluginENDOFFILE
 pluginFILENOTFOUND = _libpymolfile.pluginFILENOTFOUND
 pluginFORMATERROR = _libpymolfile.pluginFORMATERROR
-class MolAtoms(_object):
-    __swig_setmethods__ = {}
-    __setattr__ = lambda self, name, value: _swig_setattr(self, MolAtoms, name, value)
-    __swig_getmethods__ = {}
-    __getattr__ = lambda self, name: _swig_getattr(self, MolAtoms, name)
-    __repr__ = _swig_repr
-    __swig_setmethods__["name"] = _libpymolfile.MolAtoms_name_set
-    __swig_getmethods__["name"] = _libpymolfile.MolAtoms_name_get
-    if _newclass:
-        name = _swig_property(_libpymolfile.MolAtoms_name_get, _libpymolfile.MolAtoms_name_set)
-    __swig_setmethods__["type"] = _libpymolfile.MolAtoms_type_set
-    __swig_getmethods__["type"] = _libpymolfile.MolAtoms_type_get
-    if _newclass:
-        type = _swig_property(_libpymolfile.MolAtoms_type_get, _libpymolfile.MolAtoms_type_set)
-    __swig_setmethods__["resname"] = _libpymolfile.MolAtoms_resname_set
-    __swig_getmethods__["resname"] = _libpymolfile.MolAtoms_resname_get
-    if _newclass:
-        resname = _swig_property(_libpymolfile.MolAtoms_resname_get, _libpymolfile.MolAtoms_resname_set)
-    __swig_setmethods__["resid"] = _libpymolfile.MolAtoms_resid_set
-    __swig_getmethods__["resid"] = _libpymolfile.MolAtoms_resid_get
-    if _newclass:
-        resid = _swig_property(_libpymolfile.MolAtoms_resid_get, _libpymolfile.MolAtoms_resid_set)
-    __swig_setmethods__["segid"] = _libpymolfile.MolAtoms_segid_set
-    __swig_getmethods__["segid"] = _libpymolfile.MolAtoms_segid_get
-    if _newclass:
-        segid = _swig_property(_libpymolfile.MolAtoms_segid_get, _libpymolfile.MolAtoms_segid_set)
-    __swig_setmethods__["chain"] = _libpymolfile.MolAtoms_chain_set
-    __swig_getmethods__["chain"] = _libpymolfile.MolAtoms_chain_get
-    if _newclass:
-        chain = _swig_property(_libpymolfile.MolAtoms_chain_get, _libpymolfile.MolAtoms_chain_set)
-    __swig_setmethods__["altloc"] = _libpymolfile.MolAtoms_altloc_set
-    __swig_getmethods__["altloc"] = _libpymolfile.MolAtoms_altloc_get
-    if _newclass:
-        altloc = _swig_property(_libpymolfile.MolAtoms_altloc_get, _libpymolfile.MolAtoms_altloc_set)
-    __swig_setmethods__["insertion"] = _libpymolfile.MolAtoms_insertion_set
-    __swig_getmethods__["insertion"] = _libpymolfile.MolAtoms_insertion_get
-    if _newclass:
-        insertion = _swig_property(_libpymolfile.MolAtoms_insertion_get, _libpymolfile.MolAtoms_insertion_set)
-    __swig_setmethods__["occupancy"] = _libpymolfile.MolAtoms_occupancy_set
-    __swig_getmethods__["occupancy"] = _libpymolfile.MolAtoms_occupancy_get
-    if _newclass:
-        occupancy = _swig_property(_libpymolfile.MolAtoms_occupancy_get, _libpymolfile.MolAtoms_occupancy_set)
-    __swig_setmethods__["bfactor"] = _libpymolfile.MolAtoms_bfactor_set
-    __swig_getmethods__["bfactor"] = _libpymolfile.MolAtoms_bfactor_get
-    if _newclass:
-        bfactor = _swig_property(_libpymolfile.MolAtoms_bfactor_get, _libpymolfile.MolAtoms_bfactor_set)
-    __swig_setmethods__["mass"] = _libpymolfile.MolAtoms_mass_set
-    __swig_getmethods__["mass"] = _libpymolfile.MolAtoms_mass_get
-    if _newclass:
-        mass = _swig_property(_libpymolfile.MolAtoms_mass_get, _libpymolfile.MolAtoms_mass_set)
-    __swig_setmethods__["charge"] = _libpymolfile.MolAtoms_charge_set
-    __swig_getmethods__["charge"] = _libpymolfile.MolAtoms_charge_get
-    if _newclass:
-        charge = _swig_property(_libpymolfile.MolAtoms_charge_get, _libpymolfile.MolAtoms_charge_set)
-    __swig_setmethods__["radius"] = _libpymolfile.MolAtoms_radius_set
-    __swig_getmethods__["radius"] = _libpymolfile.MolAtoms_radius_get
-    if _newclass:
-        radius = _swig_property(_libpymolfile.MolAtoms_radius_get, _libpymolfile.MolAtoms_radius_set)
-    __swig_setmethods__["atomicnumber"] = _libpymolfile.MolAtoms_atomicnumber_set
-    __swig_getmethods__["atomicnumber"] = _libpymolfile.MolAtoms_atomicnumber_get
-    if _newclass:
-        atomicnumber = _swig_property(_libpymolfile.MolAtoms_atomicnumber_get, _libpymolfile.MolAtoms_atomicnumber_set)
-    __swig_setmethods__["ctnumber"] = _libpymolfile.MolAtoms_ctnumber_set
-    __swig_getmethods__["ctnumber"] = _libpymolfile.MolAtoms_ctnumber_get
-    if _newclass:
-        ctnumber = _swig_property(_libpymolfile.MolAtoms_ctnumber_get, _libpymolfile.MolAtoms_ctnumber_set)
-
-    def __init__(self):
-        this = _libpymolfile.new_MolAtoms()
-        try:
-            self.this.append(this)
-        except __builtin__.Exception:
-            self.this = this
-    __swig_destroy__ = _libpymolfile.delete_MolAtoms
-    __del__ = lambda self: None
-MolAtoms_swigregister = _libpymolfile.MolAtoms_swigregister
-MolAtoms_swigregister(MolAtoms)
-
-
-def del_plugin_structure(pymolfile_atoms: 'PyObject *') -> "void":
-    return _libpymolfile.del_plugin_structure(pymolfile_atoms)
-del_plugin_structure = _libpymolfile.del_plugin_structure
-
-def alloc_plugin_structure(arg1: 'PyObject *', args: 'PyObject *') -> "PyObject *":
-    return _libpymolfile.alloc_plugin_structure(arg1, args)
-alloc_plugin_structure = _libpymolfile.alloc_plugin_structure
 
 def del_plugin(pymolfile_plugin: 'PyObject *') -> "void":
     return _libpymolfile.del_plugin(pymolfile_plugin)
@@ -243,6 +157,18 @@ def open_file_read(plugin: 'molfile_plugin_t *', fname: 'char *', ftype: 'char *
 def read_structure(molpack: 'PyObject *') -> "PyObject *":
     """read_structure(molpack) -> PyObject *"""
     return _libpymolfile.read_structure(molpack)
+
+def get_structure(molpack: 'PyObject *') -> "PyObject *":
+    """get_structure(molpack) -> PyObject *"""
+    return _libpymolfile.get_structure(molpack)
+
+def read_fill_structure(molpack: 'PyObject *', prototype: 'PyObject *') -> "PyObject *":
+    """read_fill_structure(molpack, prototype) -> PyObject *"""
+    return _libpymolfile.read_fill_structure(molpack, prototype)
+
+def print_array_struct(prototype: 'PyObject *') -> "PyObject *":
+    """print_array_struct(prototype) -> PyObject *"""
+    return _libpymolfile.print_array_struct(prototype)
 # This file is compatible with both classic and new-style classes.
 
 
diff --git a/pymolfile/molfile/libpymolfile_wrap.cxx b/pymolfile/molfile/libpymolfile_wrap.cxx
index 95bdb95..561451b 100644
--- a/pymolfile/molfile/libpymolfile_wrap.cxx
+++ b/pymolfile/molfile/libpymolfile_wrap.cxx
@@ -3003,12 +3003,11 @@ SWIG_Python_NonDynamicSetAttr(PyObject *obj, PyObject *name, PyObject *value) {
 
 /* -------- TYPES TABLE (BEGIN) -------- */
 
-#define SWIGTYPE_p_MolAtoms swig_types[0]
-#define SWIGTYPE_p_char swig_types[1]
-#define SWIGTYPE_p_molfile_plugin_t swig_types[2]
-#define SWIGTYPE_p_p_molfile_plugin_t swig_types[3]
-static swig_type_info *swig_types[5];
-static swig_module_info swig_module = {swig_types, 4, 0, 0, 0, 0};
+#define SWIGTYPE_p_char swig_types[0]
+#define SWIGTYPE_p_molfile_plugin_t swig_types[1]
+#define SWIGTYPE_p_p_molfile_plugin_t swig_types[2]
+static swig_type_info *swig_types[4];
+static swig_module_info swig_module = {swig_types, 3, 0, 0, 0, 0};
 #define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name)
 #define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name)
 
@@ -3149,7 +3148,7 @@ SWIGINTERNINLINE PyObject*
 
 
 
-
+/*
 struct MolAtoms {
     char name[16]; 
     char type[16]; 
@@ -3175,7 +3174,7 @@ void del_plugin_structure(PyObject* pymolfile_atoms){
 static PyObject* alloc_plugin_structure(PyObject *self, PyObject *args) {
     return PyCapsule_New((void*)new MolAtoms(), "plugin_structure", del_plugin_structure);
 }
-
+*/
 void del_plugin(PyObject* pymolfile_plugin){
     delete (MolObject*)PyCapsule_GetPointer(pymolfile_plugin, "plugin");
 }
@@ -3195,196 +3194,6 @@ static PyObject* alloc_plugin(PyObject *self, PyObject *args) {
 
 
 
-SWIGINTERN swig_type_info*
-SWIG_pchar_descriptor(void)
-{
-  static int init = 0;
-  static swig_type_info* info = 0;
-  if (!init) {
-    info = SWIG_TypeQuery("_p_char");
-    init = 1;
-  }
-  return info;
-}
-
-
-SWIGINTERN int
-SWIG_AsCharPtrAndSize(PyObject *obj, char** cptr, size_t* psize, int *alloc)
-{
-#if PY_VERSION_HEX>=0x03000000
-#if defined(SWIG_PYTHON_STRICT_BYTE_CHAR)
-  if (PyBytes_Check(obj))
-#else
-  if (PyUnicode_Check(obj))
-#endif
-#else  
-  if (PyString_Check(obj))
-#endif
-  {
-    char *cstr; Py_ssize_t len;
-#if PY_VERSION_HEX>=0x03000000
-#if !defined(SWIG_PYTHON_STRICT_BYTE_CHAR)
-    if (!alloc && cptr) {
-        /* We can't allow converting without allocation, since the internal
-           representation of string in Python 3 is UCS-2/UCS-4 but we require
-           a UTF-8 representation.
-           TODO(bhy) More detailed explanation */
-        return SWIG_RuntimeError;
-    }
-    obj = PyUnicode_AsUTF8String(obj);
-    if(alloc) *alloc = SWIG_NEWOBJ;
-#endif
-    PyBytes_AsStringAndSize(obj, &cstr, &len);
-#else
-    PyString_AsStringAndSize(obj, &cstr, &len);
-#endif
-    if (cptr) {
-      if (alloc) {
-	/* 
-	   In python the user should not be able to modify the inner
-	   string representation. To warranty that, if you define
-	   SWIG_PYTHON_SAFE_CSTRINGS, a new/copy of the python string
-	   buffer is always returned.
-
-	   The default behavior is just to return the pointer value,
-	   so, be careful.
-	*/ 
-#if defined(SWIG_PYTHON_SAFE_CSTRINGS)
-	if (*alloc != SWIG_OLDOBJ) 
-#else
-	if (*alloc == SWIG_NEWOBJ) 
-#endif
-	{
-	  *cptr = reinterpret_cast< char* >(memcpy(new char[len + 1], cstr, sizeof(char)*(len + 1)));
-	  *alloc = SWIG_NEWOBJ;
-	} else {
-	  *cptr = cstr;
-	  *alloc = SWIG_OLDOBJ;
-	}
-      } else {
-#if PY_VERSION_HEX>=0x03000000
-#if defined(SWIG_PYTHON_STRICT_BYTE_CHAR)
-	*cptr = PyBytes_AsString(obj);
-#else
-	assert(0); /* Should never reach here with Unicode strings in Python 3 */
-#endif
-#else
-	*cptr = SWIG_Python_str_AsChar(obj);
-#endif
-      }
-    }
-    if (psize) *psize = len + 1;
-#if PY_VERSION_HEX>=0x03000000 && !defined(SWIG_PYTHON_STRICT_BYTE_CHAR)
-    Py_XDECREF(obj);
-#endif
-    return SWIG_OK;
-  } else {
-#if defined(SWIG_PYTHON_2_UNICODE)
-#if defined(SWIG_PYTHON_STRICT_BYTE_CHAR)
-#error "Cannot use both SWIG_PYTHON_2_UNICODE and SWIG_PYTHON_STRICT_BYTE_CHAR at once"
-#endif
-#if PY_VERSION_HEX<0x03000000
-    if (PyUnicode_Check(obj)) {
-      char *cstr; Py_ssize_t len;
-      if (!alloc && cptr) {
-        return SWIG_RuntimeError;
-      }
-      obj = PyUnicode_AsUTF8String(obj);
-      if (PyString_AsStringAndSize(obj, &cstr, &len) != -1) {
-        if (cptr) {
-          if (alloc) *alloc = SWIG_NEWOBJ;
-          *cptr = reinterpret_cast< char* >(memcpy(new char[len + 1], cstr, sizeof(char)*(len + 1)));
-        }
-        if (psize) *psize = len + 1;
-
-        Py_XDECREF(obj);
-        return SWIG_OK;
-      } else {
-        Py_XDECREF(obj);
-      }
-    }
-#endif
-#endif
-
-    swig_type_info* pchar_descriptor = SWIG_pchar_descriptor();
-    if (pchar_descriptor) {
-      void* vptr = 0;
-      if (SWIG_ConvertPtr(obj, &vptr, pchar_descriptor, 0) == SWIG_OK) {
-	if (cptr) *cptr = (char *) vptr;
-	if (psize) *psize = vptr ? (strlen((char *)vptr) + 1) : 0;
-	if (alloc) *alloc = SWIG_OLDOBJ;
-	return SWIG_OK;
-      }
-    }
-  }
-  return SWIG_TypeError;
-}
-
-
-SWIGINTERN int
-SWIG_AsCharArray(PyObject * obj, char *val, size_t size)
-{ 
-  char* cptr = 0; size_t csize = 0; int alloc = SWIG_OLDOBJ;
-  int res = SWIG_AsCharPtrAndSize(obj, &cptr, &csize, &alloc);
-  if (SWIG_IsOK(res)) {
-    /* special case of single char conversion when we don't need space for NUL */
-    if (size == 1 && csize == 2 && cptr && !cptr[1]) --csize;
-    if (csize <= size) {
-      if (val) {
-	if (csize) memcpy(val, cptr, csize*sizeof(char));
-	if (csize < size) memset(val + csize, 0, (size - csize)*sizeof(char));
-      }
-      if (alloc == SWIG_NEWOBJ) {
-	delete[] cptr;
-	res = SWIG_DelNewMask(res);
-      }      
-      return res;
-    }
-    if (alloc == SWIG_NEWOBJ) delete[] cptr;
-  }
-  return SWIG_TypeError;
-}
-
-
-SWIGINTERNINLINE PyObject *
-SWIG_FromCharPtrAndSize(const char* carray, size_t size)
-{
-  if (carray) {
-    if (size > INT_MAX) {
-      swig_type_info* pchar_descriptor = SWIG_pchar_descriptor();
-      return pchar_descriptor ? 
-	SWIG_InternalNewPointerObj(const_cast< char * >(carray), pchar_descriptor, 0) : SWIG_Py_Void();
-    } else {
-#if PY_VERSION_HEX >= 0x03000000
-#if defined(SWIG_PYTHON_STRICT_BYTE_CHAR)
-      return PyBytes_FromStringAndSize(carray, static_cast< Py_ssize_t >(size));
-#else
-#if PY_VERSION_HEX >= 0x03010000
-      return PyUnicode_DecodeUTF8(carray, static_cast< Py_ssize_t >(size), "surrogateescape");
-#else
-      return PyUnicode_FromStringAndSize(carray, static_cast< Py_ssize_t >(size));
-#endif
-#endif
-#else
-      return PyString_FromStringAndSize(carray, static_cast< Py_ssize_t >(size));
-#endif
-    }
-  } else {
-    return SWIG_Py_Void();
-  }
-}
-
-
-SWIGINTERN size_t
-SWIG_strnlen(const char* s, size_t maxlen)
-{
-  const char *p;
-  for (p = s; maxlen-- && *p; p++)
-    ;
-  return p - s;
-}
-
-
 #include <limits.h>
 #if !defined(SWIG_NO_LLONG_MAX)
 # if !defined(LLONG_MAX) && defined(__GNUC__) && defined (__LONG_LONG_MAX__)
@@ -3536,70 +3345,6 @@ SWIG_AsVal_int (PyObject * obj, int *val)
 }
 
 
-/* Getting isfinite working pre C99 across multiple platforms is non-trivial. Users can provide SWIG_isfinite on older platforms. */
-#ifndef SWIG_isfinite
-/* isfinite() is a macro for C99 */
-# if defined(isfinite)
-#  define SWIG_isfinite(X) (isfinite(X))
-# elif defined __cplusplus && __cplusplus >= 201103L
-/* Use a template so that this works whether isfinite() is std::isfinite() or
- * in the global namespace.  The reality seems to vary between compiler
- * versions.
- *
- * Make sure namespace std exists to avoid compiler warnings.
- *
- * extern "C++" is required as this fragment can end up inside an extern "C" { } block
- */
-namespace std { }
-extern "C++" template<typename T>
-inline int SWIG_isfinite_func(T x) {
-  using namespace std;
-  return isfinite(x);
-}
-#  define SWIG_isfinite(X) (SWIG_isfinite_func(X))
-# elif defined(_MSC_VER)
-#  define SWIG_isfinite(X) (_finite(X))
-# elif defined(__sun) && defined(__SVR4)
-#  include <ieeefp.h>
-#  define SWIG_isfinite(X) (finite(X))
-# endif
-#endif
-
-
-/* Accept infinite as a valid float value unless we are unable to check if a value is finite */
-#ifdef SWIG_isfinite
-# define SWIG_Float_Overflow_Check(X) ((X < -FLT_MAX || X > FLT_MAX) && SWIG_isfinite(X))
-#else
-# define SWIG_Float_Overflow_Check(X) ((X < -FLT_MAX || X > FLT_MAX))
-#endif
-
-
-SWIGINTERN int
-SWIG_AsVal_float (PyObject * obj, float *val)
-{
-  double v;
-  int res = SWIG_AsVal_double (obj, &v);
-  if (SWIG_IsOK(res)) {
-    if (SWIG_Float_Overflow_Check(v)) {
-      return SWIG_OverflowError;
-    } else {
-      if (val) *val = static_cast< float >(v);
-    }
-  }  
-  return res;
-}
-
-
-  #define SWIG_From_double   PyFloat_FromDouble 
-
-
-SWIGINTERNINLINE PyObject *
-SWIG_From_float  (float value)
-{    
-  return SWIG_From_double  (value);
-}
-
-
 PyObject * molfile_plugin_info(molfile_plugin_t** plugin_list, int plugin_no) {
     molfile_plugin_t *plugin;
     int *plugno = &plugin_no;
@@ -3674,915 +3419,137 @@ PyObject * my_open_file_read(molfile_plugin_t* plugin, char* fname, char* ftype,
   }
 
 
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-SWIGINTERN PyObject *_wrap_MolAtoms_name_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  MolAtoms *arg1 = (MolAtoms *) 0 ;
-  char *arg2 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  char temp2[16] ;
-  int res2 ;
-  PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_name_set",&obj0,&obj1)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_name_set" "', argument " "1"" of type '" "MolAtoms *""'"); 
-  }
-  arg1 = reinterpret_cast< MolAtoms * >(argp1);
-  res2 = SWIG_AsCharArray(obj1, temp2, 16);
-  if (!SWIG_IsOK(res2)) {
-    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "MolAtoms_name_set" "', argument " "2"" of type '" "char [16]""'");
+SWIGINTERN swig_type_info*
+SWIG_pchar_descriptor(void)
+{
+  static int init = 0;
+  static swig_type_info* info = 0;
+  if (!init) {
+    info = SWIG_TypeQuery("_p_char");
+    init = 1;
   }
-  arg2 = reinterpret_cast< char * >(temp2);
-  if (arg2) memcpy(arg1->name,arg2,16*sizeof(char));
-  else memset(arg1->name,0,16*sizeof(char));
-  resultobj = SWIG_Py_Void();
-  return resultobj;
-fail:
-  return NULL;
+  return info;
 }
 
 
-SWIGINTERN PyObject *_wrap_MolAtoms_name_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  MolAtoms *arg1 = (MolAtoms *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  char *result = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_name_get",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_name_get" "', argument " "1"" of type '" "MolAtoms *""'"); 
-  }
-  arg1 = reinterpret_cast< MolAtoms * >(argp1);
-  result = (char *)(char *) ((arg1)->name);
+SWIGINTERN int
+SWIG_AsCharPtrAndSize(PyObject *obj, char** cptr, size_t* psize, int *alloc)
+{
+#if PY_VERSION_HEX>=0x03000000
+#if defined(SWIG_PYTHON_STRICT_BYTE_CHAR)
+  if (PyBytes_Check(obj))
+#else
+  if (PyUnicode_Check(obj))
+#endif
+#else  
+  if (PyString_Check(obj))
+#endif
   {
-    size_t size = SWIG_strnlen(result, 16);
-    
-    
-    
-    resultobj = SWIG_FromCharPtrAndSize(result, size);
-  }
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_MolAtoms_type_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  MolAtoms *arg1 = (MolAtoms *) 0 ;
-  char *arg2 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  char temp2[16] ;
-  int res2 ;
-  PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_type_set",&obj0,&obj1)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_type_set" "', argument " "1"" of type '" "MolAtoms *""'"); 
-  }
-  arg1 = reinterpret_cast< MolAtoms * >(argp1);
-  res2 = SWIG_AsCharArray(obj1, temp2, 16);
-  if (!SWIG_IsOK(res2)) {
-    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "MolAtoms_type_set" "', argument " "2"" of type '" "char [16]""'");
-  }
-  arg2 = reinterpret_cast< char * >(temp2);
-  if (arg2) memcpy(arg1->type,arg2,16*sizeof(char));
-  else memset(arg1->type,0,16*sizeof(char));
-  resultobj = SWIG_Py_Void();
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_MolAtoms_type_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  MolAtoms *arg1 = (MolAtoms *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  char *result = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_type_get",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_type_get" "', argument " "1"" of type '" "MolAtoms *""'"); 
-  }
-  arg1 = reinterpret_cast< MolAtoms * >(argp1);
-  result = (char *)(char *) ((arg1)->type);
-  {
-    size_t size = SWIG_strnlen(result, 16);
-    
-    
-    
-    resultobj = SWIG_FromCharPtrAndSize(result, size);
-  }
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_MolAtoms_resname_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  MolAtoms *arg1 = (MolAtoms *) 0 ;
-  char *arg2 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  char temp2[8] ;
-  int res2 ;
-  PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_resname_set",&obj0,&obj1)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_resname_set" "', argument " "1"" of type '" "MolAtoms *""'"); 
-  }
-  arg1 = reinterpret_cast< MolAtoms * >(argp1);
-  res2 = SWIG_AsCharArray(obj1, temp2, 8);
-  if (!SWIG_IsOK(res2)) {
-    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "MolAtoms_resname_set" "', argument " "2"" of type '" "char [8]""'");
-  }
-  arg2 = reinterpret_cast< char * >(temp2);
-  if (arg2) memcpy(arg1->resname,arg2,8*sizeof(char));
-  else memset(arg1->resname,0,8*sizeof(char));
-  resultobj = SWIG_Py_Void();
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_MolAtoms_resname_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  MolAtoms *arg1 = (MolAtoms *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  char *result = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_resname_get",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_resname_get" "', argument " "1"" of type '" "MolAtoms *""'"); 
-  }
-  arg1 = reinterpret_cast< MolAtoms * >(argp1);
-  result = (char *)(char *) ((arg1)->resname);
-  {
-    size_t size = SWIG_strnlen(result, 8);
-    
-    
-    
-    resultobj = SWIG_FromCharPtrAndSize(result, size);
-  }
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_MolAtoms_resid_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  MolAtoms *arg1 = (MolAtoms *) 0 ;
-  int arg2 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  int val2 ;
-  int ecode2 = 0 ;
-  PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_resid_set",&obj0,&obj1)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_resid_set" "', argument " "1"" of type '" "MolAtoms *""'"); 
-  }
-  arg1 = reinterpret_cast< MolAtoms * >(argp1);
-  ecode2 = SWIG_AsVal_int(obj1, &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "MolAtoms_resid_set" "', argument " "2"" of type '" "int""'");
-  } 
-  arg2 = static_cast< int >(val2);
-  if (arg1) (arg1)->resid = arg2;
-  resultobj = SWIG_Py_Void();
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_MolAtoms_resid_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  MolAtoms *arg1 = (MolAtoms *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  int result;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_resid_get",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_resid_get" "', argument " "1"" of type '" "MolAtoms *""'"); 
-  }
-  arg1 = reinterpret_cast< MolAtoms * >(argp1);
-  result = (int) ((arg1)->resid);
-  resultobj = SWIG_From_int(static_cast< int >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_MolAtoms_segid_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  MolAtoms *arg1 = (MolAtoms *) 0 ;
-  char *arg2 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  char temp2[8] ;
-  int res2 ;
-  PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_segid_set",&obj0,&obj1)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_segid_set" "', argument " "1"" of type '" "MolAtoms *""'"); 
-  }
-  arg1 = reinterpret_cast< MolAtoms * >(argp1);
-  res2 = SWIG_AsCharArray(obj1, temp2, 8);
-  if (!SWIG_IsOK(res2)) {
-    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "MolAtoms_segid_set" "', argument " "2"" of type '" "char [8]""'");
-  }
-  arg2 = reinterpret_cast< char * >(temp2);
-  if (arg2) memcpy(arg1->segid,arg2,8*sizeof(char));
-  else memset(arg1->segid,0,8*sizeof(char));
-  resultobj = SWIG_Py_Void();
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_MolAtoms_segid_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  MolAtoms *arg1 = (MolAtoms *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  char *result = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_segid_get",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_segid_get" "', argument " "1"" of type '" "MolAtoms *""'"); 
-  }
-  arg1 = reinterpret_cast< MolAtoms * >(argp1);
-  result = (char *)(char *) ((arg1)->segid);
-  {
-    size_t size = SWIG_strnlen(result, 8);
-    
-    
-    
-    resultobj = SWIG_FromCharPtrAndSize(result, size);
-  }
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_MolAtoms_chain_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  MolAtoms *arg1 = (MolAtoms *) 0 ;
-  char *arg2 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  char temp2[2] ;
-  int res2 ;
-  PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_chain_set",&obj0,&obj1)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_chain_set" "', argument " "1"" of type '" "MolAtoms *""'"); 
-  }
-  arg1 = reinterpret_cast< MolAtoms * >(argp1);
-  res2 = SWIG_AsCharArray(obj1, temp2, 2);
-  if (!SWIG_IsOK(res2)) {
-    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "MolAtoms_chain_set" "', argument " "2"" of type '" "char [2]""'");
-  }
-  arg2 = reinterpret_cast< char * >(temp2);
-  if (arg2) memcpy(arg1->chain,arg2,2*sizeof(char));
-  else memset(arg1->chain,0,2*sizeof(char));
-  resultobj = SWIG_Py_Void();
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_MolAtoms_chain_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  MolAtoms *arg1 = (MolAtoms *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  char *result = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_chain_get",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_chain_get" "', argument " "1"" of type '" "MolAtoms *""'"); 
-  }
-  arg1 = reinterpret_cast< MolAtoms * >(argp1);
-  result = (char *)(char *) ((arg1)->chain);
-  {
-    size_t size = SWIG_strnlen(result, 2);
-    
-    
-    
-    resultobj = SWIG_FromCharPtrAndSize(result, size);
-  }
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_MolAtoms_altloc_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  MolAtoms *arg1 = (MolAtoms *) 0 ;
-  char *arg2 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  char temp2[2] ;
-  int res2 ;
-  PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_altloc_set",&obj0,&obj1)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_altloc_set" "', argument " "1"" of type '" "MolAtoms *""'"); 
-  }
-  arg1 = reinterpret_cast< MolAtoms * >(argp1);
-  res2 = SWIG_AsCharArray(obj1, temp2, 2);
-  if (!SWIG_IsOK(res2)) {
-    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "MolAtoms_altloc_set" "', argument " "2"" of type '" "char [2]""'");
-  }
-  arg2 = reinterpret_cast< char * >(temp2);
-  if (arg2) memcpy(arg1->altloc,arg2,2*sizeof(char));
-  else memset(arg1->altloc,0,2*sizeof(char));
-  resultobj = SWIG_Py_Void();
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_MolAtoms_altloc_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  MolAtoms *arg1 = (MolAtoms *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  char *result = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_altloc_get",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_altloc_get" "', argument " "1"" of type '" "MolAtoms *""'"); 
-  }
-  arg1 = reinterpret_cast< MolAtoms * >(argp1);
-  result = (char *)(char *) ((arg1)->altloc);
-  {
-    size_t size = SWIG_strnlen(result, 2);
-    
-    
-    
-    resultobj = SWIG_FromCharPtrAndSize(result, size);
-  }
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_MolAtoms_insertion_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  MolAtoms *arg1 = (MolAtoms *) 0 ;
-  char *arg2 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  char temp2[2] ;
-  int res2 ;
-  PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_insertion_set",&obj0,&obj1)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_insertion_set" "', argument " "1"" of type '" "MolAtoms *""'"); 
-  }
-  arg1 = reinterpret_cast< MolAtoms * >(argp1);
-  res2 = SWIG_AsCharArray(obj1, temp2, 2);
-  if (!SWIG_IsOK(res2)) {
-    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "MolAtoms_insertion_set" "', argument " "2"" of type '" "char [2]""'");
-  }
-  arg2 = reinterpret_cast< char * >(temp2);
-  if (arg2) memcpy(arg1->insertion,arg2,2*sizeof(char));
-  else memset(arg1->insertion,0,2*sizeof(char));
-  resultobj = SWIG_Py_Void();
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_MolAtoms_insertion_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  MolAtoms *arg1 = (MolAtoms *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  char *result = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_insertion_get",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_insertion_get" "', argument " "1"" of type '" "MolAtoms *""'"); 
-  }
-  arg1 = reinterpret_cast< MolAtoms * >(argp1);
-  result = (char *)(char *) ((arg1)->insertion);
-  {
-    size_t size = SWIG_strnlen(result, 2);
-    
-    
-    
-    resultobj = SWIG_FromCharPtrAndSize(result, size);
-  }
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_MolAtoms_occupancy_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  MolAtoms *arg1 = (MolAtoms *) 0 ;
-  float arg2 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  float val2 ;
-  int ecode2 = 0 ;
-  PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_occupancy_set",&obj0,&obj1)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_occupancy_set" "', argument " "1"" of type '" "MolAtoms *""'"); 
-  }
-  arg1 = reinterpret_cast< MolAtoms * >(argp1);
-  ecode2 = SWIG_AsVal_float(obj1, &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "MolAtoms_occupancy_set" "', argument " "2"" of type '" "float""'");
-  } 
-  arg2 = static_cast< float >(val2);
-  if (arg1) (arg1)->occupancy = arg2;
-  resultobj = SWIG_Py_Void();
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_MolAtoms_occupancy_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  MolAtoms *arg1 = (MolAtoms *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  float result;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_occupancy_get",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_occupancy_get" "', argument " "1"" of type '" "MolAtoms *""'"); 
-  }
-  arg1 = reinterpret_cast< MolAtoms * >(argp1);
-  result = (float) ((arg1)->occupancy);
-  resultobj = SWIG_From_float(static_cast< float >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_MolAtoms_bfactor_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  MolAtoms *arg1 = (MolAtoms *) 0 ;
-  float arg2 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  float val2 ;
-  int ecode2 = 0 ;
-  PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_bfactor_set",&obj0,&obj1)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_bfactor_set" "', argument " "1"" of type '" "MolAtoms *""'"); 
-  }
-  arg1 = reinterpret_cast< MolAtoms * >(argp1);
-  ecode2 = SWIG_AsVal_float(obj1, &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "MolAtoms_bfactor_set" "', argument " "2"" of type '" "float""'");
-  } 
-  arg2 = static_cast< float >(val2);
-  if (arg1) (arg1)->bfactor = arg2;
-  resultobj = SWIG_Py_Void();
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_MolAtoms_bfactor_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  MolAtoms *arg1 = (MolAtoms *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  float result;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_bfactor_get",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_bfactor_get" "', argument " "1"" of type '" "MolAtoms *""'"); 
-  }
-  arg1 = reinterpret_cast< MolAtoms * >(argp1);
-  result = (float) ((arg1)->bfactor);
-  resultobj = SWIG_From_float(static_cast< float >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_MolAtoms_mass_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  MolAtoms *arg1 = (MolAtoms *) 0 ;
-  float arg2 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  float val2 ;
-  int ecode2 = 0 ;
-  PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_mass_set",&obj0,&obj1)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_mass_set" "', argument " "1"" of type '" "MolAtoms *""'"); 
-  }
-  arg1 = reinterpret_cast< MolAtoms * >(argp1);
-  ecode2 = SWIG_AsVal_float(obj1, &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "MolAtoms_mass_set" "', argument " "2"" of type '" "float""'");
-  } 
-  arg2 = static_cast< float >(val2);
-  if (arg1) (arg1)->mass = arg2;
-  resultobj = SWIG_Py_Void();
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_MolAtoms_mass_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  MolAtoms *arg1 = (MolAtoms *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  float result;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_mass_get",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_mass_get" "', argument " "1"" of type '" "MolAtoms *""'"); 
-  }
-  arg1 = reinterpret_cast< MolAtoms * >(argp1);
-  result = (float) ((arg1)->mass);
-  resultobj = SWIG_From_float(static_cast< float >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_MolAtoms_charge_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  MolAtoms *arg1 = (MolAtoms *) 0 ;
-  float arg2 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  float val2 ;
-  int ecode2 = 0 ;
-  PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_charge_set",&obj0,&obj1)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_charge_set" "', argument " "1"" of type '" "MolAtoms *""'"); 
-  }
-  arg1 = reinterpret_cast< MolAtoms * >(argp1);
-  ecode2 = SWIG_AsVal_float(obj1, &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "MolAtoms_charge_set" "', argument " "2"" of type '" "float""'");
-  } 
-  arg2 = static_cast< float >(val2);
-  if (arg1) (arg1)->charge = arg2;
-  resultobj = SWIG_Py_Void();
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_MolAtoms_charge_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  MolAtoms *arg1 = (MolAtoms *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  float result;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_charge_get",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_charge_get" "', argument " "1"" of type '" "MolAtoms *""'"); 
-  }
-  arg1 = reinterpret_cast< MolAtoms * >(argp1);
-  result = (float) ((arg1)->charge);
-  resultobj = SWIG_From_float(static_cast< float >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_MolAtoms_radius_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  MolAtoms *arg1 = (MolAtoms *) 0 ;
-  float arg2 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  float val2 ;
-  int ecode2 = 0 ;
-  PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_radius_set",&obj0,&obj1)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_radius_set" "', argument " "1"" of type '" "MolAtoms *""'"); 
-  }
-  arg1 = reinterpret_cast< MolAtoms * >(argp1);
-  ecode2 = SWIG_AsVal_float(obj1, &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "MolAtoms_radius_set" "', argument " "2"" of type '" "float""'");
-  } 
-  arg2 = static_cast< float >(val2);
-  if (arg1) (arg1)->radius = arg2;
-  resultobj = SWIG_Py_Void();
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_MolAtoms_radius_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  MolAtoms *arg1 = (MolAtoms *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  float result;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_radius_get",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_radius_get" "', argument " "1"" of type '" "MolAtoms *""'"); 
-  }
-  arg1 = reinterpret_cast< MolAtoms * >(argp1);
-  result = (float) ((arg1)->radius);
-  resultobj = SWIG_From_float(static_cast< float >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_MolAtoms_atomicnumber_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  MolAtoms *arg1 = (MolAtoms *) 0 ;
-  float arg2 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  float val2 ;
-  int ecode2 = 0 ;
-  PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_atomicnumber_set",&obj0,&obj1)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_atomicnumber_set" "', argument " "1"" of type '" "MolAtoms *""'"); 
-  }
-  arg1 = reinterpret_cast< MolAtoms * >(argp1);
-  ecode2 = SWIG_AsVal_float(obj1, &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "MolAtoms_atomicnumber_set" "', argument " "2"" of type '" "float""'");
-  } 
-  arg2 = static_cast< float >(val2);
-  if (arg1) (arg1)->atomicnumber = arg2;
-  resultobj = SWIG_Py_Void();
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_MolAtoms_atomicnumber_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  MolAtoms *arg1 = (MolAtoms *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  float result;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_atomicnumber_get",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_atomicnumber_get" "', argument " "1"" of type '" "MolAtoms *""'"); 
-  }
-  arg1 = reinterpret_cast< MolAtoms * >(argp1);
-  result = (float) ((arg1)->atomicnumber);
-  resultobj = SWIG_From_float(static_cast< float >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_MolAtoms_ctnumber_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  MolAtoms *arg1 = (MolAtoms *) 0 ;
-  float arg2 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  float val2 ;
-  int ecode2 = 0 ;
-  PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_ctnumber_set",&obj0,&obj1)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_ctnumber_set" "', argument " "1"" of type '" "MolAtoms *""'"); 
-  }
-  arg1 = reinterpret_cast< MolAtoms * >(argp1);
-  ecode2 = SWIG_AsVal_float(obj1, &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "MolAtoms_ctnumber_set" "', argument " "2"" of type '" "float""'");
-  } 
-  arg2 = static_cast< float >(val2);
-  if (arg1) (arg1)->ctnumber = arg2;
-  resultobj = SWIG_Py_Void();
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_MolAtoms_ctnumber_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  MolAtoms *arg1 = (MolAtoms *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  float result;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_ctnumber_get",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_ctnumber_get" "', argument " "1"" of type '" "MolAtoms *""'"); 
-  }
-  arg1 = reinterpret_cast< MolAtoms * >(argp1);
-  result = (float) ((arg1)->ctnumber);
-  resultobj = SWIG_From_float(static_cast< float >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
+    char *cstr; Py_ssize_t len;
+#if PY_VERSION_HEX>=0x03000000
+#if !defined(SWIG_PYTHON_STRICT_BYTE_CHAR)
+    if (!alloc && cptr) {
+        /* We can't allow converting without allocation, since the internal
+           representation of string in Python 3 is UCS-2/UCS-4 but we require
+           a UTF-8 representation.
+           TODO(bhy) More detailed explanation */
+        return SWIG_RuntimeError;
+    }
+    obj = PyUnicode_AsUTF8String(obj);
+    if(alloc) *alloc = SWIG_NEWOBJ;
+#endif
+    PyBytes_AsStringAndSize(obj, &cstr, &len);
+#else
+    PyString_AsStringAndSize(obj, &cstr, &len);
+#endif
+    if (cptr) {
+      if (alloc) {
+	/* 
+	   In python the user should not be able to modify the inner
+	   string representation. To warranty that, if you define
+	   SWIG_PYTHON_SAFE_CSTRINGS, a new/copy of the python string
+	   buffer is always returned.
 
-SWIGINTERN PyObject *_wrap_new_MolAtoms(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  MolAtoms *result = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)":new_MolAtoms")) SWIG_fail;
-  result = (MolAtoms *)new MolAtoms();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_MolAtoms, SWIG_POINTER_NEW |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
+	   The default behavior is just to return the pointer value,
+	   so, be careful.
+	*/ 
+#if defined(SWIG_PYTHON_SAFE_CSTRINGS)
+	if (*alloc != SWIG_OLDOBJ) 
+#else
+	if (*alloc == SWIG_NEWOBJ) 
+#endif
+	{
+	  *cptr = reinterpret_cast< char* >(memcpy(new char[len + 1], cstr, sizeof(char)*(len + 1)));
+	  *alloc = SWIG_NEWOBJ;
+	} else {
+	  *cptr = cstr;
+	  *alloc = SWIG_OLDOBJ;
+	}
+      } else {
+#if PY_VERSION_HEX>=0x03000000
+#if defined(SWIG_PYTHON_STRICT_BYTE_CHAR)
+	*cptr = PyBytes_AsString(obj);
+#else
+	assert(0); /* Should never reach here with Unicode strings in Python 3 */
+#endif
+#else
+	*cptr = SWIG_Python_str_AsChar(obj);
+#endif
+      }
+    }
+    if (psize) *psize = len + 1;
+#if PY_VERSION_HEX>=0x03000000 && !defined(SWIG_PYTHON_STRICT_BYTE_CHAR)
+    Py_XDECREF(obj);
+#endif
+    return SWIG_OK;
+  } else {
+#if defined(SWIG_PYTHON_2_UNICODE)
+#if defined(SWIG_PYTHON_STRICT_BYTE_CHAR)
+#error "Cannot use both SWIG_PYTHON_2_UNICODE and SWIG_PYTHON_STRICT_BYTE_CHAR at once"
+#endif
+#if PY_VERSION_HEX<0x03000000
+    if (PyUnicode_Check(obj)) {
+      char *cstr; Py_ssize_t len;
+      if (!alloc && cptr) {
+        return SWIG_RuntimeError;
+      }
+      obj = PyUnicode_AsUTF8String(obj);
+      if (PyString_AsStringAndSize(obj, &cstr, &len) != -1) {
+        if (cptr) {
+          if (alloc) *alloc = SWIG_NEWOBJ;
+          *cptr = reinterpret_cast< char* >(memcpy(new char[len + 1], cstr, sizeof(char)*(len + 1)));
+        }
+        if (psize) *psize = len + 1;
 
+        Py_XDECREF(obj);
+        return SWIG_OK;
+      } else {
+        Py_XDECREF(obj);
+      }
+    }
+#endif
+#endif
 
-SWIGINTERN PyObject *_wrap_delete_MolAtoms(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  MolAtoms *arg1 = (MolAtoms *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:delete_MolAtoms",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, SWIG_POINTER_DISOWN |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_MolAtoms" "', argument " "1"" of type '" "MolAtoms *""'"); 
+    swig_type_info* pchar_descriptor = SWIG_pchar_descriptor();
+    if (pchar_descriptor) {
+      void* vptr = 0;
+      if (SWIG_ConvertPtr(obj, &vptr, pchar_descriptor, 0) == SWIG_OK) {
+	if (cptr) *cptr = (char *) vptr;
+	if (psize) *psize = vptr ? (strlen((char *)vptr) + 1) : 0;
+	if (alloc) *alloc = SWIG_OLDOBJ;
+	return SWIG_OK;
+      }
+    }
   }
-  arg1 = reinterpret_cast< MolAtoms * >(argp1);
-  delete arg1;
-  resultobj = SWIG_Py_Void();
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *MolAtoms_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
-  SWIG_TypeNewClientData(SWIGTYPE_p_MolAtoms, SWIG_NewClientData(obj));
-  return SWIG_Py_Void();
-}
-
-SWIGINTERN PyObject *_wrap_del_plugin_structure(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  PyObject *arg1 = (PyObject *) 0 ;
-  PyObject * obj0 = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:del_plugin_structure",&obj0)) SWIG_fail;
-  arg1 = obj0;
-  del_plugin_structure(arg1);
-  resultobj = SWIG_Py_Void();
-  return resultobj;
-fail:
-  return NULL;
+  return SWIG_TypeError;
 }
 
 
-SWIGINTERN PyObject *_wrap_alloc_plugin_structure(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  PyObject *arg1 = (PyObject *) 0 ;
-  PyObject *arg2 = (PyObject *) 0 ;
-  PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  PyObject *result = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"OO:alloc_plugin_structure",&obj0,&obj1)) SWIG_fail;
-  arg1 = obj0;
-  arg2 = obj1;
-  result = (PyObject *)alloc_plugin_structure(arg1,arg2);
-  resultobj = result;
-  return resultobj;
-fail:
-  return NULL;
-}
 
 
+#ifdef __cplusplus
+extern "C" {
+#endif
 SWIGINTERN PyObject *_wrap_del_plugin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   PyObject *arg1 = (PyObject *) 0 ;
@@ -4834,43 +3801,59 @@ fail:
 }
 
 
+SWIGINTERN PyObject *_wrap_get_structure(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  PyObject *arg1 = (PyObject *) 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:get_structure",&obj0)) SWIG_fail;
+  arg1 = obj0;
+  result = (PyObject *)get_structure(arg1);
+  resultobj = result;
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_read_fill_structure(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  PyObject *arg1 = (PyObject *) 0 ;
+  PyObject *arg2 = (PyObject *) 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:read_fill_structure",&obj0,&obj1)) SWIG_fail;
+  arg1 = obj0;
+  arg2 = obj1;
+  result = (PyObject *)read_fill_structure(arg1,arg2);
+  resultobj = result;
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_print_array_struct(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  PyObject *arg1 = (PyObject *) 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:print_array_struct",&obj0)) SWIG_fail;
+  arg1 = obj0;
+  result = (PyObject *)print_array_struct(arg1);
+  resultobj = result;
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
 static PyMethodDef SwigMethods[] = {
 	 { (char *)"SWIG_PyInstanceMethod_New", (PyCFunction)SWIG_PyInstanceMethod_New, METH_O, NULL},
-	 { (char *)"MolAtoms_name_set", _wrap_MolAtoms_name_set, METH_VARARGS, NULL},
-	 { (char *)"MolAtoms_name_get", _wrap_MolAtoms_name_get, METH_VARARGS, NULL},
-	 { (char *)"MolAtoms_type_set", _wrap_MolAtoms_type_set, METH_VARARGS, NULL},
-	 { (char *)"MolAtoms_type_get", _wrap_MolAtoms_type_get, METH_VARARGS, NULL},
-	 { (char *)"MolAtoms_resname_set", _wrap_MolAtoms_resname_set, METH_VARARGS, NULL},
-	 { (char *)"MolAtoms_resname_get", _wrap_MolAtoms_resname_get, METH_VARARGS, NULL},
-	 { (char *)"MolAtoms_resid_set", _wrap_MolAtoms_resid_set, METH_VARARGS, NULL},
-	 { (char *)"MolAtoms_resid_get", _wrap_MolAtoms_resid_get, METH_VARARGS, NULL},
-	 { (char *)"MolAtoms_segid_set", _wrap_MolAtoms_segid_set, METH_VARARGS, NULL},
-	 { (char *)"MolAtoms_segid_get", _wrap_MolAtoms_segid_get, METH_VARARGS, NULL},
-	 { (char *)"MolAtoms_chain_set", _wrap_MolAtoms_chain_set, METH_VARARGS, NULL},
-	 { (char *)"MolAtoms_chain_get", _wrap_MolAtoms_chain_get, METH_VARARGS, NULL},
-	 { (char *)"MolAtoms_altloc_set", _wrap_MolAtoms_altloc_set, METH_VARARGS, NULL},
-	 { (char *)"MolAtoms_altloc_get", _wrap_MolAtoms_altloc_get, METH_VARARGS, NULL},
-	 { (char *)"MolAtoms_insertion_set", _wrap_MolAtoms_insertion_set, METH_VARARGS, NULL},
-	 { (char *)"MolAtoms_insertion_get", _wrap_MolAtoms_insertion_get, METH_VARARGS, NULL},
-	 { (char *)"MolAtoms_occupancy_set", _wrap_MolAtoms_occupancy_set, METH_VARARGS, NULL},
-	 { (char *)"MolAtoms_occupancy_get", _wrap_MolAtoms_occupancy_get, METH_VARARGS, NULL},
-	 { (char *)"MolAtoms_bfactor_set", _wrap_MolAtoms_bfactor_set, METH_VARARGS, NULL},
-	 { (char *)"MolAtoms_bfactor_get", _wrap_MolAtoms_bfactor_get, METH_VARARGS, NULL},
-	 { (char *)"MolAtoms_mass_set", _wrap_MolAtoms_mass_set, METH_VARARGS, NULL},
-	 { (char *)"MolAtoms_mass_get", _wrap_MolAtoms_mass_get, METH_VARARGS, NULL},
-	 { (char *)"MolAtoms_charge_set", _wrap_MolAtoms_charge_set, METH_VARARGS, NULL},
-	 { (char *)"MolAtoms_charge_get", _wrap_MolAtoms_charge_get, METH_VARARGS, NULL},
-	 { (char *)"MolAtoms_radius_set", _wrap_MolAtoms_radius_set, METH_VARARGS, NULL},
-	 { (char *)"MolAtoms_radius_get", _wrap_MolAtoms_radius_get, METH_VARARGS, NULL},
-	 { (char *)"MolAtoms_atomicnumber_set", _wrap_MolAtoms_atomicnumber_set, METH_VARARGS, NULL},
-	 { (char *)"MolAtoms_atomicnumber_get", _wrap_MolAtoms_atomicnumber_get, METH_VARARGS, NULL},
-	 { (char *)"MolAtoms_ctnumber_set", _wrap_MolAtoms_ctnumber_set, METH_VARARGS, NULL},
-	 { (char *)"MolAtoms_ctnumber_get", _wrap_MolAtoms_ctnumber_get, METH_VARARGS, NULL},
-	 { (char *)"new_MolAtoms", _wrap_new_MolAtoms, METH_VARARGS, NULL},
-	 { (char *)"delete_MolAtoms", _wrap_delete_MolAtoms, METH_VARARGS, NULL},
-	 { (char *)"MolAtoms_swigregister", MolAtoms_swigregister, METH_VARARGS, NULL},
-	 { (char *)"del_plugin_structure", _wrap_del_plugin_structure, METH_VARARGS, NULL},
-	 { (char *)"alloc_plugin_structure", _wrap_alloc_plugin_structure, METH_VARARGS, NULL},
 	 { (char *)"del_plugin", _wrap_del_plugin, METH_VARARGS, NULL},
 	 { (char *)"del_atoms", _wrap_del_atoms, METH_VARARGS, NULL},
 	 { (char *)"del_atomname", _wrap_del_atomname, METH_VARARGS, NULL},
@@ -4882,31 +3865,30 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"molfile_plugin_info", _wrap_molfile_plugin_info, METH_VARARGS, (char *)"molfile_plugin_info(plugin_list, plugin_no) -> PyObject *"},
 	 { (char *)"open_file_read", _wrap_open_file_read, METH_VARARGS, (char *)"open_file_read(plugin, fname, ftype, natoms) -> PyObject *"},
 	 { (char *)"read_structure", _wrap_read_structure, METH_VARARGS, (char *)"read_structure(molpack) -> PyObject *"},
+	 { (char *)"get_structure", _wrap_get_structure, METH_VARARGS, (char *)"get_structure(molpack) -> PyObject *"},
+	 { (char *)"read_fill_structure", _wrap_read_fill_structure, METH_VARARGS, (char *)"read_fill_structure(molpack, prototype) -> PyObject *"},
+	 { (char *)"print_array_struct", _wrap_print_array_struct, METH_VARARGS, (char *)"print_array_struct(prototype) -> PyObject *"},
 	 { NULL, NULL, 0, NULL }
 };
 
 
 /* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */
 
-static swig_type_info _swigt__p_MolAtoms = {"_p_MolAtoms", "MolAtoms *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_char = {"_p_char", "char *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_molfile_plugin_t = {"_p_molfile_plugin_t", "molfile_plugin_t *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_p_molfile_plugin_t = {"_p_p_molfile_plugin_t", "molfile_plugin_t **", 0, 0, (void*)0, 0};
 
 static swig_type_info *swig_type_initial[] = {
-  &_swigt__p_MolAtoms,
   &_swigt__p_char,
   &_swigt__p_molfile_plugin_t,
   &_swigt__p_p_molfile_plugin_t,
 };
 
-static swig_cast_info _swigc__p_MolAtoms[] = {  {&_swigt__p_MolAtoms, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_char[] = {  {&_swigt__p_char, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_molfile_plugin_t[] = {  {&_swigt__p_molfile_plugin_t, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_p_molfile_plugin_t[] = {  {&_swigt__p_p_molfile_plugin_t, 0, 0, 0},{0, 0, 0, 0}};
 
 static swig_cast_info *swig_cast_initial[] = {
-  _swigc__p_MolAtoms,
   _swigc__p_char,
   _swigc__p_molfile_plugin_t,
   _swigc__p_p_molfile_plugin_t,
diff --git a/pymolfile/molfile/numind-cython/compile-numind.sh b/pymolfile/molfile/numind-cython/compile-numind.sh
new file mode 100644
index 0000000..680fa4e
--- /dev/null
+++ b/pymolfile/molfile/numind-cython/compile-numind.sh
@@ -0,0 +1,2 @@
+Cython -a numind.pyx --cplus
+g++ -fPIC -Wall -Wextra -Wunused-function -shared -I/labEnv3/lib/python3.6/site-packages/numpy/core/include/ numind.cpp -o numind.so -I/labEnv3/include/python3.6m/ -L/usr/local/Cellar/python3/3.6.1/Frameworks/Python.framework/Versions/3.6/lib -lpython3.6
diff --git a/pymolfile/molfile/numind-cython/numind.cpp b/pymolfile/molfile/numind-cython/numind.cpp
new file mode 100644
index 0000000..3313212
--- /dev/null
+++ b/pymolfile/molfile/numind-cython/numind.cpp
@@ -0,0 +1,5454 @@
+/* Generated by Cython 0.26.1 */
+
+#define PY_SSIZE_T_CLEAN
+#include "Python.h"
+#ifndef Py_PYTHON_H
+    #error Python headers needed to compile C extensions, please install development version of Python.
+#elif PY_VERSION_HEX < 0x02060000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03020000)
+    #error Cython requires Python 2.6+ or Python 3.2+.
+#else
+#define CYTHON_ABI "0_26_1"
+#include <stddef.h>
+#ifndef offsetof
+  #define offsetof(type, member) ( (size_t) & ((type*)0) -> member )
+#endif
+#if !defined(WIN32) && !defined(MS_WINDOWS)
+  #ifndef __stdcall
+    #define __stdcall
+  #endif
+  #ifndef __cdecl
+    #define __cdecl
+  #endif
+  #ifndef __fastcall
+    #define __fastcall
+  #endif
+#endif
+#ifndef DL_IMPORT
+  #define DL_IMPORT(t) t
+#endif
+#ifndef DL_EXPORT
+  #define DL_EXPORT(t) t
+#endif
+#define __PYX_COMMA ,
+#ifndef HAVE_LONG_LONG
+  #if PY_VERSION_HEX >= 0x03030000 || (PY_MAJOR_VERSION == 2 && PY_VERSION_HEX >= 0x02070000)
+    #define HAVE_LONG_LONG
+  #endif
+#endif
+#ifndef PY_LONG_LONG
+  #define PY_LONG_LONG LONG_LONG
+#endif
+#ifndef Py_HUGE_VAL
+  #define Py_HUGE_VAL HUGE_VAL
+#endif
+#ifdef PYPY_VERSION
+  #define CYTHON_COMPILING_IN_PYPY 1
+  #define CYTHON_COMPILING_IN_PYSTON 0
+  #define CYTHON_COMPILING_IN_CPYTHON 0
+  #undef CYTHON_USE_TYPE_SLOTS
+  #define CYTHON_USE_TYPE_SLOTS 0
+  #undef CYTHON_USE_PYTYPE_LOOKUP
+  #define CYTHON_USE_PYTYPE_LOOKUP 0
+  #undef CYTHON_USE_ASYNC_SLOTS
+  #define CYTHON_USE_ASYNC_SLOTS 0
+  #undef CYTHON_USE_PYLIST_INTERNALS
+  #define CYTHON_USE_PYLIST_INTERNALS 0
+  #undef CYTHON_USE_UNICODE_INTERNALS
+  #define CYTHON_USE_UNICODE_INTERNALS 0
+  #undef CYTHON_USE_UNICODE_WRITER
+  #define CYTHON_USE_UNICODE_WRITER 0
+  #undef CYTHON_USE_PYLONG_INTERNALS
+  #define CYTHON_USE_PYLONG_INTERNALS 0
+  #undef CYTHON_AVOID_BORROWED_REFS
+  #define CYTHON_AVOID_BORROWED_REFS 1
+  #undef CYTHON_ASSUME_SAFE_MACROS
+  #define CYTHON_ASSUME_SAFE_MACROS 0
+  #undef CYTHON_UNPACK_METHODS
+  #define CYTHON_UNPACK_METHODS 0
+  #undef CYTHON_FAST_THREAD_STATE
+  #define CYTHON_FAST_THREAD_STATE 0
+  #undef CYTHON_FAST_PYCALL
+  #define CYTHON_FAST_PYCALL 0
+#elif defined(PYSTON_VERSION)
+  #define CYTHON_COMPILING_IN_PYPY 0
+  #define CYTHON_COMPILING_IN_PYSTON 1
+  #define CYTHON_COMPILING_IN_CPYTHON 0
+  #ifndef CYTHON_USE_TYPE_SLOTS
+    #define CYTHON_USE_TYPE_SLOTS 1
+  #endif
+  #undef CYTHON_USE_PYTYPE_LOOKUP
+  #define CYTHON_USE_PYTYPE_LOOKUP 0
+  #undef CYTHON_USE_ASYNC_SLOTS
+  #define CYTHON_USE_ASYNC_SLOTS 0
+  #undef CYTHON_USE_PYLIST_INTERNALS
+  #define CYTHON_USE_PYLIST_INTERNALS 0
+  #ifndef CYTHON_USE_UNICODE_INTERNALS
+    #define CYTHON_USE_UNICODE_INTERNALS 1
+  #endif
+  #undef CYTHON_USE_UNICODE_WRITER
+  #define CYTHON_USE_UNICODE_WRITER 0
+  #undef CYTHON_USE_PYLONG_INTERNALS
+  #define CYTHON_USE_PYLONG_INTERNALS 0
+  #ifndef CYTHON_AVOID_BORROWED_REFS
+    #define CYTHON_AVOID_BORROWED_REFS 0
+  #endif
+  #ifndef CYTHON_ASSUME_SAFE_MACROS
+    #define CYTHON_ASSUME_SAFE_MACROS 1
+  #endif
+  #ifndef CYTHON_UNPACK_METHODS
+    #define CYTHON_UNPACK_METHODS 1
+  #endif
+  #undef CYTHON_FAST_THREAD_STATE
+  #define CYTHON_FAST_THREAD_STATE 0
+  #undef CYTHON_FAST_PYCALL
+  #define CYTHON_FAST_PYCALL 0
+#else
+  #define CYTHON_COMPILING_IN_PYPY 0
+  #define CYTHON_COMPILING_IN_PYSTON 0
+  #define CYTHON_COMPILING_IN_CPYTHON 1
+  #ifndef CYTHON_USE_TYPE_SLOTS
+    #define CYTHON_USE_TYPE_SLOTS 1
+  #endif
+  #if PY_VERSION_HEX < 0x02070000
+    #undef CYTHON_USE_PYTYPE_LOOKUP
+    #define CYTHON_USE_PYTYPE_LOOKUP 0
+  #elif !defined(CYTHON_USE_PYTYPE_LOOKUP)
+    #define CYTHON_USE_PYTYPE_LOOKUP 1
+  #endif
+  #if PY_MAJOR_VERSION < 3
+    #undef CYTHON_USE_ASYNC_SLOTS
+    #define CYTHON_USE_ASYNC_SLOTS 0
+  #elif !defined(CYTHON_USE_ASYNC_SLOTS)
+    #define CYTHON_USE_ASYNC_SLOTS 1
+  #endif
+  #if PY_VERSION_HEX < 0x02070000
+    #undef CYTHON_USE_PYLONG_INTERNALS
+    #define CYTHON_USE_PYLONG_INTERNALS 0
+  #elif !defined(CYTHON_USE_PYLONG_INTERNALS)
+    #define CYTHON_USE_PYLONG_INTERNALS 1
+  #endif
+  #ifndef CYTHON_USE_PYLIST_INTERNALS
+    #define CYTHON_USE_PYLIST_INTERNALS 1
+  #endif
+  #ifndef CYTHON_USE_UNICODE_INTERNALS
+    #define CYTHON_USE_UNICODE_INTERNALS 1
+  #endif
+  #if PY_VERSION_HEX < 0x030300F0
+    #undef CYTHON_USE_UNICODE_WRITER
+    #define CYTHON_USE_UNICODE_WRITER 0
+  #elif !defined(CYTHON_USE_UNICODE_WRITER)
+    #define CYTHON_USE_UNICODE_WRITER 1
+  #endif
+  #ifndef CYTHON_AVOID_BORROWED_REFS
+    #define CYTHON_AVOID_BORROWED_REFS 0
+  #endif
+  #ifndef CYTHON_ASSUME_SAFE_MACROS
+    #define CYTHON_ASSUME_SAFE_MACROS 1
+  #endif
+  #ifndef CYTHON_UNPACK_METHODS
+    #define CYTHON_UNPACK_METHODS 1
+  #endif
+  #ifndef CYTHON_FAST_THREAD_STATE
+    #define CYTHON_FAST_THREAD_STATE 1
+  #endif
+  #ifndef CYTHON_FAST_PYCALL
+    #define CYTHON_FAST_PYCALL 1
+  #endif
+#endif
+#if !defined(CYTHON_FAST_PYCCALL)
+#define CYTHON_FAST_PYCCALL  (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1)
+#endif
+#if CYTHON_USE_PYLONG_INTERNALS
+  #include "longintrepr.h"
+  #undef SHIFT
+  #undef BASE
+  #undef MASK
+#endif
+#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600 && !defined(Py_OptimizeFlag)
+  #define Py_OptimizeFlag 0
+#endif
+#define __PYX_BUILD_PY_SSIZE_T "n"
+#define CYTHON_FORMAT_SSIZE_T "z"
+#if PY_MAJOR_VERSION < 3
+  #define __Pyx_BUILTIN_MODULE_NAME "__builtin__"
+  #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\
+          PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
+  #define __Pyx_DefaultClassType PyClass_Type
+#else
+  #define __Pyx_BUILTIN_MODULE_NAME "builtins"
+  #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\
+          PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
+  #define __Pyx_DefaultClassType PyType_Type
+#endif
+#ifndef Py_TPFLAGS_CHECKTYPES
+  #define Py_TPFLAGS_CHECKTYPES 0
+#endif
+#ifndef Py_TPFLAGS_HAVE_INDEX
+  #define Py_TPFLAGS_HAVE_INDEX 0
+#endif
+#ifndef Py_TPFLAGS_HAVE_NEWBUFFER
+  #define Py_TPFLAGS_HAVE_NEWBUFFER 0
+#endif
+#ifndef Py_TPFLAGS_HAVE_FINALIZE
+  #define Py_TPFLAGS_HAVE_FINALIZE 0
+#endif
+#if PY_VERSION_HEX < 0x030700A0 || !defined(METH_FASTCALL)
+  #ifndef METH_FASTCALL
+     #define METH_FASTCALL 0x80
+  #endif
+  typedef PyObject *(*__Pyx_PyCFunctionFast) (PyObject *self, PyObject **args, Py_ssize_t nargs);
+  typedef PyObject *(*__Pyx_PyCFunctionFastWithKeywords) (PyObject *self, PyObject **args,
+                                                          Py_ssize_t nargs, PyObject *kwnames);
+#else
+  #define __Pyx_PyCFunctionFast _PyCFunctionFast
+  #define __Pyx_PyCFunctionFastWithKeywords _PyCFunctionFastWithKeywords
+#endif
+#if CYTHON_FAST_PYCCALL
+#define __Pyx_PyFastCFunction_Check(func)\
+    ((PyCFunction_Check(func) && (METH_FASTCALL == (PyCFunction_GET_FLAGS(func) & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS)))))
+#else
+#define __Pyx_PyFastCFunction_Check(func) 0
+#endif
+#if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND)
+  #define CYTHON_PEP393_ENABLED 1
+  #define __Pyx_PyUnicode_READY(op)       (likely(PyUnicode_IS_READY(op)) ?\
+                                              0 : _PyUnicode_Ready((PyObject *)(op)))
+  #define __Pyx_PyUnicode_GET_LENGTH(u)   PyUnicode_GET_LENGTH(u)
+  #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i)
+  #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u)   PyUnicode_MAX_CHAR_VALUE(u)
+  #define __Pyx_PyUnicode_KIND(u)         PyUnicode_KIND(u)
+  #define __Pyx_PyUnicode_DATA(u)         PyUnicode_DATA(u)
+  #define __Pyx_PyUnicode_READ(k, d, i)   PyUnicode_READ(k, d, i)
+  #define __Pyx_PyUnicode_WRITE(k, d, i, ch)  PyUnicode_WRITE(k, d, i, ch)
+  #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u)))
+#else
+  #define CYTHON_PEP393_ENABLED 0
+  #define PyUnicode_1BYTE_KIND  1
+  #define PyUnicode_2BYTE_KIND  2
+  #define PyUnicode_4BYTE_KIND  4
+  #define __Pyx_PyUnicode_READY(op)       (0)
+  #define __Pyx_PyUnicode_GET_LENGTH(u)   PyUnicode_GET_SIZE(u)
+  #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i]))
+  #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u)   ((sizeof(Py_UNICODE) == 2) ? 65535 : 1114111)
+  #define __Pyx_PyUnicode_KIND(u)         (sizeof(Py_UNICODE))
+  #define __Pyx_PyUnicode_DATA(u)         ((void*)PyUnicode_AS_UNICODE(u))
+  #define __Pyx_PyUnicode_READ(k, d, i)   ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i]))
+  #define __Pyx_PyUnicode_WRITE(k, d, i, ch)  (((void)(k)), ((Py_UNICODE*)d)[i] = ch)
+  #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != PyUnicode_GET_SIZE(u))
+#endif
+#if CYTHON_COMPILING_IN_PYPY
+  #define __Pyx_PyUnicode_Concat(a, b)      PyNumber_Add(a, b)
+  #define __Pyx_PyUnicode_ConcatSafe(a, b)  PyNumber_Add(a, b)
+#else
+  #define __Pyx_PyUnicode_Concat(a, b)      PyUnicode_Concat(a, b)
+  #define __Pyx_PyUnicode_ConcatSafe(a, b)  ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ?\
+      PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b))
+#endif
+#if CYTHON_COMPILING_IN_PYPY && !defined(PyUnicode_Contains)
+  #define PyUnicode_Contains(u, s)  PySequence_Contains(u, s)
+#endif
+#if CYTHON_COMPILING_IN_PYPY && !defined(PyByteArray_Check)
+  #define PyByteArray_Check(obj)  PyObject_TypeCheck(obj, &PyByteArray_Type)
+#endif
+#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Format)
+  #define PyObject_Format(obj, fmt)  PyObject_CallMethod(obj, "__format__", "O", fmt)
+#endif
+#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Malloc)
+  #define PyObject_Malloc(s)   PyMem_Malloc(s)
+  #define PyObject_Free(p)     PyMem_Free(p)
+  #define PyObject_Realloc(p)  PyMem_Realloc(p)
+#endif
+#if CYTHON_COMPILING_IN_PYSTON
+  #define __Pyx_PyCode_HasFreeVars(co)  PyCode_HasFreeVars(co)
+  #define __Pyx_PyFrame_SetLineNumber(frame, lineno) PyFrame_SetLineNumber(frame, lineno)
+#else
+  #define __Pyx_PyCode_HasFreeVars(co)  (PyCode_GetNumFree(co) > 0)
+  #define __Pyx_PyFrame_SetLineNumber(frame, lineno)  (frame)->f_lineno = (lineno)
+#endif
+#define __Pyx_PyString_FormatSafe(a, b)   ((unlikely((a) == Py_None)) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b))
+#define __Pyx_PyUnicode_FormatSafe(a, b)  ((unlikely((a) == Py_None)) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b))
+#if PY_MAJOR_VERSION >= 3
+  #define __Pyx_PyString_Format(a, b)  PyUnicode_Format(a, b)
+#else
+  #define __Pyx_PyString_Format(a, b)  PyString_Format(a, b)
+#endif
+#if PY_MAJOR_VERSION < 3 && !defined(PyObject_ASCII)
+  #define PyObject_ASCII(o)            PyObject_Repr(o)
+#endif
+#if PY_MAJOR_VERSION >= 3
+  #define PyBaseString_Type            PyUnicode_Type
+  #define PyStringObject               PyUnicodeObject
+  #define PyString_Type                PyUnicode_Type
+  #define PyString_Check               PyUnicode_Check
+  #define PyString_CheckExact          PyUnicode_CheckExact
+#endif
+#if PY_MAJOR_VERSION >= 3
+  #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj)
+  #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj)
+#else
+  #define __Pyx_PyBaseString_Check(obj) (PyString_Check(obj) || PyUnicode_Check(obj))
+  #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj))
+#endif
+#ifndef PySet_CheckExact
+  #define PySet_CheckExact(obj)        (Py_TYPE(obj) == &PySet_Type)
+#endif
+#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type)
+#define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception)
+#if PY_MAJOR_VERSION >= 3
+  #define PyIntObject                  PyLongObject
+  #define PyInt_Type                   PyLong_Type
+  #define PyInt_Check(op)              PyLong_Check(op)
+  #define PyInt_CheckExact(op)         PyLong_CheckExact(op)
+  #define PyInt_FromString             PyLong_FromString
+  #define PyInt_FromUnicode            PyLong_FromUnicode
+  #define PyInt_FromLong               PyLong_FromLong
+  #define PyInt_FromSize_t             PyLong_FromSize_t
+  #define PyInt_FromSsize_t            PyLong_FromSsize_t
+  #define PyInt_AsLong                 PyLong_AsLong
+  #define PyInt_AS_LONG                PyLong_AS_LONG
+  #define PyInt_AsSsize_t              PyLong_AsSsize_t
+  #define PyInt_AsUnsignedLongMask     PyLong_AsUnsignedLongMask
+  #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask
+  #define PyNumber_Int                 PyNumber_Long
+#endif
+#if PY_MAJOR_VERSION >= 3
+  #define PyBoolObject                 PyLongObject
+#endif
+#if PY_MAJOR_VERSION >= 3 && CYTHON_COMPILING_IN_PYPY
+  #ifndef PyUnicode_InternFromString
+    #define PyUnicode_InternFromString(s) PyUnicode_FromString(s)
+  #endif
+#endif
+#if PY_VERSION_HEX < 0x030200A4
+  typedef long Py_hash_t;
+  #define __Pyx_PyInt_FromHash_t PyInt_FromLong
+  #define __Pyx_PyInt_AsHash_t   PyInt_AsLong
+#else
+  #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t
+  #define __Pyx_PyInt_AsHash_t   PyInt_AsSsize_t
+#endif
+#if PY_MAJOR_VERSION >= 3
+  #define __Pyx_PyMethod_New(func, self, klass) ((self) ? PyMethod_New(func, self) : PyInstanceMethod_New(func))
+#else
+  #define __Pyx_PyMethod_New(func, self, klass) PyMethod_New(func, self, klass)
+#endif
+#ifndef __has_attribute
+  #define __has_attribute(x) 0
+#endif
+#ifndef __has_cpp_attribute
+  #define __has_cpp_attribute(x) 0
+#endif
+#if CYTHON_USE_ASYNC_SLOTS
+  #if PY_VERSION_HEX >= 0x030500B1
+    #define __Pyx_PyAsyncMethodsStruct PyAsyncMethods
+    #define __Pyx_PyType_AsAsync(obj) (Py_TYPE(obj)->tp_as_async)
+  #else
+    typedef struct {
+        unaryfunc am_await;
+        unaryfunc am_aiter;
+        unaryfunc am_anext;
+    } __Pyx_PyAsyncMethodsStruct;
+    #define __Pyx_PyType_AsAsync(obj) ((__Pyx_PyAsyncMethodsStruct*) (Py_TYPE(obj)->tp_reserved))
+  #endif
+#else
+  #define __Pyx_PyType_AsAsync(obj) NULL
+#endif
+#ifndef CYTHON_RESTRICT
+  #if defined(__GNUC__)
+    #define CYTHON_RESTRICT __restrict__
+  #elif defined(_MSC_VER) && _MSC_VER >= 1400
+    #define CYTHON_RESTRICT __restrict
+  #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+    #define CYTHON_RESTRICT restrict
+  #else
+    #define CYTHON_RESTRICT
+  #endif
+#endif
+#ifndef CYTHON_UNUSED
+# if defined(__GNUC__)
+#   if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
+#     define CYTHON_UNUSED __attribute__ ((__unused__))
+#   else
+#     define CYTHON_UNUSED
+#   endif
+# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER))
+#   define CYTHON_UNUSED __attribute__ ((__unused__))
+# else
+#   define CYTHON_UNUSED
+# endif
+#endif
+#ifndef CYTHON_MAYBE_UNUSED_VAR
+#  if defined(__cplusplus)
+     template<class T> void CYTHON_MAYBE_UNUSED_VAR( const T& ) { }
+#  else
+#    define CYTHON_MAYBE_UNUSED_VAR(x) (void)(x)
+#  endif
+#endif
+#ifndef CYTHON_NCP_UNUSED
+# if CYTHON_COMPILING_IN_CPYTHON
+#  define CYTHON_NCP_UNUSED
+# else
+#  define CYTHON_NCP_UNUSED CYTHON_UNUSED
+# endif
+#endif
+#define __Pyx_void_to_None(void_result) ((void)(void_result), Py_INCREF(Py_None), Py_None)
+#ifdef _MSC_VER
+    #ifndef _MSC_STDINT_H_
+        #if _MSC_VER < 1300
+           typedef unsigned char     uint8_t;
+           typedef unsigned int      uint32_t;
+        #else
+           typedef unsigned __int8   uint8_t;
+           typedef unsigned __int32  uint32_t;
+        #endif
+    #endif
+#else
+   #include <stdint.h>
+#endif
+#ifndef CYTHON_FALLTHROUGH
+  #ifdef __cplusplus
+    #if __has_cpp_attribute(fallthrough)
+      #define CYTHON_FALLTHROUGH [[fallthrough]]
+    #elif __has_cpp_attribute(clang::fallthrough)
+      #define CYTHON_FALLTHROUGH [[clang::fallthrough]]
+    #endif
+  #endif
+  #ifndef CYTHON_FALLTHROUGH
+    #if __has_attribute(fallthrough) || (defined(__GNUC__) && defined(__attribute__))
+      #define CYTHON_FALLTHROUGH __attribute__((fallthrough))
+    #else
+      #define CYTHON_FALLTHROUGH
+    #endif
+  #endif
+#endif
+
+#ifndef __cplusplus
+  #error "Cython files generated with the C++ option must be compiled with a C++ compiler."
+#endif
+#ifndef CYTHON_INLINE
+  #if defined(__clang__)
+    #define CYTHON_INLINE __inline__ __attribute__ ((__unused__))
+  #else
+    #define CYTHON_INLINE inline
+  #endif
+#endif
+template<typename T>
+void __Pyx_call_destructor(T& x) {
+    x.~T();
+}
+template<typename T>
+class __Pyx_FakeReference {
+  public:
+    __Pyx_FakeReference() : ptr(NULL) { }
+    __Pyx_FakeReference(const T& ref) : ptr(const_cast<T*>(&ref)) { }
+    T *operator->() { return ptr; }
+    T *operator&() { return ptr; }
+    operator T&() { return *ptr; }
+    template<typename U> bool operator ==(U other) { return *ptr == other; }
+    template<typename U> bool operator !=(U other) { return *ptr != other; }
+  private:
+    T *ptr;
+};
+
+#if defined(WIN32) || defined(MS_WINDOWS)
+  #define _USE_MATH_DEFINES
+#endif
+#include <math.h>
+#ifdef NAN
+#define __PYX_NAN() ((float) NAN)
+#else
+static CYTHON_INLINE float __PYX_NAN() {
+  float value;
+  memset(&value, 0xFF, sizeof(value));
+  return value;
+}
+#endif
+#if defined(__CYGWIN__) && defined(_LDBL_EQ_DBL)
+#define __Pyx_truncl trunc
+#else
+#define __Pyx_truncl truncl
+#endif
+
+
+#define __PYX_ERR(f_index, lineno, Ln_error) \
+{ \
+  __pyx_filename = __pyx_f[f_index]; __pyx_lineno = lineno; __pyx_clineno = __LINE__; goto Ln_error; \
+}
+
+#if PY_MAJOR_VERSION >= 3
+  #define __Pyx_PyNumber_Divide(x,y)         PyNumber_TrueDivide(x,y)
+  #define __Pyx_PyNumber_InPlaceDivide(x,y)  PyNumber_InPlaceTrueDivide(x,y)
+#else
+  #define __Pyx_PyNumber_Divide(x,y)         PyNumber_Divide(x,y)
+  #define __Pyx_PyNumber_InPlaceDivide(x,y)  PyNumber_InPlaceDivide(x,y)
+#endif
+
+#ifndef __PYX_EXTERN_C
+  #ifdef __cplusplus
+    #define __PYX_EXTERN_C extern "C"
+  #else
+    #define __PYX_EXTERN_C extern
+  #endif
+#endif
+
+#define __PYX_HAVE__numind
+#define __PYX_HAVE_API__numind
+#include "stdlib.h"
+#include "numind.h"
+#ifdef _OPENMP
+#include <omp.h>
+#endif /* _OPENMP */
+
+#ifdef PYREX_WITHOUT_ASSERTIONS
+#define CYTHON_WITHOUT_ASSERTIONS
+#endif
+
+typedef struct {PyObject **p; const char *s; const Py_ssize_t n; const char* encoding;
+                const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry;
+
+#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0
+#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT 0
+#define __PYX_DEFAULT_STRING_ENCODING ""
+#define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString
+#define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize
+#define __Pyx_uchar_cast(c) ((unsigned char)c)
+#define __Pyx_long_cast(x) ((long)x)
+#define __Pyx_fits_Py_ssize_t(v, type, is_signed)  (\
+    (sizeof(type) < sizeof(Py_ssize_t))  ||\
+    (sizeof(type) > sizeof(Py_ssize_t) &&\
+          likely(v < (type)PY_SSIZE_T_MAX ||\
+                 v == (type)PY_SSIZE_T_MAX)  &&\
+          (!is_signed || likely(v > (type)PY_SSIZE_T_MIN ||\
+                                v == (type)PY_SSIZE_T_MIN)))  ||\
+    (sizeof(type) == sizeof(Py_ssize_t) &&\
+          (is_signed || likely(v < (type)PY_SSIZE_T_MAX ||\
+                               v == (type)PY_SSIZE_T_MAX)))  )
+#if defined (__cplusplus) && __cplusplus >= 201103L
+    #include <cstdlib>
+    #define __Pyx_sst_abs(value) std::abs(value)
+#elif SIZEOF_INT >= SIZEOF_SIZE_T
+    #define __Pyx_sst_abs(value) abs(value)
+#elif SIZEOF_LONG >= SIZEOF_SIZE_T
+    #define __Pyx_sst_abs(value) labs(value)
+#elif defined (_MSC_VER) && defined (_M_X64)
+    #define __Pyx_sst_abs(value) _abs64(value)
+#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+    #define __Pyx_sst_abs(value) llabs(value)
+#elif defined (__GNUC__)
+    #define __Pyx_sst_abs(value) __builtin_llabs(value)
+#else
+    #define __Pyx_sst_abs(value) ((value<0) ? -value : value)
+#endif
+static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject*);
+static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length);
+#define __Pyx_PyByteArray_FromString(s) PyByteArray_FromStringAndSize((const char*)s, strlen((const char*)s))
+#define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l)
+#define __Pyx_PyBytes_FromString        PyBytes_FromString
+#define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize
+static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*);
+#if PY_MAJOR_VERSION < 3
+    #define __Pyx_PyStr_FromString        __Pyx_PyBytes_FromString
+    #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize
+#else
+    #define __Pyx_PyStr_FromString        __Pyx_PyUnicode_FromString
+    #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize
+#endif
+#define __Pyx_PyObject_AsWritableString(s)    ((char*) __Pyx_PyObject_AsString(s))
+#define __Pyx_PyObject_AsWritableSString(s)    ((signed char*) __Pyx_PyObject_AsString(s))
+#define __Pyx_PyObject_AsWritableUString(s)    ((unsigned char*) __Pyx_PyObject_AsString(s))
+#define __Pyx_PyObject_AsSString(s)    ((const signed char*) __Pyx_PyObject_AsString(s))
+#define __Pyx_PyObject_AsUString(s)    ((const unsigned char*) __Pyx_PyObject_AsString(s))
+#define __Pyx_PyObject_FromCString(s)  __Pyx_PyObject_FromString((const char*)s)
+#define __Pyx_PyBytes_FromCString(s)   __Pyx_PyBytes_FromString((const char*)s)
+#define __Pyx_PyByteArray_FromCString(s)   __Pyx_PyByteArray_FromString((const char*)s)
+#define __Pyx_PyStr_FromCString(s)     __Pyx_PyStr_FromString((const char*)s)
+#define __Pyx_PyUnicode_FromCString(s) __Pyx_PyUnicode_FromString((const char*)s)
+#if PY_MAJOR_VERSION < 3
+static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u)
+{
+    const Py_UNICODE *u_end = u;
+    while (*u_end++) ;
+    return (size_t)(u_end - u - 1);
+}
+#else
+#define __Pyx_Py_UNICODE_strlen Py_UNICODE_strlen
+#endif
+#define __Pyx_PyUnicode_FromUnicode(u)       PyUnicode_FromUnicode(u, __Pyx_Py_UNICODE_strlen(u))
+#define __Pyx_PyUnicode_FromUnicodeAndLength PyUnicode_FromUnicode
+#define __Pyx_PyUnicode_AsUnicode            PyUnicode_AsUnicode
+#define __Pyx_NewRef(obj) (Py_INCREF(obj), obj)
+#define __Pyx_Owned_Py_None(b) __Pyx_NewRef(Py_None)
+#define __Pyx_PyBool_FromLong(b) ((b) ? __Pyx_NewRef(Py_True) : __Pyx_NewRef(Py_False))
+static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*);
+static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x);
+static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*);
+static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t);
+#if CYTHON_ASSUME_SAFE_MACROS
+#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x))
+#else
+#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x)
+#endif
+#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x))
+#if PY_MAJOR_VERSION >= 3
+#define __Pyx_PyNumber_Int(x) (PyLong_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Long(x))
+#else
+#define __Pyx_PyNumber_Int(x) (PyInt_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Int(x))
+#endif
+#define __Pyx_PyNumber_Float(x) (PyFloat_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Float(x))
+#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
+static int __Pyx_sys_getdefaultencoding_not_ascii;
+static int __Pyx_init_sys_getdefaultencoding_params(void) {
+    PyObject* sys;
+    PyObject* default_encoding = NULL;
+    PyObject* ascii_chars_u = NULL;
+    PyObject* ascii_chars_b = NULL;
+    const char* default_encoding_c;
+    sys = PyImport_ImportModule("sys");
+    if (!sys) goto bad;
+    default_encoding = PyObject_CallMethod(sys, (char*) "getdefaultencoding", NULL);
+    Py_DECREF(sys);
+    if (!default_encoding) goto bad;
+    default_encoding_c = PyBytes_AsString(default_encoding);
+    if (!default_encoding_c) goto bad;
+    if (strcmp(default_encoding_c, "ascii") == 0) {
+        __Pyx_sys_getdefaultencoding_not_ascii = 0;
+    } else {
+        char ascii_chars[128];
+        int c;
+        for (c = 0; c < 128; c++) {
+            ascii_chars[c] = c;
+        }
+        __Pyx_sys_getdefaultencoding_not_ascii = 1;
+        ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL);
+        if (!ascii_chars_u) goto bad;
+        ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL);
+        if (!ascii_chars_b || !PyBytes_Check(ascii_chars_b) || memcmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) {
+            PyErr_Format(
+                PyExc_ValueError,
+                "This module compiled with c_string_encoding=ascii, but default encoding '%.200s' is not a superset of ascii.",
+                default_encoding_c);
+            goto bad;
+        }
+        Py_DECREF(ascii_chars_u);
+        Py_DECREF(ascii_chars_b);
+    }
+    Py_DECREF(default_encoding);
+    return 0;
+bad:
+    Py_XDECREF(default_encoding);
+    Py_XDECREF(ascii_chars_u);
+    Py_XDECREF(ascii_chars_b);
+    return -1;
+}
+#endif
+#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3
+#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL)
+#else
+#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL)
+#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT
+static char* __PYX_DEFAULT_STRING_ENCODING;
+static int __Pyx_init_sys_getdefaultencoding_params(void) {
+    PyObject* sys;
+    PyObject* default_encoding = NULL;
+    char* default_encoding_c;
+    sys = PyImport_ImportModule("sys");
+    if (!sys) goto bad;
+    default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL);
+    Py_DECREF(sys);
+    if (!default_encoding) goto bad;
+    default_encoding_c = PyBytes_AsString(default_encoding);
+    if (!default_encoding_c) goto bad;
+    __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c));
+    if (!__PYX_DEFAULT_STRING_ENCODING) goto bad;
+    strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c);
+    Py_DECREF(default_encoding);
+    return 0;
+bad:
+    Py_XDECREF(default_encoding);
+    return -1;
+}
+#endif
+#endif
+
+
+/* Test for GCC > 2.95 */
+#if defined(__GNUC__)     && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))
+  #define likely(x)   __builtin_expect(!!(x), 1)
+  #define unlikely(x) __builtin_expect(!!(x), 0)
+#else /* !__GNUC__ or GCC < 2.95 */
+  #define likely(x)   (x)
+  #define unlikely(x) (x)
+#endif /* __GNUC__ */
+static CYTHON_INLINE void __Pyx_pretend_to_initialize(void* ptr) { (void)ptr; }
+
+static PyObject *__pyx_m;
+static PyObject *__pyx_d;
+static PyObject *__pyx_b;
+static PyObject *__pyx_cython_runtime;
+static PyObject *__pyx_empty_tuple;
+static PyObject *__pyx_empty_bytes;
+static PyObject *__pyx_empty_unicode;
+static int __pyx_lineno;
+static int __pyx_clineno = 0;
+static const char * __pyx_cfilenm= __FILE__;
+static const char *__pyx_filename;
+
+
+static const char *__pyx_f[] = {
+  "numind.pyx",
+  "stringsource",
+};
+
+/*--- Type declarations ---*/
+struct __pyx_obj_6numind_NumInd;
+struct __pyx_t_6numind_PyArrayInterface;
+typedef struct __pyx_t_6numind_PyArrayInterface __pyx_t_6numind_PyArrayInterface;
+
+/* "numind.pyx":42
+ * byteorder = {'<':'little', '>':'big'}
+ * 
+ * ctypedef struct PyArrayInterface:             # <<<<<<<<<<<<<<
+ *     int version          # contains the integer 2 as a sanity check
+ *     int nd               # number of dimensions
+ */
+struct __pyx_t_6numind_PyArrayInterface {
+  int version;
+  int nd;
+  char typekind;
+  int itemsize;
+  int flags;
+  Py_intptr_t *shape;
+  Py_intptr_t *strides;
+  void *data;
+};
+
+/* "numind.pyx":56
+ * 
+ * 
+ * cdef class NumInd:             # <<<<<<<<<<<<<<
+ *     cdef void *data
+ *     cdef int _nd
+ */
+struct __pyx_obj_6numind_NumInd {
+  PyObject_HEAD
+  struct __pyx_vtabstruct_6numind_NumInd *__pyx_vtab;
+  void *data;
+  int _nd;
+  Py_intptr_t *_shape;
+  Py_intptr_t *_strides;
+  __pyx_t_6numind_PyArrayInterface *inter;
+  PyObject *_t_shape;
+  PyObject *_t_strides;
+  PyObject *_undarray;
+};
+
+
+
+struct __pyx_vtabstruct_6numind_NumInd {
+  __pyx_t_6numind_PyArrayInterface *(*_get_array_interface)(struct __pyx_obj_6numind_NumInd *);
+};
+static struct __pyx_vtabstruct_6numind_NumInd *__pyx_vtabptr_6numind_NumInd;
+
+/* --- Runtime support code (head) --- */
+/* Refnanny.proto */
+#ifndef CYTHON_REFNANNY
+  #define CYTHON_REFNANNY 0
+#endif
+#if CYTHON_REFNANNY
+  typedef struct {
+    void (*INCREF)(void*, PyObject*, int);
+    void (*DECREF)(void*, PyObject*, int);
+    void (*GOTREF)(void*, PyObject*, int);
+    void (*GIVEREF)(void*, PyObject*, int);
+    void* (*SetupContext)(const char*, int, const char*);
+    void (*FinishContext)(void**);
+  } __Pyx_RefNannyAPIStruct;
+  static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL;
+  static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname);
+  #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL;
+#ifdef WITH_THREAD
+  #define __Pyx_RefNannySetupContext(name, acquire_gil)\
+          if (acquire_gil) {\
+              PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\
+              __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\
+              PyGILState_Release(__pyx_gilstate_save);\
+          } else {\
+              __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\
+          }
+#else
+  #define __Pyx_RefNannySetupContext(name, acquire_gil)\
+          __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__)
+#endif
+  #define __Pyx_RefNannyFinishContext()\
+          __Pyx_RefNanny->FinishContext(&__pyx_refnanny)
+  #define __Pyx_INCREF(r)  __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
+  #define __Pyx_DECREF(r)  __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
+  #define __Pyx_GOTREF(r)  __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
+  #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
+  #define __Pyx_XINCREF(r)  do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0)
+  #define __Pyx_XDECREF(r)  do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0)
+  #define __Pyx_XGOTREF(r)  do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0)
+  #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0)
+#else
+  #define __Pyx_RefNannyDeclarations
+  #define __Pyx_RefNannySetupContext(name, acquire_gil)
+  #define __Pyx_RefNannyFinishContext()
+  #define __Pyx_INCREF(r) Py_INCREF(r)
+  #define __Pyx_DECREF(r) Py_DECREF(r)
+  #define __Pyx_GOTREF(r)
+  #define __Pyx_GIVEREF(r)
+  #define __Pyx_XINCREF(r) Py_XINCREF(r)
+  #define __Pyx_XDECREF(r) Py_XDECREF(r)
+  #define __Pyx_XGOTREF(r)
+  #define __Pyx_XGIVEREF(r)
+#endif
+#define __Pyx_XDECREF_SET(r, v) do {\
+        PyObject *tmp = (PyObject *) r;\
+        r = v; __Pyx_XDECREF(tmp);\
+    } while (0)
+#define __Pyx_DECREF_SET(r, v) do {\
+        PyObject *tmp = (PyObject *) r;\
+        r = v; __Pyx_DECREF(tmp);\
+    } while (0)
+#define __Pyx_CLEAR(r)    do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0)
+#define __Pyx_XCLEAR(r)   do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0)
+
+/* PyObjectGetAttrStr.proto */
+#if CYTHON_USE_TYPE_SLOTS
+static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) {
+    PyTypeObject* tp = Py_TYPE(obj);
+    if (likely(tp->tp_getattro))
+        return tp->tp_getattro(obj, attr_name);
+#if PY_MAJOR_VERSION < 3
+    if (likely(tp->tp_getattr))
+        return tp->tp_getattr(obj, PyString_AS_STRING(attr_name));
+#endif
+    return PyObject_GetAttr(obj, attr_name);
+}
+#else
+#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n)
+#endif
+
+/* GetBuiltinName.proto */
+static PyObject *__Pyx_GetBuiltinName(PyObject *name);
+
+/* RaiseDoubleKeywords.proto */
+static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name);
+
+/* ParseKeywords.proto */
+static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[],\
+    PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args,\
+    const char* function_name);
+
+/* RaiseArgTupleInvalid.proto */
+static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact,
+    Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found);
+
+/* GetItemInt.proto */
+#define __Pyx_GetItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\
+    (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\
+    __Pyx_GetItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound, boundscheck) :\
+    (is_list ? (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL) :\
+               __Pyx_GetItemInt_Generic(o, to_py_func(i))))
+#define __Pyx_GetItemInt_List(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\
+    (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\
+    __Pyx_GetItemInt_List_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\
+    (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL))
+static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i,
+                                                              int wraparound, int boundscheck);
+#define __Pyx_GetItemInt_Tuple(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\
+    (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\
+    __Pyx_GetItemInt_Tuple_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\
+    (PyErr_SetString(PyExc_IndexError, "tuple index out of range"), (PyObject*)NULL))
+static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i,
+                                                              int wraparound, int boundscheck);
+static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j);
+static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i,
+                                                     int is_list, int wraparound, int boundscheck);
+
+/* SliceObject.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyObject_GetSlice(
+        PyObject* obj, Py_ssize_t cstart, Py_ssize_t cstop,
+        PyObject** py_start, PyObject** py_stop, PyObject** py_slice,
+        int has_cstart, int has_cstop, int wraparound);
+
+/* SetItemInt.proto */
+#define __Pyx_SetItemInt(o, i, v, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\
+    (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\
+    __Pyx_SetItemInt_Fast(o, (Py_ssize_t)i, v, is_list, wraparound, boundscheck) :\
+    (is_list ? (PyErr_SetString(PyExc_IndexError, "list assignment index out of range"), -1) :\
+               __Pyx_SetItemInt_Generic(o, to_py_func(i), v)))
+static CYTHON_INLINE int __Pyx_SetItemInt_Generic(PyObject *o, PyObject *j, PyObject *v);
+static CYTHON_INLINE int __Pyx_SetItemInt_Fast(PyObject *o, Py_ssize_t i, PyObject *v,
+                                               int is_list, int wraparound, int boundscheck);
+
+/* PyObjectCall.proto */
+#if CYTHON_COMPILING_IN_CPYTHON
+static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw);
+#else
+#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw)
+#endif
+
+/* GetAttr.proto */
+static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *, PyObject *);
+
+/* HasAttr.proto */
+static CYTHON_INLINE int __Pyx_HasAttr(PyObject *, PyObject *);
+
+/* UnicodeAsUCS4.proto */
+static CYTHON_INLINE Py_UCS4 __Pyx_PyUnicode_AsPy_UCS4(PyObject*);
+
+/* object_ord.proto */
+#if PY_MAJOR_VERSION >= 3
+#define __Pyx_PyObject_Ord(c)\
+    (likely(PyUnicode_Check(c)) ? (long)__Pyx_PyUnicode_AsPy_UCS4(c) : __Pyx__PyObject_Ord(c))
+#else
+#define __Pyx_PyObject_Ord(c) __Pyx__PyObject_Ord(c)
+#endif
+static long __Pyx__PyObject_Ord(PyObject* c);
+
+/* IncludeStringH.proto */
+#include <string.h>
+
+/* BytesEquals.proto */
+static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals);
+
+/* UnicodeEquals.proto */
+static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals);
+
+/* StrEquals.proto */
+#if PY_MAJOR_VERSION >= 3
+#define __Pyx_PyString_Equals __Pyx_PyUnicode_Equals
+#else
+#define __Pyx_PyString_Equals __Pyx_PyBytes_Equals
+#endif
+
+/* GetModuleGlobalName.proto */
+static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name);
+
+/* PyThreadStateGet.proto */
+#if CYTHON_FAST_THREAD_STATE
+#define __Pyx_PyThreadState_declare  PyThreadState *__pyx_tstate;
+#define __Pyx_PyThreadState_assign  __pyx_tstate = PyThreadState_GET();
+#else
+#define __Pyx_PyThreadState_declare
+#define __Pyx_PyThreadState_assign
+#endif
+
+/* PyErrFetchRestore.proto */
+#if CYTHON_FAST_THREAD_STATE
+#define __Pyx_ErrRestoreWithState(type, value, tb)  __Pyx_ErrRestoreInState(PyThreadState_GET(), type, value, tb)
+#define __Pyx_ErrFetchWithState(type, value, tb)    __Pyx_ErrFetchInState(PyThreadState_GET(), type, value, tb)
+#define __Pyx_ErrRestore(type, value, tb)  __Pyx_ErrRestoreInState(__pyx_tstate, type, value, tb)
+#define __Pyx_ErrFetch(type, value, tb)    __Pyx_ErrFetchInState(__pyx_tstate, type, value, tb)
+static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb);
+static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb);
+#else
+#define __Pyx_ErrRestoreWithState(type, value, tb)  PyErr_Restore(type, value, tb)
+#define __Pyx_ErrFetchWithState(type, value, tb)  PyErr_Fetch(type, value, tb)
+#define __Pyx_ErrRestore(type, value, tb)  PyErr_Restore(type, value, tb)
+#define __Pyx_ErrFetch(type, value, tb)  PyErr_Fetch(type, value, tb)
+#endif
+
+/* WriteUnraisableException.proto */
+static void __Pyx_WriteUnraisable(const char *name, int clineno,
+                                  int lineno, const char *filename,
+                                  int full_traceback, int nogil);
+
+/* RaiseException.proto */
+static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause);
+
+/* SetVTable.proto */
+static int __Pyx_SetVtable(PyObject *dict, void *vtable);
+
+/* SetupReduce.proto */
+static int __Pyx_setup_reduce(PyObject* type_obj);
+
+/* Import.proto */
+static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level);
+
+/* CLineInTraceback.proto */
+static int __Pyx_CLineForTraceback(int c_line);
+
+/* CodeObjectCache.proto */
+typedef struct {
+    PyCodeObject* code_object;
+    int code_line;
+} __Pyx_CodeObjectCacheEntry;
+struct __Pyx_CodeObjectCache {
+    int count;
+    int max_count;
+    __Pyx_CodeObjectCacheEntry* entries;
+};
+static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL};
+static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line);
+static PyCodeObject *__pyx_find_code_object(int code_line);
+static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object);
+
+/* AddTraceback.proto */
+static void __Pyx_AddTraceback(const char *funcname, int c_line,
+                               int py_line, const char *filename);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_char(char value);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE Py_intptr_t __Pyx_PyInt_As_Py_intptr_t(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *);
+
+/* CheckBinaryVersion.proto */
+static int __Pyx_check_binary_version(void);
+
+/* InitStrings.proto */
+static int __Pyx_InitStrings(__Pyx_StringTabEntry *t);
+
+static __pyx_t_6numind_PyArrayInterface *__pyx_f_6numind_6NumInd__get_array_interface(struct __pyx_obj_6numind_NumInd *__pyx_v_self); /* proto*/
+
+/* Module declarations from 'cpython.pycapsule' */
+
+/* Module declarations from 'numind' */
+static PyTypeObject *__pyx_ptype_6numind_NumInd = 0;
+static void *__pyx_f_6numind_free_array_interface(PyObject *); /*proto*/
+#define __Pyx_MODULE_NAME "numind"
+int __pyx_module_is_main_numind = 0;
+
+/* Implementation of 'numind' */
+static PyObject *__pyx_builtin_chr;
+static PyObject *__pyx_builtin_MemoryError;
+static PyObject *__pyx_builtin_TypeError;
+static const char __pyx_k_f[] = "f";
+static const char __pyx_k_i[] = "i";
+static const char __pyx_k__3[] = "|";
+static const char __pyx_k__6[] = "<";
+static const char __pyx_k__7[] = ">";
+static const char __pyx_k_big[] = "big";
+static const char __pyx_k_chr[] = "chr";
+static const char __pyx_k_sys[] = "sys";
+static const char __pyx_k_data[] = "data";
+static const char __pyx_k_main[] = "__main__";
+static const char __pyx_k_name[] = "__name__";
+static const char __pyx_k_test[] = "__test__";
+static const char __pyx_k_shape[] = "shape";
+static const char __pyx_k_import[] = "__import__";
+static const char __pyx_k_little[] = "little";
+static const char __pyx_k_reduce[] = "__reduce__";
+static const char __pyx_k_ALIGNED[] = "ALIGNED";
+static const char __pyx_k_FORTRAN[] = "FORTRAN";
+static const char __pyx_k_strides[] = "strides";
+static const char __pyx_k_typestr[] = "typestr";
+static const char __pyx_k_getstate[] = "__getstate__";
+static const char __pyx_k_readonly[] = "readonly";
+static const char __pyx_k_setstate[] = "__setstate__";
+static const char __pyx_k_undarray[] = "undarray";
+static const char __pyx_k_TypeError[] = "TypeError";
+static const char __pyx_k_WRITEABLE[] = "WRITEABLE";
+static const char __pyx_k_byteorder[] = "byteorder";
+static const char __pyx_k_reduce_ex[] = "__reduce_ex__";
+static const char __pyx_k_CONTIGUOUS[] = "CONTIGUOUS";
+static const char __pyx_k_NOTSWAPPED[] = "NOTSWAPPED";
+static const char __pyx_k_pyx_vtable[] = "__pyx_vtable__";
+static const char __pyx_k_MemoryError[] = "MemoryError";
+static const char __pyx_k_array_struct[] = "__array_struct__";
+static const char __pyx_k_reduce_cython[] = "__reduce_cython__";
+static const char __pyx_k_array_interface[] = "__array_interface__";
+static const char __pyx_k_setstate_cython[] = "__setstate_cython__";
+static const char __pyx_k_cline_in_traceback[] = "cline_in_traceback";
+static const char __pyx_k_self__shape_self__strides_self_d[] = "self._shape,self._strides,self.data,self.inter cannot be converted to a Python object for pickling";
+static PyObject *__pyx_n_s_ALIGNED;
+static PyObject *__pyx_n_s_CONTIGUOUS;
+static PyObject *__pyx_n_s_FORTRAN;
+static PyObject *__pyx_n_s_MemoryError;
+static PyObject *__pyx_n_s_NOTSWAPPED;
+static PyObject *__pyx_n_s_TypeError;
+static PyObject *__pyx_n_s_WRITEABLE;
+static PyObject *__pyx_kp_s__3;
+static PyObject *__pyx_kp_s__6;
+static PyObject *__pyx_kp_s__7;
+static PyObject *__pyx_n_s_array_interface;
+static PyObject *__pyx_n_s_array_struct;
+static PyObject *__pyx_n_s_big;
+static PyObject *__pyx_n_s_byteorder;
+static PyObject *__pyx_n_s_chr;
+static PyObject *__pyx_n_s_cline_in_traceback;
+static PyObject *__pyx_n_s_data;
+static PyObject *__pyx_n_s_f;
+static PyObject *__pyx_n_s_getstate;
+static PyObject *__pyx_n_s_i;
+static PyObject *__pyx_n_s_import;
+static PyObject *__pyx_n_s_little;
+static PyObject *__pyx_n_s_main;
+static PyObject *__pyx_n_s_name;
+static PyObject *__pyx_n_s_pyx_vtable;
+static PyObject *__pyx_n_s_readonly;
+static PyObject *__pyx_n_s_reduce;
+static PyObject *__pyx_n_s_reduce_cython;
+static PyObject *__pyx_n_s_reduce_ex;
+static PyObject *__pyx_kp_s_self__shape_self__strides_self_d;
+static PyObject *__pyx_n_s_setstate;
+static PyObject *__pyx_n_s_setstate_cython;
+static PyObject *__pyx_n_s_shape;
+static PyObject *__pyx_n_s_strides;
+static PyObject *__pyx_n_s_sys;
+static PyObject *__pyx_n_s_test;
+static PyObject *__pyx_n_s_typestr;
+static PyObject *__pyx_n_s_undarray;
+static int __pyx_pf_6numind_6NumInd___init__(struct __pyx_obj_6numind_NumInd *__pyx_v_self, PyObject *__pyx_v_undarray); /* proto */
+static PyObject *__pyx_pf_6numind_6NumInd_8undarray___get__(struct __pyx_obj_6numind_NumInd *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_6numind_6NumInd_5shape___get__(struct __pyx_obj_6numind_NumInd *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_6numind_6NumInd_7strides___get__(struct __pyx_obj_6numind_NumInd *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_6numind_6NumInd_7typestr___get__(struct __pyx_obj_6numind_NumInd *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_6numind_6NumInd_8typekind___get__(struct __pyx_obj_6numind_NumInd *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_6numind_6NumInd_8readonly___get__(struct __pyx_obj_6numind_NumInd *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_6numind_6NumInd_16__array_struct_____get__(struct __pyx_obj_6numind_NumInd *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_6numind_6NumInd_2modify(struct __pyx_obj_6numind_NumInd *__pyx_v_self); /* proto */
+static void __pyx_pf_6numind_6NumInd_4__dealloc__(struct __pyx_obj_6numind_NumInd *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_6numind_6NumInd_6__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_6numind_NumInd *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_6numind_6NumInd_8__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_6numind_NumInd *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
+static PyObject *__pyx_tp_new_6numind_NumInd(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_int_0;
+static PyObject *__pyx_int_1;
+static PyObject *__pyx_int_2;
+static PyObject *__pyx_int_256;
+static PyObject *__pyx_int_512;
+static PyObject *__pyx_int_1024;
+static PyObject *__pyx_slice_;
+static PyObject *__pyx_slice__2;
+static PyObject *__pyx_tuple__4;
+static PyObject *__pyx_tuple__5;
+
+/* "numind.pyx":52
+ *     void *data           # A pointer to the first element of the array
+ * 
+ * cdef void* free_array_interface(object arr):             # <<<<<<<<<<<<<<
+ *     Py_DECREF(arr)
+ * 
+ */
+
+static void *__pyx_f_6numind_free_array_interface(PyObject *__pyx_v_arr) {
+  void *__pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("free_array_interface", 0);
+
+  /* "numind.pyx":53
+ * 
+ * cdef void* free_array_interface(object arr):
+ *     Py_DECREF(arr)             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  Py_DECREF(__pyx_v_arr);
+
+  /* "numind.pyx":52
+ *     void *data           # A pointer to the first element of the array
+ * 
+ * cdef void* free_array_interface(object arr):             # <<<<<<<<<<<<<<
+ *     Py_DECREF(arr)
+ * 
+ */
+
+  /* function exit code */
+  __pyx_r = 0;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "numind.pyx":64
+ *     cdef object _t_shape, _t_strides, _undarray
+ * 
+ *     def __init__(self, object undarray):             # <<<<<<<<<<<<<<
+ *         cdef int i, stride
+ *         cdef object array_shape, array_strides
+ */
+
+/* Python wrapper */
+static int __pyx_pw_6numind_6NumInd_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_pw_6numind_6NumInd_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_undarray = 0;
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_undarray,0};
+    PyObject* values[1] = {0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_undarray)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 64, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+    }
+    __pyx_v_undarray = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 64, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("numind.NumInd.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return -1;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_6numind_6NumInd___init__(((struct __pyx_obj_6numind_NumInd *)__pyx_v_self), __pyx_v_undarray);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_6numind_6NumInd___init__(struct __pyx_obj_6numind_NumInd *__pyx_v_self, PyObject *__pyx_v_undarray) {
+  int __pyx_v_i;
+  int __pyx_v_stride;
+  PyObject *__pyx_v_array_shape = 0;
+  PyObject *__pyx_v_array_strides = 0;
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  Py_ssize_t __pyx_t_3;
+  int __pyx_t_4;
+  Py_intptr_t __pyx_t_5;
+  int __pyx_t_6;
+  PyObject *__pyx_t_7 = NULL;
+  __Pyx_RefNannySetupContext("__init__", 0);
+
+  /* "numind.pyx":69
+ * 
+ *         # Keep a reference to the underlying object
+ *         self._undarray = undarray             # <<<<<<<<<<<<<<
+ *         # Get the shape and strides C arrays
+ *         array_shape = undarray.__array_interface__["shape"]
+ */
+  __Pyx_INCREF(__pyx_v_undarray);
+  __Pyx_GIVEREF(__pyx_v_undarray);
+  __Pyx_GOTREF(__pyx_v_self->_undarray);
+  __Pyx_DECREF(__pyx_v_self->_undarray);
+  __pyx_v_self->_undarray = __pyx_v_undarray;
+
+  /* "numind.pyx":71
+ *         self._undarray = undarray
+ *         # Get the shape and strides C arrays
+ *         array_shape = undarray.__array_interface__["shape"]             # <<<<<<<<<<<<<<
+ *         self._t_shape = array_shape
+ *         # The number of dimensions
+ */
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_undarray, __pyx_n_s_array_interface); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 71, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = PyObject_GetItem(__pyx_t_1, __pyx_n_s_shape); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 71, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_v_array_shape = __pyx_t_2;
+  __pyx_t_2 = 0;
+
+  /* "numind.pyx":72
+ *         # Get the shape and strides C arrays
+ *         array_shape = undarray.__array_interface__["shape"]
+ *         self._t_shape = array_shape             # <<<<<<<<<<<<<<
+ *         # The number of dimensions
+ *         self._nd = len(array_shape)
+ */
+  __Pyx_INCREF(__pyx_v_array_shape);
+  __Pyx_GIVEREF(__pyx_v_array_shape);
+  __Pyx_GOTREF(__pyx_v_self->_t_shape);
+  __Pyx_DECREF(__pyx_v_self->_t_shape);
+  __pyx_v_self->_t_shape = __pyx_v_array_shape;
+
+  /* "numind.pyx":74
+ *         self._t_shape = array_shape
+ *         # The number of dimensions
+ *         self._nd = len(array_shape)             # <<<<<<<<<<<<<<
+ *         # The shape
+ *         self._shape = <Py_intptr_t *>malloc(self._nd*sizeof(Py_intptr_t))
+ */
+  __pyx_t_3 = PyObject_Length(__pyx_v_array_shape); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(0, 74, __pyx_L1_error)
+  __pyx_v_self->_nd = __pyx_t_3;
+
+  /* "numind.pyx":76
+ *         self._nd = len(array_shape)
+ *         # The shape
+ *         self._shape = <Py_intptr_t *>malloc(self._nd*sizeof(Py_intptr_t))             # <<<<<<<<<<<<<<
+ *         for i from 0 <= i < self._nd:
+ *             self._shape[i] = self._t_shape[i]
+ */
+  __pyx_v_self->_shape = ((Py_intptr_t *)malloc((__pyx_v_self->_nd * (sizeof(Py_intptr_t)))));
+
+  /* "numind.pyx":77
+ *         # The shape
+ *         self._shape = <Py_intptr_t *>malloc(self._nd*sizeof(Py_intptr_t))
+ *         for i from 0 <= i < self._nd:             # <<<<<<<<<<<<<<
+ *             self._shape[i] = self._t_shape[i]
+ *         # The strides (compute them if needed)
+ */
+  __pyx_t_4 = __pyx_v_self->_nd;
+  for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_4; __pyx_v_i++) {
+
+    /* "numind.pyx":78
+ *         self._shape = <Py_intptr_t *>malloc(self._nd*sizeof(Py_intptr_t))
+ *         for i from 0 <= i < self._nd:
+ *             self._shape[i] = self._t_shape[i]             # <<<<<<<<<<<<<<
+ *         # The strides (compute them if needed)
+ *         array_strides = undarray.__array_interface__["strides"]
+ */
+    __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_self->_t_shape, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 78, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_5 = __Pyx_PyInt_As_Py_intptr_t(__pyx_t_2); if (unlikely((__pyx_t_5 == ((Py_intptr_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 78, __pyx_L1_error)
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    (__pyx_v_self->_shape[__pyx_v_i]) = __pyx_t_5;
+  }
+
+  /* "numind.pyx":80
+ *             self._shape[i] = self._t_shape[i]
+ *         # The strides (compute them if needed)
+ *         array_strides = undarray.__array_interface__["strides"]             # <<<<<<<<<<<<<<
+ *         self._t_strides = array_strides
+ *         self._strides = <Py_intptr_t *>malloc(self._nd*sizeof(Py_intptr_t))
+ */
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_undarray, __pyx_n_s_array_interface); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 80, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_1 = PyObject_GetItem(__pyx_t_2, __pyx_n_s_strides); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 80, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_v_array_strides = __pyx_t_1;
+  __pyx_t_1 = 0;
+
+  /* "numind.pyx":81
+ *         # The strides (compute them if needed)
+ *         array_strides = undarray.__array_interface__["strides"]
+ *         self._t_strides = array_strides             # <<<<<<<<<<<<<<
+ *         self._strides = <Py_intptr_t *>malloc(self._nd*sizeof(Py_intptr_t))
+ *         if array_strides:
+ */
+  __Pyx_INCREF(__pyx_v_array_strides);
+  __Pyx_GIVEREF(__pyx_v_array_strides);
+  __Pyx_GOTREF(__pyx_v_self->_t_strides);
+  __Pyx_DECREF(__pyx_v_self->_t_strides);
+  __pyx_v_self->_t_strides = __pyx_v_array_strides;
+
+  /* "numind.pyx":82
+ *         array_strides = undarray.__array_interface__["strides"]
+ *         self._t_strides = array_strides
+ *         self._strides = <Py_intptr_t *>malloc(self._nd*sizeof(Py_intptr_t))             # <<<<<<<<<<<<<<
+ *         if array_strides:
+ *             for i from 0 <= i < self._nd:
+ */
+  __pyx_v_self->_strides = ((Py_intptr_t *)malloc((__pyx_v_self->_nd * (sizeof(Py_intptr_t)))));
+
+  /* "numind.pyx":83
+ *         self._t_strides = array_strides
+ *         self._strides = <Py_intptr_t *>malloc(self._nd*sizeof(Py_intptr_t))
+ *         if array_strides:             # <<<<<<<<<<<<<<
+ *             for i from 0 <= i < self._nd:
+ *                 self._strides[i] = array_strides[i]
+ */
+  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_array_strides); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 83, __pyx_L1_error)
+  if (__pyx_t_6) {
+
+    /* "numind.pyx":84
+ *         self._strides = <Py_intptr_t *>malloc(self._nd*sizeof(Py_intptr_t))
+ *         if array_strides:
+ *             for i from 0 <= i < self._nd:             # <<<<<<<<<<<<<<
+ *                 self._strides[i] = array_strides[i]
+ *         else:
+ */
+    __pyx_t_4 = __pyx_v_self->_nd;
+    for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_4; __pyx_v_i++) {
+
+      /* "numind.pyx":85
+ *         if array_strides:
+ *             for i from 0 <= i < self._nd:
+ *                 self._strides[i] = array_strides[i]             # <<<<<<<<<<<<<<
+ *         else:
+ *             # strides is None. Compute them explicitely.
+ */
+      __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_array_strides, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 1, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 85, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_1);
+      __pyx_t_5 = __Pyx_PyInt_As_Py_intptr_t(__pyx_t_1); if (unlikely((__pyx_t_5 == ((Py_intptr_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 85, __pyx_L1_error)
+      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      (__pyx_v_self->_strides[__pyx_v_i]) = __pyx_t_5;
+    }
+
+    /* "numind.pyx":83
+ *         self._t_strides = array_strides
+ *         self._strides = <Py_intptr_t *>malloc(self._nd*sizeof(Py_intptr_t))
+ *         if array_strides:             # <<<<<<<<<<<<<<
+ *             for i from 0 <= i < self._nd:
+ *                 self._strides[i] = array_strides[i]
+ */
+    goto __pyx_L5;
+  }
+
+  /* "numind.pyx":88
+ *         else:
+ *             # strides is None. Compute them explicitely.
+ *             self._t_strides = [0] * self._nd             # <<<<<<<<<<<<<<
+ *             stride = int(self.typestr[2:])
+ *             for i from self._nd > i >= 0:
+ */
+  /*else*/ {
+    __pyx_t_1 = PyList_New(1 * ((__pyx_v_self->_nd<0) ? 0:__pyx_v_self->_nd)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 88, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    { Py_ssize_t __pyx_temp;
+      for (__pyx_temp=0; __pyx_temp < __pyx_v_self->_nd; __pyx_temp++) {
+        __Pyx_INCREF(__pyx_int_0);
+        __Pyx_GIVEREF(__pyx_int_0);
+        PyList_SET_ITEM(__pyx_t_1, __pyx_temp, __pyx_int_0);
+      }
+    }
+    __Pyx_GIVEREF(__pyx_t_1);
+    __Pyx_GOTREF(__pyx_v_self->_t_strides);
+    __Pyx_DECREF(__pyx_v_self->_t_strides);
+    __pyx_v_self->_t_strides = __pyx_t_1;
+    __pyx_t_1 = 0;
+
+    /* "numind.pyx":89
+ *             # strides is None. Compute them explicitely.
+ *             self._t_strides = [0] * self._nd
+ *             stride = int(self.typestr[2:])             # <<<<<<<<<<<<<<
+ *             for i from self._nd > i >= 0:
+ *                 self._strides[i] = stride
+ */
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_typestr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 89, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_2 = __Pyx_PyObject_GetSlice(__pyx_t_1, 2, 0, NULL, NULL, &__pyx_slice_, 1, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 89, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_t_1 = __Pyx_PyNumber_Int(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 89, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 89, __pyx_L1_error)
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_v_stride = __pyx_t_4;
+
+    /* "numind.pyx":90
+ *             self._t_strides = [0] * self._nd
+ *             stride = int(self.typestr[2:])
+ *             for i from self._nd > i >= 0:             # <<<<<<<<<<<<<<
+ *                 self._strides[i] = stride
+ *                 self._t_strides[i] = stride
+ */
+    for (__pyx_v_i = __pyx_v_self->_nd-1; __pyx_v_i >= 0; __pyx_v_i--) {
+
+      /* "numind.pyx":91
+ *             stride = int(self.typestr[2:])
+ *             for i from self._nd > i >= 0:
+ *                 self._strides[i] = stride             # <<<<<<<<<<<<<<
+ *                 self._t_strides[i] = stride
+ *                 stride = stride * array_shape[i]
+ */
+      (__pyx_v_self->_strides[__pyx_v_i]) = __pyx_v_stride;
+
+      /* "numind.pyx":92
+ *             for i from self._nd > i >= 0:
+ *                 self._strides[i] = stride
+ *                 self._t_strides[i] = stride             # <<<<<<<<<<<<<<
+ *                 stride = stride * array_shape[i]
+ *             self._t_strides = tuple(self._t_strides)
+ */
+      __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_stride); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 92, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_1);
+      if (unlikely(__Pyx_SetItemInt(__pyx_v_self->_t_strides, __pyx_v_i, __pyx_t_1, int, 1, __Pyx_PyInt_From_int, 0, 1, 1) < 0)) __PYX_ERR(0, 92, __pyx_L1_error)
+      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+      /* "numind.pyx":93
+ *                 self._strides[i] = stride
+ *                 self._t_strides[i] = stride
+ *                 stride = stride * array_shape[i]             # <<<<<<<<<<<<<<
+ *             self._t_strides = tuple(self._t_strides)
+ *         # Populate the C array interface
+ */
+      __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_stride); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 93, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_1);
+      __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_array_shape, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 93, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_2);
+      __pyx_t_7 = PyNumber_Multiply(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 93, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_7);
+      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+      __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_7); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 93, __pyx_L1_error)
+      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+      __pyx_v_stride = __pyx_t_4;
+    }
+
+    /* "numind.pyx":94
+ *                 self._t_strides[i] = stride
+ *                 stride = stride * array_shape[i]
+ *             self._t_strides = tuple(self._t_strides)             # <<<<<<<<<<<<<<
+ *         # Populate the C array interface
+ *         self.inter = self._get_array_interface()
+ */
+    __pyx_t_7 = PySequence_Tuple(__pyx_v_self->_t_strides); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 94, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_7);
+    __Pyx_GIVEREF(__pyx_t_7);
+    __Pyx_GOTREF(__pyx_v_self->_t_strides);
+    __Pyx_DECREF(__pyx_v_self->_t_strides);
+    __pyx_v_self->_t_strides = __pyx_t_7;
+    __pyx_t_7 = 0;
+  }
+  __pyx_L5:;
+
+  /* "numind.pyx":96
+ *             self._t_strides = tuple(self._t_strides)
+ *         # Populate the C array interface
+ *         self.inter = self._get_array_interface()             # <<<<<<<<<<<<<<
+ * 
+ *     # Properties. This are visible from Python space.
+ */
+  __pyx_v_self->inter = ((struct __pyx_vtabstruct_6numind_NumInd *)__pyx_v_self->__pyx_vtab)->_get_array_interface(__pyx_v_self);
+
+  /* "numind.pyx":64
+ *     cdef object _t_shape, _t_strides, _undarray
+ * 
+ *     def __init__(self, object undarray):             # <<<<<<<<<<<<<<
+ *         cdef int i, stride
+ *         cdef object array_shape, array_strides
+ */
+
+  /* function exit code */
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_7);
+  __Pyx_AddTraceback("numind.NumInd.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_array_shape);
+  __Pyx_XDECREF(__pyx_v_array_strides);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "numind.pyx":102
+ * 
+ *     property undarray:  # Returns the underlying array
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return self._undarray
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_6numind_6NumInd_8undarray_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_6numind_6NumInd_8undarray_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_6numind_6NumInd_8undarray___get__(((struct __pyx_obj_6numind_NumInd *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_6numind_6NumInd_8undarray___get__(struct __pyx_obj_6numind_NumInd *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__", 0);
+
+  /* "numind.pyx":103
+ *     property undarray:  # Returns the underlying array
+ *         def __get__(self):
+ *             return self._undarray             # <<<<<<<<<<<<<<
+ * 
+ *     property shape:
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(__pyx_v_self->_undarray);
+  __pyx_r = __pyx_v_self->_undarray;
+  goto __pyx_L0;
+
+  /* "numind.pyx":102
+ * 
+ *     property undarray:  # Returns the underlying array
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return self._undarray
+ * 
+ */
+
+  /* function exit code */
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "numind.pyx":106
+ * 
+ *     property shape:
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return self._t_shape
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_6numind_6NumInd_5shape_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_6numind_6NumInd_5shape_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_6numind_6NumInd_5shape___get__(((struct __pyx_obj_6numind_NumInd *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_6numind_6NumInd_5shape___get__(struct __pyx_obj_6numind_NumInd *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__", 0);
+
+  /* "numind.pyx":107
+ *     property shape:
+ *         def __get__(self):
+ *             return self._t_shape             # <<<<<<<<<<<<<<
+ * 
+ *     property strides:
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(__pyx_v_self->_t_shape);
+  __pyx_r = __pyx_v_self->_t_shape;
+  goto __pyx_L0;
+
+  /* "numind.pyx":106
+ * 
+ *     property shape:
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return self._t_shape
+ * 
+ */
+
+  /* function exit code */
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "numind.pyx":110
+ * 
+ *     property strides:
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return self._t_strides
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_6numind_6NumInd_7strides_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_6numind_6NumInd_7strides_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_6numind_6NumInd_7strides___get__(((struct __pyx_obj_6numind_NumInd *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_6numind_6NumInd_7strides___get__(struct __pyx_obj_6numind_NumInd *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__", 0);
+
+  /* "numind.pyx":111
+ *     property strides:
+ *         def __get__(self):
+ *             return self._t_strides             # <<<<<<<<<<<<<<
+ * 
+ *     property typestr:
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(__pyx_v_self->_t_strides);
+  __pyx_r = __pyx_v_self->_t_strides;
+  goto __pyx_L0;
+
+  /* "numind.pyx":110
+ * 
+ *     property strides:
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return self._t_strides
+ * 
+ */
+
+  /* function exit code */
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "numind.pyx":114
+ * 
+ *     property typestr:
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return self._undarray.__array_interface__["typestr"]
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_6numind_6NumInd_7typestr_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_6numind_6NumInd_7typestr_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_6numind_6NumInd_7typestr___get__(((struct __pyx_obj_6numind_NumInd *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_6numind_6NumInd_7typestr___get__(struct __pyx_obj_6numind_NumInd *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("__get__", 0);
+
+  /* "numind.pyx":115
+ *     property typestr:
+ *         def __get__(self):
+ *             return self._undarray.__array_interface__["typestr"]             # <<<<<<<<<<<<<<
+ * 
+ *     property typekind:
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_undarray, __pyx_n_s_array_interface); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 115, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = PyObject_GetItem(__pyx_t_1, __pyx_n_s_typestr); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 115, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
+
+  /* "numind.pyx":114
+ * 
+ *     property typestr:
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return self._undarray.__array_interface__["typestr"]
+ * 
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("numind.NumInd.typestr.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "numind.pyx":118
+ * 
+ *     property typekind:
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return chr(self.inter.typekind)
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_6numind_6NumInd_8typekind_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_6numind_6NumInd_8typekind_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_6numind_6NumInd_8typekind___get__(((struct __pyx_obj_6numind_NumInd *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_6numind_6NumInd_8typekind___get__(struct __pyx_obj_6numind_NumInd *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("__get__", 0);
+
+  /* "numind.pyx":119
+ *     property typekind:
+ *         def __get__(self):
+ *             return chr(self.inter.typekind)             # <<<<<<<<<<<<<<
+ * 
+ *     property readonly:
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = __Pyx_PyInt_From_char(__pyx_v_self->inter->typekind); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 119, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 119, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_GIVEREF(__pyx_t_1);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
+  __pyx_t_1 = 0;
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_chr, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 119, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  /* "numind.pyx":118
+ * 
+ *     property typekind:
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return chr(self.inter.typekind)
+ * 
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("numind.NumInd.typekind.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "numind.pyx":122
+ * 
+ *     property readonly:
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return self._undarray.__array_interface__["data"][1]
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_6numind_6NumInd_8readonly_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_6numind_6NumInd_8readonly_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_6numind_6NumInd_8readonly___get__(((struct __pyx_obj_6numind_NumInd *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_6numind_6NumInd_8readonly___get__(struct __pyx_obj_6numind_NumInd *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("__get__", 0);
+
+  /* "numind.pyx":123
+ *     property readonly:
+ *         def __get__(self):
+ *             return self._undarray.__array_interface__["data"][1]             # <<<<<<<<<<<<<<
+ * 
+ *     property __array_struct__:
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_undarray, __pyx_n_s_array_interface); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 123, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = PyObject_GetItem(__pyx_t_1, __pyx_n_s_data); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 123, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_2, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 123, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  /* "numind.pyx":122
+ * 
+ *     property readonly:
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return self._undarray.__array_interface__["data"][1]
+ * 
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("numind.NumInd.readonly.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "numind.pyx":127
+ *     property __array_struct__:
+ *         "Allows other numerical packages to obtain a new object."
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             if hasattr(self._undarray, "__array_struct__"):
+ *                 return self._undarray.__array_struct__
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_6numind_6NumInd_16__array_struct___1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_6numind_6NumInd_16__array_struct___1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_6numind_6NumInd_16__array_struct_____get__(((struct __pyx_obj_6numind_NumInd *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_6numind_6NumInd_16__array_struct_____get__(struct __pyx_obj_6numind_NumInd *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  int __pyx_t_3;
+  __Pyx_RefNannySetupContext("__get__", 0);
+
+  /* "numind.pyx":128
+ *         "Allows other numerical packages to obtain a new object."
+ *         def __get__(self):
+ *             if hasattr(self._undarray, "__array_struct__"):             # <<<<<<<<<<<<<<
+ *                 return self._undarray.__array_struct__
+ *             else:
+ */
+  __pyx_t_1 = __pyx_v_self->_undarray;
+  __Pyx_INCREF(__pyx_t_1);
+  __pyx_t_2 = __Pyx_HasAttr(__pyx_t_1, __pyx_n_s_array_struct); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 128, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_3 = (__pyx_t_2 != 0);
+  if (__pyx_t_3) {
+
+    /* "numind.pyx":129
+ *         def __get__(self):
+ *             if hasattr(self._undarray, "__array_struct__"):
+ *                 return self._undarray.__array_struct__             # <<<<<<<<<<<<<<
+ *             else:
+ *                 # No an underlying array with __array_struct__
+ */
+    __Pyx_XDECREF(__pyx_r);
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_undarray, __pyx_n_s_array_struct); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 129, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_r = __pyx_t_1;
+    __pyx_t_1 = 0;
+    goto __pyx_L0;
+
+    /* "numind.pyx":128
+ *         "Allows other numerical packages to obtain a new object."
+ *         def __get__(self):
+ *             if hasattr(self._undarray, "__array_struct__"):             # <<<<<<<<<<<<<<
+ *                 return self._undarray.__array_struct__
+ *             else:
+ */
+  }
+
+  /* "numind.pyx":133
+ *                 # No an underlying array with __array_struct__
+ *                 # Deliver an equivalent PyCObject.
+ *                 Py_INCREF(self)             # <<<<<<<<<<<<<<
+ *                 return PyCapsule_New(<void*>self.inter,
+ *                                      "struct array",
+ */
+  /*else*/ {
+    Py_INCREF(((PyObject *)__pyx_v_self));
+
+    /* "numind.pyx":134
+ *                 # Deliver an equivalent PyCObject.
+ *                 Py_INCREF(self)
+ *                 return PyCapsule_New(<void*>self.inter,             # <<<<<<<<<<<<<<
+ *                                      "struct array",
+ *                                      <PyCapsule_Destructor>free_array_interface)
+ */
+    __Pyx_XDECREF(__pyx_r);
+
+    /* "numind.pyx":136
+ *                 return PyCapsule_New(<void*>self.inter,
+ *                                      "struct array",
+ *                                      <PyCapsule_Destructor>free_array_interface)             # <<<<<<<<<<<<<<
+ * 
+ *     cdef PyArrayInterface *_get_array_interface(self):
+ */
+    __pyx_t_1 = PyCapsule_New(((void *)__pyx_v_self->inter), ((char *)"struct array"), ((PyCapsule_Destructor)__pyx_f_6numind_free_array_interface)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 134, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_r = __pyx_t_1;
+    __pyx_t_1 = 0;
+    goto __pyx_L0;
+  }
+
+  /* "numind.pyx":127
+ *     property __array_struct__:
+ *         "Allows other numerical packages to obtain a new object."
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             if hasattr(self._undarray, "__array_struct__"):
+ *                 return self._undarray.__array_struct__
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("numind.NumInd.__array_struct__.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "numind.pyx":138
+ *                                      <PyCapsule_Destructor>free_array_interface)
+ * 
+ *     cdef PyArrayInterface *_get_array_interface(self):             # <<<<<<<<<<<<<<
+ *         "Populates the array interface"
+ *         cdef PyArrayInterface *inter
+ */
+
+static __pyx_t_6numind_PyArrayInterface *__pyx_f_6numind_6NumInd__get_array_interface(struct __pyx_obj_6numind_NumInd *__pyx_v_self) {
+  __pyx_t_6numind_PyArrayInterface *__pyx_v_inter;
+  PyObject *__pyx_v_undarray = 0;
+  PyObject *__pyx_v_data_address = 0;
+  PyObject *__pyx_v_typestr = 0;
+  PyObject *__pyx_v_obj = 0;
+  __pyx_t_6numind_PyArrayInterface *__pyx_r;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  int __pyx_t_3;
+  long __pyx_t_4;
+  PyObject *__pyx_t_5 = NULL;
+  PyObject *__pyx_t_6 = NULL;
+  int __pyx_t_7;
+  Py_intptr_t *__pyx_t_8;
+  __Pyx_RefNannySetupContext("_get_array_interface", 0);
+
+  /* "numind.pyx":144
+ *         cdef object obj
+ * 
+ *         undarray = self._undarray             # <<<<<<<<<<<<<<
+ *         typestr = self.typestr
+ *         inter = <PyArrayInterface *>malloc(sizeof(PyArrayInterface))
+ */
+  __pyx_t_1 = __pyx_v_self->_undarray;
+  __Pyx_INCREF(__pyx_t_1);
+  __pyx_v_undarray = __pyx_t_1;
+  __pyx_t_1 = 0;
+
+  /* "numind.pyx":145
+ * 
+ *         undarray = self._undarray
+ *         typestr = self.typestr             # <<<<<<<<<<<<<<
+ *         inter = <PyArrayInterface *>malloc(sizeof(PyArrayInterface))
+ *         if inter is NULL:
+ */
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_typestr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 145, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_typestr = __pyx_t_1;
+  __pyx_t_1 = 0;
+
+  /* "numind.pyx":146
+ *         undarray = self._undarray
+ *         typestr = self.typestr
+ *         inter = <PyArrayInterface *>malloc(sizeof(PyArrayInterface))             # <<<<<<<<<<<<<<
+ *         if inter is NULL:
+ *             raise MemoryError()
+ */
+  __pyx_v_inter = ((__pyx_t_6numind_PyArrayInterface *)malloc((sizeof(__pyx_t_6numind_PyArrayInterface))));
+
+  /* "numind.pyx":147
+ *         typestr = self.typestr
+ *         inter = <PyArrayInterface *>malloc(sizeof(PyArrayInterface))
+ *         if inter is NULL:             # <<<<<<<<<<<<<<
+ *             raise MemoryError()
+ * 
+ */
+  __pyx_t_2 = ((__pyx_v_inter == NULL) != 0);
+  if (__pyx_t_2) {
+
+    /* "numind.pyx":148
+ *         inter = <PyArrayInterface *>malloc(sizeof(PyArrayInterface))
+ *         if inter is NULL:
+ *             raise MemoryError()             # <<<<<<<<<<<<<<
+ * 
+ *         inter.version = 2
+ */
+    PyErr_NoMemory(); __PYX_ERR(0, 148, __pyx_L1_error)
+
+    /* "numind.pyx":147
+ *         typestr = self.typestr
+ *         inter = <PyArrayInterface *>malloc(sizeof(PyArrayInterface))
+ *         if inter is NULL:             # <<<<<<<<<<<<<<
+ *             raise MemoryError()
+ * 
+ */
+  }
+
+  /* "numind.pyx":150
+ *             raise MemoryError()
+ * 
+ *         inter.version = 2             # <<<<<<<<<<<<<<
+ *         inter.nd = self._nd
+ *         inter.typekind = ord(typestr[1])
+ */
+  __pyx_v_inter->version = 2;
+
+  /* "numind.pyx":151
+ * 
+ *         inter.version = 2
+ *         inter.nd = self._nd             # <<<<<<<<<<<<<<
+ *         inter.typekind = ord(typestr[1])
+ *         inter.itemsize = int(typestr[2:])
+ */
+  __pyx_t_3 = __pyx_v_self->_nd;
+  __pyx_v_inter->nd = __pyx_t_3;
+
+  /* "numind.pyx":152
+ *         inter.version = 2
+ *         inter.nd = self._nd
+ *         inter.typekind = ord(typestr[1])             # <<<<<<<<<<<<<<
+ *         inter.itemsize = int(typestr[2:])
+ *         inter.flags = 0  # initialize flags
+ */
+  __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_typestr, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 152, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_4 = __Pyx_PyObject_Ord(__pyx_t_1); if (unlikely(__pyx_t_4 == (long)(Py_UCS4)-1)) __PYX_ERR(0, 152, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_v_inter->typekind = __pyx_t_4;
+
+  /* "numind.pyx":153
+ *         inter.nd = self._nd
+ *         inter.typekind = ord(typestr[1])
+ *         inter.itemsize = int(typestr[2:])             # <<<<<<<<<<<<<<
+ *         inter.flags = 0  # initialize flags
+ *         if typestr[0] == '|':
+ */
+  __pyx_t_1 = __Pyx_PyObject_GetSlice(__pyx_v_typestr, 2, 0, NULL, NULL, &__pyx_slice__2, 1, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 153, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_5 = __Pyx_PyNumber_Int(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 153, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_t_5); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 153, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_v_inter->itemsize = __pyx_t_3;
+
+  /* "numind.pyx":154
+ *         inter.typekind = ord(typestr[1])
+ *         inter.itemsize = int(typestr[2:])
+ *         inter.flags = 0  # initialize flags             # <<<<<<<<<<<<<<
+ *         if typestr[0] == '|':
+ *             inter.flags = inter.flags | NOTSWAPPED
+ */
+  __pyx_v_inter->flags = 0;
+
+  /* "numind.pyx":155
+ *         inter.itemsize = int(typestr[2:])
+ *         inter.flags = 0  # initialize flags
+ *         if typestr[0] == '|':             # <<<<<<<<<<<<<<
+ *             inter.flags = inter.flags | NOTSWAPPED
+ *         elif byteorder[typestr[0]] == sys.byteorder:
+ */
+  __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_typestr, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 155, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_t_5, __pyx_kp_s__3, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 155, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  if (__pyx_t_2) {
+
+    /* "numind.pyx":156
+ *         inter.flags = 0  # initialize flags
+ *         if typestr[0] == '|':
+ *             inter.flags = inter.flags | NOTSWAPPED             # <<<<<<<<<<<<<<
+ *         elif byteorder[typestr[0]] == sys.byteorder:
+ *             inter.flags = inter.flags | NOTSWAPPED
+ */
+    __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_inter->flags); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 156, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_5);
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_NOTSWAPPED); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 156, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_6 = PyNumber_Or(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 156, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_6);
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_t_6); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 156, __pyx_L1_error)
+    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+    __pyx_v_inter->flags = __pyx_t_3;
+
+    /* "numind.pyx":155
+ *         inter.itemsize = int(typestr[2:])
+ *         inter.flags = 0  # initialize flags
+ *         if typestr[0] == '|':             # <<<<<<<<<<<<<<
+ *             inter.flags = inter.flags | NOTSWAPPED
+ *         elif byteorder[typestr[0]] == sys.byteorder:
+ */
+    goto __pyx_L4;
+  }
+
+  /* "numind.pyx":157
+ *         if typestr[0] == '|':
+ *             inter.flags = inter.flags | NOTSWAPPED
+ *         elif byteorder[typestr[0]] == sys.byteorder:             # <<<<<<<<<<<<<<
+ *             inter.flags = inter.flags | NOTSWAPPED
+ *         if not self.readonly:
+ */
+  __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s_byteorder); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 157, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_6);
+  __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_typestr, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 157, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_5 = PyObject_GetItem(__pyx_t_6, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 157, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 157, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 157, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_6);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_1 = PyObject_RichCompare(__pyx_t_5, __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 157, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 157, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  if (__pyx_t_2) {
+
+    /* "numind.pyx":158
+ *             inter.flags = inter.flags | NOTSWAPPED
+ *         elif byteorder[typestr[0]] == sys.byteorder:
+ *             inter.flags = inter.flags | NOTSWAPPED             # <<<<<<<<<<<<<<
+ *         if not self.readonly:
+ *             inter.flags = inter.flags | WRITEABLE
+ */
+    __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_inter->flags); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 158, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s_NOTSWAPPED); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 158, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_6);
+    __pyx_t_5 = PyNumber_Or(__pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 158, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_5);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+    __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_t_5); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 158, __pyx_L1_error)
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    __pyx_v_inter->flags = __pyx_t_3;
+
+    /* "numind.pyx":157
+ *         if typestr[0] == '|':
+ *             inter.flags = inter.flags | NOTSWAPPED
+ *         elif byteorder[typestr[0]] == sys.byteorder:             # <<<<<<<<<<<<<<
+ *             inter.flags = inter.flags | NOTSWAPPED
+ *         if not self.readonly:
+ */
+  }
+  __pyx_L4:;
+
+  /* "numind.pyx":159
+ *         elif byteorder[typestr[0]] == sys.byteorder:
+ *             inter.flags = inter.flags | NOTSWAPPED
+ *         if not self.readonly:             # <<<<<<<<<<<<<<
+ *             inter.flags = inter.flags | WRITEABLE
+ *         # XXX how to determine the ALIGNED flag?
+ */
+  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_readonly); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 159, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 159, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_7 = ((!__pyx_t_2) != 0);
+  if (__pyx_t_7) {
+
+    /* "numind.pyx":160
+ *             inter.flags = inter.flags | NOTSWAPPED
+ *         if not self.readonly:
+ *             inter.flags = inter.flags | WRITEABLE             # <<<<<<<<<<<<<<
+ *         # XXX how to determine the ALIGNED flag?
+ *         inter.strides = self._strides
+ */
+    __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_inter->flags); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 160, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_5);
+    __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s_WRITEABLE); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 160, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_6);
+    __pyx_t_1 = PyNumber_Or(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 160, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+    __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 160, __pyx_L1_error)
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_v_inter->flags = __pyx_t_3;
+
+    /* "numind.pyx":159
+ *         elif byteorder[typestr[0]] == sys.byteorder:
+ *             inter.flags = inter.flags | NOTSWAPPED
+ *         if not self.readonly:             # <<<<<<<<<<<<<<
+ *             inter.flags = inter.flags | WRITEABLE
+ *         # XXX how to determine the ALIGNED flag?
+ */
+  }
+
+  /* "numind.pyx":162
+ *             inter.flags = inter.flags | WRITEABLE
+ *         # XXX how to determine the ALIGNED flag?
+ *         inter.strides = self._strides             # <<<<<<<<<<<<<<
+ *         inter.shape = self._shape
+ *         # Get the data address
+ */
+  __pyx_t_8 = __pyx_v_self->_strides;
+  __pyx_v_inter->strides = __pyx_t_8;
+
+  /* "numind.pyx":163
+ *         # XXX how to determine the ALIGNED flag?
+ *         inter.strides = self._strides
+ *         inter.shape = self._shape             # <<<<<<<<<<<<<<
+ *         # Get the data address
+ *         obj = undarray.__array_interface__["data"]
+ */
+  __pyx_t_8 = __pyx_v_self->_shape;
+  __pyx_v_inter->shape = __pyx_t_8;
+
+  /* "numind.pyx":165
+ *         inter.shape = self._shape
+ *         # Get the data address
+ *         obj = undarray.__array_interface__["data"]             # <<<<<<<<<<<<<<
+ *         data_address = obj[0]
+ *         inter.data = <void*>PyInt_AsLong(data_address)
+ */
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_undarray, __pyx_n_s_array_interface); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 165, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_6 = PyObject_GetItem(__pyx_t_1, __pyx_n_s_data); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 165, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_6);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_v_obj = __pyx_t_6;
+  __pyx_t_6 = 0;
+
+  /* "numind.pyx":166
+ *         # Get the data address
+ *         obj = undarray.__array_interface__["data"]
+ *         data_address = obj[0]             # <<<<<<<<<<<<<<
+ *         inter.data = <void*>PyInt_AsLong(data_address)
+ *         return inter
+ */
+  __pyx_t_6 = __Pyx_GetItemInt(__pyx_v_obj, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 166, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_6);
+  __pyx_v_data_address = __pyx_t_6;
+  __pyx_t_6 = 0;
+
+  /* "numind.pyx":167
+ *         obj = undarray.__array_interface__["data"]
+ *         data_address = obj[0]
+ *         inter.data = <void*>PyInt_AsLong(data_address)             # <<<<<<<<<<<<<<
+ *         return inter
+ * 
+ */
+  __pyx_v_inter->data = ((void *)PyInt_AsLong(__pyx_v_data_address));
+
+  /* "numind.pyx":168
+ *         data_address = obj[0]
+ *         inter.data = <void*>PyInt_AsLong(data_address)
+ *         return inter             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  __pyx_r = __pyx_v_inter;
+  goto __pyx_L0;
+
+  /* "numind.pyx":138
+ *                                      <PyCapsule_Destructor>free_array_interface)
+ * 
+ *     cdef PyArrayInterface *_get_array_interface(self):             # <<<<<<<<<<<<<<
+ *         "Populates the array interface"
+ *         cdef PyArrayInterface *inter
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_XDECREF(__pyx_t_6);
+  __Pyx_WriteUnraisable("numind.NumInd._get_array_interface", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_undarray);
+  __Pyx_XDECREF(__pyx_v_data_address);
+  __Pyx_XDECREF(__pyx_v_typestr);
+  __Pyx_XDECREF(__pyx_v_obj);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "numind.pyx":173
+ *     # This is just an example on how to modify the data in C space
+ *     # (and at C speed! :-)
+ *     def modify(self):             # <<<<<<<<<<<<<<
+ *         "Modify the values of the underlying array"
+ *         cdef long *ldata
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_6numind_6NumInd_3modify(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static char __pyx_doc_6numind_6NumInd_2modify[] = "Modify the values of the underlying array";
+static PyObject *__pyx_pw_6numind_6NumInd_3modify(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("modify (wrapper)", 0);
+  __pyx_r = __pyx_pf_6numind_6NumInd_2modify(((struct __pyx_obj_6numind_NumInd *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_6numind_6NumInd_2modify(struct __pyx_obj_6numind_NumInd *__pyx_v_self) {
+  long *__pyx_v_ldata;
+  double *__pyx_v_fdata;
+  int __pyx_v_i;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  int __pyx_t_3;
+  Py_intptr_t __pyx_t_4;
+  __Pyx_RefNannySetupContext("modify", 0);
+
+  /* "numind.pyx":180
+ * 
+ *         # Modify just the first row
+ *         if chr(self.inter.typekind) == 'i':             # <<<<<<<<<<<<<<
+ *             ldata = <long *>self.inter.data
+ *             for i from 0 <= i < self.inter.shape[self.inter.nd-1]:
+ */
+  __pyx_t_1 = __Pyx_PyInt_From_char(__pyx_v_self->inter->typekind); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 180, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 180, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_GIVEREF(__pyx_t_1);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
+  __pyx_t_1 = 0;
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_chr, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 180, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_3 = (__Pyx_PyString_Equals(__pyx_t_1, __pyx_n_s_i, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 180, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  if (__pyx_t_3) {
+
+    /* "numind.pyx":181
+ *         # Modify just the first row
+ *         if chr(self.inter.typekind) == 'i':
+ *             ldata = <long *>self.inter.data             # <<<<<<<<<<<<<<
+ *             for i from 0 <= i < self.inter.shape[self.inter.nd-1]:
+ *                 ldata[i] = ldata[i] + 1
+ */
+    __pyx_v_ldata = ((long *)__pyx_v_self->inter->data);
+
+    /* "numind.pyx":182
+ *         if chr(self.inter.typekind) == 'i':
+ *             ldata = <long *>self.inter.data
+ *             for i from 0 <= i < self.inter.shape[self.inter.nd-1]:             # <<<<<<<<<<<<<<
+ *                 ldata[i] = ldata[i] + 1
+ *         elif chr(self.inter.typekind) == 'f':
+ */
+    __pyx_t_4 = (__pyx_v_self->inter->shape[(__pyx_v_self->inter->nd - 1)]);
+    for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_4; __pyx_v_i++) {
+
+      /* "numind.pyx":183
+ *             ldata = <long *>self.inter.data
+ *             for i from 0 <= i < self.inter.shape[self.inter.nd-1]:
+ *                 ldata[i] = ldata[i] + 1             # <<<<<<<<<<<<<<
+ *         elif chr(self.inter.typekind) == 'f':
+ *             fdata = <double *>self.inter.data
+ */
+      (__pyx_v_ldata[__pyx_v_i]) = ((__pyx_v_ldata[__pyx_v_i]) + 1);
+    }
+
+    /* "numind.pyx":180
+ * 
+ *         # Modify just the first row
+ *         if chr(self.inter.typekind) == 'i':             # <<<<<<<<<<<<<<
+ *             ldata = <long *>self.inter.data
+ *             for i from 0 <= i < self.inter.shape[self.inter.nd-1]:
+ */
+    goto __pyx_L3;
+  }
+
+  /* "numind.pyx":184
+ *             for i from 0 <= i < self.inter.shape[self.inter.nd-1]:
+ *                 ldata[i] = ldata[i] + 1
+ *         elif chr(self.inter.typekind) == 'f':             # <<<<<<<<<<<<<<
+ *             fdata = <double *>self.inter.data
+ *             for i from 0 <= i < self.inter.shape[self.inter.nd-1]:
+ */
+  __pyx_t_1 = __Pyx_PyInt_From_char(__pyx_v_self->inter->typekind); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 184, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 184, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_GIVEREF(__pyx_t_1);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
+  __pyx_t_1 = 0;
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_chr, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 184, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_3 = (__Pyx_PyString_Equals(__pyx_t_1, __pyx_n_s_f, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 184, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  if (__pyx_t_3) {
+
+    /* "numind.pyx":185
+ *                 ldata[i] = ldata[i] + 1
+ *         elif chr(self.inter.typekind) == 'f':
+ *             fdata = <double *>self.inter.data             # <<<<<<<<<<<<<<
+ *             for i from 0 <= i < self.inter.shape[self.inter.nd-1]:
+ *                 fdata[i] = fdata[i] + 1
+ */
+    __pyx_v_fdata = ((double *)__pyx_v_self->inter->data);
+
+    /* "numind.pyx":186
+ *         elif chr(self.inter.typekind) == 'f':
+ *             fdata = <double *>self.inter.data
+ *             for i from 0 <= i < self.inter.shape[self.inter.nd-1]:             # <<<<<<<<<<<<<<
+ *                 fdata[i] = fdata[i] + 1
+ * 
+ */
+    __pyx_t_4 = (__pyx_v_self->inter->shape[(__pyx_v_self->inter->nd - 1)]);
+    for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_4; __pyx_v_i++) {
+
+      /* "numind.pyx":187
+ *             fdata = <double *>self.inter.data
+ *             for i from 0 <= i < self.inter.shape[self.inter.nd-1]:
+ *                 fdata[i] = fdata[i] + 1             # <<<<<<<<<<<<<<
+ * 
+ *     def __dealloc__(self):
+ */
+      (__pyx_v_fdata[__pyx_v_i]) = ((__pyx_v_fdata[__pyx_v_i]) + 1.0);
+    }
+
+    /* "numind.pyx":184
+ *             for i from 0 <= i < self.inter.shape[self.inter.nd-1]:
+ *                 ldata[i] = ldata[i] + 1
+ *         elif chr(self.inter.typekind) == 'f':             # <<<<<<<<<<<<<<
+ *             fdata = <double *>self.inter.data
+ *             for i from 0 <= i < self.inter.shape[self.inter.nd-1]:
+ */
+  }
+  __pyx_L3:;
+
+  /* "numind.pyx":173
+ *     # This is just an example on how to modify the data in C space
+ *     # (and at C speed! :-)
+ *     def modify(self):             # <<<<<<<<<<<<<<
+ *         "Modify the values of the underlying array"
+ *         cdef long *ldata
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("numind.NumInd.modify", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "numind.pyx":189
+ *                 fdata[i] = fdata[i] + 1
+ * 
+ *     def __dealloc__(self):             # <<<<<<<<<<<<<<
+ *         free(self._shape)
+ *         free(self._strides)
+ */
+
+/* Python wrapper */
+static void __pyx_pw_6numind_6NumInd_5__dealloc__(PyObject *__pyx_v_self); /*proto*/
+static void __pyx_pw_6numind_6NumInd_5__dealloc__(PyObject *__pyx_v_self) {
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
+  __pyx_pf_6numind_6NumInd_4__dealloc__(((struct __pyx_obj_6numind_NumInd *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+}
+
+static void __pyx_pf_6numind_6NumInd_4__dealloc__(struct __pyx_obj_6numind_NumInd *__pyx_v_self) {
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__dealloc__", 0);
+
+  /* "numind.pyx":190
+ * 
+ *     def __dealloc__(self):
+ *         free(self._shape)             # <<<<<<<<<<<<<<
+ *         free(self._strides)
+ *         free(self.inter)
+ */
+  free(__pyx_v_self->_shape);
+
+  /* "numind.pyx":191
+ *     def __dealloc__(self):
+ *         free(self._shape)
+ *         free(self._strides)             # <<<<<<<<<<<<<<
+ *         free(self.inter)
+ */
+  free(__pyx_v_self->_strides);
+
+  /* "numind.pyx":192
+ *         free(self._shape)
+ *         free(self._strides)
+ *         free(self.inter)             # <<<<<<<<<<<<<<
+ */
+  free(__pyx_v_self->inter);
+
+  /* "numind.pyx":189
+ *                 fdata[i] = fdata[i] + 1
+ * 
+ *     def __dealloc__(self):             # <<<<<<<<<<<<<<
+ *         free(self._shape)
+ *         free(self._strides)
+ */
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+}
+
+/* "(tree fragment)":1
+ * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
+ *     raise TypeError("self._shape,self._strides,self.data,self.inter cannot be converted to a Python object for pickling")
+ * def __setstate_cython__(self, __pyx_state):
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_6numind_6NumInd_7__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_pw_6numind_6NumInd_7__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_6numind_6NumInd_6__reduce_cython__(((struct __pyx_obj_6numind_NumInd *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_6numind_6NumInd_6__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_6numind_NumInd *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  __Pyx_RefNannySetupContext("__reduce_cython__", 0);
+
+  /* "(tree fragment)":2
+ * def __reduce_cython__(self):
+ *     raise TypeError("self._shape,self._strides,self.data,self.inter cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
+ * def __setstate_cython__(self, __pyx_state):
+ *     raise TypeError("self._shape,self._strides,self.data,self.inter cannot be converted to a Python object for pickling")
+ */
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_Raise(__pyx_t_1, 0, 0, 0);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __PYX_ERR(1, 2, __pyx_L1_error)
+
+  /* "(tree fragment)":1
+ * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
+ *     raise TypeError("self._shape,self._strides,self.data,self.inter cannot be converted to a Python object for pickling")
+ * def __setstate_cython__(self, __pyx_state):
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("numind.NumInd.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "(tree fragment)":3
+ * def __reduce_cython__(self):
+ *     raise TypeError("self._shape,self._strides,self.data,self.inter cannot be converted to a Python object for pickling")
+ * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
+ *     raise TypeError("self._shape,self._strides,self.data,self.inter cannot be converted to a Python object for pickling")
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_6numind_6NumInd_9__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
+static PyObject *__pyx_pw_6numind_6NumInd_9__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_6numind_6NumInd_8__setstate_cython__(((struct __pyx_obj_6numind_NumInd *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_6numind_6NumInd_8__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_6numind_NumInd *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  __Pyx_RefNannySetupContext("__setstate_cython__", 0);
+
+  /* "(tree fragment)":4
+ *     raise TypeError("self._shape,self._strides,self.data,self.inter cannot be converted to a Python object for pickling")
+ * def __setstate_cython__(self, __pyx_state):
+ *     raise TypeError("self._shape,self._strides,self.data,self.inter cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
+ */
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_Raise(__pyx_t_1, 0, 0, 0);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __PYX_ERR(1, 4, __pyx_L1_error)
+
+  /* "(tree fragment)":3
+ * def __reduce_cython__(self):
+ *     raise TypeError("self._shape,self._strides,self.data,self.inter cannot be converted to a Python object for pickling")
+ * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
+ *     raise TypeError("self._shape,self._strides,self.data,self.inter cannot be converted to a Python object for pickling")
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("numind.NumInd.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+static struct __pyx_vtabstruct_6numind_NumInd __pyx_vtable_6numind_NumInd;
+
+static PyObject *__pyx_tp_new_6numind_NumInd(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+  struct __pyx_obj_6numind_NumInd *p;
+  PyObject *o;
+  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
+    o = (*t->tp_alloc)(t, 0);
+  } else {
+    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
+  }
+  if (unlikely(!o)) return 0;
+  p = ((struct __pyx_obj_6numind_NumInd *)o);
+  p->__pyx_vtab = __pyx_vtabptr_6numind_NumInd;
+  p->_t_shape = Py_None; Py_INCREF(Py_None);
+  p->_t_strides = Py_None; Py_INCREF(Py_None);
+  p->_undarray = Py_None; Py_INCREF(Py_None);
+  return o;
+}
+
+static void __pyx_tp_dealloc_6numind_NumInd(PyObject *o) {
+  struct __pyx_obj_6numind_NumInd *p = (struct __pyx_obj_6numind_NumInd *)o;
+  #if PY_VERSION_HEX >= 0x030400a1
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+    if (PyObject_CallFinalizerFromDealloc(o)) return;
+  }
+  #endif
+  PyObject_GC_UnTrack(o);
+  {
+    PyObject *etype, *eval, *etb;
+    PyErr_Fetch(&etype, &eval, &etb);
+    ++Py_REFCNT(o);
+    __pyx_pw_6numind_6NumInd_5__dealloc__(o);
+    --Py_REFCNT(o);
+    PyErr_Restore(etype, eval, etb);
+  }
+  Py_CLEAR(p->_t_shape);
+  Py_CLEAR(p->_t_strides);
+  Py_CLEAR(p->_undarray);
+  (*Py_TYPE(o)->tp_free)(o);
+}
+
+static int __pyx_tp_traverse_6numind_NumInd(PyObject *o, visitproc v, void *a) {
+  int e;
+  struct __pyx_obj_6numind_NumInd *p = (struct __pyx_obj_6numind_NumInd *)o;
+  if (p->_t_shape) {
+    e = (*v)(p->_t_shape, a); if (e) return e;
+  }
+  if (p->_t_strides) {
+    e = (*v)(p->_t_strides, a); if (e) return e;
+  }
+  if (p->_undarray) {
+    e = (*v)(p->_undarray, a); if (e) return e;
+  }
+  return 0;
+}
+
+static int __pyx_tp_clear_6numind_NumInd(PyObject *o) {
+  PyObject* tmp;
+  struct __pyx_obj_6numind_NumInd *p = (struct __pyx_obj_6numind_NumInd *)o;
+  tmp = ((PyObject*)p->_t_shape);
+  p->_t_shape = Py_None; Py_INCREF(Py_None);
+  Py_XDECREF(tmp);
+  tmp = ((PyObject*)p->_t_strides);
+  p->_t_strides = Py_None; Py_INCREF(Py_None);
+  Py_XDECREF(tmp);
+  tmp = ((PyObject*)p->_undarray);
+  p->_undarray = Py_None; Py_INCREF(Py_None);
+  Py_XDECREF(tmp);
+  return 0;
+}
+
+static PyObject *__pyx_getprop_6numind_6NumInd_undarray(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_6numind_6NumInd_8undarray_1__get__(o);
+}
+
+static PyObject *__pyx_getprop_6numind_6NumInd_shape(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_6numind_6NumInd_5shape_1__get__(o);
+}
+
+static PyObject *__pyx_getprop_6numind_6NumInd_strides(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_6numind_6NumInd_7strides_1__get__(o);
+}
+
+static PyObject *__pyx_getprop_6numind_6NumInd_typestr(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_6numind_6NumInd_7typestr_1__get__(o);
+}
+
+static PyObject *__pyx_getprop_6numind_6NumInd_typekind(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_6numind_6NumInd_8typekind_1__get__(o);
+}
+
+static PyObject *__pyx_getprop_6numind_6NumInd_readonly(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_6numind_6NumInd_8readonly_1__get__(o);
+}
+
+static PyObject *__pyx_getprop_6numind_6NumInd___array_struct__(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_6numind_6NumInd_16__array_struct___1__get__(o);
+}
+
+static PyMethodDef __pyx_methods_6numind_NumInd[] = {
+  {"modify", (PyCFunction)__pyx_pw_6numind_6NumInd_3modify, METH_NOARGS, __pyx_doc_6numind_6NumInd_2modify},
+  {"__reduce_cython__", (PyCFunction)__pyx_pw_6numind_6NumInd_7__reduce_cython__, METH_NOARGS, 0},
+  {"__setstate_cython__", (PyCFunction)__pyx_pw_6numind_6NumInd_9__setstate_cython__, METH_O, 0},
+  {0, 0, 0, 0}
+};
+
+static struct PyGetSetDef __pyx_getsets_6numind_NumInd[] = {
+  {(char *)"undarray", __pyx_getprop_6numind_6NumInd_undarray, 0, (char *)0, 0},
+  {(char *)"shape", __pyx_getprop_6numind_6NumInd_shape, 0, (char *)0, 0},
+  {(char *)"strides", __pyx_getprop_6numind_6NumInd_strides, 0, (char *)0, 0},
+  {(char *)"typestr", __pyx_getprop_6numind_6NumInd_typestr, 0, (char *)0, 0},
+  {(char *)"typekind", __pyx_getprop_6numind_6NumInd_typekind, 0, (char *)0, 0},
+  {(char *)"readonly", __pyx_getprop_6numind_6NumInd_readonly, 0, (char *)0, 0},
+  {(char *)"__array_struct__", __pyx_getprop_6numind_6NumInd___array_struct__, 0, (char *)"Allows other numerical packages to obtain a new object.", 0},
+  {0, 0, 0, 0, 0}
+};
+
+static PyTypeObject __pyx_type_6numind_NumInd = {
+  PyVarObject_HEAD_INIT(0, 0)
+  "numind.NumInd", /*tp_name*/
+  sizeof(struct __pyx_obj_6numind_NumInd), /*tp_basicsize*/
+  0, /*tp_itemsize*/
+  __pyx_tp_dealloc_6numind_NumInd, /*tp_dealloc*/
+  0, /*tp_print*/
+  0, /*tp_getattr*/
+  0, /*tp_setattr*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*tp_compare*/
+  #endif
+  #if PY_MAJOR_VERSION >= 3
+  0, /*tp_as_async*/
+  #endif
+  0, /*tp_repr*/
+  0, /*tp_as_number*/
+  0, /*tp_as_sequence*/
+  0, /*tp_as_mapping*/
+  0, /*tp_hash*/
+  0, /*tp_call*/
+  0, /*tp_str*/
+  0, /*tp_getattro*/
+  0, /*tp_setattro*/
+  0, /*tp_as_buffer*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  0, /*tp_doc*/
+  __pyx_tp_traverse_6numind_NumInd, /*tp_traverse*/
+  __pyx_tp_clear_6numind_NumInd, /*tp_clear*/
+  0, /*tp_richcompare*/
+  0, /*tp_weaklistoffset*/
+  0, /*tp_iter*/
+  0, /*tp_iternext*/
+  __pyx_methods_6numind_NumInd, /*tp_methods*/
+  0, /*tp_members*/
+  __pyx_getsets_6numind_NumInd, /*tp_getset*/
+  0, /*tp_base*/
+  0, /*tp_dict*/
+  0, /*tp_descr_get*/
+  0, /*tp_descr_set*/
+  0, /*tp_dictoffset*/
+  __pyx_pw_6numind_6NumInd_1__init__, /*tp_init*/
+  0, /*tp_alloc*/
+  __pyx_tp_new_6numind_NumInd, /*tp_new*/
+  0, /*tp_free*/
+  0, /*tp_is_gc*/
+  0, /*tp_bases*/
+  0, /*tp_mro*/
+  0, /*tp_cache*/
+  0, /*tp_subclasses*/
+  0, /*tp_weaklist*/
+  0, /*tp_del*/
+  0, /*tp_version_tag*/
+  #if PY_VERSION_HEX >= 0x030400a1
+  0, /*tp_finalize*/
+  #endif
+};
+
+static PyMethodDef __pyx_methods[] = {
+  {0, 0, 0, 0}
+};
+
+#if PY_MAJOR_VERSION >= 3
+static struct PyModuleDef __pyx_moduledef = {
+  #if PY_VERSION_HEX < 0x03020000
+    { PyObject_HEAD_INIT(NULL) NULL, 0, NULL },
+  #else
+    PyModuleDef_HEAD_INIT,
+  #endif
+    "numind",
+    0, /* m_doc */
+    -1, /* m_size */
+    __pyx_methods /* m_methods */,
+    NULL, /* m_reload */
+    NULL, /* m_traverse */
+    NULL, /* m_clear */
+    NULL /* m_free */
+};
+#endif
+
+static __Pyx_StringTabEntry __pyx_string_tab[] = {
+  {&__pyx_n_s_ALIGNED, __pyx_k_ALIGNED, sizeof(__pyx_k_ALIGNED), 0, 0, 1, 1},
+  {&__pyx_n_s_CONTIGUOUS, __pyx_k_CONTIGUOUS, sizeof(__pyx_k_CONTIGUOUS), 0, 0, 1, 1},
+  {&__pyx_n_s_FORTRAN, __pyx_k_FORTRAN, sizeof(__pyx_k_FORTRAN), 0, 0, 1, 1},
+  {&__pyx_n_s_MemoryError, __pyx_k_MemoryError, sizeof(__pyx_k_MemoryError), 0, 0, 1, 1},
+  {&__pyx_n_s_NOTSWAPPED, __pyx_k_NOTSWAPPED, sizeof(__pyx_k_NOTSWAPPED), 0, 0, 1, 1},
+  {&__pyx_n_s_TypeError, __pyx_k_TypeError, sizeof(__pyx_k_TypeError), 0, 0, 1, 1},
+  {&__pyx_n_s_WRITEABLE, __pyx_k_WRITEABLE, sizeof(__pyx_k_WRITEABLE), 0, 0, 1, 1},
+  {&__pyx_kp_s__3, __pyx_k__3, sizeof(__pyx_k__3), 0, 0, 1, 0},
+  {&__pyx_kp_s__6, __pyx_k__6, sizeof(__pyx_k__6), 0, 0, 1, 0},
+  {&__pyx_kp_s__7, __pyx_k__7, sizeof(__pyx_k__7), 0, 0, 1, 0},
+  {&__pyx_n_s_array_interface, __pyx_k_array_interface, sizeof(__pyx_k_array_interface), 0, 0, 1, 1},
+  {&__pyx_n_s_array_struct, __pyx_k_array_struct, sizeof(__pyx_k_array_struct), 0, 0, 1, 1},
+  {&__pyx_n_s_big, __pyx_k_big, sizeof(__pyx_k_big), 0, 0, 1, 1},
+  {&__pyx_n_s_byteorder, __pyx_k_byteorder, sizeof(__pyx_k_byteorder), 0, 0, 1, 1},
+  {&__pyx_n_s_chr, __pyx_k_chr, sizeof(__pyx_k_chr), 0, 0, 1, 1},
+  {&__pyx_n_s_cline_in_traceback, __pyx_k_cline_in_traceback, sizeof(__pyx_k_cline_in_traceback), 0, 0, 1, 1},
+  {&__pyx_n_s_data, __pyx_k_data, sizeof(__pyx_k_data), 0, 0, 1, 1},
+  {&__pyx_n_s_f, __pyx_k_f, sizeof(__pyx_k_f), 0, 0, 1, 1},
+  {&__pyx_n_s_getstate, __pyx_k_getstate, sizeof(__pyx_k_getstate), 0, 0, 1, 1},
+  {&__pyx_n_s_i, __pyx_k_i, sizeof(__pyx_k_i), 0, 0, 1, 1},
+  {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1},
+  {&__pyx_n_s_little, __pyx_k_little, sizeof(__pyx_k_little), 0, 0, 1, 1},
+  {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1},
+  {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1},
+  {&__pyx_n_s_pyx_vtable, __pyx_k_pyx_vtable, sizeof(__pyx_k_pyx_vtable), 0, 0, 1, 1},
+  {&__pyx_n_s_readonly, __pyx_k_readonly, sizeof(__pyx_k_readonly), 0, 0, 1, 1},
+  {&__pyx_n_s_reduce, __pyx_k_reduce, sizeof(__pyx_k_reduce), 0, 0, 1, 1},
+  {&__pyx_n_s_reduce_cython, __pyx_k_reduce_cython, sizeof(__pyx_k_reduce_cython), 0, 0, 1, 1},
+  {&__pyx_n_s_reduce_ex, __pyx_k_reduce_ex, sizeof(__pyx_k_reduce_ex), 0, 0, 1, 1},
+  {&__pyx_kp_s_self__shape_self__strides_self_d, __pyx_k_self__shape_self__strides_self_d, sizeof(__pyx_k_self__shape_self__strides_self_d), 0, 0, 1, 0},
+  {&__pyx_n_s_setstate, __pyx_k_setstate, sizeof(__pyx_k_setstate), 0, 0, 1, 1},
+  {&__pyx_n_s_setstate_cython, __pyx_k_setstate_cython, sizeof(__pyx_k_setstate_cython), 0, 0, 1, 1},
+  {&__pyx_n_s_shape, __pyx_k_shape, sizeof(__pyx_k_shape), 0, 0, 1, 1},
+  {&__pyx_n_s_strides, __pyx_k_strides, sizeof(__pyx_k_strides), 0, 0, 1, 1},
+  {&__pyx_n_s_sys, __pyx_k_sys, sizeof(__pyx_k_sys), 0, 0, 1, 1},
+  {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1},
+  {&__pyx_n_s_typestr, __pyx_k_typestr, sizeof(__pyx_k_typestr), 0, 0, 1, 1},
+  {&__pyx_n_s_undarray, __pyx_k_undarray, sizeof(__pyx_k_undarray), 0, 0, 1, 1},
+  {0, 0, 0, 0, 0, 0, 0}
+};
+static int __Pyx_InitCachedBuiltins(void) {
+  __pyx_builtin_chr = __Pyx_GetBuiltinName(__pyx_n_s_chr); if (!__pyx_builtin_chr) __PYX_ERR(0, 119, __pyx_L1_error)
+  __pyx_builtin_MemoryError = __Pyx_GetBuiltinName(__pyx_n_s_MemoryError); if (!__pyx_builtin_MemoryError) __PYX_ERR(0, 148, __pyx_L1_error)
+  __pyx_builtin_TypeError = __Pyx_GetBuiltinName(__pyx_n_s_TypeError); if (!__pyx_builtin_TypeError) __PYX_ERR(1, 2, __pyx_L1_error)
+  return 0;
+  __pyx_L1_error:;
+  return -1;
+}
+
+static int __Pyx_InitCachedConstants(void) {
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0);
+
+  /* "numind.pyx":89
+ *             # strides is None. Compute them explicitely.
+ *             self._t_strides = [0] * self._nd
+ *             stride = int(self.typestr[2:])             # <<<<<<<<<<<<<<
+ *             for i from self._nd > i >= 0:
+ *                 self._strides[i] = stride
+ */
+  __pyx_slice_ = PySlice_New(__pyx_int_2, Py_None, Py_None); if (unlikely(!__pyx_slice_)) __PYX_ERR(0, 89, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_slice_);
+  __Pyx_GIVEREF(__pyx_slice_);
+
+  /* "numind.pyx":153
+ *         inter.nd = self._nd
+ *         inter.typekind = ord(typestr[1])
+ *         inter.itemsize = int(typestr[2:])             # <<<<<<<<<<<<<<
+ *         inter.flags = 0  # initialize flags
+ *         if typestr[0] == '|':
+ */
+  __pyx_slice__2 = PySlice_New(__pyx_int_2, Py_None, Py_None); if (unlikely(!__pyx_slice__2)) __PYX_ERR(0, 153, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_slice__2);
+  __Pyx_GIVEREF(__pyx_slice__2);
+
+  /* "(tree fragment)":2
+ * def __reduce_cython__(self):
+ *     raise TypeError("self._shape,self._strides,self.data,self.inter cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
+ * def __setstate_cython__(self, __pyx_state):
+ *     raise TypeError("self._shape,self._strides,self.data,self.inter cannot be converted to a Python object for pickling")
+ */
+  __pyx_tuple__4 = PyTuple_Pack(1, __pyx_kp_s_self__shape_self__strides_self_d); if (unlikely(!__pyx_tuple__4)) __PYX_ERR(1, 2, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__4);
+  __Pyx_GIVEREF(__pyx_tuple__4);
+
+  /* "(tree fragment)":4
+ *     raise TypeError("self._shape,self._strides,self.data,self.inter cannot be converted to a Python object for pickling")
+ * def __setstate_cython__(self, __pyx_state):
+ *     raise TypeError("self._shape,self._strides,self.data,self.inter cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
+ */
+  __pyx_tuple__5 = PyTuple_Pack(1, __pyx_kp_s_self__shape_self__strides_self_d); if (unlikely(!__pyx_tuple__5)) __PYX_ERR(1, 4, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__5);
+  __Pyx_GIVEREF(__pyx_tuple__5);
+  __Pyx_RefNannyFinishContext();
+  return 0;
+  __pyx_L1_error:;
+  __Pyx_RefNannyFinishContext();
+  return -1;
+}
+
+static int __Pyx_InitGlobals(void) {
+  if (__Pyx_InitStrings(__pyx_string_tab) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
+  __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) __PYX_ERR(0, 1, __pyx_L1_error)
+  __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) __PYX_ERR(0, 1, __pyx_L1_error)
+  __pyx_int_2 = PyInt_FromLong(2); if (unlikely(!__pyx_int_2)) __PYX_ERR(0, 1, __pyx_L1_error)
+  __pyx_int_256 = PyInt_FromLong(256); if (unlikely(!__pyx_int_256)) __PYX_ERR(0, 1, __pyx_L1_error)
+  __pyx_int_512 = PyInt_FromLong(512); if (unlikely(!__pyx_int_512)) __PYX_ERR(0, 1, __pyx_L1_error)
+  __pyx_int_1024 = PyInt_FromLong(1024); if (unlikely(!__pyx_int_1024)) __PYX_ERR(0, 1, __pyx_L1_error)
+  return 0;
+  __pyx_L1_error:;
+  return -1;
+}
+
+#if PY_MAJOR_VERSION < 3
+PyMODINIT_FUNC initnumind(void); /*proto*/
+PyMODINIT_FUNC initnumind(void)
+#else
+PyMODINIT_FUNC PyInit_numind(void); /*proto*/
+PyMODINIT_FUNC PyInit_numind(void)
+#endif
+{
+  PyObject *__pyx_t_1 = NULL;
+  __Pyx_RefNannyDeclarations
+  #if CYTHON_REFNANNY
+  __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny");
+  if (!__Pyx_RefNanny) {
+      PyErr_Clear();
+      __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny");
+      if (!__Pyx_RefNanny)
+          Py_FatalError("failed to import 'refnanny' module");
+  }
+  #endif
+  __Pyx_RefNannySetupContext("PyMODINIT_FUNC PyInit_numind(void)", 0);
+  if (__Pyx_check_binary_version() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
+  __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) __PYX_ERR(0, 1, __pyx_L1_error)
+  __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) __PYX_ERR(0, 1, __pyx_L1_error)
+  __pyx_empty_unicode = PyUnicode_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_unicode)) __PYX_ERR(0, 1, __pyx_L1_error)
+  #ifdef __Pyx_CyFunction_USED
+  if (__pyx_CyFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
+  #endif
+  #ifdef __Pyx_FusedFunction_USED
+  if (__pyx_FusedFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
+  #endif
+  #ifdef __Pyx_Coroutine_USED
+  if (__pyx_Coroutine_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
+  #endif
+  #ifdef __Pyx_Generator_USED
+  if (__pyx_Generator_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
+  #endif
+  #ifdef __Pyx_StopAsyncIteration_USED
+  if (__pyx_StopAsyncIteration_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
+  #endif
+  /*--- Library function declarations ---*/
+  /*--- Threads initialization code ---*/
+  #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS
+  #ifdef WITH_THREAD /* Python build with threading support? */
+  PyEval_InitThreads();
+  #endif
+  #endif
+  /*--- Module creation code ---*/
+  #if PY_MAJOR_VERSION < 3
+  __pyx_m = Py_InitModule4("numind", __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m);
+  #else
+  __pyx_m = PyModule_Create(&__pyx_moduledef);
+  #endif
+  if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error)
+  __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) __PYX_ERR(0, 1, __pyx_L1_error)
+  Py_INCREF(__pyx_d);
+  __pyx_b = PyImport_AddModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_b)) __PYX_ERR(0, 1, __pyx_L1_error)
+  __pyx_cython_runtime = PyImport_AddModule((char *) "cython_runtime"); if (unlikely(!__pyx_cython_runtime)) __PYX_ERR(0, 1, __pyx_L1_error)
+  #if CYTHON_COMPILING_IN_PYPY
+  Py_INCREF(__pyx_b);
+  #endif
+  if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
+  /*--- Initialize various global constants etc. ---*/
+  if (__Pyx_InitGlobals() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
+  #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT)
+  if (__Pyx_init_sys_getdefaultencoding_params() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
+  #endif
+  if (__pyx_module_is_main_numind) {
+    if (PyObject_SetAttrString(__pyx_m, "__name__", __pyx_n_s_main) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
+  }
+  #if PY_MAJOR_VERSION >= 3
+  {
+    PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) __PYX_ERR(0, 1, __pyx_L1_error)
+    if (!PyDict_GetItemString(modules, "numind")) {
+      if (unlikely(PyDict_SetItemString(modules, "numind", __pyx_m) < 0)) __PYX_ERR(0, 1, __pyx_L1_error)
+    }
+  }
+  #endif
+  /*--- Builtin init code ---*/
+  if (__Pyx_InitCachedBuiltins() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
+  /*--- Constants init code ---*/
+  if (__Pyx_InitCachedConstants() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
+  /*--- Global init code ---*/
+  /*--- Variable export code ---*/
+  /*--- Function export code ---*/
+  /*--- Type init code ---*/
+  __pyx_vtabptr_6numind_NumInd = &__pyx_vtable_6numind_NumInd;
+  __pyx_vtable_6numind_NumInd._get_array_interface = (__pyx_t_6numind_PyArrayInterface *(*)(struct __pyx_obj_6numind_NumInd *))__pyx_f_6numind_6NumInd__get_array_interface;
+  if (PyType_Ready(&__pyx_type_6numind_NumInd) < 0) __PYX_ERR(0, 56, __pyx_L1_error)
+  __pyx_type_6numind_NumInd.tp_print = 0;
+  if (__Pyx_SetVtable(__pyx_type_6numind_NumInd.tp_dict, __pyx_vtabptr_6numind_NumInd) < 0) __PYX_ERR(0, 56, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "NumInd", (PyObject *)&__pyx_type_6numind_NumInd) < 0) __PYX_ERR(0, 56, __pyx_L1_error)
+  if (__Pyx_setup_reduce((PyObject*)&__pyx_type_6numind_NumInd) < 0) __PYX_ERR(0, 56, __pyx_L1_error)
+  __pyx_ptype_6numind_NumInd = &__pyx_type_6numind_NumInd;
+  /*--- Type import code ---*/
+  /*--- Variable import code ---*/
+  /*--- Function import code ---*/
+  /*--- Execution code ---*/
+  #if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED)
+  if (__Pyx_patch_abc() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
+  #endif
+
+  /* "numind.pyx":13
+ * # Author: Francesc Altet
+ * 
+ * import sys             # <<<<<<<<<<<<<<
+ * from cpython.pycapsule cimport *
+ * 
+ */
+  __pyx_t_1 = __Pyx_Import(__pyx_n_s_sys, 0, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 13, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_sys, __pyx_t_1) < 0) __PYX_ERR(0, 13, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+  /* "numind.pyx":33
+ * 
+ * # for PyArrayInterface:
+ * CONTIGUOUS=0x01             # <<<<<<<<<<<<<<
+ * FORTRAN=0x02
+ * ALIGNED=0x100
+ */
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_CONTIGUOUS, __pyx_int_1) < 0) __PYX_ERR(0, 33, __pyx_L1_error)
+
+  /* "numind.pyx":34
+ * # for PyArrayInterface:
+ * CONTIGUOUS=0x01
+ * FORTRAN=0x02             # <<<<<<<<<<<<<<
+ * ALIGNED=0x100
+ * NOTSWAPPED=0x200
+ */
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_FORTRAN, __pyx_int_2) < 0) __PYX_ERR(0, 34, __pyx_L1_error)
+
+  /* "numind.pyx":35
+ * CONTIGUOUS=0x01
+ * FORTRAN=0x02
+ * ALIGNED=0x100             # <<<<<<<<<<<<<<
+ * NOTSWAPPED=0x200
+ * WRITEABLE=0x400
+ */
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ALIGNED, __pyx_int_256) < 0) __PYX_ERR(0, 35, __pyx_L1_error)
+
+  /* "numind.pyx":36
+ * FORTRAN=0x02
+ * ALIGNED=0x100
+ * NOTSWAPPED=0x200             # <<<<<<<<<<<<<<
+ * WRITEABLE=0x400
+ * 
+ */
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_NOTSWAPPED, __pyx_int_512) < 0) __PYX_ERR(0, 36, __pyx_L1_error)
+
+  /* "numind.pyx":37
+ * ALIGNED=0x100
+ * NOTSWAPPED=0x200
+ * WRITEABLE=0x400             # <<<<<<<<<<<<<<
+ * 
+ * # byteorder dictionary
+ */
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_WRITEABLE, __pyx_int_1024) < 0) __PYX_ERR(0, 37, __pyx_L1_error)
+
+  /* "numind.pyx":40
+ * 
+ * # byteorder dictionary
+ * byteorder = {'<':'little', '>':'big'}             # <<<<<<<<<<<<<<
+ * 
+ * ctypedef struct PyArrayInterface:
+ */
+  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 40, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_s__6, __pyx_n_s_little) < 0) __PYX_ERR(0, 40, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_s__7, __pyx_n_s_big) < 0) __PYX_ERR(0, 40, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_byteorder, __pyx_t_1) < 0) __PYX_ERR(0, 40, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+  /* "numind.pyx":1
+ * # This Pyrex extension class can take a numpy/numarray/Numeric object             # <<<<<<<<<<<<<<
+ * # as a parameter and wrap it so that its information can be accessed
+ * # in a standard way, both in Python space and C space.
+ */
+  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_1) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+  /*--- Wrapped vars code ---*/
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  if (__pyx_m) {
+    if (__pyx_d) {
+      __Pyx_AddTraceback("init numind", 0, __pyx_lineno, __pyx_filename);
+    }
+    Py_DECREF(__pyx_m); __pyx_m = 0;
+  } else if (!PyErr_Occurred()) {
+    PyErr_SetString(PyExc_ImportError, "init numind");
+  }
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  #if PY_MAJOR_VERSION < 3
+  return;
+  #else
+  return __pyx_m;
+  #endif
+}
+
+/* --- Runtime support code --- */
+/* Refnanny */
+#if CYTHON_REFNANNY
+static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) {
+    PyObject *m = NULL, *p = NULL;
+    void *r = NULL;
+    m = PyImport_ImportModule((char *)modname);
+    if (!m) goto end;
+    p = PyObject_GetAttrString(m, (char *)"RefNannyAPI");
+    if (!p) goto end;
+    r = PyLong_AsVoidPtr(p);
+end:
+    Py_XDECREF(p);
+    Py_XDECREF(m);
+    return (__Pyx_RefNannyAPIStruct *)r;
+}
+#endif
+
+/* GetBuiltinName */
+static PyObject *__Pyx_GetBuiltinName(PyObject *name) {
+    PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name);
+    if (unlikely(!result)) {
+        PyErr_Format(PyExc_NameError,
+#if PY_MAJOR_VERSION >= 3
+            "name '%U' is not defined", name);
+#else
+            "name '%.200s' is not defined", PyString_AS_STRING(name));
+#endif
+    }
+    return result;
+}
+
+/* RaiseDoubleKeywords */
+static void __Pyx_RaiseDoubleKeywordsError(
+    const char* func_name,
+    PyObject* kw_name)
+{
+    PyErr_Format(PyExc_TypeError,
+        #if PY_MAJOR_VERSION >= 3
+        "%s() got multiple values for keyword argument '%U'", func_name, kw_name);
+        #else
+        "%s() got multiple values for keyword argument '%s'", func_name,
+        PyString_AsString(kw_name));
+        #endif
+}
+
+/* ParseKeywords */
+static int __Pyx_ParseOptionalKeywords(
+    PyObject *kwds,
+    PyObject **argnames[],
+    PyObject *kwds2,
+    PyObject *values[],
+    Py_ssize_t num_pos_args,
+    const char* function_name)
+{
+    PyObject *key = 0, *value = 0;
+    Py_ssize_t pos = 0;
+    PyObject*** name;
+    PyObject*** first_kw_arg = argnames + num_pos_args;
+    while (PyDict_Next(kwds, &pos, &key, &value)) {
+        name = first_kw_arg;
+        while (*name && (**name != key)) name++;
+        if (*name) {
+            values[name-argnames] = value;
+            continue;
+        }
+        name = first_kw_arg;
+        #if PY_MAJOR_VERSION < 3
+        if (likely(PyString_CheckExact(key)) || likely(PyString_Check(key))) {
+            while (*name) {
+                if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key))
+                        && _PyString_Eq(**name, key)) {
+                    values[name-argnames] = value;
+                    break;
+                }
+                name++;
+            }
+            if (*name) continue;
+            else {
+                PyObject*** argname = argnames;
+                while (argname != first_kw_arg) {
+                    if ((**argname == key) || (
+                            (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key))
+                             && _PyString_Eq(**argname, key))) {
+                        goto arg_passed_twice;
+                    }
+                    argname++;
+                }
+            }
+        } else
+        #endif
+        if (likely(PyUnicode_Check(key))) {
+            while (*name) {
+                int cmp = (**name == key) ? 0 :
+                #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3
+                    (PyUnicode_GET_SIZE(**name) != PyUnicode_GET_SIZE(key)) ? 1 :
+                #endif
+                    PyUnicode_Compare(**name, key);
+                if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad;
+                if (cmp == 0) {
+                    values[name-argnames] = value;
+                    break;
+                }
+                name++;
+            }
+            if (*name) continue;
+            else {
+                PyObject*** argname = argnames;
+                while (argname != first_kw_arg) {
+                    int cmp = (**argname == key) ? 0 :
+                    #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3
+                        (PyUnicode_GET_SIZE(**argname) != PyUnicode_GET_SIZE(key)) ? 1 :
+                    #endif
+                        PyUnicode_Compare(**argname, key);
+                    if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad;
+                    if (cmp == 0) goto arg_passed_twice;
+                    argname++;
+                }
+            }
+        } else
+            goto invalid_keyword_type;
+        if (kwds2) {
+            if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad;
+        } else {
+            goto invalid_keyword;
+        }
+    }
+    return 0;
+arg_passed_twice:
+    __Pyx_RaiseDoubleKeywordsError(function_name, key);
+    goto bad;
+invalid_keyword_type:
+    PyErr_Format(PyExc_TypeError,
+        "%.200s() keywords must be strings", function_name);
+    goto bad;
+invalid_keyword:
+    PyErr_Format(PyExc_TypeError,
+    #if PY_MAJOR_VERSION < 3
+        "%.200s() got an unexpected keyword argument '%.200s'",
+        function_name, PyString_AsString(key));
+    #else
+        "%s() got an unexpected keyword argument '%U'",
+        function_name, key);
+    #endif
+bad:
+    return -1;
+}
+
+/* RaiseArgTupleInvalid */
+static void __Pyx_RaiseArgtupleInvalid(
+    const char* func_name,
+    int exact,
+    Py_ssize_t num_min,
+    Py_ssize_t num_max,
+    Py_ssize_t num_found)
+{
+    Py_ssize_t num_expected;
+    const char *more_or_less;
+    if (num_found < num_min) {
+        num_expected = num_min;
+        more_or_less = "at least";
+    } else {
+        num_expected = num_max;
+        more_or_less = "at most";
+    }
+    if (exact) {
+        more_or_less = "exactly";
+    }
+    PyErr_Format(PyExc_TypeError,
+                 "%.200s() takes %.8s %" CYTHON_FORMAT_SSIZE_T "d positional argument%.1s (%" CYTHON_FORMAT_SSIZE_T "d given)",
+                 func_name, more_or_less, num_expected,
+                 (num_expected == 1) ? "" : "s", num_found);
+}
+
+/* GetItemInt */
+static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) {
+    PyObject *r;
+    if (!j) return NULL;
+    r = PyObject_GetItem(o, j);
+    Py_DECREF(j);
+    return r;
+}
+static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i,
+                                                              CYTHON_NCP_UNUSED int wraparound,
+                                                              CYTHON_NCP_UNUSED int boundscheck) {
+#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+    Py_ssize_t wrapped_i = i;
+    if (wraparound & unlikely(i < 0)) {
+        wrapped_i += PyList_GET_SIZE(o);
+    }
+    if ((!boundscheck) || likely((0 <= wrapped_i) & (wrapped_i < PyList_GET_SIZE(o)))) {
+        PyObject *r = PyList_GET_ITEM(o, wrapped_i);
+        Py_INCREF(r);
+        return r;
+    }
+    return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
+#else
+    return PySequence_GetItem(o, i);
+#endif
+}
+static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i,
+                                                              CYTHON_NCP_UNUSED int wraparound,
+                                                              CYTHON_NCP_UNUSED int boundscheck) {
+#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+    Py_ssize_t wrapped_i = i;
+    if (wraparound & unlikely(i < 0)) {
+        wrapped_i += PyTuple_GET_SIZE(o);
+    }
+    if ((!boundscheck) || likely((0 <= wrapped_i) & (wrapped_i < PyTuple_GET_SIZE(o)))) {
+        PyObject *r = PyTuple_GET_ITEM(o, wrapped_i);
+        Py_INCREF(r);
+        return r;
+    }
+    return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
+#else
+    return PySequence_GetItem(o, i);
+#endif
+}
+static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, int is_list,
+                                                     CYTHON_NCP_UNUSED int wraparound,
+                                                     CYTHON_NCP_UNUSED int boundscheck) {
+#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS && CYTHON_USE_TYPE_SLOTS
+    if (is_list || PyList_CheckExact(o)) {
+        Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o);
+        if ((!boundscheck) || (likely((n >= 0) & (n < PyList_GET_SIZE(o))))) {
+            PyObject *r = PyList_GET_ITEM(o, n);
+            Py_INCREF(r);
+            return r;
+        }
+    }
+    else if (PyTuple_CheckExact(o)) {
+        Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o);
+        if ((!boundscheck) || likely((n >= 0) & (n < PyTuple_GET_SIZE(o)))) {
+            PyObject *r = PyTuple_GET_ITEM(o, n);
+            Py_INCREF(r);
+            return r;
+        }
+    } else {
+        PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence;
+        if (likely(m && m->sq_item)) {
+            if (wraparound && unlikely(i < 0) && likely(m->sq_length)) {
+                Py_ssize_t l = m->sq_length(o);
+                if (likely(l >= 0)) {
+                    i += l;
+                } else {
+                    if (!PyErr_ExceptionMatches(PyExc_OverflowError))
+                        return NULL;
+                    PyErr_Clear();
+                }
+            }
+            return m->sq_item(o, i);
+        }
+    }
+#else
+    if (is_list || PySequence_Check(o)) {
+        return PySequence_GetItem(o, i);
+    }
+#endif
+    return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
+}
+
+/* SliceObject */
+static CYTHON_INLINE PyObject* __Pyx_PyObject_GetSlice(PyObject* obj,
+        Py_ssize_t cstart, Py_ssize_t cstop,
+        PyObject** _py_start, PyObject** _py_stop, PyObject** _py_slice,
+        int has_cstart, int has_cstop, CYTHON_UNUSED int wraparound) {
+#if CYTHON_USE_TYPE_SLOTS
+    PyMappingMethods* mp;
+#if PY_MAJOR_VERSION < 3
+    PySequenceMethods* ms = Py_TYPE(obj)->tp_as_sequence;
+    if (likely(ms && ms->sq_slice)) {
+        if (!has_cstart) {
+            if (_py_start && (*_py_start != Py_None)) {
+                cstart = __Pyx_PyIndex_AsSsize_t(*_py_start);
+                if ((cstart == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad;
+            } else
+                cstart = 0;
+        }
+        if (!has_cstop) {
+            if (_py_stop && (*_py_stop != Py_None)) {
+                cstop = __Pyx_PyIndex_AsSsize_t(*_py_stop);
+                if ((cstop == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad;
+            } else
+                cstop = PY_SSIZE_T_MAX;
+        }
+        if (wraparound && unlikely((cstart < 0) | (cstop < 0)) && likely(ms->sq_length)) {
+            Py_ssize_t l = ms->sq_length(obj);
+            if (likely(l >= 0)) {
+                if (cstop < 0) {
+                    cstop += l;
+                    if (cstop < 0) cstop = 0;
+                }
+                if (cstart < 0) {
+                    cstart += l;
+                    if (cstart < 0) cstart = 0;
+                }
+            } else {
+                if (!PyErr_ExceptionMatches(PyExc_OverflowError))
+                    goto bad;
+                PyErr_Clear();
+            }
+        }
+        return ms->sq_slice(obj, cstart, cstop);
+    }
+#endif
+    mp = Py_TYPE(obj)->tp_as_mapping;
+    if (likely(mp && mp->mp_subscript))
+#endif
+    {
+        PyObject* result;
+        PyObject *py_slice, *py_start, *py_stop;
+        if (_py_slice) {
+            py_slice = *_py_slice;
+        } else {
+            PyObject* owned_start = NULL;
+            PyObject* owned_stop = NULL;
+            if (_py_start) {
+                py_start = *_py_start;
+            } else {
+                if (has_cstart) {
+                    owned_start = py_start = PyInt_FromSsize_t(cstart);
+                    if (unlikely(!py_start)) goto bad;
+                } else
+                    py_start = Py_None;
+            }
+            if (_py_stop) {
+                py_stop = *_py_stop;
+            } else {
+                if (has_cstop) {
+                    owned_stop = py_stop = PyInt_FromSsize_t(cstop);
+                    if (unlikely(!py_stop)) {
+                        Py_XDECREF(owned_start);
+                        goto bad;
+                    }
+                } else
+                    py_stop = Py_None;
+            }
+            py_slice = PySlice_New(py_start, py_stop, Py_None);
+            Py_XDECREF(owned_start);
+            Py_XDECREF(owned_stop);
+            if (unlikely(!py_slice)) goto bad;
+        }
+#if CYTHON_USE_TYPE_SLOTS
+        result = mp->mp_subscript(obj, py_slice);
+#else
+        result = PyObject_GetItem(obj, py_slice);
+#endif
+        if (!_py_slice) {
+            Py_DECREF(py_slice);
+        }
+        return result;
+    }
+    PyErr_Format(PyExc_TypeError,
+        "'%.200s' object is unsliceable", Py_TYPE(obj)->tp_name);
+bad:
+    return NULL;
+}
+
+/* SetItemInt */
+static CYTHON_INLINE int __Pyx_SetItemInt_Generic(PyObject *o, PyObject *j, PyObject *v) {
+    int r;
+    if (!j) return -1;
+    r = PyObject_SetItem(o, j, v);
+    Py_DECREF(j);
+    return r;
+}
+static CYTHON_INLINE int __Pyx_SetItemInt_Fast(PyObject *o, Py_ssize_t i, PyObject *v, int is_list,
+                                               CYTHON_NCP_UNUSED int wraparound, CYTHON_NCP_UNUSED int boundscheck) {
+#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS && CYTHON_USE_TYPE_SLOTS
+    if (is_list || PyList_CheckExact(o)) {
+        Py_ssize_t n = (!wraparound) ? i : ((likely(i >= 0)) ? i : i + PyList_GET_SIZE(o));
+        if ((!boundscheck) || likely((n >= 0) & (n < PyList_GET_SIZE(o)))) {
+            PyObject* old = PyList_GET_ITEM(o, n);
+            Py_INCREF(v);
+            PyList_SET_ITEM(o, n, v);
+            Py_DECREF(old);
+            return 1;
+        }
+    } else {
+        PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence;
+        if (likely(m && m->sq_ass_item)) {
+            if (wraparound && unlikely(i < 0) && likely(m->sq_length)) {
+                Py_ssize_t l = m->sq_length(o);
+                if (likely(l >= 0)) {
+                    i += l;
+                } else {
+                    if (!PyErr_ExceptionMatches(PyExc_OverflowError))
+                        return -1;
+                    PyErr_Clear();
+                }
+            }
+            return m->sq_ass_item(o, i, v);
+        }
+    }
+#else
+#if CYTHON_COMPILING_IN_PYPY
+    if (is_list || (PySequence_Check(o) && !PyDict_Check(o))) {
+#else
+    if (is_list || PySequence_Check(o)) {
+#endif
+        return PySequence_SetItem(o, i, v);
+    }
+#endif
+    return __Pyx_SetItemInt_Generic(o, PyInt_FromSsize_t(i), v);
+}
+
+/* PyObjectCall */
+  #if CYTHON_COMPILING_IN_CPYTHON
+static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) {
+    PyObject *result;
+    ternaryfunc call = func->ob_type->tp_call;
+    if (unlikely(!call))
+        return PyObject_Call(func, arg, kw);
+    if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object")))
+        return NULL;
+    result = (*call)(func, arg, kw);
+    Py_LeaveRecursiveCall();
+    if (unlikely(!result) && unlikely(!PyErr_Occurred())) {
+        PyErr_SetString(
+            PyExc_SystemError,
+            "NULL result without error in PyObject_Call");
+    }
+    return result;
+}
+#endif
+
+/* GetAttr */
+  static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *o, PyObject *n) {
+#if CYTHON_COMPILING_IN_CPYTHON
+#if PY_MAJOR_VERSION >= 3
+    if (likely(PyUnicode_Check(n)))
+#else
+    if (likely(PyString_Check(n)))
+#endif
+        return __Pyx_PyObject_GetAttrStr(o, n);
+#endif
+    return PyObject_GetAttr(o, n);
+}
+
+/* HasAttr */
+  static CYTHON_INLINE int __Pyx_HasAttr(PyObject *o, PyObject *n) {
+    PyObject *r;
+    if (unlikely(!__Pyx_PyBaseString_Check(n))) {
+        PyErr_SetString(PyExc_TypeError,
+                        "hasattr(): attribute name must be string");
+        return -1;
+    }
+    r = __Pyx_GetAttr(o, n);
+    if (unlikely(!r)) {
+        PyErr_Clear();
+        return 0;
+    } else {
+        Py_DECREF(r);
+        return 1;
+    }
+}
+
+/* UnicodeAsUCS4 */
+  static CYTHON_INLINE Py_UCS4 __Pyx_PyUnicode_AsPy_UCS4(PyObject* x) {
+   Py_ssize_t length;
+   #if CYTHON_PEP393_ENABLED
+   length = PyUnicode_GET_LENGTH(x);
+   if (likely(length == 1)) {
+       return PyUnicode_READ_CHAR(x, 0);
+   }
+   #else
+   length = PyUnicode_GET_SIZE(x);
+   if (likely(length == 1)) {
+       return PyUnicode_AS_UNICODE(x)[0];
+   }
+   #if Py_UNICODE_SIZE == 2
+   else if (PyUnicode_GET_SIZE(x) == 2) {
+       Py_UCS4 high_val = PyUnicode_AS_UNICODE(x)[0];
+       if (high_val >= 0xD800 && high_val <= 0xDBFF) {
+           Py_UCS4 low_val = PyUnicode_AS_UNICODE(x)[1];
+           if (low_val >= 0xDC00 && low_val <= 0xDFFF) {
+               return 0x10000 + (((high_val & ((1<<10)-1)) << 10) | (low_val & ((1<<10)-1)));
+           }
+       }
+   }
+   #endif
+   #endif
+   PyErr_Format(PyExc_ValueError,
+                "only single character unicode strings can be converted to Py_UCS4, "
+                "got length %" CYTHON_FORMAT_SSIZE_T "d", length);
+   return (Py_UCS4)-1;
+}
+
+/* object_ord */
+  static long __Pyx__PyObject_Ord(PyObject* c) {
+    Py_ssize_t size;
+    if (PyBytes_Check(c)) {
+        size = PyBytes_GET_SIZE(c);
+        if (likely(size == 1)) {
+            return (unsigned char) PyBytes_AS_STRING(c)[0];
+        }
+#if PY_MAJOR_VERSION < 3
+    } else if (PyUnicode_Check(c)) {
+        return (long)__Pyx_PyUnicode_AsPy_UCS4(c);
+#endif
+#if (!CYTHON_COMPILING_IN_PYPY) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE))
+    } else if (PyByteArray_Check(c)) {
+        size = PyByteArray_GET_SIZE(c);
+        if (likely(size == 1)) {
+            return (unsigned char) PyByteArray_AS_STRING(c)[0];
+        }
+#endif
+    } else {
+        PyErr_Format(PyExc_TypeError,
+            "ord() expected string of length 1, but %.200s found", c->ob_type->tp_name);
+        return (long)(Py_UCS4)-1;
+    }
+    PyErr_Format(PyExc_TypeError,
+        "ord() expected a character, but string of length %zd found", size);
+    return (long)(Py_UCS4)-1;
+}
+
+/* BytesEquals */
+  static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) {
+#if CYTHON_COMPILING_IN_PYPY
+    return PyObject_RichCompareBool(s1, s2, equals);
+#else
+    if (s1 == s2) {
+        return (equals == Py_EQ);
+    } else if (PyBytes_CheckExact(s1) & PyBytes_CheckExact(s2)) {
+        const char *ps1, *ps2;
+        Py_ssize_t length = PyBytes_GET_SIZE(s1);
+        if (length != PyBytes_GET_SIZE(s2))
+            return (equals == Py_NE);
+        ps1 = PyBytes_AS_STRING(s1);
+        ps2 = PyBytes_AS_STRING(s2);
+        if (ps1[0] != ps2[0]) {
+            return (equals == Py_NE);
+        } else if (length == 1) {
+            return (equals == Py_EQ);
+        } else {
+            int result;
+#if CYTHON_USE_UNICODE_INTERNALS
+            Py_hash_t hash1, hash2;
+            hash1 = ((PyBytesObject*)s1)->ob_shash;
+            hash2 = ((PyBytesObject*)s2)->ob_shash;
+            if (hash1 != hash2 && hash1 != -1 && hash2 != -1) {
+                return (equals == Py_NE);
+            }
+#endif
+            result = memcmp(ps1, ps2, (size_t)length);
+            return (equals == Py_EQ) ? (result == 0) : (result != 0);
+        }
+    } else if ((s1 == Py_None) & PyBytes_CheckExact(s2)) {
+        return (equals == Py_NE);
+    } else if ((s2 == Py_None) & PyBytes_CheckExact(s1)) {
+        return (equals == Py_NE);
+    } else {
+        int result;
+        PyObject* py_result = PyObject_RichCompare(s1, s2, equals);
+        if (!py_result)
+            return -1;
+        result = __Pyx_PyObject_IsTrue(py_result);
+        Py_DECREF(py_result);
+        return result;
+    }
+#endif
+}
+
+/* UnicodeEquals */
+  static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals) {
+#if CYTHON_COMPILING_IN_PYPY
+    return PyObject_RichCompareBool(s1, s2, equals);
+#else
+#if PY_MAJOR_VERSION < 3
+    PyObject* owned_ref = NULL;
+#endif
+    int s1_is_unicode, s2_is_unicode;
+    if (s1 == s2) {
+        goto return_eq;
+    }
+    s1_is_unicode = PyUnicode_CheckExact(s1);
+    s2_is_unicode = PyUnicode_CheckExact(s2);
+#if PY_MAJOR_VERSION < 3
+    if ((s1_is_unicode & (!s2_is_unicode)) && PyString_CheckExact(s2)) {
+        owned_ref = PyUnicode_FromObject(s2);
+        if (unlikely(!owned_ref))
+            return -1;
+        s2 = owned_ref;
+        s2_is_unicode = 1;
+    } else if ((s2_is_unicode & (!s1_is_unicode)) && PyString_CheckExact(s1)) {
+        owned_ref = PyUnicode_FromObject(s1);
+        if (unlikely(!owned_ref))
+            return -1;
+        s1 = owned_ref;
+        s1_is_unicode = 1;
+    } else if (((!s2_is_unicode) & (!s1_is_unicode))) {
+        return __Pyx_PyBytes_Equals(s1, s2, equals);
+    }
+#endif
+    if (s1_is_unicode & s2_is_unicode) {
+        Py_ssize_t length;
+        int kind;
+        void *data1, *data2;
+        if (unlikely(__Pyx_PyUnicode_READY(s1) < 0) || unlikely(__Pyx_PyUnicode_READY(s2) < 0))
+            return -1;
+        length = __Pyx_PyUnicode_GET_LENGTH(s1);
+        if (length != __Pyx_PyUnicode_GET_LENGTH(s2)) {
+            goto return_ne;
+        }
+#if CYTHON_USE_UNICODE_INTERNALS
+        {
+            Py_hash_t hash1, hash2;
+        #if CYTHON_PEP393_ENABLED
+            hash1 = ((PyASCIIObject*)s1)->hash;
+            hash2 = ((PyASCIIObject*)s2)->hash;
+        #else
+            hash1 = ((PyUnicodeObject*)s1)->hash;
+            hash2 = ((PyUnicodeObject*)s2)->hash;
+        #endif
+            if (hash1 != hash2 && hash1 != -1 && hash2 != -1) {
+                goto return_ne;
+            }
+        }
+#endif
+        kind = __Pyx_PyUnicode_KIND(s1);
+        if (kind != __Pyx_PyUnicode_KIND(s2)) {
+            goto return_ne;
+        }
+        data1 = __Pyx_PyUnicode_DATA(s1);
+        data2 = __Pyx_PyUnicode_DATA(s2);
+        if (__Pyx_PyUnicode_READ(kind, data1, 0) != __Pyx_PyUnicode_READ(kind, data2, 0)) {
+            goto return_ne;
+        } else if (length == 1) {
+            goto return_eq;
+        } else {
+            int result = memcmp(data1, data2, (size_t)(length * kind));
+            #if PY_MAJOR_VERSION < 3
+            Py_XDECREF(owned_ref);
+            #endif
+            return (equals == Py_EQ) ? (result == 0) : (result != 0);
+        }
+    } else if ((s1 == Py_None) & s2_is_unicode) {
+        goto return_ne;
+    } else if ((s2 == Py_None) & s1_is_unicode) {
+        goto return_ne;
+    } else {
+        int result;
+        PyObject* py_result = PyObject_RichCompare(s1, s2, equals);
+        if (!py_result)
+            return -1;
+        result = __Pyx_PyObject_IsTrue(py_result);
+        Py_DECREF(py_result);
+        return result;
+    }
+return_eq:
+    #if PY_MAJOR_VERSION < 3
+    Py_XDECREF(owned_ref);
+    #endif
+    return (equals == Py_EQ);
+return_ne:
+    #if PY_MAJOR_VERSION < 3
+    Py_XDECREF(owned_ref);
+    #endif
+    return (equals == Py_NE);
+#endif
+}
+
+/* GetModuleGlobalName */
+  static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name) {
+    PyObject *result;
+#if !CYTHON_AVOID_BORROWED_REFS
+    result = PyDict_GetItem(__pyx_d, name);
+    if (likely(result)) {
+        Py_INCREF(result);
+    } else {
+#else
+    result = PyObject_GetItem(__pyx_d, name);
+    if (!result) {
+        PyErr_Clear();
+#endif
+        result = __Pyx_GetBuiltinName(name);
+    }
+    return result;
+}
+
+/* PyErrFetchRestore */
+    #if CYTHON_FAST_THREAD_STATE
+static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) {
+    PyObject *tmp_type, *tmp_value, *tmp_tb;
+    tmp_type = tstate->curexc_type;
+    tmp_value = tstate->curexc_value;
+    tmp_tb = tstate->curexc_traceback;
+    tstate->curexc_type = type;
+    tstate->curexc_value = value;
+    tstate->curexc_traceback = tb;
+    Py_XDECREF(tmp_type);
+    Py_XDECREF(tmp_value);
+    Py_XDECREF(tmp_tb);
+}
+static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) {
+    *type = tstate->curexc_type;
+    *value = tstate->curexc_value;
+    *tb = tstate->curexc_traceback;
+    tstate->curexc_type = 0;
+    tstate->curexc_value = 0;
+    tstate->curexc_traceback = 0;
+}
+#endif
+
+/* WriteUnraisableException */
+    static void __Pyx_WriteUnraisable(const char *name, CYTHON_UNUSED int clineno,
+                                  CYTHON_UNUSED int lineno, CYTHON_UNUSED const char *filename,
+                                  int full_traceback, CYTHON_UNUSED int nogil) {
+    PyObject *old_exc, *old_val, *old_tb;
+    PyObject *ctx;
+    __Pyx_PyThreadState_declare
+#ifdef WITH_THREAD
+    PyGILState_STATE state;
+    if (nogil)
+        state = PyGILState_Ensure();
+#ifdef _MSC_VER
+    else state = (PyGILState_STATE)-1;
+#endif
+#endif
+    __Pyx_PyThreadState_assign
+    __Pyx_ErrFetch(&old_exc, &old_val, &old_tb);
+    if (full_traceback) {
+        Py_XINCREF(old_exc);
+        Py_XINCREF(old_val);
+        Py_XINCREF(old_tb);
+        __Pyx_ErrRestore(old_exc, old_val, old_tb);
+        PyErr_PrintEx(1);
+    }
+    #if PY_MAJOR_VERSION < 3
+    ctx = PyString_FromString(name);
+    #else
+    ctx = PyUnicode_FromString(name);
+    #endif
+    __Pyx_ErrRestore(old_exc, old_val, old_tb);
+    if (!ctx) {
+        PyErr_WriteUnraisable(Py_None);
+    } else {
+        PyErr_WriteUnraisable(ctx);
+        Py_DECREF(ctx);
+    }
+#ifdef WITH_THREAD
+    if (nogil)
+        PyGILState_Release(state);
+#endif
+}
+
+/* RaiseException */
+    #if PY_MAJOR_VERSION < 3
+static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb,
+                        CYTHON_UNUSED PyObject *cause) {
+    __Pyx_PyThreadState_declare
+    Py_XINCREF(type);
+    if (!value || value == Py_None)
+        value = NULL;
+    else
+        Py_INCREF(value);
+    if (!tb || tb == Py_None)
+        tb = NULL;
+    else {
+        Py_INCREF(tb);
+        if (!PyTraceBack_Check(tb)) {
+            PyErr_SetString(PyExc_TypeError,
+                "raise: arg 3 must be a traceback or None");
+            goto raise_error;
+        }
+    }
+    if (PyType_Check(type)) {
+#if CYTHON_COMPILING_IN_PYPY
+        if (!value) {
+            Py_INCREF(Py_None);
+            value = Py_None;
+        }
+#endif
+        PyErr_NormalizeException(&type, &value, &tb);
+    } else {
+        if (value) {
+            PyErr_SetString(PyExc_TypeError,
+                "instance exception may not have a separate value");
+            goto raise_error;
+        }
+        value = type;
+        type = (PyObject*) Py_TYPE(type);
+        Py_INCREF(type);
+        if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) {
+            PyErr_SetString(PyExc_TypeError,
+                "raise: exception class must be a subclass of BaseException");
+            goto raise_error;
+        }
+    }
+    __Pyx_PyThreadState_assign
+    __Pyx_ErrRestore(type, value, tb);
+    return;
+raise_error:
+    Py_XDECREF(value);
+    Py_XDECREF(type);
+    Py_XDECREF(tb);
+    return;
+}
+#else
+static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) {
+    PyObject* owned_instance = NULL;
+    if (tb == Py_None) {
+        tb = 0;
+    } else if (tb && !PyTraceBack_Check(tb)) {
+        PyErr_SetString(PyExc_TypeError,
+            "raise: arg 3 must be a traceback or None");
+        goto bad;
+    }
+    if (value == Py_None)
+        value = 0;
+    if (PyExceptionInstance_Check(type)) {
+        if (value) {
+            PyErr_SetString(PyExc_TypeError,
+                "instance exception may not have a separate value");
+            goto bad;
+        }
+        value = type;
+        type = (PyObject*) Py_TYPE(value);
+    } else if (PyExceptionClass_Check(type)) {
+        PyObject *instance_class = NULL;
+        if (value && PyExceptionInstance_Check(value)) {
+            instance_class = (PyObject*) Py_TYPE(value);
+            if (instance_class != type) {
+                int is_subclass = PyObject_IsSubclass(instance_class, type);
+                if (!is_subclass) {
+                    instance_class = NULL;
+                } else if (unlikely(is_subclass == -1)) {
+                    goto bad;
+                } else {
+                    type = instance_class;
+                }
+            }
+        }
+        if (!instance_class) {
+            PyObject *args;
+            if (!value)
+                args = PyTuple_New(0);
+            else if (PyTuple_Check(value)) {
+                Py_INCREF(value);
+                args = value;
+            } else
+                args = PyTuple_Pack(1, value);
+            if (!args)
+                goto bad;
+            owned_instance = PyObject_Call(type, args, NULL);
+            Py_DECREF(args);
+            if (!owned_instance)
+                goto bad;
+            value = owned_instance;
+            if (!PyExceptionInstance_Check(value)) {
+                PyErr_Format(PyExc_TypeError,
+                             "calling %R should have returned an instance of "
+                             "BaseException, not %R",
+                             type, Py_TYPE(value));
+                goto bad;
+            }
+        }
+    } else {
+        PyErr_SetString(PyExc_TypeError,
+            "raise: exception class must be a subclass of BaseException");
+        goto bad;
+    }
+#if PY_VERSION_HEX >= 0x03030000
+    if (cause) {
+#else
+    if (cause && cause != Py_None) {
+#endif
+        PyObject *fixed_cause;
+        if (cause == Py_None) {
+            fixed_cause = NULL;
+        } else if (PyExceptionClass_Check(cause)) {
+            fixed_cause = PyObject_CallObject(cause, NULL);
+            if (fixed_cause == NULL)
+                goto bad;
+        } else if (PyExceptionInstance_Check(cause)) {
+            fixed_cause = cause;
+            Py_INCREF(fixed_cause);
+        } else {
+            PyErr_SetString(PyExc_TypeError,
+                            "exception causes must derive from "
+                            "BaseException");
+            goto bad;
+        }
+        PyException_SetCause(value, fixed_cause);
+    }
+    PyErr_SetObject(type, value);
+    if (tb) {
+#if CYTHON_COMPILING_IN_PYPY
+        PyObject *tmp_type, *tmp_value, *tmp_tb;
+        PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb);
+        Py_INCREF(tb);
+        PyErr_Restore(tmp_type, tmp_value, tb);
+        Py_XDECREF(tmp_tb);
+#else
+        PyThreadState *tstate = PyThreadState_GET();
+        PyObject* tmp_tb = tstate->curexc_traceback;
+        if (tb != tmp_tb) {
+            Py_INCREF(tb);
+            tstate->curexc_traceback = tb;
+            Py_XDECREF(tmp_tb);
+        }
+#endif
+    }
+bad:
+    Py_XDECREF(owned_instance);
+    return;
+}
+#endif
+
+/* SetVTable */
+      static int __Pyx_SetVtable(PyObject *dict, void *vtable) {
+#if PY_VERSION_HEX >= 0x02070000
+    PyObject *ob = PyCapsule_New(vtable, 0, 0);
+#else
+    PyObject *ob = PyCObject_FromVoidPtr(vtable, 0);
+#endif
+    if (!ob)
+        goto bad;
+    if (PyDict_SetItem(dict, __pyx_n_s_pyx_vtable, ob) < 0)
+        goto bad;
+    Py_DECREF(ob);
+    return 0;
+bad:
+    Py_XDECREF(ob);
+    return -1;
+}
+
+/* SetupReduce */
+      static int __Pyx_setup_reduce_is_named(PyObject* meth, PyObject* name) {
+  int ret;
+  PyObject *name_attr;
+  name_attr = __Pyx_PyObject_GetAttrStr(meth, __pyx_n_s_name);
+  if (likely(name_attr)) {
+      ret = PyObject_RichCompareBool(name_attr, name, Py_EQ);
+  } else {
+      ret = -1;
+  }
+  if (unlikely(ret < 0)) {
+      PyErr_Clear();
+      ret = 0;
+  }
+  Py_XDECREF(name_attr);
+  return ret;
+}
+static int __Pyx_setup_reduce(PyObject* type_obj) {
+    int ret = 0;
+    PyObject *object_reduce = NULL;
+    PyObject *object_reduce_ex = NULL;
+    PyObject *reduce = NULL;
+    PyObject *reduce_ex = NULL;
+    PyObject *reduce_cython = NULL;
+    PyObject *setstate = NULL;
+    PyObject *setstate_cython = NULL;
+#if CYTHON_USE_PYTYPE_LOOKUP
+    if (_PyType_Lookup((PyTypeObject*)type_obj, __pyx_n_s_getstate)) goto GOOD;
+#else
+    if (PyObject_HasAttr(type_obj, __pyx_n_s_getstate)) goto GOOD;
+#endif
+#if CYTHON_USE_PYTYPE_LOOKUP
+    object_reduce_ex = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto BAD;
+#else
+    object_reduce_ex = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto BAD;
+#endif
+    reduce_ex = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce_ex); if (unlikely(!reduce_ex)) goto BAD;
+    if (reduce_ex == object_reduce_ex) {
+#if CYTHON_USE_PYTYPE_LOOKUP
+        object_reduce = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto BAD;
+#else
+        object_reduce = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto BAD;
+#endif
+        reduce = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce); if (unlikely(!reduce)) goto BAD;
+        if (reduce == object_reduce || __Pyx_setup_reduce_is_named(reduce, __pyx_n_s_reduce_cython)) {
+            reduce_cython = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce_cython); if (unlikely(!reduce_cython)) goto BAD;
+            ret = PyDict_SetItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_reduce, reduce_cython); if (unlikely(ret < 0)) goto BAD;
+            ret = PyDict_DelItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_reduce_cython); if (unlikely(ret < 0)) goto BAD;
+            setstate = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_setstate);
+            if (!setstate) PyErr_Clear();
+            if (!setstate || __Pyx_setup_reduce_is_named(setstate, __pyx_n_s_setstate_cython)) {
+                setstate_cython = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_setstate_cython); if (unlikely(!setstate_cython)) goto BAD;
+                ret = PyDict_SetItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_setstate, setstate_cython); if (unlikely(ret < 0)) goto BAD;
+                ret = PyDict_DelItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_setstate_cython); if (unlikely(ret < 0)) goto BAD;
+            }
+            PyType_Modified((PyTypeObject*)type_obj);
+        }
+    }
+    goto GOOD;
+BAD:
+    if (!PyErr_Occurred())
+        PyErr_Format(PyExc_RuntimeError, "Unable to initialize pickling for %s", ((PyTypeObject*)type_obj)->tp_name);
+    ret = -1;
+GOOD:
+#if !CYTHON_COMPILING_IN_CPYTHON
+    Py_XDECREF(object_reduce);
+    Py_XDECREF(object_reduce_ex);
+#endif
+    Py_XDECREF(reduce);
+    Py_XDECREF(reduce_ex);
+    Py_XDECREF(reduce_cython);
+    Py_XDECREF(setstate);
+    Py_XDECREF(setstate_cython);
+    return ret;
+}
+
+/* Import */
+      static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) {
+    PyObject *empty_list = 0;
+    PyObject *module = 0;
+    PyObject *global_dict = 0;
+    PyObject *empty_dict = 0;
+    PyObject *list;
+    #if PY_VERSION_HEX < 0x03030000
+    PyObject *py_import;
+    py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import);
+    if (!py_import)
+        goto bad;
+    #endif
+    if (from_list)
+        list = from_list;
+    else {
+        empty_list = PyList_New(0);
+        if (!empty_list)
+            goto bad;
+        list = empty_list;
+    }
+    global_dict = PyModule_GetDict(__pyx_m);
+    if (!global_dict)
+        goto bad;
+    empty_dict = PyDict_New();
+    if (!empty_dict)
+        goto bad;
+    {
+        #if PY_MAJOR_VERSION >= 3
+        if (level == -1) {
+            if (strchr(__Pyx_MODULE_NAME, '.')) {
+                #if PY_VERSION_HEX < 0x03030000
+                PyObject *py_level = PyInt_FromLong(1);
+                if (!py_level)
+                    goto bad;
+                module = PyObject_CallFunctionObjArgs(py_import,
+                    name, global_dict, empty_dict, list, py_level, NULL);
+                Py_DECREF(py_level);
+                #else
+                module = PyImport_ImportModuleLevelObject(
+                    name, global_dict, empty_dict, list, 1);
+                #endif
+                if (!module) {
+                    if (!PyErr_ExceptionMatches(PyExc_ImportError))
+                        goto bad;
+                    PyErr_Clear();
+                }
+            }
+            level = 0;
+        }
+        #endif
+        if (!module) {
+            #if PY_VERSION_HEX < 0x03030000
+            PyObject *py_level = PyInt_FromLong(level);
+            if (!py_level)
+                goto bad;
+            module = PyObject_CallFunctionObjArgs(py_import,
+                name, global_dict, empty_dict, list, py_level, NULL);
+            Py_DECREF(py_level);
+            #else
+            module = PyImport_ImportModuleLevelObject(
+                name, global_dict, empty_dict, list, level);
+            #endif
+        }
+    }
+bad:
+    #if PY_VERSION_HEX < 0x03030000
+    Py_XDECREF(py_import);
+    #endif
+    Py_XDECREF(empty_list);
+    Py_XDECREF(empty_dict);
+    return module;
+}
+
+/* CLineInTraceback */
+      static int __Pyx_CLineForTraceback(int c_line) {
+#ifdef CYTHON_CLINE_IN_TRACEBACK
+    return ((CYTHON_CLINE_IN_TRACEBACK)) ? c_line : 0;
+#else
+    PyObject *use_cline;
+#if CYTHON_COMPILING_IN_CPYTHON
+    PyObject **cython_runtime_dict = _PyObject_GetDictPtr(__pyx_cython_runtime);
+    if (likely(cython_runtime_dict)) {
+      use_cline = PyDict_GetItem(*cython_runtime_dict, __pyx_n_s_cline_in_traceback);
+    } else
+#endif
+    {
+      PyObject *ptype, *pvalue, *ptraceback;
+      PyObject *use_cline_obj;
+      PyErr_Fetch(&ptype, &pvalue, &ptraceback);
+      use_cline_obj = __Pyx_PyObject_GetAttrStr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback);
+      if (use_cline_obj) {
+        use_cline = PyObject_Not(use_cline_obj) ? Py_False : Py_True;
+        Py_DECREF(use_cline_obj);
+      } else {
+        use_cline = NULL;
+      }
+      PyErr_Restore(ptype, pvalue, ptraceback);
+    }
+    if (!use_cline) {
+        c_line = 0;
+        PyObject_SetAttr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback, Py_False);
+    }
+    else if (PyObject_Not(use_cline) != 0) {
+        c_line = 0;
+    }
+    return c_line;
+#endif
+}
+
+/* CodeObjectCache */
+      static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) {
+    int start = 0, mid = 0, end = count - 1;
+    if (end >= 0 && code_line > entries[end].code_line) {
+        return count;
+    }
+    while (start < end) {
+        mid = start + (end - start) / 2;
+        if (code_line < entries[mid].code_line) {
+            end = mid;
+        } else if (code_line > entries[mid].code_line) {
+             start = mid + 1;
+        } else {
+            return mid;
+        }
+    }
+    if (code_line <= entries[mid].code_line) {
+        return mid;
+    } else {
+        return mid + 1;
+    }
+}
+static PyCodeObject *__pyx_find_code_object(int code_line) {
+    PyCodeObject* code_object;
+    int pos;
+    if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) {
+        return NULL;
+    }
+    pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line);
+    if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) {
+        return NULL;
+    }
+    code_object = __pyx_code_cache.entries[pos].code_object;
+    Py_INCREF(code_object);
+    return code_object;
+}
+static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) {
+    int pos, i;
+    __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries;
+    if (unlikely(!code_line)) {
+        return;
+    }
+    if (unlikely(!entries)) {
+        entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry));
+        if (likely(entries)) {
+            __pyx_code_cache.entries = entries;
+            __pyx_code_cache.max_count = 64;
+            __pyx_code_cache.count = 1;
+            entries[0].code_line = code_line;
+            entries[0].code_object = code_object;
+            Py_INCREF(code_object);
+        }
+        return;
+    }
+    pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line);
+    if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) {
+        PyCodeObject* tmp = entries[pos].code_object;
+        entries[pos].code_object = code_object;
+        Py_DECREF(tmp);
+        return;
+    }
+    if (__pyx_code_cache.count == __pyx_code_cache.max_count) {
+        int new_max = __pyx_code_cache.max_count + 64;
+        entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc(
+            __pyx_code_cache.entries, (size_t)new_max*sizeof(__Pyx_CodeObjectCacheEntry));
+        if (unlikely(!entries)) {
+            return;
+        }
+        __pyx_code_cache.entries = entries;
+        __pyx_code_cache.max_count = new_max;
+    }
+    for (i=__pyx_code_cache.count; i>pos; i--) {
+        entries[i] = entries[i-1];
+    }
+    entries[pos].code_line = code_line;
+    entries[pos].code_object = code_object;
+    __pyx_code_cache.count++;
+    Py_INCREF(code_object);
+}
+
+/* AddTraceback */
+      #include "compile.h"
+#include "frameobject.h"
+#include "traceback.h"
+static PyCodeObject* __Pyx_CreateCodeObjectForTraceback(
+            const char *funcname, int c_line,
+            int py_line, const char *filename) {
+    PyCodeObject *py_code = 0;
+    PyObject *py_srcfile = 0;
+    PyObject *py_funcname = 0;
+    #if PY_MAJOR_VERSION < 3
+    py_srcfile = PyString_FromString(filename);
+    #else
+    py_srcfile = PyUnicode_FromString(filename);
+    #endif
+    if (!py_srcfile) goto bad;
+    if (c_line) {
+        #if PY_MAJOR_VERSION < 3
+        py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line);
+        #else
+        py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line);
+        #endif
+    }
+    else {
+        #if PY_MAJOR_VERSION < 3
+        py_funcname = PyString_FromString(funcname);
+        #else
+        py_funcname = PyUnicode_FromString(funcname);
+        #endif
+    }
+    if (!py_funcname) goto bad;
+    py_code = __Pyx_PyCode_New(
+        0,
+        0,
+        0,
+        0,
+        0,
+        __pyx_empty_bytes, /*PyObject *code,*/
+        __pyx_empty_tuple, /*PyObject *consts,*/
+        __pyx_empty_tuple, /*PyObject *names,*/
+        __pyx_empty_tuple, /*PyObject *varnames,*/
+        __pyx_empty_tuple, /*PyObject *freevars,*/
+        __pyx_empty_tuple, /*PyObject *cellvars,*/
+        py_srcfile,   /*PyObject *filename,*/
+        py_funcname,  /*PyObject *name,*/
+        py_line,
+        __pyx_empty_bytes  /*PyObject *lnotab*/
+    );
+    Py_DECREF(py_srcfile);
+    Py_DECREF(py_funcname);
+    return py_code;
+bad:
+    Py_XDECREF(py_srcfile);
+    Py_XDECREF(py_funcname);
+    return NULL;
+}
+static void __Pyx_AddTraceback(const char *funcname, int c_line,
+                               int py_line, const char *filename) {
+    PyCodeObject *py_code = 0;
+    PyFrameObject *py_frame = 0;
+    if (c_line) {
+        c_line = __Pyx_CLineForTraceback(c_line);
+    }
+    py_code = __pyx_find_code_object(c_line ? -c_line : py_line);
+    if (!py_code) {
+        py_code = __Pyx_CreateCodeObjectForTraceback(
+            funcname, c_line, py_line, filename);
+        if (!py_code) goto bad;
+        __pyx_insert_code_object(c_line ? -c_line : py_line, py_code);
+    }
+    py_frame = PyFrame_New(
+        PyThreadState_GET(), /*PyThreadState *tstate,*/
+        py_code,             /*PyCodeObject *code,*/
+        __pyx_d,      /*PyObject *globals,*/
+        0                    /*PyObject *locals*/
+    );
+    if (!py_frame) goto bad;
+    __Pyx_PyFrame_SetLineNumber(py_frame, py_line);
+    PyTraceBack_Here(py_frame);
+bad:
+    Py_XDECREF(py_code);
+    Py_XDECREF(py_frame);
+}
+
+/* CIntToPy */
+      static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) {
+    const int neg_one = (int) -1, const_zero = (int) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(int) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(int) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
+        } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
+        }
+    } else {
+        if (sizeof(int) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
+        } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(int),
+                                     little, !is_unsigned);
+    }
+}
+
+/* CIntFromPyVerify */
+      #define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value)\
+    __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 0)
+#define __PYX_VERIFY_RETURN_INT_EXC(target_type, func_type, func_value)\
+    __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 1)
+#define __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, exc)\
+    {\
+        func_type value = func_value;\
+        if (sizeof(target_type) < sizeof(func_type)) {\
+            if (unlikely(value != (func_type) (target_type) value)) {\
+                func_type zero = 0;\
+                if (exc && unlikely(value == (func_type)-1 && PyErr_Occurred()))\
+                    return (target_type) -1;\
+                if (is_unsigned && unlikely(value < zero))\
+                    goto raise_neg_overflow;\
+                else\
+                    goto raise_overflow;\
+            }\
+        }\
+        return (target_type) value;\
+    }
+
+/* CIntToPy */
+      static CYTHON_INLINE PyObject* __Pyx_PyInt_From_char(char value) {
+    const char neg_one = (char) -1, const_zero = (char) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(char) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(char) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
+        } else if (sizeof(char) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
+        }
+    } else {
+        if (sizeof(char) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
+        } else if (sizeof(char) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(char),
+                                     little, !is_unsigned);
+    }
+}
+
+/* CIntToPy */
+      static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) {
+    const long neg_one = (long) -1, const_zero = (long) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(long) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(long) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
+        } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
+        }
+    } else {
+        if (sizeof(long) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
+        } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(long),
+                                     little, !is_unsigned);
+    }
+}
+
+/* CIntFromPy */
+      static CYTHON_INLINE Py_intptr_t __Pyx_PyInt_As_Py_intptr_t(PyObject *x) {
+    const Py_intptr_t neg_one = (Py_intptr_t) -1, const_zero = (Py_intptr_t) 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(Py_intptr_t) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(Py_intptr_t, long, PyInt_AS_LONG(x))
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (Py_intptr_t) val;
+        }
+    } else
+#endif
+    if (likely(PyLong_Check(x))) {
+        if (is_unsigned) {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (Py_intptr_t) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(Py_intptr_t, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(Py_intptr_t) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(Py_intptr_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(Py_intptr_t) >= 2 * PyLong_SHIFT) {
+                            return (Py_intptr_t) (((((Py_intptr_t)digits[1]) << PyLong_SHIFT) | (Py_intptr_t)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(Py_intptr_t) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(Py_intptr_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(Py_intptr_t) >= 3 * PyLong_SHIFT) {
+                            return (Py_intptr_t) (((((((Py_intptr_t)digits[2]) << PyLong_SHIFT) | (Py_intptr_t)digits[1]) << PyLong_SHIFT) | (Py_intptr_t)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(Py_intptr_t) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(Py_intptr_t, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(Py_intptr_t) >= 4 * PyLong_SHIFT) {
+                            return (Py_intptr_t) (((((((((Py_intptr_t)digits[3]) << PyLong_SHIFT) | (Py_intptr_t)digits[2]) << PyLong_SHIFT) | (Py_intptr_t)digits[1]) << PyLong_SHIFT) | (Py_intptr_t)digits[0]));
+                        }
+                    }
+                    break;
+            }
+#endif
+#if CYTHON_COMPILING_IN_CPYTHON
+            if (unlikely(Py_SIZE(x) < 0)) {
+                goto raise_neg_overflow;
+            }
+#else
+            {
+                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
+                if (unlikely(result < 0))
+                    return (Py_intptr_t) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
+#endif
+            if (sizeof(Py_intptr_t) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(Py_intptr_t, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
+            } else if (sizeof(Py_intptr_t) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(Py_intptr_t, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
+            }
+        } else {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (Py_intptr_t) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(Py_intptr_t, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(Py_intptr_t,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(Py_intptr_t) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(Py_intptr_t, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(Py_intptr_t) - 1 > 2 * PyLong_SHIFT) {
+                            return (Py_intptr_t) (((Py_intptr_t)-1)*(((((Py_intptr_t)digits[1]) << PyLong_SHIFT) | (Py_intptr_t)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(Py_intptr_t) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(Py_intptr_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(Py_intptr_t) - 1 > 2 * PyLong_SHIFT) {
+                            return (Py_intptr_t) ((((((Py_intptr_t)digits[1]) << PyLong_SHIFT) | (Py_intptr_t)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(Py_intptr_t) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(Py_intptr_t, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(Py_intptr_t) - 1 > 3 * PyLong_SHIFT) {
+                            return (Py_intptr_t) (((Py_intptr_t)-1)*(((((((Py_intptr_t)digits[2]) << PyLong_SHIFT) | (Py_intptr_t)digits[1]) << PyLong_SHIFT) | (Py_intptr_t)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(Py_intptr_t) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(Py_intptr_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(Py_intptr_t) - 1 > 3 * PyLong_SHIFT) {
+                            return (Py_intptr_t) ((((((((Py_intptr_t)digits[2]) << PyLong_SHIFT) | (Py_intptr_t)digits[1]) << PyLong_SHIFT) | (Py_intptr_t)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(Py_intptr_t) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(Py_intptr_t, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(Py_intptr_t) - 1 > 4 * PyLong_SHIFT) {
+                            return (Py_intptr_t) (((Py_intptr_t)-1)*(((((((((Py_intptr_t)digits[3]) << PyLong_SHIFT) | (Py_intptr_t)digits[2]) << PyLong_SHIFT) | (Py_intptr_t)digits[1]) << PyLong_SHIFT) | (Py_intptr_t)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(Py_intptr_t) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(Py_intptr_t, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(Py_intptr_t) - 1 > 4 * PyLong_SHIFT) {
+                            return (Py_intptr_t) ((((((((((Py_intptr_t)digits[3]) << PyLong_SHIFT) | (Py_intptr_t)digits[2]) << PyLong_SHIFT) | (Py_intptr_t)digits[1]) << PyLong_SHIFT) | (Py_intptr_t)digits[0])));
+                        }
+                    }
+                    break;
+            }
+#endif
+            if (sizeof(Py_intptr_t) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(Py_intptr_t, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
+            } else if (sizeof(Py_intptr_t) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(Py_intptr_t, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
+            }
+        }
+        {
+#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+            PyErr_SetString(PyExc_RuntimeError,
+                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
+#else
+            Py_intptr_t val;
+            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
+ #if PY_MAJOR_VERSION < 3
+            if (likely(v) && !PyLong_Check(v)) {
+                PyObject *tmp = v;
+                v = PyNumber_Long(tmp);
+                Py_DECREF(tmp);
+            }
+ #endif
+            if (likely(v)) {
+                int one = 1; int is_little = (int)*(unsigned char *)&one;
+                unsigned char *bytes = (unsigned char *)&val;
+                int ret = _PyLong_AsByteArray((PyLongObject *)v,
+                                              bytes, sizeof(val),
+                                              is_little, !is_unsigned);
+                Py_DECREF(v);
+                if (likely(!ret))
+                    return val;
+            }
+#endif
+            return (Py_intptr_t) -1;
+        }
+    } else {
+        Py_intptr_t val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (Py_intptr_t) -1;
+        val = __Pyx_PyInt_As_Py_intptr_t(tmp);
+        Py_DECREF(tmp);
+        return val;
+    }
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to Py_intptr_t");
+    return (Py_intptr_t) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to Py_intptr_t");
+    return (Py_intptr_t) -1;
+}
+
+/* CIntFromPy */
+      static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) {
+    const int neg_one = (int) -1, const_zero = (int) 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(int) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG(x))
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (int) val;
+        }
+    } else
+#endif
+    if (likely(PyLong_Check(x))) {
+        if (is_unsigned) {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (int) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(int, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(int) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(int) >= 2 * PyLong_SHIFT) {
+                            return (int) (((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(int) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(int) >= 3 * PyLong_SHIFT) {
+                            return (int) (((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(int) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(int) >= 4 * PyLong_SHIFT) {
+                            return (int) (((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]));
+                        }
+                    }
+                    break;
+            }
+#endif
+#if CYTHON_COMPILING_IN_CPYTHON
+            if (unlikely(Py_SIZE(x) < 0)) {
+                goto raise_neg_overflow;
+            }
+#else
+            {
+                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
+                if (unlikely(result < 0))
+                    return (int) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
+#endif
+            if (sizeof(int) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
+            } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
+            }
+        } else {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (int) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(int, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(int,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(int) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) {
+                            return (int) (((int)-1)*(((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(int) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) {
+                            return (int) ((((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) {
+                            return (int) (((int)-1)*(((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(int) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) {
+                            return (int) ((((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) {
+                            return (int) (((int)-1)*(((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(int) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) {
+                            return (int) ((((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
+                        }
+                    }
+                    break;
+            }
+#endif
+            if (sizeof(int) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
+            } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
+            }
+        }
+        {
+#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+            PyErr_SetString(PyExc_RuntimeError,
+                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
+#else
+            int val;
+            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
+ #if PY_MAJOR_VERSION < 3
+            if (likely(v) && !PyLong_Check(v)) {
+                PyObject *tmp = v;
+                v = PyNumber_Long(tmp);
+                Py_DECREF(tmp);
+            }
+ #endif
+            if (likely(v)) {
+                int one = 1; int is_little = (int)*(unsigned char *)&one;
+                unsigned char *bytes = (unsigned char *)&val;
+                int ret = _PyLong_AsByteArray((PyLongObject *)v,
+                                              bytes, sizeof(val),
+                                              is_little, !is_unsigned);
+                Py_DECREF(v);
+                if (likely(!ret))
+                    return val;
+            }
+#endif
+            return (int) -1;
+        }
+    } else {
+        int val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (int) -1;
+        val = __Pyx_PyInt_As_int(tmp);
+        Py_DECREF(tmp);
+        return val;
+    }
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to int");
+    return (int) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to int");
+    return (int) -1;
+}
+
+/* CIntFromPy */
+      static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) {
+    const long neg_one = (long) -1, const_zero = (long) 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(long) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG(x))
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (long) val;
+        }
+    } else
+#endif
+    if (likely(PyLong_Check(x))) {
+        if (is_unsigned) {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (long) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(long, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(long) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(long) >= 2 * PyLong_SHIFT) {
+                            return (long) (((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(long) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(long) >= 3 * PyLong_SHIFT) {
+                            return (long) (((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(long) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(long) >= 4 * PyLong_SHIFT) {
+                            return (long) (((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]));
+                        }
+                    }
+                    break;
+            }
+#endif
+#if CYTHON_COMPILING_IN_CPYTHON
+            if (unlikely(Py_SIZE(x) < 0)) {
+                goto raise_neg_overflow;
+            }
+#else
+            {
+                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
+                if (unlikely(result < 0))
+                    return (long) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
+#endif
+            if (sizeof(long) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
+            } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
+            }
+        } else {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (long) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(long, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(long,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(long) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) {
+                            return (long) (((long)-1)*(((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(long) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) {
+                            return (long) ((((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) {
+                            return (long) (((long)-1)*(((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(long) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) {
+                            return (long) ((((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) {
+                            return (long) (((long)-1)*(((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(long) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) {
+                            return (long) ((((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
+                        }
+                    }
+                    break;
+            }
+#endif
+            if (sizeof(long) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
+            } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
+            }
+        }
+        {
+#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+            PyErr_SetString(PyExc_RuntimeError,
+                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
+#else
+            long val;
+            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
+ #if PY_MAJOR_VERSION < 3
+            if (likely(v) && !PyLong_Check(v)) {
+                PyObject *tmp = v;
+                v = PyNumber_Long(tmp);
+                Py_DECREF(tmp);
+            }
+ #endif
+            if (likely(v)) {
+                int one = 1; int is_little = (int)*(unsigned char *)&one;
+                unsigned char *bytes = (unsigned char *)&val;
+                int ret = _PyLong_AsByteArray((PyLongObject *)v,
+                                              bytes, sizeof(val),
+                                              is_little, !is_unsigned);
+                Py_DECREF(v);
+                if (likely(!ret))
+                    return val;
+            }
+#endif
+            return (long) -1;
+        }
+    } else {
+        long val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (long) -1;
+        val = __Pyx_PyInt_As_long(tmp);
+        Py_DECREF(tmp);
+        return val;
+    }
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to long");
+    return (long) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to long");
+    return (long) -1;
+}
+
+/* CheckBinaryVersion */
+      static int __Pyx_check_binary_version(void) {
+    char ctversion[4], rtversion[4];
+    PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION);
+    PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion());
+    if (ctversion[0] != rtversion[0] || ctversion[2] != rtversion[2]) {
+        char message[200];
+        PyOS_snprintf(message, sizeof(message),
+                      "compiletime version %s of module '%.100s' "
+                      "does not match runtime version %s",
+                      ctversion, __Pyx_MODULE_NAME, rtversion);
+        return PyErr_WarnEx(NULL, message, 1);
+    }
+    return 0;
+}
+
+/* InitStrings */
+      static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) {
+    while (t->p) {
+        #if PY_MAJOR_VERSION < 3
+        if (t->is_unicode) {
+            *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL);
+        } else if (t->intern) {
+            *t->p = PyString_InternFromString(t->s);
+        } else {
+            *t->p = PyString_FromStringAndSize(t->s, t->n - 1);
+        }
+        #else
+        if (t->is_unicode | t->is_str) {
+            if (t->intern) {
+                *t->p = PyUnicode_InternFromString(t->s);
+            } else if (t->encoding) {
+                *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL);
+            } else {
+                *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1);
+            }
+        } else {
+            *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1);
+        }
+        #endif
+        if (!*t->p)
+            return -1;
+        if (PyObject_Hash(*t->p) == -1)
+            PyErr_Clear();
+        ++t;
+    }
+    return 0;
+}
+
+static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char* c_str) {
+    return __Pyx_PyUnicode_FromStringAndSize(c_str, (Py_ssize_t)strlen(c_str));
+}
+static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject* o) {
+    Py_ssize_t ignore;
+    return __Pyx_PyObject_AsStringAndSize(o, &ignore);
+}
+static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) {
+#if CYTHON_COMPILING_IN_CPYTHON && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT)
+    if (
+#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
+            __Pyx_sys_getdefaultencoding_not_ascii &&
+#endif
+            PyUnicode_Check(o)) {
+#if PY_VERSION_HEX < 0x03030000
+        char* defenc_c;
+        PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL);
+        if (!defenc) return NULL;
+        defenc_c = PyBytes_AS_STRING(defenc);
+#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
+        {
+            char* end = defenc_c + PyBytes_GET_SIZE(defenc);
+            char* c;
+            for (c = defenc_c; c < end; c++) {
+                if ((unsigned char) (*c) >= 128) {
+                    PyUnicode_AsASCIIString(o);
+                    return NULL;
+                }
+            }
+        }
+#endif
+        *length = PyBytes_GET_SIZE(defenc);
+        return defenc_c;
+#else
+        if (__Pyx_PyUnicode_READY(o) == -1) return NULL;
+#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
+        if (PyUnicode_IS_ASCII(o)) {
+            *length = PyUnicode_GET_LENGTH(o);
+            return PyUnicode_AsUTF8(o);
+        } else {
+            PyUnicode_AsASCIIString(o);
+            return NULL;
+        }
+#else
+        return PyUnicode_AsUTF8AndSize(o, length);
+#endif
+#endif
+    } else
+#endif
+#if (!CYTHON_COMPILING_IN_PYPY) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE))
+    if (PyByteArray_Check(o)) {
+        *length = PyByteArray_GET_SIZE(o);
+        return PyByteArray_AS_STRING(o);
+    } else
+#endif
+    {
+        char* result;
+        int r = PyBytes_AsStringAndSize(o, &result, length);
+        if (unlikely(r < 0)) {
+            return NULL;
+        } else {
+            return result;
+        }
+    }
+}
+static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) {
+   int is_true = x == Py_True;
+   if (is_true | (x == Py_False) | (x == Py_None)) return is_true;
+   else return PyObject_IsTrue(x);
+}
+static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x) {
+#if CYTHON_USE_TYPE_SLOTS
+  PyNumberMethods *m;
+#endif
+  const char *name = NULL;
+  PyObject *res = NULL;
+#if PY_MAJOR_VERSION < 3
+  if (PyInt_Check(x) || PyLong_Check(x))
+#else
+  if (PyLong_Check(x))
+#endif
+    return __Pyx_NewRef(x);
+#if CYTHON_USE_TYPE_SLOTS
+  m = Py_TYPE(x)->tp_as_number;
+  #if PY_MAJOR_VERSION < 3
+  if (m && m->nb_int) {
+    name = "int";
+    res = PyNumber_Int(x);
+  }
+  else if (m && m->nb_long) {
+    name = "long";
+    res = PyNumber_Long(x);
+  }
+  #else
+  if (m && m->nb_int) {
+    name = "int";
+    res = PyNumber_Long(x);
+  }
+  #endif
+#else
+  res = PyNumber_Int(x);
+#endif
+  if (res) {
+#if PY_MAJOR_VERSION < 3
+    if (!PyInt_Check(res) && !PyLong_Check(res)) {
+#else
+    if (!PyLong_Check(res)) {
+#endif
+      PyErr_Format(PyExc_TypeError,
+                   "__%.4s__ returned non-%.4s (type %.200s)",
+                   name, name, Py_TYPE(res)->tp_name);
+      Py_DECREF(res);
+      return NULL;
+    }
+  }
+  else if (!PyErr_Occurred()) {
+    PyErr_SetString(PyExc_TypeError,
+                    "an integer is required");
+  }
+  return res;
+}
+static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) {
+  Py_ssize_t ival;
+  PyObject *x;
+#if PY_MAJOR_VERSION < 3
+  if (likely(PyInt_CheckExact(b))) {
+    if (sizeof(Py_ssize_t) >= sizeof(long))
+        return PyInt_AS_LONG(b);
+    else
+        return PyInt_AsSsize_t(x);
+  }
+#endif
+  if (likely(PyLong_CheckExact(b))) {
+    #if CYTHON_USE_PYLONG_INTERNALS
+    const digit* digits = ((PyLongObject*)b)->ob_digit;
+    const Py_ssize_t size = Py_SIZE(b);
+    if (likely(__Pyx_sst_abs(size) <= 1)) {
+        ival = likely(size) ? digits[0] : 0;
+        if (size == -1) ival = -ival;
+        return ival;
+    } else {
+      switch (size) {
+         case 2:
+           if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) {
+             return (Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
+           }
+           break;
+         case -2:
+           if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) {
+             return -(Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
+           }
+           break;
+         case 3:
+           if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) {
+             return (Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
+           }
+           break;
+         case -3:
+           if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) {
+             return -(Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
+           }
+           break;
+         case 4:
+           if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) {
+             return (Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
+           }
+           break;
+         case -4:
+           if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) {
+             return -(Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
+           }
+           break;
+      }
+    }
+    #endif
+    return PyLong_AsSsize_t(b);
+  }
+  x = PyNumber_Index(b);
+  if (!x) return -1;
+  ival = PyInt_AsSsize_t(x);
+  Py_DECREF(x);
+  return ival;
+}
+static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) {
+    return PyInt_FromSize_t(ival);
+}
+
+
+#endif /* Py_PYTHON_H */
diff --git a/pymolfile/molfile/numind-cython/numind.h b/pymolfile/molfile/numind-cython/numind.h
new file mode 100644
index 0000000..988c2c8
--- /dev/null
+++ b/pymolfile/molfile/numind-cython/numind.h
@@ -0,0 +1,12 @@
+#ifndef NUMIND_H
+#define NUMIND_H
+ 
+typedef struct SignedIntBuf
+{
+    int* data;
+    int shape[2];
+    int strides[2];
+} SignedIntBuf;
+ 
+#endif
+
diff --git a/pymolfile/molfile/numind-cython/numind.html b/pymolfile/molfile/numind-cython/numind.html
new file mode 100644
index 0000000..96768d1
--- /dev/null
+++ b/pymolfile/molfile/numind-cython/numind.html
@@ -0,0 +1,1243 @@
+<!DOCTYPE html>
+<!-- Generated by Cython 0.26.1 -->
+<html>
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <title>Cython: numind.pyx</title>
+    <style type="text/css">
+    
+body.cython { font-family: courier; font-size: 12; }
+
+.cython.tag  {  }
+.cython.line { margin: 0em }
+.cython.code { font-size: 9; color: #444444; display: none; margin: 0px 0px 0px 8px; border-left: 8px none; }
+
+.cython.line .run { background-color: #B0FFB0; }
+.cython.line .mis { background-color: #FFB0B0; }
+.cython.code.run  { border-left: 8px solid #B0FFB0; }
+.cython.code.mis  { border-left: 8px solid #FFB0B0; }
+
+.cython.code .py_c_api  { color: red; }
+.cython.code .py_macro_api  { color: #FF7000; }
+.cython.code .pyx_c_api  { color: #FF3000; }
+.cython.code .pyx_macro_api  { color: #FF7000; }
+.cython.code .refnanny  { color: #FFA000; }
+.cython.code .trace  { color: #FFA000; }
+.cython.code .error_goto  { color: #FFA000; }
+
+.cython.code .coerce  { color: #008000; border: 1px dotted #008000 }
+.cython.code .py_attr { color: #FF0000; font-weight: bold; }
+.cython.code .c_attr  { color: #0000FF; }
+.cython.code .py_call { color: #FF0000; font-weight: bold; }
+.cython.code .c_call  { color: #0000FF; }
+
+.cython.score-0 {background-color: #FFFFff;}
+.cython.score-1 {background-color: #FFFFe7;}
+.cython.score-2 {background-color: #FFFFd4;}
+.cython.score-3 {background-color: #FFFFc4;}
+.cython.score-4 {background-color: #FFFFb6;}
+.cython.score-5 {background-color: #FFFFaa;}
+.cython.score-6 {background-color: #FFFF9f;}
+.cython.score-7 {background-color: #FFFF96;}
+.cython.score-8 {background-color: #FFFF8d;}
+.cython.score-9 {background-color: #FFFF86;}
+.cython.score-10 {background-color: #FFFF7f;}
+.cython.score-11 {background-color: #FFFF79;}
+.cython.score-12 {background-color: #FFFF73;}
+.cython.score-13 {background-color: #FFFF6e;}
+.cython.score-14 {background-color: #FFFF6a;}
+.cython.score-15 {background-color: #FFFF66;}
+.cython.score-16 {background-color: #FFFF62;}
+.cython.score-17 {background-color: #FFFF5e;}
+.cython.score-18 {background-color: #FFFF5b;}
+.cython.score-19 {background-color: #FFFF57;}
+.cython.score-20 {background-color: #FFFF55;}
+.cython.score-21 {background-color: #FFFF52;}
+.cython.score-22 {background-color: #FFFF4f;}
+.cython.score-23 {background-color: #FFFF4d;}
+.cython.score-24 {background-color: #FFFF4b;}
+.cython.score-25 {background-color: #FFFF48;}
+.cython.score-26 {background-color: #FFFF46;}
+.cython.score-27 {background-color: #FFFF44;}
+.cython.score-28 {background-color: #FFFF43;}
+.cython.score-29 {background-color: #FFFF41;}
+.cython.score-30 {background-color: #FFFF3f;}
+.cython.score-31 {background-color: #FFFF3e;}
+.cython.score-32 {background-color: #FFFF3c;}
+.cython.score-33 {background-color: #FFFF3b;}
+.cython.score-34 {background-color: #FFFF39;}
+.cython.score-35 {background-color: #FFFF38;}
+.cython.score-36 {background-color: #FFFF37;}
+.cython.score-37 {background-color: #FFFF36;}
+.cython.score-38 {background-color: #FFFF35;}
+.cython.score-39 {background-color: #FFFF34;}
+.cython.score-40 {background-color: #FFFF33;}
+.cython.score-41 {background-color: #FFFF32;}
+.cython.score-42 {background-color: #FFFF31;}
+.cython.score-43 {background-color: #FFFF30;}
+.cython.score-44 {background-color: #FFFF2f;}
+.cython.score-45 {background-color: #FFFF2e;}
+.cython.score-46 {background-color: #FFFF2d;}
+.cython.score-47 {background-color: #FFFF2c;}
+.cython.score-48 {background-color: #FFFF2b;}
+.cython.score-49 {background-color: #FFFF2b;}
+.cython.score-50 {background-color: #FFFF2a;}
+.cython.score-51 {background-color: #FFFF29;}
+.cython.score-52 {background-color: #FFFF29;}
+.cython.score-53 {background-color: #FFFF28;}
+.cython.score-54 {background-color: #FFFF27;}
+.cython.score-55 {background-color: #FFFF27;}
+.cython.score-56 {background-color: #FFFF26;}
+.cython.score-57 {background-color: #FFFF26;}
+.cython.score-58 {background-color: #FFFF25;}
+.cython.score-59 {background-color: #FFFF24;}
+.cython.score-60 {background-color: #FFFF24;}
+.cython.score-61 {background-color: #FFFF23;}
+.cython.score-62 {background-color: #FFFF23;}
+.cython.score-63 {background-color: #FFFF22;}
+.cython.score-64 {background-color: #FFFF22;}
+.cython.score-65 {background-color: #FFFF22;}
+.cython.score-66 {background-color: #FFFF21;}
+.cython.score-67 {background-color: #FFFF21;}
+.cython.score-68 {background-color: #FFFF20;}
+.cython.score-69 {background-color: #FFFF20;}
+.cython.score-70 {background-color: #FFFF1f;}
+.cython.score-71 {background-color: #FFFF1f;}
+.cython.score-72 {background-color: #FFFF1f;}
+.cython.score-73 {background-color: #FFFF1e;}
+.cython.score-74 {background-color: #FFFF1e;}
+.cython.score-75 {background-color: #FFFF1e;}
+.cython.score-76 {background-color: #FFFF1d;}
+.cython.score-77 {background-color: #FFFF1d;}
+.cython.score-78 {background-color: #FFFF1c;}
+.cython.score-79 {background-color: #FFFF1c;}
+.cython.score-80 {background-color: #FFFF1c;}
+.cython.score-81 {background-color: #FFFF1c;}
+.cython.score-82 {background-color: #FFFF1b;}
+.cython.score-83 {background-color: #FFFF1b;}
+.cython.score-84 {background-color: #FFFF1b;}
+.cython.score-85 {background-color: #FFFF1a;}
+.cython.score-86 {background-color: #FFFF1a;}
+.cython.score-87 {background-color: #FFFF1a;}
+.cython.score-88 {background-color: #FFFF1a;}
+.cython.score-89 {background-color: #FFFF19;}
+.cython.score-90 {background-color: #FFFF19;}
+.cython.score-91 {background-color: #FFFF19;}
+.cython.score-92 {background-color: #FFFF19;}
+.cython.score-93 {background-color: #FFFF18;}
+.cython.score-94 {background-color: #FFFF18;}
+.cython.score-95 {background-color: #FFFF18;}
+.cython.score-96 {background-color: #FFFF18;}
+.cython.score-97 {background-color: #FFFF17;}
+.cython.score-98 {background-color: #FFFF17;}
+.cython.score-99 {background-color: #FFFF17;}
+.cython.score-100 {background-color: #FFFF17;}
+.cython.score-101 {background-color: #FFFF16;}
+.cython.score-102 {background-color: #FFFF16;}
+.cython.score-103 {background-color: #FFFF16;}
+.cython.score-104 {background-color: #FFFF16;}
+.cython.score-105 {background-color: #FFFF16;}
+.cython.score-106 {background-color: #FFFF15;}
+.cython.score-107 {background-color: #FFFF15;}
+.cython.score-108 {background-color: #FFFF15;}
+.cython.score-109 {background-color: #FFFF15;}
+.cython.score-110 {background-color: #FFFF15;}
+.cython.score-111 {background-color: #FFFF15;}
+.cython.score-112 {background-color: #FFFF14;}
+.cython.score-113 {background-color: #FFFF14;}
+.cython.score-114 {background-color: #FFFF14;}
+.cython.score-115 {background-color: #FFFF14;}
+.cython.score-116 {background-color: #FFFF14;}
+.cython.score-117 {background-color: #FFFF14;}
+.cython.score-118 {background-color: #FFFF13;}
+.cython.score-119 {background-color: #FFFF13;}
+.cython.score-120 {background-color: #FFFF13;}
+.cython.score-121 {background-color: #FFFF13;}
+.cython.score-122 {background-color: #FFFF13;}
+.cython.score-123 {background-color: #FFFF13;}
+.cython.score-124 {background-color: #FFFF13;}
+.cython.score-125 {background-color: #FFFF12;}
+.cython.score-126 {background-color: #FFFF12;}
+.cython.score-127 {background-color: #FFFF12;}
+.cython.score-128 {background-color: #FFFF12;}
+.cython.score-129 {background-color: #FFFF12;}
+.cython.score-130 {background-color: #FFFF12;}
+.cython.score-131 {background-color: #FFFF12;}
+.cython.score-132 {background-color: #FFFF11;}
+.cython.score-133 {background-color: #FFFF11;}
+.cython.score-134 {background-color: #FFFF11;}
+.cython.score-135 {background-color: #FFFF11;}
+.cython.score-136 {background-color: #FFFF11;}
+.cython.score-137 {background-color: #FFFF11;}
+.cython.score-138 {background-color: #FFFF11;}
+.cython.score-139 {background-color: #FFFF11;}
+.cython.score-140 {background-color: #FFFF11;}
+.cython.score-141 {background-color: #FFFF10;}
+.cython.score-142 {background-color: #FFFF10;}
+.cython.score-143 {background-color: #FFFF10;}
+.cython.score-144 {background-color: #FFFF10;}
+.cython.score-145 {background-color: #FFFF10;}
+.cython.score-146 {background-color: #FFFF10;}
+.cython.score-147 {background-color: #FFFF10;}
+.cython.score-148 {background-color: #FFFF10;}
+.cython.score-149 {background-color: #FFFF10;}
+.cython.score-150 {background-color: #FFFF0f;}
+.cython.score-151 {background-color: #FFFF0f;}
+.cython.score-152 {background-color: #FFFF0f;}
+.cython.score-153 {background-color: #FFFF0f;}
+.cython.score-154 {background-color: #FFFF0f;}
+.cython.score-155 {background-color: #FFFF0f;}
+.cython.score-156 {background-color: #FFFF0f;}
+.cython.score-157 {background-color: #FFFF0f;}
+.cython.score-158 {background-color: #FFFF0f;}
+.cython.score-159 {background-color: #FFFF0f;}
+.cython.score-160 {background-color: #FFFF0f;}
+.cython.score-161 {background-color: #FFFF0e;}
+.cython.score-162 {background-color: #FFFF0e;}
+.cython.score-163 {background-color: #FFFF0e;}
+.cython.score-164 {background-color: #FFFF0e;}
+.cython.score-165 {background-color: #FFFF0e;}
+.cython.score-166 {background-color: #FFFF0e;}
+.cython.score-167 {background-color: #FFFF0e;}
+.cython.score-168 {background-color: #FFFF0e;}
+.cython.score-169 {background-color: #FFFF0e;}
+.cython.score-170 {background-color: #FFFF0e;}
+.cython.score-171 {background-color: #FFFF0e;}
+.cython.score-172 {background-color: #FFFF0e;}
+.cython.score-173 {background-color: #FFFF0d;}
+.cython.score-174 {background-color: #FFFF0d;}
+.cython.score-175 {background-color: #FFFF0d;}
+.cython.score-176 {background-color: #FFFF0d;}
+.cython.score-177 {background-color: #FFFF0d;}
+.cython.score-178 {background-color: #FFFF0d;}
+.cython.score-179 {background-color: #FFFF0d;}
+.cython.score-180 {background-color: #FFFF0d;}
+.cython.score-181 {background-color: #FFFF0d;}
+.cython.score-182 {background-color: #FFFF0d;}
+.cython.score-183 {background-color: #FFFF0d;}
+.cython.score-184 {background-color: #FFFF0d;}
+.cython.score-185 {background-color: #FFFF0d;}
+.cython.score-186 {background-color: #FFFF0d;}
+.cython.score-187 {background-color: #FFFF0c;}
+.cython.score-188 {background-color: #FFFF0c;}
+.cython.score-189 {background-color: #FFFF0c;}
+.cython.score-190 {background-color: #FFFF0c;}
+.cython.score-191 {background-color: #FFFF0c;}
+.cython.score-192 {background-color: #FFFF0c;}
+.cython.score-193 {background-color: #FFFF0c;}
+.cython.score-194 {background-color: #FFFF0c;}
+.cython.score-195 {background-color: #FFFF0c;}
+.cython.score-196 {background-color: #FFFF0c;}
+.cython.score-197 {background-color: #FFFF0c;}
+.cython.score-198 {background-color: #FFFF0c;}
+.cython.score-199 {background-color: #FFFF0c;}
+.cython.score-200 {background-color: #FFFF0c;}
+.cython.score-201 {background-color: #FFFF0c;}
+.cython.score-202 {background-color: #FFFF0c;}
+.cython.score-203 {background-color: #FFFF0b;}
+.cython.score-204 {background-color: #FFFF0b;}
+.cython.score-205 {background-color: #FFFF0b;}
+.cython.score-206 {background-color: #FFFF0b;}
+.cython.score-207 {background-color: #FFFF0b;}
+.cython.score-208 {background-color: #FFFF0b;}
+.cython.score-209 {background-color: #FFFF0b;}
+.cython.score-210 {background-color: #FFFF0b;}
+.cython.score-211 {background-color: #FFFF0b;}
+.cython.score-212 {background-color: #FFFF0b;}
+.cython.score-213 {background-color: #FFFF0b;}
+.cython.score-214 {background-color: #FFFF0b;}
+.cython.score-215 {background-color: #FFFF0b;}
+.cython.score-216 {background-color: #FFFF0b;}
+.cython.score-217 {background-color: #FFFF0b;}
+.cython.score-218 {background-color: #FFFF0b;}
+.cython.score-219 {background-color: #FFFF0b;}
+.cython.score-220 {background-color: #FFFF0b;}
+.cython.score-221 {background-color: #FFFF0b;}
+.cython.score-222 {background-color: #FFFF0a;}
+.cython.score-223 {background-color: #FFFF0a;}
+.cython.score-224 {background-color: #FFFF0a;}
+.cython.score-225 {background-color: #FFFF0a;}
+.cython.score-226 {background-color: #FFFF0a;}
+.cython.score-227 {background-color: #FFFF0a;}
+.cython.score-228 {background-color: #FFFF0a;}
+.cython.score-229 {background-color: #FFFF0a;}
+.cython.score-230 {background-color: #FFFF0a;}
+.cython.score-231 {background-color: #FFFF0a;}
+.cython.score-232 {background-color: #FFFF0a;}
+.cython.score-233 {background-color: #FFFF0a;}
+.cython.score-234 {background-color: #FFFF0a;}
+.cython.score-235 {background-color: #FFFF0a;}
+.cython.score-236 {background-color: #FFFF0a;}
+.cython.score-237 {background-color: #FFFF0a;}
+.cython.score-238 {background-color: #FFFF0a;}
+.cython.score-239 {background-color: #FFFF0a;}
+.cython.score-240 {background-color: #FFFF0a;}
+.cython.score-241 {background-color: #FFFF0a;}
+.cython.score-242 {background-color: #FFFF0a;}
+.cython.score-243 {background-color: #FFFF0a;}
+.cython.score-244 {background-color: #FFFF0a;}
+.cython.score-245 {background-color: #FFFF0a;}
+.cython.score-246 {background-color: #FFFF09;}
+.cython.score-247 {background-color: #FFFF09;}
+.cython.score-248 {background-color: #FFFF09;}
+.cython.score-249 {background-color: #FFFF09;}
+.cython.score-250 {background-color: #FFFF09;}
+.cython.score-251 {background-color: #FFFF09;}
+.cython.score-252 {background-color: #FFFF09;}
+.cython.score-253 {background-color: #FFFF09;}
+.cython.score-254 {background-color: #FFFF09;}
+    </style>
+    <script>
+    function toggleDiv(id) {
+        theDiv = id.nextElementSibling
+        if (theDiv.style.display != 'block') theDiv.style.display = 'block';
+        else theDiv.style.display = 'none';
+    }
+    </script>
+</head>
+<body class="cython">
+<p><span style="border-bottom: solid 1px grey;">Generated by Cython 0.26.1</span></p>
+<p>
+    <span style="background-color: #FFFF00">Yellow lines</span> hint at Python interaction.<br />
+    Click on a line that starts with a "<code>+</code>" to see the C code that Cython generated for it.
+</p>
+<p>Raw output: <a href="numind.cpp">numind.cpp</a></p>
+<div class="cython"><pre class="cython line score-0">&#xA0;<span class="">001</span>: # This Pyrex extension class can take a numpy/numarray/Numeric object</pre>
+<pre class="cython line score-0">&#xA0;<span class="">002</span>: # as a parameter and wrap it so that its information can be accessed</pre>
+<pre class="cython line score-0">&#xA0;<span class="">003</span>: # in a standard way, both in Python space and C space.</pre>
+<pre class="cython line score-0">&#xA0;<span class="">004</span>: #</pre>
+<pre class="cython line score-0">&#xA0;<span class="">005</span>: # Heavily based on an idea of Andrew Straw. See</pre>
+<pre class="cython line score-0">&#xA0;<span class="">006</span>: # http://www.scipy.org/Cookbook/ArrayStruct_and_Pyrex</pre>
+<pre class="cython line score-0">&#xA0;<span class="">007</span>: # Very inspiring! :-)</pre>
+<pre class="cython line score-0">&#xA0;<span class="">008</span>: #</pre>
+<pre class="cython line score-0">&#xA0;<span class="">009</span>: # First version: 2006-03-25</pre>
+<pre class="cython line score-0">&#xA0;<span class="">010</span>: # Last update: 2006-03-25</pre>
+<pre class="cython line score-0">&#xA0;<span class="">011</span>: # Author: Francesc Altet</pre>
+<pre class="cython line score-0">&#xA0;<span class="">012</span>: </pre>
+<pre class="cython line score-8" onclick='toggleDiv(this)'>+<span class="">013</span>: import sys</pre>
+<pre class='cython code score-8 '>  __pyx_t_1 = <span class='pyx_c_api'>__Pyx_Import</span>(__pyx_n_s_sys, 0, -1);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 13, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
+  if (<span class='py_c_api'>PyDict_SetItem</span>(__pyx_d, __pyx_n_s_sys, __pyx_t_1) &lt; 0) <span class='error_goto'>__PYX_ERR(0, 13, __pyx_L1_error)</span>
+  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
+</pre><pre class="cython line score-0">&#xA0;<span class="">014</span>: from cpython.pycapsule cimport *</pre>
+<pre class="cython line score-0">&#xA0;<span class="">015</span>: </pre>
+<pre class="cython line score-0">&#xA0;<span class="">016</span>: cdef extern from "Python.h":</pre>
+<pre class="cython line score-0">&#xA0;<span class="">017</span>:     ctypedef int Py_intptr_t</pre>
+<pre class="cython line score-0">&#xA0;<span class="">018</span>:     ctypedef object PyObject</pre>
+<pre class="cython line score-0">&#xA0;<span class="">019</span>:     long PyInt_AsLong(object)</pre>
+<pre class="cython line score-0">&#xA0;<span class="">020</span>:     void Py_INCREF(object)</pre>
+<pre class="cython line score-0">&#xA0;<span class="">021</span>:     void Py_DECREF(object)</pre>
+<pre class="cython line score-0">&#xA0;<span class="">022</span>: </pre>
+<pre class="cython line score-0">&#xA0;<span class="">023</span>: cdef extern from "stdlib.h":</pre>
+<pre class="cython line score-0">&#xA0;<span class="">024</span>:     ctypedef long size_t</pre>
+<pre class="cython line score-0">&#xA0;<span class="">025</span>:     ctypedef long intptr_t</pre>
+<pre class="cython line score-0">&#xA0;<span class="">026</span>:     void *malloc(size_t size)</pre>
+<pre class="cython line score-0">&#xA0;<span class="">027</span>:     void free(void* ptr)</pre>
+<pre class="cython line score-0">&#xA0;<span class="">028</span>: </pre>
+<pre class="cython line score-0">&#xA0;<span class="">029</span>: cdef extern from "numind.h":</pre>
+<pre class="cython line score-0">&#xA0;<span class="">030</span>:     ctypedef struct SignedIntBuf</pre>
+<pre class="cython line score-0">&#xA0;<span class="">031</span>: </pre>
+<pre class="cython line score-0">&#xA0;<span class="">032</span>: # for PyArrayInterface:</pre>
+<pre class="cython line score-5" onclick='toggleDiv(this)'>+<span class="">033</span>: CONTIGUOUS=0x01</pre>
+<pre class='cython code score-5 '>  if (<span class='py_c_api'>PyDict_SetItem</span>(__pyx_d, __pyx_n_s_CONTIGUOUS, __pyx_int_1) &lt; 0) <span class='error_goto'>__PYX_ERR(0, 33, __pyx_L1_error)</span>
+</pre><pre class="cython line score-5" onclick='toggleDiv(this)'>+<span class="">034</span>: FORTRAN=0x02</pre>
+<pre class='cython code score-5 '>  if (<span class='py_c_api'>PyDict_SetItem</span>(__pyx_d, __pyx_n_s_FORTRAN, __pyx_int_2) &lt; 0) <span class='error_goto'>__PYX_ERR(0, 34, __pyx_L1_error)</span>
+</pre><pre class="cython line score-5" onclick='toggleDiv(this)'>+<span class="">035</span>: ALIGNED=0x100</pre>
+<pre class='cython code score-5 '>  if (<span class='py_c_api'>PyDict_SetItem</span>(__pyx_d, __pyx_n_s_ALIGNED, __pyx_int_256) &lt; 0) <span class='error_goto'>__PYX_ERR(0, 35, __pyx_L1_error)</span>
+</pre><pre class="cython line score-5" onclick='toggleDiv(this)'>+<span class="">036</span>: NOTSWAPPED=0x200</pre>
+<pre class='cython code score-5 '>  if (<span class='py_c_api'>PyDict_SetItem</span>(__pyx_d, __pyx_n_s_NOTSWAPPED, __pyx_int_512) &lt; 0) <span class='error_goto'>__PYX_ERR(0, 36, __pyx_L1_error)</span>
+</pre><pre class="cython line score-5" onclick='toggleDiv(this)'>+<span class="">037</span>: WRITEABLE=0x400</pre>
+<pre class='cython code score-5 '>  if (<span class='py_c_api'>PyDict_SetItem</span>(__pyx_d, __pyx_n_s_WRITEABLE, __pyx_int_1024) &lt; 0) <span class='error_goto'>__PYX_ERR(0, 37, __pyx_L1_error)</span>
+</pre><pre class="cython line score-0">&#xA0;<span class="">038</span>: </pre>
+<pre class="cython line score-0">&#xA0;<span class="">039</span>: # byteorder dictionary</pre>
+<pre class="cython line score-21" onclick='toggleDiv(this)'>+<span class="">040</span>: byteorder = {'&lt;':'little', '&gt;':'big'}</pre>
+<pre class='cython code score-21 '>  __pyx_t_1 = <span class='py_c_api'>PyDict_New</span>();<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 40, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
+  if (<span class='py_c_api'>PyDict_SetItem</span>(__pyx_t_1, __pyx_kp_s__6, __pyx_n_s_little) &lt; 0) <span class='error_goto'>__PYX_ERR(0, 40, __pyx_L1_error)</span>
+  if (<span class='py_c_api'>PyDict_SetItem</span>(__pyx_t_1, __pyx_kp_s__7, __pyx_n_s_big) &lt; 0) <span class='error_goto'>__PYX_ERR(0, 40, __pyx_L1_error)</span>
+  if (<span class='py_c_api'>PyDict_SetItem</span>(__pyx_d, __pyx_n_s_byteorder, __pyx_t_1) &lt; 0) <span class='error_goto'>__PYX_ERR(0, 40, __pyx_L1_error)</span>
+  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
+</pre><pre class="cython line score-0">&#xA0;<span class="">041</span>: </pre>
+<pre class="cython line score-0" onclick='toggleDiv(this)'>+<span class="">042</span>: ctypedef struct PyArrayInterface:</pre>
+<pre class='cython code score-0 '>struct __pyx_t_6numind_PyArrayInterface {
+  int version;
+  int nd;
+  char typekind;
+  int itemsize;
+  int flags;
+  Py_intptr_t *shape;
+  Py_intptr_t *strides;
+  void *data;
+};
+</pre><pre class="cython line score-0">&#xA0;<span class="">043</span>:     int version          # contains the integer 2 as a sanity check</pre>
+<pre class="cython line score-0">&#xA0;<span class="">044</span>:     int nd               # number of dimensions</pre>
+<pre class="cython line score-0">&#xA0;<span class="">045</span>:     char typekind        # kind in array --- character code of typestr</pre>
+<pre class="cython line score-0">&#xA0;<span class="">046</span>:     int itemsize         # size of each element</pre>
+<pre class="cython line score-0">&#xA0;<span class="">047</span>:     int flags            # flags indicating how the data should be interpreted</pre>
+<pre class="cython line score-0">&#xA0;<span class="">048</span>:     Py_intptr_t *shape   # A length-nd array of shape information</pre>
+<pre class="cython line score-0">&#xA0;<span class="">049</span>:     Py_intptr_t *strides # A length-nd array of stride information</pre>
+<pre class="cython line score-0">&#xA0;<span class="">050</span>:     void *data           # A pointer to the first element of the array</pre>
+<pre class="cython line score-0">&#xA0;<span class="">051</span>: </pre>
+<pre class="cython line score-0" onclick='toggleDiv(this)'>+<span class="">052</span>: cdef void* free_array_interface(object arr):</pre>
+<pre class='cython code score-0 '>static void *__pyx_f_6numind_free_array_interface(PyObject *__pyx_v_arr) {
+  void *__pyx_r;
+  <span class='refnanny'>__Pyx_RefNannyDeclarations</span>
+  <span class='refnanny'>__Pyx_RefNannySetupContext</span>("free_array_interface", 0);
+/* … */
+  /* function exit code */
+  __pyx_r = 0;
+  <span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
+  return __pyx_r;
+}
+</pre><pre class="cython line score-0" onclick='toggleDiv(this)'>+<span class="">053</span>:     Py_DECREF(arr)</pre>
+<pre class='cython code score-0 '>  Py_DECREF(__pyx_v_arr);
+</pre><pre class="cython line score-0">&#xA0;<span class="">054</span>: </pre>
+<pre class="cython line score-0">&#xA0;<span class="">055</span>: </pre>
+<pre class="cython line score-0" onclick='toggleDiv(this)'>+<span class="">056</span>: cdef class NumInd:</pre>
+<pre class='cython code score-0 '>struct __pyx_obj_6numind_NumInd {
+  PyObject_HEAD
+  struct __pyx_vtabstruct_6numind_NumInd *__pyx_vtab;
+  void *data;
+  int _nd;
+  Py_intptr_t *_shape;
+  Py_intptr_t *_strides;
+  __pyx_t_6numind_PyArrayInterface *inter;
+  PyObject *_t_shape;
+  PyObject *_t_strides;
+  PyObject *_undarray;
+};
+
+
+
+struct __pyx_vtabstruct_6numind_NumInd {
+  __pyx_t_6numind_PyArrayInterface *(*_get_array_interface)(struct __pyx_obj_6numind_NumInd *);
+};
+static struct __pyx_vtabstruct_6numind_NumInd *__pyx_vtabptr_6numind_NumInd;
+</pre><pre class="cython line score-0">&#xA0;<span class="">057</span>:     cdef void *data</pre>
+<pre class="cython line score-0">&#xA0;<span class="">058</span>:     cdef int _nd</pre>
+<pre class="cython line score-0">&#xA0;<span class="">059</span>:     cdef Py_intptr_t *_shape</pre>
+<pre class="cython line score-0">&#xA0;<span class="">060</span>:     cdef Py_intptr_t *_strides</pre>
+<pre class="cython line score-0">&#xA0;<span class="">061</span>:     cdef PyArrayInterface *inter</pre>
+<pre class="cython line score-0">&#xA0;<span class="">062</span>:     cdef object _t_shape, _t_strides, _undarray</pre>
+<pre class="cython line score-0">&#xA0;<span class="">063</span>: </pre>
+<pre class="cython line score-28" onclick='toggleDiv(this)'>+<span class="">064</span>:     def __init__(self, object undarray):</pre>
+<pre class='cython code score-28 '>/* Python wrapper */
+static int __pyx_pw_6numind_6NumInd_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_pw_6numind_6NumInd_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_undarray = 0;
+  int __pyx_r;
+  <span class='refnanny'>__Pyx_RefNannyDeclarations</span>
+  <span class='refnanny'>__Pyx_RefNannySetupContext</span>("__init__ (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&amp;__pyx_n_s_undarray,0};
+    PyObject* values[1] = {0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = <span class='py_macro_api'>PyTuple_GET_SIZE</span>(__pyx_args);
+      switch (pos_args) {
+        case  1: values[0] = <span class='py_macro_api'>PyTuple_GET_ITEM</span>(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = <span class='py_c_api'>PyDict_Size</span>(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = <span class='py_c_api'>PyDict_GetItem</span>(__pyx_kwds, __pyx_n_s_undarray)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+      }
+      if (unlikely(kw_args &gt; 0)) {
+        if (unlikely(<span class='pyx_c_api'>__Pyx_ParseOptionalKeywords</span>(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") &lt; 0)) <span class='error_goto'>__PYX_ERR(0, 64, __pyx_L3_error)</span>
+      }
+    } else if (<span class='py_macro_api'>PyTuple_GET_SIZE</span>(__pyx_args) != 1) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = <span class='py_macro_api'>PyTuple_GET_ITEM</span>(__pyx_args, 0);
+    }
+    __pyx_v_undarray = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  <span class='pyx_c_api'>__Pyx_RaiseArgtupleInvalid</span>("__init__", 1, 1, 1, <span class='py_macro_api'>PyTuple_GET_SIZE</span>(__pyx_args)); <span class='error_goto'>__PYX_ERR(0, 64, __pyx_L3_error)</span>
+  __pyx_L3_error:;
+  <span class='pyx_c_api'>__Pyx_AddTraceback</span>("numind.NumInd.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  <span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
+  return -1;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_6numind_6NumInd___init__(((struct __pyx_obj_6numind_NumInd *)__pyx_v_self), __pyx_v_undarray);
+
+  /* function exit code */
+  <span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
+  return __pyx_r;
+}
+
+static int __pyx_pf_6numind_6NumInd___init__(struct __pyx_obj_6numind_NumInd *__pyx_v_self, PyObject *__pyx_v_undarray) {
+  int __pyx_v_i;
+  int __pyx_v_stride;
+  PyObject *__pyx_v_array_shape = 0;
+  PyObject *__pyx_v_array_strides = 0;
+  int __pyx_r;
+  <span class='refnanny'>__Pyx_RefNannyDeclarations</span>
+  <span class='refnanny'>__Pyx_RefNannySetupContext</span>("__init__", 0);
+/* … */
+  /* function exit code */
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_1);
+  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_2);
+  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_7);
+  <span class='pyx_c_api'>__Pyx_AddTraceback</span>("numind.NumInd.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
+  __pyx_L0:;
+  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_array_shape);
+  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_array_strides);
+  <span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
+  return __pyx_r;
+}
+</pre><pre class="cython line score-0">&#xA0;<span class="">065</span>:         cdef int i, stride</pre>
+<pre class="cython line score-0">&#xA0;<span class="">066</span>:         cdef object array_shape, array_strides</pre>
+<pre class="cython line score-0">&#xA0;<span class="">067</span>: </pre>
+<pre class="cython line score-0">&#xA0;<span class="">068</span>:         # Keep a reference to the underlying object</pre>
+<pre class="cython line score-2" onclick='toggleDiv(this)'>+<span class="">069</span>:         self._undarray = undarray</pre>
+<pre class='cython code score-2 '>  <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_undarray);
+  <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_v_undarray);
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_v_self-&gt;_undarray);
+  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_v_self-&gt;_undarray);
+  __pyx_v_self-&gt;_undarray = __pyx_v_undarray;
+</pre><pre class="cython line score-0">&#xA0;<span class="">070</span>:         # Get the shape and strides C arrays</pre>
+<pre class="cython line score-8" onclick='toggleDiv(this)'>+<span class="">071</span>:         array_shape = undarray.__array_interface__["shape"]</pre>
+<pre class='cython code score-8 '>  __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(__pyx_v_undarray, __pyx_n_s_array_interface);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 71, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
+  __pyx_t_2 = <span class='py_c_api'>PyObject_GetItem</span>(__pyx_t_1, __pyx_n_s_shape);<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 71, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
+  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_v_array_shape = __pyx_t_2;
+  __pyx_t_2 = 0;
+</pre><pre class="cython line score-2" onclick='toggleDiv(this)'>+<span class="">072</span>:         self._t_shape = array_shape</pre>
+<pre class='cython code score-2 '>  <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_array_shape);
+  <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_v_array_shape);
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_v_self-&gt;_t_shape);
+  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_v_self-&gt;_t_shape);
+  __pyx_v_self-&gt;_t_shape = __pyx_v_array_shape;
+</pre><pre class="cython line score-0">&#xA0;<span class="">073</span>:         # The number of dimensions</pre>
+<pre class="cython line score-5" onclick='toggleDiv(this)'>+<span class="">074</span>:         self._nd = len(array_shape)</pre>
+<pre class='cython code score-5 '>  __pyx_t_3 = <span class='py_c_api'>PyObject_Length</span>(__pyx_v_array_shape);<span class='error_goto'> if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(0, 74, __pyx_L1_error)</span>
+  __pyx_v_self-&gt;_nd = __pyx_t_3;
+</pre><pre class="cython line score-0">&#xA0;<span class="">075</span>:         # The shape</pre>
+<pre class="cython line score-0" onclick='toggleDiv(this)'>+<span class="">076</span>:         self._shape = &lt;Py_intptr_t *&gt;malloc(self._nd*sizeof(Py_intptr_t))</pre>
+<pre class='cython code score-0 '>  __pyx_v_self-&gt;_shape = ((Py_intptr_t *)malloc((__pyx_v_self-&gt;_nd * (sizeof(Py_intptr_t)))));
+</pre><pre class="cython line score-0" onclick='toggleDiv(this)'>+<span class="">077</span>:         for i from 0 &lt;= i &lt; self._nd:</pre>
+<pre class='cython code score-0 '>  __pyx_t_4 = __pyx_v_self-&gt;_nd;
+  for (__pyx_v_i = 0; __pyx_v_i &lt; __pyx_t_4; __pyx_v_i++) {
+</pre><pre class="cython line score-10" onclick='toggleDiv(this)'>+<span class="">078</span>:             self._shape[i] = self._t_shape[i]</pre>
+<pre class='cython code score-10 '>    __pyx_t_2 = <span class='pyx_c_api'>__Pyx_GetItemInt</span>(__pyx_v_self-&gt;_t_shape, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 1, 1);<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 78, __pyx_L1_error)</span>
+    <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
+    __pyx_t_5 = <span class='pyx_c_api'>__Pyx_PyInt_As_Py_intptr_t</span>(__pyx_t_2); if (unlikely((__pyx_t_5 == ((Py_intptr_t)-1)) &amp;&amp; <span class='py_c_api'>PyErr_Occurred</span>())) <span class='error_goto'>__PYX_ERR(0, 78, __pyx_L1_error)</span>
+    <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
+    (__pyx_v_self-&gt;_shape[__pyx_v_i]) = __pyx_t_5;
+  }
+</pre><pre class="cython line score-0">&#xA0;<span class="">079</span>:         # The strides (compute them if needed)</pre>
+<pre class="cython line score-8" onclick='toggleDiv(this)'>+<span class="">080</span>:         array_strides = undarray.__array_interface__["strides"]</pre>
+<pre class='cython code score-8 '>  __pyx_t_2 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(__pyx_v_undarray, __pyx_n_s_array_interface);<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 80, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
+  __pyx_t_1 = <span class='py_c_api'>PyObject_GetItem</span>(__pyx_t_2, __pyx_n_s_strides);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 80, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
+  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_v_array_strides = __pyx_t_1;
+  __pyx_t_1 = 0;
+</pre><pre class="cython line score-2" onclick='toggleDiv(this)'>+<span class="">081</span>:         self._t_strides = array_strides</pre>
+<pre class='cython code score-2 '>  <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_array_strides);
+  <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_v_array_strides);
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_v_self-&gt;_t_strides);
+  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_v_self-&gt;_t_strides);
+  __pyx_v_self-&gt;_t_strides = __pyx_v_array_strides;
+</pre><pre class="cython line score-0" onclick='toggleDiv(this)'>+<span class="">082</span>:         self._strides = &lt;Py_intptr_t *&gt;malloc(self._nd*sizeof(Py_intptr_t))</pre>
+<pre class='cython code score-0 '>  __pyx_v_self-&gt;_strides = ((Py_intptr_t *)malloc((__pyx_v_self-&gt;_nd * (sizeof(Py_intptr_t)))));
+</pre><pre class="cython line score-2" onclick='toggleDiv(this)'>+<span class="">083</span>:         if array_strides:</pre>
+<pre class='cython code score-2 '>  __pyx_t_6 = <span class='pyx_c_api'>__Pyx_PyObject_IsTrue</span>(__pyx_v_array_strides); if (unlikely(__pyx_t_6 &lt; 0)) <span class='error_goto'>__PYX_ERR(0, 83, __pyx_L1_error)</span>
+  if (__pyx_t_6) {
+/* … */
+    goto __pyx_L5;
+  }
+</pre><pre class="cython line score-0" onclick='toggleDiv(this)'>+<span class="">084</span>:             for i from 0 &lt;= i &lt; self._nd:</pre>
+<pre class='cython code score-0 '>    __pyx_t_4 = __pyx_v_self-&gt;_nd;
+    for (__pyx_v_i = 0; __pyx_v_i &lt; __pyx_t_4; __pyx_v_i++) {
+</pre><pre class="cython line score-10" onclick='toggleDiv(this)'>+<span class="">085</span>:                 self._strides[i] = array_strides[i]</pre>
+<pre class='cython code score-10 '>      __pyx_t_1 = <span class='pyx_c_api'>__Pyx_GetItemInt</span>(__pyx_v_array_strides, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 1, 1);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 85, __pyx_L1_error)</span>
+      <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
+      __pyx_t_5 = <span class='pyx_c_api'>__Pyx_PyInt_As_Py_intptr_t</span>(__pyx_t_1); if (unlikely((__pyx_t_5 == ((Py_intptr_t)-1)) &amp;&amp; <span class='py_c_api'>PyErr_Occurred</span>())) <span class='error_goto'>__PYX_ERR(0, 85, __pyx_L1_error)</span>
+      <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
+      (__pyx_v_self-&gt;_strides[__pyx_v_i]) = __pyx_t_5;
+    }
+</pre><pre class="cython line score-0">&#xA0;<span class="">086</span>:         else:</pre>
+<pre class="cython line score-0">&#xA0;<span class="">087</span>:             # strides is None. Compute them explicitely.</pre>
+<pre class="cython line score-8" onclick='toggleDiv(this)'>+<span class="">088</span>:             self._t_strides = [0] * self._nd</pre>
+<pre class='cython code score-8 '>  /*else*/ {
+    __pyx_t_1 = <span class='py_c_api'>PyList_New</span>(1 * ((__pyx_v_self-&gt;_nd&lt;0) ? 0:__pyx_v_self-&gt;_nd));<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 88, __pyx_L1_error)</span>
+    <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
+    { Py_ssize_t __pyx_temp;
+      for (__pyx_temp=0; __pyx_temp &lt; __pyx_v_self-&gt;_nd; __pyx_temp++) {
+        <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_int_0);
+        <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_int_0);
+        <span class='py_macro_api'>PyList_SET_ITEM</span>(__pyx_t_1, __pyx_temp, __pyx_int_0);
+      }
+    }
+    <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_1);
+    <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_v_self-&gt;_t_strides);
+    <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_v_self-&gt;_t_strides);
+    __pyx_v_self-&gt;_t_strides = __pyx_t_1;
+    __pyx_t_1 = 0;
+</pre><pre class="cython line score-21" onclick='toggleDiv(this)'>+<span class="">089</span>:             stride = int(self.typestr[2:])</pre>
+<pre class='cython code score-21 '>    __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(((PyObject *)__pyx_v_self), __pyx_n_s_typestr);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 89, __pyx_L1_error)</span>
+    <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
+    __pyx_t_2 = <span class='pyx_c_api'>__Pyx_PyObject_GetSlice</span>(__pyx_t_1, 2, 0, NULL, NULL, &amp;__pyx_slice_, 1, 0, 1);<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 89, __pyx_L1_error)</span>
+    <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
+    <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyNumber_Int</span>(__pyx_t_2);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 89, __pyx_L1_error)</span>
+    <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
+    <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
+    __pyx_t_4 = <span class='pyx_c_api'>__Pyx_PyInt_As_int</span>(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) &amp;&amp; <span class='py_c_api'>PyErr_Occurred</span>())) <span class='error_goto'>__PYX_ERR(0, 89, __pyx_L1_error)</span>
+    <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_v_stride = __pyx_t_4;
+/* … */
+  __pyx_slice_ = <span class='py_c_api'>PySlice_New</span>(__pyx_int_2, Py_None, Py_None);<span class='error_goto'> if (unlikely(!__pyx_slice_)) __PYX_ERR(0, 89, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_slice_);
+  <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_slice_);
+</pre><pre class="cython line score-0" onclick='toggleDiv(this)'>+<span class="">090</span>:             for i from self._nd &gt; i &gt;= 0:</pre>
+<pre class='cython code score-0 '>    for (__pyx_v_i = __pyx_v_self-&gt;_nd-1; __pyx_v_i &gt;= 0; __pyx_v_i--) {
+</pre><pre class="cython line score-0" onclick='toggleDiv(this)'>+<span class="">091</span>:                 self._strides[i] = stride</pre>
+<pre class='cython code score-0 '>      (__pyx_v_self-&gt;_strides[__pyx_v_i]) = __pyx_v_stride;
+</pre><pre class="cython line score-5" onclick='toggleDiv(this)'>+<span class="">092</span>:                 self._t_strides[i] = stride</pre>
+<pre class='cython code score-5 '>      __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyInt_From_int</span>(__pyx_v_stride);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 92, __pyx_L1_error)</span>
+      <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
+      if (unlikely(<span class='pyx_c_api'>__Pyx_SetItemInt</span>(__pyx_v_self-&gt;_t_strides, __pyx_v_i, __pyx_t_1, int, 1, __Pyx_PyInt_From_int, 0, 1, 1) &lt; 0)) <span class='error_goto'>__PYX_ERR(0, 92, __pyx_L1_error)</span>
+      <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
+</pre><pre class="cython line score-19" onclick='toggleDiv(this)'>+<span class="">093</span>:                 stride = stride * array_shape[i]</pre>
+<pre class='cython code score-19 '>      __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyInt_From_int</span>(__pyx_v_stride);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 93, __pyx_L1_error)</span>
+      <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
+      __pyx_t_2 = <span class='pyx_c_api'>__Pyx_GetItemInt</span>(__pyx_v_array_shape, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 1, 1);<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 93, __pyx_L1_error)</span>
+      <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
+      __pyx_t_7 = <span class='py_c_api'>PyNumber_Multiply</span>(__pyx_t_1, __pyx_t_2);<span class='error_goto'> if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 93, __pyx_L1_error)</span>
+      <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_7);
+      <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
+      <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
+      __pyx_t_4 = <span class='pyx_c_api'>__Pyx_PyInt_As_int</span>(__pyx_t_7); if (unlikely((__pyx_t_4 == (int)-1) &amp;&amp; <span class='py_c_api'>PyErr_Occurred</span>())) <span class='error_goto'>__PYX_ERR(0, 93, __pyx_L1_error)</span>
+      <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_7); __pyx_t_7 = 0;
+      __pyx_v_stride = __pyx_t_4;
+    }
+</pre><pre class="cython line score-6" onclick='toggleDiv(this)'>+<span class="">094</span>:             self._t_strides = tuple(self._t_strides)</pre>
+<pre class='cython code score-6 '>    __pyx_t_7 = <span class='py_c_api'>PySequence_Tuple</span>(__pyx_v_self-&gt;_t_strides);<span class='error_goto'> if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 94, __pyx_L1_error)</span>
+    <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_7);
+    <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_7);
+    <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_v_self-&gt;_t_strides);
+    <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_v_self-&gt;_t_strides);
+    __pyx_v_self-&gt;_t_strides = __pyx_t_7;
+    __pyx_t_7 = 0;
+  }
+  __pyx_L5:;
+</pre><pre class="cython line score-0">&#xA0;<span class="">095</span>:         # Populate the C array interface</pre>
+<pre class="cython line score-0" onclick='toggleDiv(this)'>+<span class="">096</span>:         self.inter = self._get_array_interface()</pre>
+<pre class='cython code score-0 '>  __pyx_v_self-&gt;inter = ((struct __pyx_vtabstruct_6numind_NumInd *)__pyx_v_self-&gt;__pyx_vtab)-&gt;_get_array_interface(__pyx_v_self);
+</pre><pre class="cython line score-0">&#xA0;<span class="">097</span>: </pre>
+<pre class="cython line score-0">&#xA0;<span class="">098</span>:     # Properties. This are visible from Python space.</pre>
+<pre class="cython line score-0">&#xA0;<span class="">099</span>:     # Add as many as you want.</pre>
+<pre class="cython line score-0">&#xA0;<span class="">100</span>: </pre>
+<pre class="cython line score-0">&#xA0;<span class="">101</span>:     property undarray:  # Returns the underlying array</pre>
+<pre class="cython line score-0" onclick='toggleDiv(this)'>+<span class="">102</span>:         def __get__(self):</pre>
+<pre class='cython code score-0 '>/* Python wrapper */
+static PyObject *__pyx_pw_6numind_6NumInd_8undarray_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_6numind_6NumInd_8undarray_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  <span class='refnanny'>__Pyx_RefNannyDeclarations</span>
+  <span class='refnanny'>__Pyx_RefNannySetupContext</span>("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_6numind_6NumInd_8undarray___get__(((struct __pyx_obj_6numind_NumInd *)__pyx_v_self));
+
+  /* function exit code */
+  <span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_6numind_6NumInd_8undarray___get__(struct __pyx_obj_6numind_NumInd *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  <span class='refnanny'>__Pyx_RefNannyDeclarations</span>
+  <span class='refnanny'>__Pyx_RefNannySetupContext</span>("__get__", 0);
+/* … */
+  /* function exit code */
+  __pyx_L0:;
+  <span class='refnanny'>__Pyx_XGIVEREF</span>(__pyx_r);
+  <span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
+  return __pyx_r;
+}
+</pre><pre class="cython line score-2" onclick='toggleDiv(this)'>+<span class="">103</span>:             return self._undarray</pre>
+<pre class='cython code score-2 '>  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_r);
+  <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_self-&gt;_undarray);
+  __pyx_r = __pyx_v_self-&gt;_undarray;
+  goto __pyx_L0;
+</pre><pre class="cython line score-0">&#xA0;<span class="">104</span>: </pre>
+<pre class="cython line score-0">&#xA0;<span class="">105</span>:     property shape:</pre>
+<pre class="cython line score-0" onclick='toggleDiv(this)'>+<span class="">106</span>:         def __get__(self):</pre>
+<pre class='cython code score-0 '>/* Python wrapper */
+static PyObject *__pyx_pw_6numind_6NumInd_5shape_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_6numind_6NumInd_5shape_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  <span class='refnanny'>__Pyx_RefNannyDeclarations</span>
+  <span class='refnanny'>__Pyx_RefNannySetupContext</span>("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_6numind_6NumInd_5shape___get__(((struct __pyx_obj_6numind_NumInd *)__pyx_v_self));
+
+  /* function exit code */
+  <span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_6numind_6NumInd_5shape___get__(struct __pyx_obj_6numind_NumInd *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  <span class='refnanny'>__Pyx_RefNannyDeclarations</span>
+  <span class='refnanny'>__Pyx_RefNannySetupContext</span>("__get__", 0);
+/* … */
+  /* function exit code */
+  __pyx_L0:;
+  <span class='refnanny'>__Pyx_XGIVEREF</span>(__pyx_r);
+  <span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
+  return __pyx_r;
+}
+</pre><pre class="cython line score-2" onclick='toggleDiv(this)'>+<span class="">107</span>:             return self._t_shape</pre>
+<pre class='cython code score-2 '>  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_r);
+  <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_self-&gt;_t_shape);
+  __pyx_r = __pyx_v_self-&gt;_t_shape;
+  goto __pyx_L0;
+</pre><pre class="cython line score-0">&#xA0;<span class="">108</span>: </pre>
+<pre class="cython line score-0">&#xA0;<span class="">109</span>:     property strides:</pre>
+<pre class="cython line score-0" onclick='toggleDiv(this)'>+<span class="">110</span>:         def __get__(self):</pre>
+<pre class='cython code score-0 '>/* Python wrapper */
+static PyObject *__pyx_pw_6numind_6NumInd_7strides_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_6numind_6NumInd_7strides_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  <span class='refnanny'>__Pyx_RefNannyDeclarations</span>
+  <span class='refnanny'>__Pyx_RefNannySetupContext</span>("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_6numind_6NumInd_7strides___get__(((struct __pyx_obj_6numind_NumInd *)__pyx_v_self));
+
+  /* function exit code */
+  <span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_6numind_6NumInd_7strides___get__(struct __pyx_obj_6numind_NumInd *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  <span class='refnanny'>__Pyx_RefNannyDeclarations</span>
+  <span class='refnanny'>__Pyx_RefNannySetupContext</span>("__get__", 0);
+/* … */
+  /* function exit code */
+  __pyx_L0:;
+  <span class='refnanny'>__Pyx_XGIVEREF</span>(__pyx_r);
+  <span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
+  return __pyx_r;
+}
+</pre><pre class="cython line score-2" onclick='toggleDiv(this)'>+<span class="">111</span>:             return self._t_strides</pre>
+<pre class='cython code score-2 '>  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_r);
+  <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_self-&gt;_t_strides);
+  __pyx_r = __pyx_v_self-&gt;_t_strides;
+  goto __pyx_L0;
+</pre><pre class="cython line score-0">&#xA0;<span class="">112</span>: </pre>
+<pre class="cython line score-0">&#xA0;<span class="">113</span>:     property typestr:</pre>
+<pre class="cython line score-4" onclick='toggleDiv(this)'>+<span class="">114</span>:         def __get__(self):</pre>
+<pre class='cython code score-4 '>/* Python wrapper */
+static PyObject *__pyx_pw_6numind_6NumInd_7typestr_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_6numind_6NumInd_7typestr_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  <span class='refnanny'>__Pyx_RefNannyDeclarations</span>
+  <span class='refnanny'>__Pyx_RefNannySetupContext</span>("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_6numind_6NumInd_7typestr___get__(((struct __pyx_obj_6numind_NumInd *)__pyx_v_self));
+
+  /* function exit code */
+  <span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_6numind_6NumInd_7typestr___get__(struct __pyx_obj_6numind_NumInd *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  <span class='refnanny'>__Pyx_RefNannyDeclarations</span>
+  <span class='refnanny'>__Pyx_RefNannySetupContext</span>("__get__", 0);
+/* … */
+  /* function exit code */
+  __pyx_L1_error:;
+  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_1);
+  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_2);
+  <span class='pyx_c_api'>__Pyx_AddTraceback</span>("numind.NumInd.typestr.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  <span class='refnanny'>__Pyx_XGIVEREF</span>(__pyx_r);
+  <span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
+  return __pyx_r;
+}
+</pre><pre class="cython line score-9" onclick='toggleDiv(this)'>+<span class="">115</span>:             return self._undarray.__array_interface__["typestr"]</pre>
+<pre class='cython code score-9 '>  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_r);
+  __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(__pyx_v_self-&gt;_undarray, __pyx_n_s_array_interface);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 115, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
+  __pyx_t_2 = <span class='py_c_api'>PyObject_GetItem</span>(__pyx_t_1, __pyx_n_s_typestr);<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 115, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
+  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
+</pre><pre class="cython line score-0">&#xA0;<span class="">116</span>: </pre>
+<pre class="cython line score-0">&#xA0;<span class="">117</span>:     property typekind:</pre>
+<pre class="cython line score-4" onclick='toggleDiv(this)'>+<span class="">118</span>:         def __get__(self):</pre>
+<pre class='cython code score-4 '>/* Python wrapper */
+static PyObject *__pyx_pw_6numind_6NumInd_8typekind_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_6numind_6NumInd_8typekind_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  <span class='refnanny'>__Pyx_RefNannyDeclarations</span>
+  <span class='refnanny'>__Pyx_RefNannySetupContext</span>("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_6numind_6NumInd_8typekind___get__(((struct __pyx_obj_6numind_NumInd *)__pyx_v_self));
+
+  /* function exit code */
+  <span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_6numind_6NumInd_8typekind___get__(struct __pyx_obj_6numind_NumInd *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  <span class='refnanny'>__Pyx_RefNannyDeclarations</span>
+  <span class='refnanny'>__Pyx_RefNannySetupContext</span>("__get__", 0);
+/* … */
+  /* function exit code */
+  __pyx_L1_error:;
+  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_1);
+  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_2);
+  <span class='pyx_c_api'>__Pyx_AddTraceback</span>("numind.NumInd.typekind.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  <span class='refnanny'>__Pyx_XGIVEREF</span>(__pyx_r);
+  <span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
+  return __pyx_r;
+}
+</pre><pre class="cython line score-12" onclick='toggleDiv(this)'>+<span class="">119</span>:             return chr(self.inter.typekind)</pre>
+<pre class='cython code score-12 '>  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_r);
+  __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyInt_From_char</span>(__pyx_v_self-&gt;inter-&gt;typekind);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 119, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
+  __pyx_t_2 = <span class='py_c_api'>PyTuple_New</span>(1);<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 119, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
+  <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_1);
+  <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_2, 0, __pyx_t_1);
+  __pyx_t_1 = 0;
+  __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyObject_Call</span>(__pyx_builtin_chr, __pyx_t_2, NULL);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 119, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
+  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+</pre><pre class="cython line score-0">&#xA0;<span class="">120</span>: </pre>
+<pre class="cython line score-0">&#xA0;<span class="">121</span>:     property readonly:</pre>
+<pre class="cython line score-4" onclick='toggleDiv(this)'>+<span class="">122</span>:         def __get__(self):</pre>
+<pre class='cython code score-4 '>/* Python wrapper */
+static PyObject *__pyx_pw_6numind_6NumInd_8readonly_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_6numind_6NumInd_8readonly_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  <span class='refnanny'>__Pyx_RefNannyDeclarations</span>
+  <span class='refnanny'>__Pyx_RefNannySetupContext</span>("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_6numind_6NumInd_8readonly___get__(((struct __pyx_obj_6numind_NumInd *)__pyx_v_self));
+
+  /* function exit code */
+  <span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_6numind_6NumInd_8readonly___get__(struct __pyx_obj_6numind_NumInd *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  <span class='refnanny'>__Pyx_RefNannyDeclarations</span>
+  <span class='refnanny'>__Pyx_RefNannySetupContext</span>("__get__", 0);
+/* … */
+  /* function exit code */
+  __pyx_L1_error:;
+  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_1);
+  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_2);
+  <span class='pyx_c_api'>__Pyx_AddTraceback</span>("numind.NumInd.readonly.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  <span class='refnanny'>__Pyx_XGIVEREF</span>(__pyx_r);
+  <span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
+  return __pyx_r;
+}
+</pre><pre class="cython line score-12" onclick='toggleDiv(this)'>+<span class="">123</span>:             return self._undarray.__array_interface__["data"][1]</pre>
+<pre class='cython code score-12 '>  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_r);
+  __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(__pyx_v_self-&gt;_undarray, __pyx_n_s_array_interface);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 123, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
+  __pyx_t_2 = <span class='py_c_api'>PyObject_GetItem</span>(__pyx_t_1, __pyx_n_s_data);<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 123, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
+  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_1 = <span class='pyx_c_api'>__Pyx_GetItemInt</span>(__pyx_t_2, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 123, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
+  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+</pre><pre class="cython line score-0">&#xA0;<span class="">124</span>: </pre>
+<pre class="cython line score-0">&#xA0;<span class="">125</span>:     property __array_struct__:</pre>
+<pre class="cython line score-0">&#xA0;<span class="">126</span>:         "Allows other numerical packages to obtain a new object."</pre>
+<pre class="cython line score-3" onclick='toggleDiv(this)'>+<span class="">127</span>:         def __get__(self):</pre>
+<pre class='cython code score-3 '>/* Python wrapper */
+static PyObject *__pyx_pw_6numind_6NumInd_16__array_struct___1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_6numind_6NumInd_16__array_struct___1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  <span class='refnanny'>__Pyx_RefNannyDeclarations</span>
+  <span class='refnanny'>__Pyx_RefNannySetupContext</span>("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_6numind_6NumInd_16__array_struct_____get__(((struct __pyx_obj_6numind_NumInd *)__pyx_v_self));
+
+  /* function exit code */
+  <span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_6numind_6NumInd_16__array_struct_____get__(struct __pyx_obj_6numind_NumInd *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  <span class='refnanny'>__Pyx_RefNannyDeclarations</span>
+  <span class='refnanny'>__Pyx_RefNannySetupContext</span>("__get__", 0);
+/* … */
+  /* function exit code */
+  __pyx_L1_error:;
+  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_1);
+  <span class='pyx_c_api'>__Pyx_AddTraceback</span>("numind.NumInd.__array_struct__.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  <span class='refnanny'>__Pyx_XGIVEREF</span>(__pyx_r);
+  <span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
+  return __pyx_r;
+}
+</pre><pre class="cython line score-4" onclick='toggleDiv(this)'>+<span class="">128</span>:             if hasattr(self._undarray, "__array_struct__"):</pre>
+<pre class='cython code score-4 '>  __pyx_t_1 = __pyx_v_self-&gt;_undarray;
+  <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_1);
+  __pyx_t_2 = <span class='pyx_c_api'>__Pyx_HasAttr</span>(__pyx_t_1, __pyx_n_s_array_struct);<span class='error_goto'> if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 128, __pyx_L1_error)</span>
+  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_3 = (__pyx_t_2 != 0);
+  if (__pyx_t_3) {
+/* … */
+  }
+</pre><pre class="cython line score-3" onclick='toggleDiv(this)'>+<span class="">129</span>:                 return self._undarray.__array_struct__</pre>
+<pre class='cython code score-3 '>    <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_r);
+    __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(__pyx_v_self-&gt;_undarray, __pyx_n_s_array_struct);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 129, __pyx_L1_error)</span>
+    <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
+    __pyx_r = __pyx_t_1;
+    __pyx_t_1 = 0;
+    goto __pyx_L0;
+</pre><pre class="cython line score-0">&#xA0;<span class="">130</span>:             else:</pre>
+<pre class="cython line score-0">&#xA0;<span class="">131</span>:                 # No an underlying array with __array_struct__</pre>
+<pre class="cython line score-0">&#xA0;<span class="">132</span>:                 # Deliver an equivalent PyCObject.</pre>
+<pre class="cython line score-0" onclick='toggleDiv(this)'>+<span class="">133</span>:                 Py_INCREF(self)</pre>
+<pre class='cython code score-0 '>  /*else*/ {
+    Py_INCREF(((PyObject *)__pyx_v_self));
+</pre><pre class="cython line score-6" onclick='toggleDiv(this)'>+<span class="">134</span>:                 return PyCapsule_New(&lt;void*&gt;self.inter,</pre>
+<pre class='cython code score-6 '>    <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_r);
+/* … */
+    __pyx_t_1 = <span class='py_c_api'>PyCapsule_New</span>(((void *)__pyx_v_self-&gt;inter), ((char *)"struct array"), ((PyCapsule_Destructor)__pyx_f_6numind_free_array_interface));<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 134, __pyx_L1_error)</span>
+    <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
+    __pyx_r = __pyx_t_1;
+    __pyx_t_1 = 0;
+    goto __pyx_L0;
+  }
+</pre><pre class="cython line score-0">&#xA0;<span class="">135</span>:                                      "struct array",</pre>
+<pre class="cython line score-0">&#xA0;<span class="">136</span>:                                      &lt;PyCapsule_Destructor&gt;free_array_interface)</pre>
+<pre class="cython line score-0">&#xA0;<span class="">137</span>: </pre>
+<pre class="cython line score-9" onclick='toggleDiv(this)'>+<span class="">138</span>:     cdef PyArrayInterface *_get_array_interface(self):</pre>
+<pre class='cython code score-9 '>static __pyx_t_6numind_PyArrayInterface *__pyx_f_6numind_6NumInd__get_array_interface(struct __pyx_obj_6numind_NumInd *__pyx_v_self) {
+  __pyx_t_6numind_PyArrayInterface *__pyx_v_inter;
+  PyObject *__pyx_v_undarray = 0;
+  PyObject *__pyx_v_data_address = 0;
+  PyObject *__pyx_v_typestr = 0;
+  PyObject *__pyx_v_obj = 0;
+  __pyx_t_6numind_PyArrayInterface *__pyx_r;
+  <span class='refnanny'>__Pyx_RefNannyDeclarations</span>
+  <span class='refnanny'>__Pyx_RefNannySetupContext</span>("_get_array_interface", 0);
+/* … */
+  /* function exit code */
+  __pyx_L1_error:;
+  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_1);
+  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_5);
+  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_6);
+  <span class='pyx_c_api'>__Pyx_WriteUnraisable</span>("numind.NumInd._get_array_interface", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
+  __pyx_r = 0;
+  __pyx_L0:;
+  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_undarray);
+  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_data_address);
+  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_typestr);
+  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_obj);
+  <span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
+  return __pyx_r;
+}
+</pre><pre class="cython line score-0">&#xA0;<span class="">139</span>:         "Populates the array interface"</pre>
+<pre class="cython line score-0">&#xA0;<span class="">140</span>:         cdef PyArrayInterface *inter</pre>
+<pre class="cython line score-0">&#xA0;<span class="">141</span>:         cdef object undarray, data_address, typestr</pre>
+<pre class="cython line score-0">&#xA0;<span class="">142</span>:         cdef object obj</pre>
+<pre class="cython line score-0">&#xA0;<span class="">143</span>: </pre>
+<pre class="cython line score-1" onclick='toggleDiv(this)'>+<span class="">144</span>:         undarray = self._undarray</pre>
+<pre class='cython code score-1 '>  __pyx_t_1 = __pyx_v_self-&gt;_undarray;
+  <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_1);
+  __pyx_v_undarray = __pyx_t_1;
+  __pyx_t_1 = 0;
+</pre><pre class="cython line score-2" onclick='toggleDiv(this)'>+<span class="">145</span>:         typestr = self.typestr</pre>
+<pre class='cython code score-2 '>  __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(((PyObject *)__pyx_v_self), __pyx_n_s_typestr);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 145, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
+  __pyx_v_typestr = __pyx_t_1;
+  __pyx_t_1 = 0;
+</pre><pre class="cython line score-0" onclick='toggleDiv(this)'>+<span class="">146</span>:         inter = &lt;PyArrayInterface *&gt;malloc(sizeof(PyArrayInterface))</pre>
+<pre class='cython code score-0 '>  __pyx_v_inter = ((__pyx_t_6numind_PyArrayInterface *)malloc((sizeof(__pyx_t_6numind_PyArrayInterface))));
+</pre><pre class="cython line score-0" onclick='toggleDiv(this)'>+<span class="">147</span>:         if inter is NULL:</pre>
+<pre class='cython code score-0 '>  __pyx_t_2 = ((__pyx_v_inter == NULL) != 0);
+  if (__pyx_t_2) {
+/* … */
+  }
+</pre><pre class="cython line score-5" onclick='toggleDiv(this)'>+<span class="">148</span>:             raise MemoryError()</pre>
+<pre class='cython code score-5 '>    <span class='py_c_api'>PyErr_NoMemory</span>(); <span class='error_goto'>__PYX_ERR(0, 148, __pyx_L1_error)</span>
+</pre><pre class="cython line score-0">&#xA0;<span class="">149</span>: </pre>
+<pre class="cython line score-0" onclick='toggleDiv(this)'>+<span class="">150</span>:         inter.version = 2</pre>
+<pre class='cython code score-0 '>  __pyx_v_inter-&gt;version = 2;
+</pre><pre class="cython line score-0" onclick='toggleDiv(this)'>+<span class="">151</span>:         inter.nd = self._nd</pre>
+<pre class='cython code score-0 '>  __pyx_t_3 = __pyx_v_self-&gt;_nd;
+  __pyx_v_inter-&gt;nd = __pyx_t_3;
+</pre><pre class="cython line score-5" onclick='toggleDiv(this)'>+<span class="">152</span>:         inter.typekind = ord(typestr[1])</pre>
+<pre class='cython code score-5 '>  __pyx_t_1 = <span class='pyx_c_api'>__Pyx_GetItemInt</span>(__pyx_v_typestr, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 152, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
+  __pyx_t_4 = <span class='pyx_c_api'>__Pyx_PyObject_Ord</span>(__pyx_t_1);<span class='error_goto'> if (unlikely(__pyx_t_4 == (long)(Py_UCS4)-1)) __PYX_ERR(0, 152, __pyx_L1_error)</span>
+  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_v_inter-&gt;typekind = __pyx_t_4;
+</pre><pre class="cython line score-18" onclick='toggleDiv(this)'>+<span class="">153</span>:         inter.itemsize = int(typestr[2:])</pre>
+<pre class='cython code score-18 '>  __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyObject_GetSlice</span>(__pyx_v_typestr, 2, 0, NULL, NULL, &amp;__pyx_slice__2, 1, 0, 1);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 153, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
+  __pyx_t_5 = <span class='pyx_c_api'>__Pyx_PyNumber_Int</span>(__pyx_t_1);<span class='error_goto'> if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 153, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);
+  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_3 = <span class='pyx_c_api'>__Pyx_PyInt_As_int</span>(__pyx_t_5); if (unlikely((__pyx_t_3 == (int)-1) &amp;&amp; <span class='py_c_api'>PyErr_Occurred</span>())) <span class='error_goto'>__PYX_ERR(0, 153, __pyx_L1_error)</span>
+  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_v_inter-&gt;itemsize = __pyx_t_3;
+/* … */
+  __pyx_slice__2 = <span class='py_c_api'>PySlice_New</span>(__pyx_int_2, Py_None, Py_None);<span class='error_goto'> if (unlikely(!__pyx_slice__2)) __PYX_ERR(0, 153, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_slice__2);
+  <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_slice__2);
+</pre><pre class="cython line score-0" onclick='toggleDiv(this)'>+<span class="">154</span>:         inter.flags = 0  # initialize flags</pre>
+<pre class='cython code score-0 '>  __pyx_v_inter-&gt;flags = 0;
+</pre><pre class="cython line score-5" onclick='toggleDiv(this)'>+<span class="">155</span>:         if typestr[0] == '|':</pre>
+<pre class='cython code score-5 '>  __pyx_t_5 = <span class='pyx_c_api'>__Pyx_GetItemInt</span>(__pyx_v_typestr, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1);<span class='error_goto'> if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 155, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);
+  __pyx_t_2 = (<span class='pyx_c_api'>__Pyx_PyString_Equals</span>(__pyx_t_5, __pyx_kp_s__3, Py_EQ)); if (unlikely(__pyx_t_2 &lt; 0)) <span class='error_goto'>__PYX_ERR(0, 155, __pyx_L1_error)</span>
+  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_5); __pyx_t_5 = 0;
+  if (__pyx_t_2) {
+/* … */
+    goto __pyx_L4;
+  }
+</pre><pre class="cython line score-19" onclick='toggleDiv(this)'>+<span class="">156</span>:             inter.flags = inter.flags | NOTSWAPPED</pre>
+<pre class='cython code score-19 '>    __pyx_t_5 = <span class='pyx_c_api'>__Pyx_PyInt_From_int</span>(__pyx_v_inter-&gt;flags);<span class='error_goto'> if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 156, __pyx_L1_error)</span>
+    <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);
+    __pyx_t_1 = <span class='pyx_c_api'>__Pyx_GetModuleGlobalName</span>(__pyx_n_s_NOTSWAPPED);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 156, __pyx_L1_error)</span>
+    <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
+    __pyx_t_6 = <span class='py_c_api'>PyNumber_Or</span>(__pyx_t_5, __pyx_t_1);<span class='error_goto'> if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 156, __pyx_L1_error)</span>
+    <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_6);
+    <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_5); __pyx_t_5 = 0;
+    <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_t_3 = <span class='pyx_c_api'>__Pyx_PyInt_As_int</span>(__pyx_t_6); if (unlikely((__pyx_t_3 == (int)-1) &amp;&amp; <span class='py_c_api'>PyErr_Occurred</span>())) <span class='error_goto'>__PYX_ERR(0, 156, __pyx_L1_error)</span>
+    <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_6); __pyx_t_6 = 0;
+    __pyx_v_inter-&gt;flags = __pyx_t_3;
+</pre><pre class="cython line score-26" onclick='toggleDiv(this)'>+<span class="">157</span>:         elif byteorder[typestr[0]] == sys.byteorder:</pre>
+<pre class='cython code score-26 '>  __pyx_t_6 = <span class='pyx_c_api'>__Pyx_GetModuleGlobalName</span>(__pyx_n_s_byteorder);<span class='error_goto'> if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 157, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_6);
+  __pyx_t_1 = <span class='pyx_c_api'>__Pyx_GetItemInt</span>(__pyx_v_typestr, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 157, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
+  __pyx_t_5 = <span class='py_c_api'>PyObject_GetItem</span>(__pyx_t_6, __pyx_t_1);<span class='error_goto'> if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 157, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);
+  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_6); __pyx_t_6 = 0;
+  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_1 = <span class='pyx_c_api'>__Pyx_GetModuleGlobalName</span>(__pyx_n_s_sys);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 157, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
+  __pyx_t_6 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(__pyx_t_1, __pyx_n_s_byteorder);<span class='error_goto'> if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 157, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_6);
+  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_1 = <span class='py_c_api'>PyObject_RichCompare</span>(__pyx_t_5, __pyx_t_6, Py_EQ); <span class='refnanny'>__Pyx_XGOTREF</span>(__pyx_t_1);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 157, __pyx_L1_error)</span>
+  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_5); __pyx_t_5 = 0;
+  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_6); __pyx_t_6 = 0;
+  __pyx_t_2 = <span class='pyx_c_api'>__Pyx_PyObject_IsTrue</span>(__pyx_t_1); if (unlikely(__pyx_t_2 &lt; 0)) <span class='error_goto'>__PYX_ERR(0, 157, __pyx_L1_error)</span>
+  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
+  if (__pyx_t_2) {
+/* … */
+  }
+  __pyx_L4:;
+</pre><pre class="cython line score-19" onclick='toggleDiv(this)'>+<span class="">158</span>:             inter.flags = inter.flags | NOTSWAPPED</pre>
+<pre class='cython code score-19 '>    __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyInt_From_int</span>(__pyx_v_inter-&gt;flags);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 158, __pyx_L1_error)</span>
+    <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
+    __pyx_t_6 = <span class='pyx_c_api'>__Pyx_GetModuleGlobalName</span>(__pyx_n_s_NOTSWAPPED);<span class='error_goto'> if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 158, __pyx_L1_error)</span>
+    <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_6);
+    __pyx_t_5 = <span class='py_c_api'>PyNumber_Or</span>(__pyx_t_1, __pyx_t_6);<span class='error_goto'> if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 158, __pyx_L1_error)</span>
+    <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);
+    <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
+    <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_6); __pyx_t_6 = 0;
+    __pyx_t_3 = <span class='pyx_c_api'>__Pyx_PyInt_As_int</span>(__pyx_t_5); if (unlikely((__pyx_t_3 == (int)-1) &amp;&amp; <span class='py_c_api'>PyErr_Occurred</span>())) <span class='error_goto'>__PYX_ERR(0, 158, __pyx_L1_error)</span>
+    <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_5); __pyx_t_5 = 0;
+    __pyx_v_inter-&gt;flags = __pyx_t_3;
+</pre><pre class="cython line score-5" onclick='toggleDiv(this)'>+<span class="">159</span>:         if not self.readonly:</pre>
+<pre class='cython code score-5 '>  __pyx_t_5 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(((PyObject *)__pyx_v_self), __pyx_n_s_readonly);<span class='error_goto'> if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 159, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);
+  __pyx_t_2 = <span class='pyx_c_api'>__Pyx_PyObject_IsTrue</span>(__pyx_t_5); if (unlikely(__pyx_t_2 &lt; 0)) <span class='error_goto'>__PYX_ERR(0, 159, __pyx_L1_error)</span>
+  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_7 = ((!__pyx_t_2) != 0);
+  if (__pyx_t_7) {
+/* … */
+  }
+</pre><pre class="cython line score-19" onclick='toggleDiv(this)'>+<span class="">160</span>:             inter.flags = inter.flags | WRITEABLE</pre>
+<pre class='cython code score-19 '>    __pyx_t_5 = <span class='pyx_c_api'>__Pyx_PyInt_From_int</span>(__pyx_v_inter-&gt;flags);<span class='error_goto'> if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 160, __pyx_L1_error)</span>
+    <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);
+    __pyx_t_6 = <span class='pyx_c_api'>__Pyx_GetModuleGlobalName</span>(__pyx_n_s_WRITEABLE);<span class='error_goto'> if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 160, __pyx_L1_error)</span>
+    <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_6);
+    __pyx_t_1 = <span class='py_c_api'>PyNumber_Or</span>(__pyx_t_5, __pyx_t_6);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 160, __pyx_L1_error)</span>
+    <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
+    <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_5); __pyx_t_5 = 0;
+    <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_6); __pyx_t_6 = 0;
+    __pyx_t_3 = <span class='pyx_c_api'>__Pyx_PyInt_As_int</span>(__pyx_t_1); if (unlikely((__pyx_t_3 == (int)-1) &amp;&amp; <span class='py_c_api'>PyErr_Occurred</span>())) <span class='error_goto'>__PYX_ERR(0, 160, __pyx_L1_error)</span>
+    <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_v_inter-&gt;flags = __pyx_t_3;
+</pre><pre class="cython line score-0">&#xA0;<span class="">161</span>:         # XXX how to determine the ALIGNED flag?</pre>
+<pre class="cython line score-0" onclick='toggleDiv(this)'>+<span class="">162</span>:         inter.strides = self._strides</pre>
+<pre class='cython code score-0 '>  __pyx_t_8 = __pyx_v_self-&gt;_strides;
+  __pyx_v_inter-&gt;strides = __pyx_t_8;
+</pre><pre class="cython line score-0" onclick='toggleDiv(this)'>+<span class="">163</span>:         inter.shape = self._shape</pre>
+<pre class='cython code score-0 '>  __pyx_t_8 = __pyx_v_self-&gt;_shape;
+  __pyx_v_inter-&gt;shape = __pyx_t_8;
+</pre><pre class="cython line score-0">&#xA0;<span class="">164</span>:         # Get the data address</pre>
+<pre class="cython line score-8" onclick='toggleDiv(this)'>+<span class="">165</span>:         obj = undarray.__array_interface__["data"]</pre>
+<pre class='cython code score-8 '>  __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(__pyx_v_undarray, __pyx_n_s_array_interface);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 165, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
+  __pyx_t_6 = <span class='py_c_api'>PyObject_GetItem</span>(__pyx_t_1, __pyx_n_s_data);<span class='error_goto'> if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 165, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_6);
+  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_v_obj = __pyx_t_6;
+  __pyx_t_6 = 0;
+</pre><pre class="cython line score-2" onclick='toggleDiv(this)'>+<span class="">166</span>:         data_address = obj[0]</pre>
+<pre class='cython code score-2 '>  __pyx_t_6 = <span class='pyx_c_api'>__Pyx_GetItemInt</span>(__pyx_v_obj, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1);<span class='error_goto'> if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 166, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_6);
+  __pyx_v_data_address = __pyx_t_6;
+  __pyx_t_6 = 0;
+</pre><pre class="cython line score-5" onclick='toggleDiv(this)'>+<span class="">167</span>:         inter.data = &lt;void*&gt;PyInt_AsLong(data_address)</pre>
+<pre class='cython code score-5 '>  __pyx_v_inter-&gt;data = ((void *)<span class='py_c_api'>PyInt_AsLong</span>(__pyx_v_data_address));
+</pre><pre class="cython line score-0" onclick='toggleDiv(this)'>+<span class="">168</span>:         return inter</pre>
+<pre class='cython code score-0 '>  __pyx_r = __pyx_v_inter;
+  goto __pyx_L0;
+</pre><pre class="cython line score-0">&#xA0;<span class="">169</span>: </pre>
+<pre class="cython line score-0">&#xA0;<span class="">170</span>: </pre>
+<pre class="cython line score-0">&#xA0;<span class="">171</span>:     # This is just an example on how to modify the data in C space</pre>
+<pre class="cython line score-0">&#xA0;<span class="">172</span>:     # (and at C speed! :-)</pre>
+<pre class="cython line score-5" onclick='toggleDiv(this)'>+<span class="">173</span>:     def modify(self):</pre>
+<pre class='cython code score-5 '>/* Python wrapper */
+static PyObject *__pyx_pw_6numind_6NumInd_3modify(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static char __pyx_doc_6numind_6NumInd_2modify[] = "Modify the values of the underlying array";
+static PyObject *__pyx_pw_6numind_6NumInd_3modify(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
+  PyObject *__pyx_r = 0;
+  <span class='refnanny'>__Pyx_RefNannyDeclarations</span>
+  <span class='refnanny'>__Pyx_RefNannySetupContext</span>("modify (wrapper)", 0);
+  __pyx_r = __pyx_pf_6numind_6NumInd_2modify(((struct __pyx_obj_6numind_NumInd *)__pyx_v_self));
+
+  /* function exit code */
+  <span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_6numind_6NumInd_2modify(struct __pyx_obj_6numind_NumInd *__pyx_v_self) {
+  long *__pyx_v_ldata;
+  double *__pyx_v_fdata;
+  int __pyx_v_i;
+  PyObject *__pyx_r = NULL;
+  <span class='refnanny'>__Pyx_RefNannyDeclarations</span>
+  <span class='refnanny'>__Pyx_RefNannySetupContext</span>("modify", 0);
+/* … */
+  /* function exit code */
+  __pyx_r = Py_None; <span class='pyx_macro_api'>__Pyx_INCREF</span>(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_1);
+  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_2);
+  <span class='pyx_c_api'>__Pyx_AddTraceback</span>("numind.NumInd.modify", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  <span class='refnanny'>__Pyx_XGIVEREF</span>(__pyx_r);
+  <span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
+  return __pyx_r;
+}
+</pre><pre class="cython line score-0">&#xA0;<span class="">174</span>:         "Modify the values of the underlying array"</pre>
+<pre class="cython line score-0">&#xA0;<span class="">175</span>:         cdef long *ldata</pre>
+<pre class="cython line score-0">&#xA0;<span class="">176</span>:         cdef double *fdata</pre>
+<pre class="cython line score-0">&#xA0;<span class="">177</span>:         cdef int i</pre>
+<pre class="cython line score-0">&#xA0;<span class="">178</span>: </pre>
+<pre class="cython line score-0">&#xA0;<span class="">179</span>:         # Modify just the first row</pre>
+<pre class="cython line score-14" onclick='toggleDiv(this)'>+<span class="">180</span>:         if chr(self.inter.typekind) == 'i':</pre>
+<pre class='cython code score-14 '>  __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyInt_From_char</span>(__pyx_v_self-&gt;inter-&gt;typekind);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 180, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
+  __pyx_t_2 = <span class='py_c_api'>PyTuple_New</span>(1);<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 180, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
+  <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_1);
+  <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_2, 0, __pyx_t_1);
+  __pyx_t_1 = 0;
+  __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyObject_Call</span>(__pyx_builtin_chr, __pyx_t_2, NULL);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 180, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
+  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_3 = (<span class='pyx_c_api'>__Pyx_PyString_Equals</span>(__pyx_t_1, __pyx_n_s_i, Py_EQ)); if (unlikely(__pyx_t_3 &lt; 0)) <span class='error_goto'>__PYX_ERR(0, 180, __pyx_L1_error)</span>
+  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
+  if (__pyx_t_3) {
+/* … */
+    goto __pyx_L3;
+  }
+</pre><pre class="cython line score-0" onclick='toggleDiv(this)'>+<span class="">181</span>:             ldata = &lt;long *&gt;self.inter.data</pre>
+<pre class='cython code score-0 '>    __pyx_v_ldata = ((long *)__pyx_v_self-&gt;inter-&gt;data);
+</pre><pre class="cython line score-0" onclick='toggleDiv(this)'>+<span class="">182</span>:             for i from 0 &lt;= i &lt; self.inter.shape[self.inter.nd-1]:</pre>
+<pre class='cython code score-0 '>    __pyx_t_4 = (__pyx_v_self-&gt;inter-&gt;shape[(__pyx_v_self-&gt;inter-&gt;nd - 1)]);
+    for (__pyx_v_i = 0; __pyx_v_i &lt; __pyx_t_4; __pyx_v_i++) {
+</pre><pre class="cython line score-0" onclick='toggleDiv(this)'>+<span class="">183</span>:                 ldata[i] = ldata[i] + 1</pre>
+<pre class='cython code score-0 '>      (__pyx_v_ldata[__pyx_v_i]) = ((__pyx_v_ldata[__pyx_v_i]) + 1);
+    }
+</pre><pre class="cython line score-14" onclick='toggleDiv(this)'>+<span class="">184</span>:         elif chr(self.inter.typekind) == 'f':</pre>
+<pre class='cython code score-14 '>  __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyInt_From_char</span>(__pyx_v_self-&gt;inter-&gt;typekind);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 184, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
+  __pyx_t_2 = <span class='py_c_api'>PyTuple_New</span>(1);<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 184, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
+  <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_1);
+  <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_2, 0, __pyx_t_1);
+  __pyx_t_1 = 0;
+  __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyObject_Call</span>(__pyx_builtin_chr, __pyx_t_2, NULL);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 184, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
+  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_3 = (<span class='pyx_c_api'>__Pyx_PyString_Equals</span>(__pyx_t_1, __pyx_n_s_f, Py_EQ)); if (unlikely(__pyx_t_3 &lt; 0)) <span class='error_goto'>__PYX_ERR(0, 184, __pyx_L1_error)</span>
+  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
+  if (__pyx_t_3) {
+/* … */
+  }
+  __pyx_L3:;
+</pre><pre class="cython line score-0" onclick='toggleDiv(this)'>+<span class="">185</span>:             fdata = &lt;double *&gt;self.inter.data</pre>
+<pre class='cython code score-0 '>    __pyx_v_fdata = ((double *)__pyx_v_self-&gt;inter-&gt;data);
+</pre><pre class="cython line score-0" onclick='toggleDiv(this)'>+<span class="">186</span>:             for i from 0 &lt;= i &lt; self.inter.shape[self.inter.nd-1]:</pre>
+<pre class='cython code score-0 '>    __pyx_t_4 = (__pyx_v_self-&gt;inter-&gt;shape[(__pyx_v_self-&gt;inter-&gt;nd - 1)]);
+    for (__pyx_v_i = 0; __pyx_v_i &lt; __pyx_t_4; __pyx_v_i++) {
+</pre><pre class="cython line score-0" onclick='toggleDiv(this)'>+<span class="">187</span>:                 fdata[i] = fdata[i] + 1</pre>
+<pre class='cython code score-0 '>      (__pyx_v_fdata[__pyx_v_i]) = ((__pyx_v_fdata[__pyx_v_i]) + 1.0);
+    }
+</pre><pre class="cython line score-0">&#xA0;<span class="">188</span>: </pre>
+<pre class="cython line score-0" onclick='toggleDiv(this)'>+<span class="">189</span>:     def __dealloc__(self):</pre>
+<pre class='cython code score-0 '>/* Python wrapper */
+static void __pyx_pw_6numind_6NumInd_5__dealloc__(PyObject *__pyx_v_self); /*proto*/
+static void __pyx_pw_6numind_6NumInd_5__dealloc__(PyObject *__pyx_v_self) {
+  <span class='refnanny'>__Pyx_RefNannyDeclarations</span>
+  <span class='refnanny'>__Pyx_RefNannySetupContext</span>("__dealloc__ (wrapper)", 0);
+  __pyx_pf_6numind_6NumInd_4__dealloc__(((struct __pyx_obj_6numind_NumInd *)__pyx_v_self));
+
+  /* function exit code */
+  <span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
+}
+
+static void __pyx_pf_6numind_6NumInd_4__dealloc__(struct __pyx_obj_6numind_NumInd *__pyx_v_self) {
+  <span class='refnanny'>__Pyx_RefNannyDeclarations</span>
+  <span class='refnanny'>__Pyx_RefNannySetupContext</span>("__dealloc__", 0);
+/* … */
+  /* function exit code */
+  <span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
+}
+</pre><pre class="cython line score-0" onclick='toggleDiv(this)'>+<span class="">190</span>:         free(self._shape)</pre>
+<pre class='cython code score-0 '>  free(__pyx_v_self-&gt;_shape);
+</pre><pre class="cython line score-0" onclick='toggleDiv(this)'>+<span class="">191</span>:         free(self._strides)</pre>
+<pre class='cython code score-0 '>  free(__pyx_v_self-&gt;_strides);
+</pre><pre class="cython line score-0" onclick='toggleDiv(this)'>+<span class="">192</span>:         free(self.inter)</pre>
+<pre class='cython code score-0 '>  free(__pyx_v_self-&gt;inter);
+</pre></div></body></html>
diff --git a/pymolfile/molfile/numind-cython/numind.pyx b/pymolfile/molfile/numind-cython/numind.pyx
new file mode 100644
index 0000000..d959b2b
--- /dev/null
+++ b/pymolfile/molfile/numind-cython/numind.pyx
@@ -0,0 +1,192 @@
+# This Pyrex extension class can take a numpy/numarray/Numeric object
+# as a parameter and wrap it so that its information can be accessed
+# in a standard way, both in Python space and C space.
+#
+# Heavily based on an idea of Andrew Straw. See
+# http://www.scipy.org/Cookbook/ArrayStruct_and_Pyrex
+# Very inspiring! :-)
+#
+# First version: 2006-03-25
+# Last update: 2006-03-25
+# Author: Francesc Altet 
+
+import sys
+from cpython.pycapsule cimport *
+
+cdef extern from "Python.h":
+    ctypedef int Py_intptr_t
+    ctypedef object PyObject
+    long PyInt_AsLong(object)
+    void Py_INCREF(object)
+    void Py_DECREF(object)
+
+cdef extern from "stdlib.h":
+    ctypedef long size_t
+    ctypedef long intptr_t
+    void *malloc(size_t size)
+    void free(void* ptr)
+
+cdef extern from "numind.h":
+    ctypedef struct SignedIntBuf
+
+# for PyArrayInterface:
+CONTIGUOUS=0x01
+FORTRAN=0x02
+ALIGNED=0x100
+NOTSWAPPED=0x200
+WRITEABLE=0x400
+
+# byteorder dictionary
+byteorder = {'<':'little', '>':'big'}
+
+ctypedef struct PyArrayInterface:
+    int version          # contains the integer 2 as a sanity check
+    int nd               # number of dimensions
+    char typekind        # kind in array --- character code of typestr
+    int itemsize         # size of each element
+    int flags            # flags indicating how the data should be interpreted
+    Py_intptr_t *shape   # A length-nd array of shape information
+    Py_intptr_t *strides # A length-nd array of stride information
+    void *data           # A pointer to the first element of the array
+
+cdef void* free_array_interface(object arr):
+    Py_DECREF(arr)
+
+
+cdef class NumInd:
+    cdef void *data
+    cdef int _nd
+    cdef Py_intptr_t *_shape
+    cdef Py_intptr_t *_strides
+    cdef PyArrayInterface *inter
+    cdef object _t_shape, _t_strides, _undarray
+
+    def __init__(self, object undarray):
+        cdef int i, stride
+        cdef object array_shape, array_strides
+
+        # Keep a reference to the underlying object
+        self._undarray = undarray
+        # Get the shape and strides C arrays
+        array_shape = undarray.__array_interface__["shape"]
+        self._t_shape = array_shape
+        # The number of dimensions
+        self._nd = len(array_shape)
+        # The shape
+        self._shape = <Py_intptr_t *>malloc(self._nd*sizeof(Py_intptr_t))
+        for i from 0 <= i < self._nd:
+            self._shape[i] = self._t_shape[i]
+        # The strides (compute them if needed)
+        array_strides = undarray.__array_interface__["strides"]
+        self._t_strides = array_strides
+        self._strides = <Py_intptr_t *>malloc(self._nd*sizeof(Py_intptr_t))
+        if array_strides:
+            for i from 0 <= i < self._nd:
+                self._strides[i] = array_strides[i]
+        else:
+            # strides is None. Compute them explicitely.
+            self._t_strides = [0] * self._nd
+            stride = int(self.typestr[2:])
+            for i from self._nd > i >= 0:
+                self._strides[i] = stride
+                self._t_strides[i] = stride
+                stride = stride * array_shape[i]
+            self._t_strides = tuple(self._t_strides)
+        # Populate the C array interface
+        self.inter = self._get_array_interface()
+
+    # Properties. This are visible from Python space.
+    # Add as many as you want.
+
+    property undarray:  # Returns the underlying array
+        def __get__(self):
+            return self._undarray
+
+    property shape:
+        def __get__(self):
+            return self._t_shape
+
+    property strides:
+        def __get__(self):
+            return self._t_strides
+
+    property typestr:
+        def __get__(self):
+            return self._undarray.__array_interface__["typestr"]
+    
+    property typekind:
+        def __get__(self):
+            return chr(self.inter.typekind)
+
+    property readonly:
+        def __get__(self):
+            return self._undarray.__array_interface__["data"][1]
+
+    property __array_struct__:
+        "Allows other numerical packages to obtain a new object."
+        def __get__(self):
+            if hasattr(self._undarray, "__array_struct__"):
+                return self._undarray.__array_struct__
+            else:
+                # No an underlying array with __array_struct__
+                # Deliver an equivalent PyCObject.
+                Py_INCREF(self)
+                return PyCapsule_New(<void*>self.inter,
+                                     "struct array",
+                                     <PyCapsule_Destructor>free_array_interface)
+
+    cdef PyArrayInterface *_get_array_interface(self):
+        "Populates the array interface"
+        cdef PyArrayInterface *inter
+        cdef object undarray, data_address, typestr
+        cdef object obj
+
+        undarray = self._undarray
+        typestr = self.typestr
+        inter = <PyArrayInterface *>malloc(sizeof(PyArrayInterface))
+        if inter is NULL:
+            raise MemoryError()
+
+        inter.version = 2
+        inter.nd = self._nd
+        inter.typekind = ord(typestr[1])
+        inter.itemsize = int(typestr[2:])
+        inter.flags = 0  # initialize flags
+        if typestr[0] == '|':
+            inter.flags = inter.flags | NOTSWAPPED
+        elif byteorder[typestr[0]] == sys.byteorder:
+            inter.flags = inter.flags | NOTSWAPPED
+        if not self.readonly:
+            inter.flags = inter.flags | WRITEABLE
+        # XXX how to determine the ALIGNED flag?
+        inter.strides = self._strides
+        inter.shape = self._shape
+        # Get the data address
+        obj = undarray.__array_interface__["data"]
+        data_address = obj[0]
+        inter.data = <void*>PyInt_AsLong(data_address)
+        return inter
+
+
+    # This is just an example on how to modify the data in C space
+    # (and at C speed! :-)
+    def modify(self):
+        "Modify the values of the underlying array"
+        cdef long *ldata
+        cdef double *fdata
+        cdef int i
+        
+        # Modify just the first row
+        if chr(self.inter.typekind) == 'i':
+            ldata = <long *>self.inter.data
+            for i from 0 <= i < self.inter.shape[self.inter.nd-1]:
+                ldata[i] = ldata[i] + 1
+        elif chr(self.inter.typekind) == 'f':
+            fdata = <double *>self.inter.data
+            for i from 0 <= i < self.inter.shape[self.inter.nd-1]:
+                fdata[i] = fdata[i] + 1
+
+    def __dealloc__(self):
+        free(self._shape)
+        free(self._strides)
+        free(self.inter)
diff --git a/pymolfile/molfile/numind-cython/numind.so b/pymolfile/molfile/numind-cython/numind.so
new file mode 100755
index 0000000000000000000000000000000000000000..f8b762476eb1d362018f305fce67cf22ec134e2f
GIT binary patch
literal 78632
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

literal 0
HcmV?d00001

diff --git a/pymolfile/molfile/numind-cython/test_numpy_swig.py b/pymolfile/molfile/numind-cython/test_numpy_swig.py
new file mode 100644
index 0000000..d53a1b1
--- /dev/null
+++ b/pymolfile/molfile/numind-cython/test_numpy_swig.py
@@ -0,0 +1,42 @@
+import numpy
+import ctypes
+import numind
+
+# Create an arbitrary object for each package
+np=numpy.arange(12, dtype=numpy.float)
+#np=numpy.arange(12)
+np.shape = (4,3)
+
+#ns = _numpy_swig(2,2)
+#print(ns)
+
+
+# Wrap the different objects with the NumInd class
+# and execute some actions on it
+##for obj in [np]:
+#    ni = _numpy_swig
+#    print("original object type-->", type(ni.inter))
+#    # Print some values
+#    #print("typestr --> {0}", ni.typestr)
+#    #print("shape --> {0}", ni.shape)
+#    #print("strides --> {0}", ni.strides)
+#    npa = numpy.asarray(ni)
+#    print("object after a numpy re-wrapping --> " , npa)
+#    #ni.modify()
+#    #print("object after modification in C space --> {0}", npa)
+
+# Wrap the different objects with the NumInd class
+# and execute some actions on it
+for obj in [np]:
+    ni = numind.NumInd(obj)
+    print("original object type-->", type(ni.undarray))
+    # Print some values
+    print("typestr -->", ni.typestr)
+    print("typekind -->", ni.typekind)
+    print("shape -->", ni.shape)
+    print("strides -->", ni.strides)
+    npa = numpy.asarray(ni)
+    print("object after a numpy re-wrapping -->", npa)
+    ni.modify()
+    print("object after modification in C space -->", npa)
+
diff --git a/pymolfile/molfile/numpy_swig.h b/pymolfile/molfile/numpy_swig.h
new file mode 100644
index 0000000..f884368
--- /dev/null
+++ b/pymolfile/molfile/numpy_swig.h
@@ -0,0 +1,12 @@
+#ifndef NUMPY_SWIG
+#define NUMPY_SWIG
+ 
+typedef struct SignedIntBuf
+{
+    int* data;
+    int shape[2];
+    int strides[2];
+} SignedIntBuf;
+ 
+#endif
+
diff --git a/pymolfile/molfile/numpy_swig.i b/pymolfile/molfile/numpy_swig.i
new file mode 100644
index 0000000..7adc4f2
--- /dev/null
+++ b/pymolfile/molfile/numpy_swig.i
@@ -0,0 +1,178 @@
+%{
+#define SWIG_FILE_WITH_INIT
+%}
+%include "numpy.i"
+%init %{
+import_array();
+%}
+ 
+%module (docstring="This is a Python SWIG-wrapped module") numpy_swig
+
+%{
+#include "numpy_swig.h"
+#include <numpy/arrayobject.h>
+
+#if PY_VERSION_HEX >= 0x03000000
+NPY_NO_EXPORT void
+gentype_struct_free(PyObject *ptr)
+{
+    PyArrayInterface *arrif;
+    PyObject *context;
+
+    arrif = (PyArrayInterface*)PyCapsule_GetPointer(ptr, NULL);
+    context = (PyObject *)PyCapsule_GetContext(ptr);
+    Py_DECREF(context);
+    Py_XDECREF(arrif->descr);
+    PyArray_free(arrif->shape);
+    PyArray_free(arrif);
+}
+static NPY_INLINE PyObject *
+NpyCapsule_FromVoidPtr(void *ptr, void (*dtor)(PyObject *))
+{
+    PyObject *ret = PyCapsule_New(ptr, NULL, dtor);
+    if (ret == NULL) {
+        PyErr_Clear();
+    }
+    return ret;
+}
+static NPY_INLINE PyObject *
+NpyCapsule_FromVoidPtrAndDesc(void *ptr, void* context, void (*dtor)(PyObject *))
+{
+    PyObject *ret = NpyCapsule_FromVoidPtr(ptr, dtor);
+    if (ret != NULL && PyCapsule_SetContext(ret, context) != 0) {
+        PyErr_Clear();
+        Py_DECREF(ret);
+        ret = NULL;
+    }
+    return ret;
+}
+#else
+NPY_NO_EXPORT void
+gentype_struct_free(void *ptr, void *arg)
+{
+    PyArrayInterface *arrif = (PyArrayInterface *)ptr;
+    Py_DECREF((PyObject *)arg);
+    Py_XDECREF(arrif->descr);
+    PyArray_free(arrif->shape);
+    PyArray_free(arrif);
+}
+NpyCapsule_FromVoidPtrAndDesc(void *ptr, void* context,
+        void (*dtor)(void *, void *))
+{
+    return PyCObject_FromVoidPtrAndDesc(ptr, context, dtor);
+}
+#endif
+
+#ifndef Py_CAPSULE_H
+typedef void(*PyCapsule_Destructor)(void *, void *);
+#endif
+
+void delete_SignedIntBuf(SignedIntBuf* buffer)
+{
+  free(buffer->data);
+  free(buffer);
+}
+ 
+void free_array_interface( void* ptr, void *arr )
+{
+  PyArrayInterface* inter;
+  PyObject* arrpy;
+ 
+  inter = (PyArrayInterface*)ptr;
+  arrpy = (PyObject*)arr;
+  Py_DECREF(arrpy);
+  free(inter);
+}
+void free_capsule(PyObject* arr)
+{
+  PyArrayInterface* inter;
+  inter = (PyArrayInterface*) PyCapsule_GetPointer(arr, "struct SignedIntBuf");
+  Py_DECREF(arr);
+  free(inter);
+}
+%}
+
+%inline %{PyObject* get__array_struct__(PyObject* self)
+{
+  PyArrayInterface *inter;
+  PyObject *obj;
+  int nd;
+  nd = 2;
+  Py_intptr_t *shape, *strides;
+  void *data = NULL;
+
+  shape = (Py_intptr_t *)malloc(nd*sizeof(Py_intptr_t));
+  strides = (Py_intptr_t *)malloc(nd*sizeof(Py_intptr_t));
+ 
+  inter = (PyArrayInterface*)malloc(sizeof(PyArrayInterface));
+  if (inter==NULL)
+    return PyErr_NoMemory();
+ 
+  inter->two = 2;
+  inter->nd = nd;
+  inter->typekind = 'i';
+  inter->itemsize = sizeof(int);
+  inter->flags = NPY_ARRAY_NOTSWAPPED | NPY_ARRAY_ALIGNED | NPY_ARRAY_WRITEABLE;
+  inter->strides = strides;
+  inter->shape = shape;
+  inter->data = (void*) data;
+  Py_INCREF(self);
+  obj = NpyCapsule_FromVoidPtrAndDesc(inter, self, gentype_struct_free);
+/*
+#ifdef Py_CAPSULE_H
+  obj = PyCapsule_New((void*)inter, "struct SignedIntBuf", free_capsule);
+#else
+  obj = PyCObject_FromVoidPtrAndDesc((void*)inter, (void*)self, free_array_interface);
+#endif
+*/
+  return obj;
+}
+%}
+
+%include numpy_swig.h
+ 
+%extend SignedIntBuf{
+  %feature("autodoc", "The comment docstring")SignedIntBuf;
+  SignedIntBuf(int width, int height)
+  {
+    SignedIntBuf* buffer = (SignedIntBuf*) malloc(sizeof(SignedIntBuf));
+    int shape[2] = { height, width };
+    int strides[2] = { width * sizeof(int), sizeof(int) };
+    buffer->shape[0] = shape[0];
+    buffer->shape[1] = shape[1];
+    buffer->strides[0] = strides[0];
+    buffer->strides[1] = strides[1];
+    buffer->data = (int*) malloc(width*height*sizeof(int));
+    return buffer;
+  }
+ 
+  ~SignedIntBuf();
+ 
+   char *__str__()
+   {
+     static char tmp[1024];
+     int i, j;
+     int used = 0;
+     used += sprintf(tmp, "Array:\n");
+     for(i=0; i < $self->shape[0]; i++)
+     {
+       for(j=0; j < $self->shape[1]; j++)
+         used += sprintf(tmp + used, "%d\t", $self->data[j + i*$self->shape[1]]);
+       used += sprintf(tmp + used, "\n");
+     }
+     return tmp;
+  }
+ 
+  %pythoncode
+  {
+    def __array_struct__get(self):
+      return get__array_struct__(self)
+ 
+    property __array_struct__:
+        "Allows other numerical packages to obtain a new object."
+        def __get__(self):
+            return __array_struct__get(self)
+  }
+};
+
+
diff --git a/pymolfile/molfile/numpy_swig.py b/pymolfile/molfile/numpy_swig.py
new file mode 100644
index 0000000..32b6df7
--- /dev/null
+++ b/pymolfile/molfile/numpy_swig.py
@@ -0,0 +1,150 @@
+# This file was automatically generated by SWIG (http://www.swig.org).
+# Version 3.0.12
+#
+# Do not make changes to this file unless you know what you are doing--modify
+# the SWIG interface file instead.
+
+"""This is a Python SWIG-wrapped module"""
+
+
+from sys import version_info as _swig_python_version_info
+if _swig_python_version_info >= (2, 7, 0):
+    def swig_import_helper():
+        import importlib
+        pkg = __name__.rpartition('.')[0]
+        mname = '.'.join((pkg, '_numpy_swig')).lstrip('.')
+        try:
+            return importlib.import_module(mname)
+        except ImportError:
+            return importlib.import_module('_numpy_swig')
+    _numpy_swig = swig_import_helper()
+    del swig_import_helper
+elif _swig_python_version_info >= (2, 6, 0):
+    def swig_import_helper():
+        from os.path import dirname
+        import imp
+        fp = None
+        try:
+            fp, pathname, description = imp.find_module('_numpy_swig', [dirname(__file__)])
+        except ImportError:
+            import _numpy_swig
+            return _numpy_swig
+        try:
+            _mod = imp.load_module('_numpy_swig', fp, pathname, description)
+        finally:
+            if fp is not None:
+                fp.close()
+        return _mod
+    _numpy_swig = swig_import_helper()
+    del swig_import_helper
+else:
+    import _numpy_swig
+del _swig_python_version_info
+
+try:
+    _swig_property = property
+except NameError:
+    pass  # Python < 2.2 doesn't have 'property'.
+
+try:
+    import builtins as __builtin__
+except ImportError:
+    import __builtin__
+
+def _swig_setattr_nondynamic(self, class_type, name, value, static=1):
+    if (name == "thisown"):
+        return self.this.own(value)
+    if (name == "this"):
+        if type(value).__name__ == 'SwigPyObject':
+            self.__dict__[name] = value
+            return
+    method = class_type.__swig_setmethods__.get(name, None)
+    if method:
+        return method(self, value)
+    if (not static):
+        if _newclass:
+            object.__setattr__(self, name, value)
+        else:
+            self.__dict__[name] = value
+    else:
+        raise AttributeError("You cannot add attributes to %s" % self)
+
+
+def _swig_setattr(self, class_type, name, value):
+    return _swig_setattr_nondynamic(self, class_type, name, value, 0)
+
+
+def _swig_getattr(self, class_type, name):
+    if (name == "thisown"):
+        return self.this.own()
+    method = class_type.__swig_getmethods__.get(name, None)
+    if method:
+        return method(self)
+    raise AttributeError("'%s' object has no attribute '%s'" % (class_type.__name__, name))
+
+
+def _swig_repr(self):
+    try:
+        strthis = "proxy of " + self.this.__repr__()
+    except __builtin__.Exception:
+        strthis = ""
+    return "<%s.%s; %s >" % (self.__class__.__module__, self.__class__.__name__, strthis,)
+
+try:
+    _object = object
+    _newclass = 1
+except __builtin__.Exception:
+    class _object:
+        pass
+    _newclass = 0
+
+
+def get__array_struct__(arg1: 'PyObject *') -> "PyObject *":
+    return _numpy_swig.get__array_struct__(arg1)
+get__array_struct__ = _numpy_swig.get__array_struct__
+class SignedIntBuf(_object):
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, SignedIntBuf, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, SignedIntBuf, name)
+    __repr__ = _swig_repr
+    __swig_setmethods__["data"] = _numpy_swig.SignedIntBuf_data_set
+    __swig_getmethods__["data"] = _numpy_swig.SignedIntBuf_data_get
+    if _newclass:
+        data = _swig_property(_numpy_swig.SignedIntBuf_data_get, _numpy_swig.SignedIntBuf_data_set)
+    __swig_setmethods__["shape"] = _numpy_swig.SignedIntBuf_shape_set
+    __swig_getmethods__["shape"] = _numpy_swig.SignedIntBuf_shape_get
+    if _newclass:
+        shape = _swig_property(_numpy_swig.SignedIntBuf_shape_get, _numpy_swig.SignedIntBuf_shape_set)
+    __swig_setmethods__["strides"] = _numpy_swig.SignedIntBuf_strides_set
+    __swig_getmethods__["strides"] = _numpy_swig.SignedIntBuf_strides_get
+    if _newclass:
+        strides = _swig_property(_numpy_swig.SignedIntBuf_strides_get, _numpy_swig.SignedIntBuf_strides_set)
+
+    def __init__(self, width: 'int', height: 'int'):
+        """The comment docstring"""
+        this = _numpy_swig.new_SignedIntBuf(width, height)
+        try:
+            self.this.append(this)
+        except __builtin__.Exception:
+            self.this = this
+    __swig_destroy__ = _numpy_swig.delete_SignedIntBuf
+    __del__ = lambda self: None
+
+    def __str__(self) -> "char *":
+        return _numpy_swig.SignedIntBuf___str__(self)
+
+    def __array_struct__get(self):
+      return get__array_struct__(self)
+
+    property __array_struct__:
+        "Allows other numerical packages to obtain a new object."
+        def __get__(self):
+            return __array_struct__get(self)
+
+SignedIntBuf_swigregister = _numpy_swig.SignedIntBuf_swigregister
+SignedIntBuf_swigregister(SignedIntBuf)
+
+# This file is compatible with both classic and new-style classes.
+
+
diff --git a/pymolfile/molfile/numpy_swig_wrap.cxx b/pymolfile/molfile/numpy_swig_wrap.cxx
new file mode 100644
index 0000000..c2224d3
--- /dev/null
+++ b/pymolfile/molfile/numpy_swig_wrap.cxx
@@ -0,0 +1,4477 @@
+/* ----------------------------------------------------------------------------
+ * This file was automatically generated by SWIG (http://www.swig.org).
+ * Version 3.0.12
+ *
+ * This file is not intended to be easily readable and contains a number of
+ * coding conventions designed to improve portability and efficiency. Do not make
+ * changes to this file unless you know what you are doing--modify the SWIG
+ * interface file instead.
+ * ----------------------------------------------------------------------------- */
+
+
+#ifndef SWIGPYTHON
+#define SWIGPYTHON
+#endif
+
+#define SWIG_PYTHON_DIRECTOR_NO_VTABLE
+
+
+#ifdef __cplusplus
+/* SwigValueWrapper is described in swig.swg */
+template<typename T> class SwigValueWrapper {
+  struct SwigMovePointer {
+    T *ptr;
+    SwigMovePointer(T *p) : ptr(p) { }
+    ~SwigMovePointer() { delete ptr; }
+    SwigMovePointer& operator=(SwigMovePointer& rhs) { T* oldptr = ptr; ptr = 0; delete oldptr; ptr = rhs.ptr; rhs.ptr = 0; return *this; }
+  } pointer;
+  SwigValueWrapper& operator=(const SwigValueWrapper<T>& rhs);
+  SwigValueWrapper(const SwigValueWrapper<T>& rhs);
+public:
+  SwigValueWrapper() : pointer(0) { }
+  SwigValueWrapper& operator=(const T& t) { SwigMovePointer tmp(new T(t)); pointer = tmp; return *this; }
+  operator T&() const { return *pointer.ptr; }
+  T *operator&() { return pointer.ptr; }
+};
+
+template <typename T> T SwigValueInit() {
+  return T();
+}
+#endif
+
+/* -----------------------------------------------------------------------------
+ *  This section contains generic SWIG labels for method/variable
+ *  declarations/attributes, and other compiler dependent labels.
+ * ----------------------------------------------------------------------------- */
+
+/* template workaround for compilers that cannot correctly implement the C++ standard */
+#ifndef SWIGTEMPLATEDISAMBIGUATOR
+# if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x560)
+#  define SWIGTEMPLATEDISAMBIGUATOR template
+# elif defined(__HP_aCC)
+/* Needed even with `aCC -AA' when `aCC -V' reports HP ANSI C++ B3910B A.03.55 */
+/* If we find a maximum version that requires this, the test would be __HP_aCC <= 35500 for A.03.55 */
+#  define SWIGTEMPLATEDISAMBIGUATOR template
+# else
+#  define SWIGTEMPLATEDISAMBIGUATOR
+# endif
+#endif
+
+/* inline attribute */
+#ifndef SWIGINLINE
+# if defined(__cplusplus) || (defined(__GNUC__) && !defined(__STRICT_ANSI__))
+#   define SWIGINLINE inline
+# else
+#   define SWIGINLINE
+# endif
+#endif
+
+/* attribute recognised by some compilers to avoid 'unused' warnings */
+#ifndef SWIGUNUSED
+# if defined(__GNUC__)
+#   if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
+#     define SWIGUNUSED __attribute__ ((__unused__))
+#   else
+#     define SWIGUNUSED
+#   endif
+# elif defined(__ICC)
+#   define SWIGUNUSED __attribute__ ((__unused__))
+# else
+#   define SWIGUNUSED
+# endif
+#endif
+
+#ifndef SWIG_MSC_UNSUPPRESS_4505
+# if defined(_MSC_VER)
+#   pragma warning(disable : 4505) /* unreferenced local function has been removed */
+# endif
+#endif
+
+#ifndef SWIGUNUSEDPARM
+# ifdef __cplusplus
+#   define SWIGUNUSEDPARM(p)
+# else
+#   define SWIGUNUSEDPARM(p) p SWIGUNUSED
+# endif
+#endif
+
+/* internal SWIG method */
+#ifndef SWIGINTERN
+# define SWIGINTERN static SWIGUNUSED
+#endif
+
+/* internal inline SWIG method */
+#ifndef SWIGINTERNINLINE
+# define SWIGINTERNINLINE SWIGINTERN SWIGINLINE
+#endif
+
+/* exporting methods */
+#if defined(__GNUC__)
+#  if (__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+#    ifndef GCC_HASCLASSVISIBILITY
+#      define GCC_HASCLASSVISIBILITY
+#    endif
+#  endif
+#endif
+
+#ifndef SWIGEXPORT
+# if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)
+#   if defined(STATIC_LINKED)
+#     define SWIGEXPORT
+#   else
+#     define SWIGEXPORT __declspec(dllexport)
+#   endif
+# else
+#   if defined(__GNUC__) && defined(GCC_HASCLASSVISIBILITY)
+#     define SWIGEXPORT __attribute__ ((visibility("default")))
+#   else
+#     define SWIGEXPORT
+#   endif
+# endif
+#endif
+
+/* calling conventions for Windows */
+#ifndef SWIGSTDCALL
+# if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)
+#   define SWIGSTDCALL __stdcall
+# else
+#   define SWIGSTDCALL
+# endif
+#endif
+
+/* Deal with Microsoft's attempt at deprecating C standard runtime functions */
+#if !defined(SWIG_NO_CRT_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_CRT_SECURE_NO_DEPRECATE)
+# define _CRT_SECURE_NO_DEPRECATE
+#endif
+
+/* Deal with Microsoft's attempt at deprecating methods in the standard C++ library */
+#if !defined(SWIG_NO_SCL_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_SCL_SECURE_NO_DEPRECATE)
+# define _SCL_SECURE_NO_DEPRECATE
+#endif
+
+/* Deal with Apple's deprecated 'AssertMacros.h' from Carbon-framework */
+#if defined(__APPLE__) && !defined(__ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES)
+# define __ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES 0
+#endif
+
+/* Intel's compiler complains if a variable which was never initialised is
+ * cast to void, which is a common idiom which we use to indicate that we
+ * are aware a variable isn't used.  So we just silence that warning.
+ * See: https://github.com/swig/swig/issues/192 for more discussion.
+ */
+#ifdef __INTEL_COMPILER
+# pragma warning disable 592
+#endif
+
+
+#if defined(_DEBUG) && defined(SWIG_PYTHON_INTERPRETER_NO_DEBUG)
+/* Use debug wrappers with the Python release dll */
+# undef _DEBUG
+# include <Python.h>
+# define _DEBUG
+#else
+# include <Python.h>
+#endif
+
+/* -----------------------------------------------------------------------------
+ * swigrun.swg
+ *
+ * This file contains generic C API SWIG runtime support for pointer
+ * type checking.
+ * ----------------------------------------------------------------------------- */
+
+/* This should only be incremented when either the layout of swig_type_info changes,
+   or for whatever reason, the runtime changes incompatibly */
+#define SWIG_RUNTIME_VERSION "4"
+
+/* define SWIG_TYPE_TABLE_NAME as "SWIG_TYPE_TABLE" */
+#ifdef SWIG_TYPE_TABLE
+# define SWIG_QUOTE_STRING(x) #x
+# define SWIG_EXPAND_AND_QUOTE_STRING(x) SWIG_QUOTE_STRING(x)
+# define SWIG_TYPE_TABLE_NAME SWIG_EXPAND_AND_QUOTE_STRING(SWIG_TYPE_TABLE)
+#else
+# define SWIG_TYPE_TABLE_NAME
+#endif
+
+/*
+  You can use the SWIGRUNTIME and SWIGRUNTIMEINLINE macros for
+  creating a static or dynamic library from the SWIG runtime code.
+  In 99.9% of the cases, SWIG just needs to declare them as 'static'.
+
+  But only do this if strictly necessary, ie, if you have problems
+  with your compiler or suchlike.
+*/
+
+#ifndef SWIGRUNTIME
+# define SWIGRUNTIME SWIGINTERN
+#endif
+
+#ifndef SWIGRUNTIMEINLINE
+# define SWIGRUNTIMEINLINE SWIGRUNTIME SWIGINLINE
+#endif
+
+/*  Generic buffer size */
+#ifndef SWIG_BUFFER_SIZE
+# define SWIG_BUFFER_SIZE 1024
+#endif
+
+/* Flags for pointer conversions */
+#define SWIG_POINTER_DISOWN        0x1
+#define SWIG_CAST_NEW_MEMORY       0x2
+
+/* Flags for new pointer objects */
+#define SWIG_POINTER_OWN           0x1
+
+
+/*
+   Flags/methods for returning states.
+
+   The SWIG conversion methods, as ConvertPtr, return an integer
+   that tells if the conversion was successful or not. And if not,
+   an error code can be returned (see swigerrors.swg for the codes).
+
+   Use the following macros/flags to set or process the returning
+   states.
+
+   In old versions of SWIG, code such as the following was usually written:
+
+     if (SWIG_ConvertPtr(obj,vptr,ty.flags) != -1) {
+       // success code
+     } else {
+       //fail code
+     }
+
+   Now you can be more explicit:
+
+    int res = SWIG_ConvertPtr(obj,vptr,ty.flags);
+    if (SWIG_IsOK(res)) {
+      // success code
+    } else {
+      // fail code
+    }
+
+   which is the same really, but now you can also do
+
+    Type *ptr;
+    int res = SWIG_ConvertPtr(obj,(void **)(&ptr),ty.flags);
+    if (SWIG_IsOK(res)) {
+      // success code
+      if (SWIG_IsNewObj(res) {
+        ...
+	delete *ptr;
+      } else {
+        ...
+      }
+    } else {
+      // fail code
+    }
+
+   I.e., now SWIG_ConvertPtr can return new objects and you can
+   identify the case and take care of the deallocation. Of course that
+   also requires SWIG_ConvertPtr to return new result values, such as
+
+      int SWIG_ConvertPtr(obj, ptr,...) {
+        if (<obj is ok>) {
+          if (<need new object>) {
+            *ptr = <ptr to new allocated object>;
+            return SWIG_NEWOBJ;
+          } else {
+            *ptr = <ptr to old object>;
+            return SWIG_OLDOBJ;
+          }
+        } else {
+          return SWIG_BADOBJ;
+        }
+      }
+
+   Of course, returning the plain '0(success)/-1(fail)' still works, but you can be
+   more explicit by returning SWIG_BADOBJ, SWIG_ERROR or any of the
+   SWIG errors code.
+
+   Finally, if the SWIG_CASTRANK_MODE is enabled, the result code
+   allows to return the 'cast rank', for example, if you have this
+
+       int food(double)
+       int fooi(int);
+
+   and you call
+
+      food(1)   // cast rank '1'  (1 -> 1.0)
+      fooi(1)   // cast rank '0'
+
+   just use the SWIG_AddCast()/SWIG_CheckState()
+*/
+
+#define SWIG_OK                    (0)
+#define SWIG_ERROR                 (-1)
+#define SWIG_IsOK(r)               (r >= 0)
+#define SWIG_ArgError(r)           ((r != SWIG_ERROR) ? r : SWIG_TypeError)
+
+/* The CastRankLimit says how many bits are used for the cast rank */
+#define SWIG_CASTRANKLIMIT         (1 << 8)
+/* The NewMask denotes the object was created (using new/malloc) */
+#define SWIG_NEWOBJMASK            (SWIG_CASTRANKLIMIT  << 1)
+/* The TmpMask is for in/out typemaps that use temporal objects */
+#define SWIG_TMPOBJMASK            (SWIG_NEWOBJMASK << 1)
+/* Simple returning values */
+#define SWIG_BADOBJ                (SWIG_ERROR)
+#define SWIG_OLDOBJ                (SWIG_OK)
+#define SWIG_NEWOBJ                (SWIG_OK | SWIG_NEWOBJMASK)
+#define SWIG_TMPOBJ                (SWIG_OK | SWIG_TMPOBJMASK)
+/* Check, add and del mask methods */
+#define SWIG_AddNewMask(r)         (SWIG_IsOK(r) ? (r | SWIG_NEWOBJMASK) : r)
+#define SWIG_DelNewMask(r)         (SWIG_IsOK(r) ? (r & ~SWIG_NEWOBJMASK) : r)
+#define SWIG_IsNewObj(r)           (SWIG_IsOK(r) && (r & SWIG_NEWOBJMASK))
+#define SWIG_AddTmpMask(r)         (SWIG_IsOK(r) ? (r | SWIG_TMPOBJMASK) : r)
+#define SWIG_DelTmpMask(r)         (SWIG_IsOK(r) ? (r & ~SWIG_TMPOBJMASK) : r)
+#define SWIG_IsTmpObj(r)           (SWIG_IsOK(r) && (r & SWIG_TMPOBJMASK))
+
+/* Cast-Rank Mode */
+#if defined(SWIG_CASTRANK_MODE)
+#  ifndef SWIG_TypeRank
+#    define SWIG_TypeRank             unsigned long
+#  endif
+#  ifndef SWIG_MAXCASTRANK            /* Default cast allowed */
+#    define SWIG_MAXCASTRANK          (2)
+#  endif
+#  define SWIG_CASTRANKMASK          ((SWIG_CASTRANKLIMIT) -1)
+#  define SWIG_CastRank(r)           (r & SWIG_CASTRANKMASK)
+SWIGINTERNINLINE int SWIG_AddCast(int r) {
+  return SWIG_IsOK(r) ? ((SWIG_CastRank(r) < SWIG_MAXCASTRANK) ? (r + 1) : SWIG_ERROR) : r;
+}
+SWIGINTERNINLINE int SWIG_CheckState(int r) {
+  return SWIG_IsOK(r) ? SWIG_CastRank(r) + 1 : 0;
+}
+#else /* no cast-rank mode */
+#  define SWIG_AddCast(r) (r)
+#  define SWIG_CheckState(r) (SWIG_IsOK(r) ? 1 : 0)
+#endif
+
+
+#include <string.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef void *(*swig_converter_func)(void *, int *);
+typedef struct swig_type_info *(*swig_dycast_func)(void **);
+
+/* Structure to store information on one type */
+typedef struct swig_type_info {
+  const char             *name;			/* mangled name of this type */
+  const char             *str;			/* human readable name of this type */
+  swig_dycast_func        dcast;		/* dynamic cast function down a hierarchy */
+  struct swig_cast_info  *cast;			/* linked list of types that can cast into this type */
+  void                   *clientdata;		/* language specific type data */
+  int                    owndata;		/* flag if the structure owns the clientdata */
+} swig_type_info;
+
+/* Structure to store a type and conversion function used for casting */
+typedef struct swig_cast_info {
+  swig_type_info         *type;			/* pointer to type that is equivalent to this type */
+  swig_converter_func     converter;		/* function to cast the void pointers */
+  struct swig_cast_info  *next;			/* pointer to next cast in linked list */
+  struct swig_cast_info  *prev;			/* pointer to the previous cast */
+} swig_cast_info;
+
+/* Structure used to store module information
+ * Each module generates one structure like this, and the runtime collects
+ * all of these structures and stores them in a circularly linked list.*/
+typedef struct swig_module_info {
+  swig_type_info         **types;		/* Array of pointers to swig_type_info structures that are in this module */
+  size_t                 size;		        /* Number of types in this module */
+  struct swig_module_info *next;		/* Pointer to next element in circularly linked list */
+  swig_type_info         **type_initial;	/* Array of initially generated type structures */
+  swig_cast_info         **cast_initial;	/* Array of initially generated casting structures */
+  void                    *clientdata;		/* Language specific module data */
+} swig_module_info;
+
+/*
+  Compare two type names skipping the space characters, therefore
+  "char*" == "char *" and "Class<int>" == "Class<int >", etc.
+
+  Return 0 when the two name types are equivalent, as in
+  strncmp, but skipping ' '.
+*/
+SWIGRUNTIME int
+SWIG_TypeNameComp(const char *f1, const char *l1,
+		  const char *f2, const char *l2) {
+  for (;(f1 != l1) && (f2 != l2); ++f1, ++f2) {
+    while ((*f1 == ' ') && (f1 != l1)) ++f1;
+    while ((*f2 == ' ') && (f2 != l2)) ++f2;
+    if (*f1 != *f2) return (*f1 > *f2) ? 1 : -1;
+  }
+  return (int)((l1 - f1) - (l2 - f2));
+}
+
+/*
+  Check type equivalence in a name list like <name1>|<name2>|...
+  Return 0 if equal, -1 if nb < tb, 1 if nb > tb
+*/
+SWIGRUNTIME int
+SWIG_TypeCmp(const char *nb, const char *tb) {
+  int equiv = 1;
+  const char* te = tb + strlen(tb);
+  const char* ne = nb;
+  while (equiv != 0 && *ne) {
+    for (nb = ne; *ne; ++ne) {
+      if (*ne == '|') break;
+    }
+    equiv = SWIG_TypeNameComp(nb, ne, tb, te);
+    if (*ne) ++ne;
+  }
+  return equiv;
+}
+
+/*
+  Check type equivalence in a name list like <name1>|<name2>|...
+  Return 0 if not equal, 1 if equal
+*/
+SWIGRUNTIME int
+SWIG_TypeEquiv(const char *nb, const char *tb) {
+  return SWIG_TypeCmp(nb, tb) == 0 ? 1 : 0;
+}
+
+/*
+  Check the typename
+*/
+SWIGRUNTIME swig_cast_info *
+SWIG_TypeCheck(const char *c, swig_type_info *ty) {
+  if (ty) {
+    swig_cast_info *iter = ty->cast;
+    while (iter) {
+      if (strcmp(iter->type->name, c) == 0) {
+        if (iter == ty->cast)
+          return iter;
+        /* Move iter to the top of the linked list */
+        iter->prev->next = iter->next;
+        if (iter->next)
+          iter->next->prev = iter->prev;
+        iter->next = ty->cast;
+        iter->prev = 0;
+        if (ty->cast) ty->cast->prev = iter;
+        ty->cast = iter;
+        return iter;
+      }
+      iter = iter->next;
+    }
+  }
+  return 0;
+}
+
+/*
+  Identical to SWIG_TypeCheck, except strcmp is replaced with a pointer comparison
+*/
+SWIGRUNTIME swig_cast_info *
+SWIG_TypeCheckStruct(swig_type_info *from, swig_type_info *ty) {
+  if (ty) {
+    swig_cast_info *iter = ty->cast;
+    while (iter) {
+      if (iter->type == from) {
+        if (iter == ty->cast)
+          return iter;
+        /* Move iter to the top of the linked list */
+        iter->prev->next = iter->next;
+        if (iter->next)
+          iter->next->prev = iter->prev;
+        iter->next = ty->cast;
+        iter->prev = 0;
+        if (ty->cast) ty->cast->prev = iter;
+        ty->cast = iter;
+        return iter;
+      }
+      iter = iter->next;
+    }
+  }
+  return 0;
+}
+
+/*
+  Cast a pointer up an inheritance hierarchy
+*/
+SWIGRUNTIMEINLINE void *
+SWIG_TypeCast(swig_cast_info *ty, void *ptr, int *newmemory) {
+  return ((!ty) || (!ty->converter)) ? ptr : (*ty->converter)(ptr, newmemory);
+}
+
+/*
+   Dynamic pointer casting. Down an inheritance hierarchy
+*/
+SWIGRUNTIME swig_type_info *
+SWIG_TypeDynamicCast(swig_type_info *ty, void **ptr) {
+  swig_type_info *lastty = ty;
+  if (!ty || !ty->dcast) return ty;
+  while (ty && (ty->dcast)) {
+    ty = (*ty->dcast)(ptr);
+    if (ty) lastty = ty;
+  }
+  return lastty;
+}
+
+/*
+  Return the name associated with this type
+*/
+SWIGRUNTIMEINLINE const char *
+SWIG_TypeName(const swig_type_info *ty) {
+  return ty->name;
+}
+
+/*
+  Return the pretty name associated with this type,
+  that is an unmangled type name in a form presentable to the user.
+*/
+SWIGRUNTIME const char *
+SWIG_TypePrettyName(const swig_type_info *type) {
+  /* The "str" field contains the equivalent pretty names of the
+     type, separated by vertical-bar characters.  We choose
+     to print the last name, as it is often (?) the most
+     specific. */
+  if (!type) return NULL;
+  if (type->str != NULL) {
+    const char *last_name = type->str;
+    const char *s;
+    for (s = type->str; *s; s++)
+      if (*s == '|') last_name = s+1;
+    return last_name;
+  }
+  else
+    return type->name;
+}
+
+/*
+   Set the clientdata field for a type
+*/
+SWIGRUNTIME void
+SWIG_TypeClientData(swig_type_info *ti, void *clientdata) {
+  swig_cast_info *cast = ti->cast;
+  /* if (ti->clientdata == clientdata) return; */
+  ti->clientdata = clientdata;
+
+  while (cast) {
+    if (!cast->converter) {
+      swig_type_info *tc = cast->type;
+      if (!tc->clientdata) {
+	SWIG_TypeClientData(tc, clientdata);
+      }
+    }
+    cast = cast->next;
+  }
+}
+SWIGRUNTIME void
+SWIG_TypeNewClientData(swig_type_info *ti, void *clientdata) {
+  SWIG_TypeClientData(ti, clientdata);
+  ti->owndata = 1;
+}
+
+/*
+  Search for a swig_type_info structure only by mangled name
+  Search is a O(log #types)
+
+  We start searching at module start, and finish searching when start == end.
+  Note: if start == end at the beginning of the function, we go all the way around
+  the circular list.
+*/
+SWIGRUNTIME swig_type_info *
+SWIG_MangledTypeQueryModule(swig_module_info *start,
+                            swig_module_info *end,
+		            const char *name) {
+  swig_module_info *iter = start;
+  do {
+    if (iter->size) {
+      size_t l = 0;
+      size_t r = iter->size - 1;
+      do {
+	/* since l+r >= 0, we can (>> 1) instead (/ 2) */
+	size_t i = (l + r) >> 1;
+	const char *iname = iter->types[i]->name;
+	if (iname) {
+	  int compare = strcmp(name, iname);
+	  if (compare == 0) {
+	    return iter->types[i];
+	  } else if (compare < 0) {
+	    if (i) {
+	      r = i - 1;
+	    } else {
+	      break;
+	    }
+	  } else if (compare > 0) {
+	    l = i + 1;
+	  }
+	} else {
+	  break; /* should never happen */
+	}
+      } while (l <= r);
+    }
+    iter = iter->next;
+  } while (iter != end);
+  return 0;
+}
+
+/*
+  Search for a swig_type_info structure for either a mangled name or a human readable name.
+  It first searches the mangled names of the types, which is a O(log #types)
+  If a type is not found it then searches the human readable names, which is O(#types).
+
+  We start searching at module start, and finish searching when start == end.
+  Note: if start == end at the beginning of the function, we go all the way around
+  the circular list.
+*/
+SWIGRUNTIME swig_type_info *
+SWIG_TypeQueryModule(swig_module_info *start,
+                     swig_module_info *end,
+		     const char *name) {
+  /* STEP 1: Search the name field using binary search */
+  swig_type_info *ret = SWIG_MangledTypeQueryModule(start, end, name);
+  if (ret) {
+    return ret;
+  } else {
+    /* STEP 2: If the type hasn't been found, do a complete search
+       of the str field (the human readable name) */
+    swig_module_info *iter = start;
+    do {
+      size_t i = 0;
+      for (; i < iter->size; ++i) {
+	if (iter->types[i]->str && (SWIG_TypeEquiv(iter->types[i]->str, name)))
+	  return iter->types[i];
+      }
+      iter = iter->next;
+    } while (iter != end);
+  }
+
+  /* neither found a match */
+  return 0;
+}
+
+/*
+   Pack binary data into a string
+*/
+SWIGRUNTIME char *
+SWIG_PackData(char *c, void *ptr, size_t sz) {
+  static const char hex[17] = "0123456789abcdef";
+  const unsigned char *u = (unsigned char *) ptr;
+  const unsigned char *eu =  u + sz;
+  for (; u != eu; ++u) {
+    unsigned char uu = *u;
+    *(c++) = hex[(uu & 0xf0) >> 4];
+    *(c++) = hex[uu & 0xf];
+  }
+  return c;
+}
+
+/*
+   Unpack binary data from a string
+*/
+SWIGRUNTIME const char *
+SWIG_UnpackData(const char *c, void *ptr, size_t sz) {
+  unsigned char *u = (unsigned char *) ptr;
+  const unsigned char *eu = u + sz;
+  for (; u != eu; ++u) {
+    char d = *(c++);
+    unsigned char uu;
+    if ((d >= '0') && (d <= '9'))
+      uu = (unsigned char)((d - '0') << 4);
+    else if ((d >= 'a') && (d <= 'f'))
+      uu = (unsigned char)((d - ('a'-10)) << 4);
+    else
+      return (char *) 0;
+    d = *(c++);
+    if ((d >= '0') && (d <= '9'))
+      uu |= (unsigned char)(d - '0');
+    else if ((d >= 'a') && (d <= 'f'))
+      uu |= (unsigned char)(d - ('a'-10));
+    else
+      return (char *) 0;
+    *u = uu;
+  }
+  return c;
+}
+
+/*
+   Pack 'void *' into a string buffer.
+*/
+SWIGRUNTIME char *
+SWIG_PackVoidPtr(char *buff, void *ptr, const char *name, size_t bsz) {
+  char *r = buff;
+  if ((2*sizeof(void *) + 2) > bsz) return 0;
+  *(r++) = '_';
+  r = SWIG_PackData(r,&ptr,sizeof(void *));
+  if (strlen(name) + 1 > (bsz - (r - buff))) return 0;
+  strcpy(r,name);
+  return buff;
+}
+
+SWIGRUNTIME const char *
+SWIG_UnpackVoidPtr(const char *c, void **ptr, const char *name) {
+  if (*c != '_') {
+    if (strcmp(c,"NULL") == 0) {
+      *ptr = (void *) 0;
+      return name;
+    } else {
+      return 0;
+    }
+  }
+  return SWIG_UnpackData(++c,ptr,sizeof(void *));
+}
+
+SWIGRUNTIME char *
+SWIG_PackDataName(char *buff, void *ptr, size_t sz, const char *name, size_t bsz) {
+  char *r = buff;
+  size_t lname = (name ? strlen(name) : 0);
+  if ((2*sz + 2 + lname) > bsz) return 0;
+  *(r++) = '_';
+  r = SWIG_PackData(r,ptr,sz);
+  if (lname) {
+    strncpy(r,name,lname+1);
+  } else {
+    *r = 0;
+  }
+  return buff;
+}
+
+SWIGRUNTIME const char *
+SWIG_UnpackDataName(const char *c, void *ptr, size_t sz, const char *name) {
+  if (*c != '_') {
+    if (strcmp(c,"NULL") == 0) {
+      memset(ptr,0,sz);
+      return name;
+    } else {
+      return 0;
+    }
+  }
+  return SWIG_UnpackData(++c,ptr,sz);
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+/*  Errors in SWIG */
+#define  SWIG_UnknownError    	   -1
+#define  SWIG_IOError        	   -2
+#define  SWIG_RuntimeError   	   -3
+#define  SWIG_IndexError     	   -4
+#define  SWIG_TypeError      	   -5
+#define  SWIG_DivisionByZero 	   -6
+#define  SWIG_OverflowError  	   -7
+#define  SWIG_SyntaxError    	   -8
+#define  SWIG_ValueError     	   -9
+#define  SWIG_SystemError    	   -10
+#define  SWIG_AttributeError 	   -11
+#define  SWIG_MemoryError    	   -12
+#define  SWIG_NullReferenceError   -13
+
+
+
+/* Compatibility macros for Python 3 */
+#if PY_VERSION_HEX >= 0x03000000
+
+#define PyClass_Check(obj) PyObject_IsInstance(obj, (PyObject *)&PyType_Type)
+#define PyInt_Check(x) PyLong_Check(x)
+#define PyInt_AsLong(x) PyLong_AsLong(x)
+#define PyInt_FromLong(x) PyLong_FromLong(x)
+#define PyInt_FromSize_t(x) PyLong_FromSize_t(x)
+#define PyString_Check(name) PyBytes_Check(name)
+#define PyString_FromString(x) PyUnicode_FromString(x)
+#define PyString_Format(fmt, args)  PyUnicode_Format(fmt, args)
+#define PyString_AsString(str) PyBytes_AsString(str)
+#define PyString_Size(str) PyBytes_Size(str)	
+#define PyString_InternFromString(key) PyUnicode_InternFromString(key)
+#define Py_TPFLAGS_HAVE_CLASS Py_TPFLAGS_BASETYPE
+#define PyString_AS_STRING(x) PyUnicode_AS_STRING(x)
+#define _PyLong_FromSsize_t(x) PyLong_FromSsize_t(x)
+
+#endif
+
+#ifndef Py_TYPE
+#  define Py_TYPE(op) ((op)->ob_type)
+#endif
+
+/* SWIG APIs for compatibility of both Python 2 & 3 */
+
+#if PY_VERSION_HEX >= 0x03000000
+#  define SWIG_Python_str_FromFormat PyUnicode_FromFormat
+#else
+#  define SWIG_Python_str_FromFormat PyString_FromFormat
+#endif
+
+
+/* Warning: This function will allocate a new string in Python 3,
+ * so please call SWIG_Python_str_DelForPy3(x) to free the space.
+ */
+SWIGINTERN char*
+SWIG_Python_str_AsChar(PyObject *str)
+{
+#if PY_VERSION_HEX >= 0x03000000
+  char *cstr;
+  char *newstr;
+  Py_ssize_t len;
+  str = PyUnicode_AsUTF8String(str);
+  PyBytes_AsStringAndSize(str, &cstr, &len);
+  newstr = (char *) malloc(len+1);
+  memcpy(newstr, cstr, len+1);
+  Py_XDECREF(str);
+  return newstr;
+#else
+  return PyString_AsString(str);
+#endif
+}
+
+#if PY_VERSION_HEX >= 0x03000000
+#  define SWIG_Python_str_DelForPy3(x) free( (void*) (x) )
+#else
+#  define SWIG_Python_str_DelForPy3(x) 
+#endif
+
+
+SWIGINTERN PyObject*
+SWIG_Python_str_FromChar(const char *c)
+{
+#if PY_VERSION_HEX >= 0x03000000
+  return PyUnicode_FromString(c); 
+#else
+  return PyString_FromString(c);
+#endif
+}
+
+/* Add PyOS_snprintf for old Pythons */
+#if PY_VERSION_HEX < 0x02020000
+# if defined(_MSC_VER) || defined(__BORLANDC__) || defined(_WATCOM)
+#  define PyOS_snprintf _snprintf
+# else
+#  define PyOS_snprintf snprintf
+# endif
+#endif
+
+/* A crude PyString_FromFormat implementation for old Pythons */
+#if PY_VERSION_HEX < 0x02020000
+
+#ifndef SWIG_PYBUFFER_SIZE
+# define SWIG_PYBUFFER_SIZE 1024
+#endif
+
+static PyObject *
+PyString_FromFormat(const char *fmt, ...) {
+  va_list ap;
+  char buf[SWIG_PYBUFFER_SIZE * 2];
+  int res;
+  va_start(ap, fmt);
+  res = vsnprintf(buf, sizeof(buf), fmt, ap);
+  va_end(ap);
+  return (res < 0 || res >= (int)sizeof(buf)) ? 0 : PyString_FromString(buf);
+}
+#endif
+
+#ifndef PyObject_DEL
+# define PyObject_DEL PyObject_Del
+#endif
+
+/* A crude PyExc_StopIteration exception for old Pythons */
+#if PY_VERSION_HEX < 0x02020000
+# ifndef PyExc_StopIteration
+#  define PyExc_StopIteration PyExc_RuntimeError
+# endif
+# ifndef PyObject_GenericGetAttr
+#  define PyObject_GenericGetAttr 0
+# endif
+#endif
+
+/* Py_NotImplemented is defined in 2.1 and up. */
+#if PY_VERSION_HEX < 0x02010000
+# ifndef Py_NotImplemented
+#  define Py_NotImplemented PyExc_RuntimeError
+# endif
+#endif
+
+/* A crude PyString_AsStringAndSize implementation for old Pythons */
+#if PY_VERSION_HEX < 0x02010000
+# ifndef PyString_AsStringAndSize
+#  define PyString_AsStringAndSize(obj, s, len) {*s = PyString_AsString(obj); *len = *s ? strlen(*s) : 0;}
+# endif
+#endif
+
+/* PySequence_Size for old Pythons */
+#if PY_VERSION_HEX < 0x02000000
+# ifndef PySequence_Size
+#  define PySequence_Size PySequence_Length
+# endif
+#endif
+
+/* PyBool_FromLong for old Pythons */
+#if PY_VERSION_HEX < 0x02030000
+static
+PyObject *PyBool_FromLong(long ok)
+{
+  PyObject *result = ok ? Py_True : Py_False;
+  Py_INCREF(result);
+  return result;
+}
+#endif
+
+/* Py_ssize_t for old Pythons */
+/* This code is as recommended by: */
+/* http://www.python.org/dev/peps/pep-0353/#conversion-guidelines */
+#if PY_VERSION_HEX < 0x02050000 && !defined(PY_SSIZE_T_MIN)
+typedef int Py_ssize_t;
+# define PY_SSIZE_T_MAX INT_MAX
+# define PY_SSIZE_T_MIN INT_MIN
+typedef inquiry lenfunc;
+typedef intargfunc ssizeargfunc;
+typedef intintargfunc ssizessizeargfunc;
+typedef intobjargproc ssizeobjargproc;
+typedef intintobjargproc ssizessizeobjargproc;
+typedef getreadbufferproc readbufferproc;
+typedef getwritebufferproc writebufferproc;
+typedef getsegcountproc segcountproc;
+typedef getcharbufferproc charbufferproc;
+static long PyNumber_AsSsize_t (PyObject *x, void *SWIGUNUSEDPARM(exc))
+{
+  long result = 0;
+  PyObject *i = PyNumber_Int(x);
+  if (i) {
+    result = PyInt_AsLong(i);
+    Py_DECREF(i);
+  }
+  return result;
+}
+#endif
+
+#if PY_VERSION_HEX < 0x02050000
+#define PyInt_FromSize_t(x) PyInt_FromLong((long)x)
+#endif
+
+#if PY_VERSION_HEX < 0x02040000
+#define Py_VISIT(op)				\
+  do { 						\
+    if (op) {					\
+      int vret = visit((op), arg);		\
+      if (vret)					\
+        return vret;				\
+    }						\
+  } while (0)
+#endif
+
+#if PY_VERSION_HEX < 0x02030000
+typedef struct {
+  PyTypeObject type;
+  PyNumberMethods as_number;
+  PyMappingMethods as_mapping;
+  PySequenceMethods as_sequence;
+  PyBufferProcs as_buffer;
+  PyObject *name, *slots;
+} PyHeapTypeObject;
+#endif
+
+#if PY_VERSION_HEX < 0x02030000
+typedef destructor freefunc;
+#endif
+
+#if ((PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION > 6) || \
+     (PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION > 0) || \
+     (PY_MAJOR_VERSION > 3))
+# define SWIGPY_USE_CAPSULE
+# define SWIGPY_CAPSULE_NAME ((char*)"swig_runtime_data" SWIG_RUNTIME_VERSION ".type_pointer_capsule" SWIG_TYPE_TABLE_NAME)
+#endif
+
+#if PY_VERSION_HEX < 0x03020000
+#define PyDescr_TYPE(x) (((PyDescrObject *)(x))->d_type)
+#define PyDescr_NAME(x) (((PyDescrObject *)(x))->d_name)
+#define Py_hash_t long
+#endif
+
+/* -----------------------------------------------------------------------------
+ * error manipulation
+ * ----------------------------------------------------------------------------- */
+
+SWIGRUNTIME PyObject*
+SWIG_Python_ErrorType(int code) {
+  PyObject* type = 0;
+  switch(code) {
+  case SWIG_MemoryError:
+    type = PyExc_MemoryError;
+    break;
+  case SWIG_IOError:
+    type = PyExc_IOError;
+    break;
+  case SWIG_RuntimeError:
+    type = PyExc_RuntimeError;
+    break;
+  case SWIG_IndexError:
+    type = PyExc_IndexError;
+    break;
+  case SWIG_TypeError:
+    type = PyExc_TypeError;
+    break;
+  case SWIG_DivisionByZero:
+    type = PyExc_ZeroDivisionError;
+    break;
+  case SWIG_OverflowError:
+    type = PyExc_OverflowError;
+    break;
+  case SWIG_SyntaxError:
+    type = PyExc_SyntaxError;
+    break;
+  case SWIG_ValueError:
+    type = PyExc_ValueError;
+    break;
+  case SWIG_SystemError:
+    type = PyExc_SystemError;
+    break;
+  case SWIG_AttributeError:
+    type = PyExc_AttributeError;
+    break;
+  default:
+    type = PyExc_RuntimeError;
+  }
+  return type;
+}
+
+
+SWIGRUNTIME void
+SWIG_Python_AddErrorMsg(const char* mesg)
+{
+  PyObject *type = 0;
+  PyObject *value = 0;
+  PyObject *traceback = 0;
+
+  if (PyErr_Occurred()) PyErr_Fetch(&type, &value, &traceback);
+  if (value) {
+    char *tmp;
+    PyObject *old_str = PyObject_Str(value);
+    PyErr_Clear();
+    Py_XINCREF(type);
+
+    PyErr_Format(type, "%s %s", tmp = SWIG_Python_str_AsChar(old_str), mesg);
+    SWIG_Python_str_DelForPy3(tmp);
+    Py_DECREF(old_str);
+    Py_DECREF(value);
+  } else {
+    PyErr_SetString(PyExc_RuntimeError, mesg);
+  }
+}
+
+#if defined(SWIG_PYTHON_NO_THREADS)
+#  if defined(SWIG_PYTHON_THREADS)
+#    undef SWIG_PYTHON_THREADS
+#  endif
+#endif
+#if defined(SWIG_PYTHON_THREADS) /* Threading support is enabled */
+#  if !defined(SWIG_PYTHON_USE_GIL) && !defined(SWIG_PYTHON_NO_USE_GIL)
+#    if (PY_VERSION_HEX >= 0x02030000) /* For 2.3 or later, use the PyGILState calls */
+#      define SWIG_PYTHON_USE_GIL
+#    endif
+#  endif
+#  if defined(SWIG_PYTHON_USE_GIL) /* Use PyGILState threads calls */
+#    ifndef SWIG_PYTHON_INITIALIZE_THREADS
+#     define SWIG_PYTHON_INITIALIZE_THREADS  PyEval_InitThreads() 
+#    endif
+#    ifdef __cplusplus /* C++ code */
+       class SWIG_Python_Thread_Block {
+         bool status;
+         PyGILState_STATE state;
+       public:
+         void end() { if (status) { PyGILState_Release(state); status = false;} }
+         SWIG_Python_Thread_Block() : status(true), state(PyGILState_Ensure()) {}
+         ~SWIG_Python_Thread_Block() { end(); }
+       };
+       class SWIG_Python_Thread_Allow {
+         bool status;
+         PyThreadState *save;
+       public:
+         void end() { if (status) { PyEval_RestoreThread(save); status = false; }}
+         SWIG_Python_Thread_Allow() : status(true), save(PyEval_SaveThread()) {}
+         ~SWIG_Python_Thread_Allow() { end(); }
+       };
+#      define SWIG_PYTHON_THREAD_BEGIN_BLOCK   SWIG_Python_Thread_Block _swig_thread_block
+#      define SWIG_PYTHON_THREAD_END_BLOCK     _swig_thread_block.end()
+#      define SWIG_PYTHON_THREAD_BEGIN_ALLOW   SWIG_Python_Thread_Allow _swig_thread_allow
+#      define SWIG_PYTHON_THREAD_END_ALLOW     _swig_thread_allow.end()
+#    else /* C code */
+#      define SWIG_PYTHON_THREAD_BEGIN_BLOCK   PyGILState_STATE _swig_thread_block = PyGILState_Ensure()
+#      define SWIG_PYTHON_THREAD_END_BLOCK     PyGILState_Release(_swig_thread_block)
+#      define SWIG_PYTHON_THREAD_BEGIN_ALLOW   PyThreadState *_swig_thread_allow = PyEval_SaveThread()
+#      define SWIG_PYTHON_THREAD_END_ALLOW     PyEval_RestoreThread(_swig_thread_allow)
+#    endif
+#  else /* Old thread way, not implemented, user must provide it */
+#    if !defined(SWIG_PYTHON_INITIALIZE_THREADS)
+#      define SWIG_PYTHON_INITIALIZE_THREADS
+#    endif
+#    if !defined(SWIG_PYTHON_THREAD_BEGIN_BLOCK)
+#      define SWIG_PYTHON_THREAD_BEGIN_BLOCK
+#    endif
+#    if !defined(SWIG_PYTHON_THREAD_END_BLOCK)
+#      define SWIG_PYTHON_THREAD_END_BLOCK
+#    endif
+#    if !defined(SWIG_PYTHON_THREAD_BEGIN_ALLOW)
+#      define SWIG_PYTHON_THREAD_BEGIN_ALLOW
+#    endif
+#    if !defined(SWIG_PYTHON_THREAD_END_ALLOW)
+#      define SWIG_PYTHON_THREAD_END_ALLOW
+#    endif
+#  endif
+#else /* No thread support */
+#  define SWIG_PYTHON_INITIALIZE_THREADS
+#  define SWIG_PYTHON_THREAD_BEGIN_BLOCK
+#  define SWIG_PYTHON_THREAD_END_BLOCK
+#  define SWIG_PYTHON_THREAD_BEGIN_ALLOW
+#  define SWIG_PYTHON_THREAD_END_ALLOW
+#endif
+
+/* -----------------------------------------------------------------------------
+ * Python API portion that goes into the runtime
+ * ----------------------------------------------------------------------------- */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* -----------------------------------------------------------------------------
+ * Constant declarations
+ * ----------------------------------------------------------------------------- */
+
+/* Constant Types */
+#define SWIG_PY_POINTER 4
+#define SWIG_PY_BINARY  5
+
+/* Constant information structure */
+typedef struct swig_const_info {
+  int type;
+  char *name;
+  long lvalue;
+  double dvalue;
+  void   *pvalue;
+  swig_type_info **ptype;
+} swig_const_info;
+
+
+/* -----------------------------------------------------------------------------
+ * Wrapper of PyInstanceMethod_New() used in Python 3
+ * It is exported to the generated module, used for -fastproxy
+ * ----------------------------------------------------------------------------- */
+#if PY_VERSION_HEX >= 0x03000000
+SWIGRUNTIME PyObject* SWIG_PyInstanceMethod_New(PyObject *SWIGUNUSEDPARM(self), PyObject *func)
+{
+  return PyInstanceMethod_New(func);
+}
+#else
+SWIGRUNTIME PyObject* SWIG_PyInstanceMethod_New(PyObject *SWIGUNUSEDPARM(self), PyObject *SWIGUNUSEDPARM(func))
+{
+  return NULL;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+
+/* -----------------------------------------------------------------------------
+ * pyrun.swg
+ *
+ * This file contains the runtime support for Python modules
+ * and includes code for managing global variables and pointer
+ * type checking.
+ *
+ * ----------------------------------------------------------------------------- */
+
+/* Common SWIG API */
+
+/* for raw pointers */
+#define SWIG_Python_ConvertPtr(obj, pptr, type, flags)  SWIG_Python_ConvertPtrAndOwn(obj, pptr, type, flags, 0)
+#define SWIG_ConvertPtr(obj, pptr, type, flags)         SWIG_Python_ConvertPtr(obj, pptr, type, flags)
+#define SWIG_ConvertPtrAndOwn(obj,pptr,type,flags,own)  SWIG_Python_ConvertPtrAndOwn(obj, pptr, type, flags, own)
+
+#ifdef SWIGPYTHON_BUILTIN
+#define SWIG_NewPointerObj(ptr, type, flags)            SWIG_Python_NewPointerObj(self, ptr, type, flags)
+#else
+#define SWIG_NewPointerObj(ptr, type, flags)            SWIG_Python_NewPointerObj(NULL, ptr, type, flags)
+#endif
+
+#define SWIG_InternalNewPointerObj(ptr, type, flags)	SWIG_Python_NewPointerObj(NULL, ptr, type, flags)
+
+#define SWIG_CheckImplicit(ty)                          SWIG_Python_CheckImplicit(ty) 
+#define SWIG_AcquirePtr(ptr, src)                       SWIG_Python_AcquirePtr(ptr, src)
+#define swig_owntype                                    int
+
+/* for raw packed data */
+#define SWIG_ConvertPacked(obj, ptr, sz, ty)            SWIG_Python_ConvertPacked(obj, ptr, sz, ty)
+#define SWIG_NewPackedObj(ptr, sz, type)                SWIG_Python_NewPackedObj(ptr, sz, type)
+
+/* for class or struct pointers */
+#define SWIG_ConvertInstance(obj, pptr, type, flags)    SWIG_ConvertPtr(obj, pptr, type, flags)
+#define SWIG_NewInstanceObj(ptr, type, flags)           SWIG_NewPointerObj(ptr, type, flags)
+
+/* for C or C++ function pointers */
+#define SWIG_ConvertFunctionPtr(obj, pptr, type)        SWIG_Python_ConvertFunctionPtr(obj, pptr, type)
+#define SWIG_NewFunctionPtrObj(ptr, type)               SWIG_Python_NewPointerObj(NULL, ptr, type, 0)
+
+/* for C++ member pointers, ie, member methods */
+#define SWIG_ConvertMember(obj, ptr, sz, ty)            SWIG_Python_ConvertPacked(obj, ptr, sz, ty)
+#define SWIG_NewMemberObj(ptr, sz, type)                SWIG_Python_NewPackedObj(ptr, sz, type)
+
+
+/* Runtime API */
+
+#define SWIG_GetModule(clientdata)                      SWIG_Python_GetModule(clientdata)
+#define SWIG_SetModule(clientdata, pointer)             SWIG_Python_SetModule(pointer)
+#define SWIG_NewClientData(obj)                         SwigPyClientData_New(obj)
+
+#define SWIG_SetErrorObj                                SWIG_Python_SetErrorObj                            
+#define SWIG_SetErrorMsg                        	SWIG_Python_SetErrorMsg				   
+#define SWIG_ErrorType(code)                    	SWIG_Python_ErrorType(code)                        
+#define SWIG_Error(code, msg)            		SWIG_Python_SetErrorMsg(SWIG_ErrorType(code), msg) 
+#define SWIG_fail                        		goto fail					   
+
+
+/* Runtime API implementation */
+
+/* Error manipulation */
+
+SWIGINTERN void 
+SWIG_Python_SetErrorObj(PyObject *errtype, PyObject *obj) {
+  SWIG_PYTHON_THREAD_BEGIN_BLOCK; 
+  PyErr_SetObject(errtype, obj);
+  Py_DECREF(obj);
+  SWIG_PYTHON_THREAD_END_BLOCK;
+}
+
+SWIGINTERN void 
+SWIG_Python_SetErrorMsg(PyObject *errtype, const char *msg) {
+  SWIG_PYTHON_THREAD_BEGIN_BLOCK;
+  PyErr_SetString(errtype, msg);
+  SWIG_PYTHON_THREAD_END_BLOCK;
+}
+
+#define SWIG_Python_Raise(obj, type, desc)  SWIG_Python_SetErrorObj(SWIG_Python_ExceptionType(desc), obj)
+
+/* Set a constant value */
+
+#if defined(SWIGPYTHON_BUILTIN)
+
+SWIGINTERN void
+SwigPyBuiltin_AddPublicSymbol(PyObject *seq, const char *key) {
+  PyObject *s = PyString_InternFromString(key);
+  PyList_Append(seq, s);
+  Py_DECREF(s);
+}
+
+SWIGINTERN void
+SWIG_Python_SetConstant(PyObject *d, PyObject *public_interface, const char *name, PyObject *obj) {   
+#if PY_VERSION_HEX < 0x02030000
+  PyDict_SetItemString(d, (char *)name, obj);
+#else
+  PyDict_SetItemString(d, name, obj);
+#endif
+  Py_DECREF(obj);
+  if (public_interface)
+    SwigPyBuiltin_AddPublicSymbol(public_interface, name);
+}
+
+#else
+
+SWIGINTERN void
+SWIG_Python_SetConstant(PyObject *d, const char *name, PyObject *obj) {   
+#if PY_VERSION_HEX < 0x02030000
+  PyDict_SetItemString(d, (char *)name, obj);
+#else
+  PyDict_SetItemString(d, name, obj);
+#endif
+  Py_DECREF(obj);                            
+}
+
+#endif
+
+/* Append a value to the result obj */
+
+SWIGINTERN PyObject*
+SWIG_Python_AppendOutput(PyObject* result, PyObject* obj) {
+#if !defined(SWIG_PYTHON_OUTPUT_TUPLE)
+  if (!result) {
+    result = obj;
+  } else if (result == Py_None) {
+    Py_DECREF(result);
+    result = obj;
+  } else {
+    if (!PyList_Check(result)) {
+      PyObject *o2 = result;
+      result = PyList_New(1);
+      PyList_SetItem(result, 0, o2);
+    }
+    PyList_Append(result,obj);
+    Py_DECREF(obj);
+  }
+  return result;
+#else
+  PyObject*   o2;
+  PyObject*   o3;
+  if (!result) {
+    result = obj;
+  } else if (result == Py_None) {
+    Py_DECREF(result);
+    result = obj;
+  } else {
+    if (!PyTuple_Check(result)) {
+      o2 = result;
+      result = PyTuple_New(1);
+      PyTuple_SET_ITEM(result, 0, o2);
+    }
+    o3 = PyTuple_New(1);
+    PyTuple_SET_ITEM(o3, 0, obj);
+    o2 = result;
+    result = PySequence_Concat(o2, o3);
+    Py_DECREF(o2);
+    Py_DECREF(o3);
+  }
+  return result;
+#endif
+}
+
+/* Unpack the argument tuple */
+
+SWIGINTERN Py_ssize_t
+SWIG_Python_UnpackTuple(PyObject *args, const char *name, Py_ssize_t min, Py_ssize_t max, PyObject **objs)
+{
+  if (!args) {
+    if (!min && !max) {
+      return 1;
+    } else {
+      PyErr_Format(PyExc_TypeError, "%s expected %s%d arguments, got none", 
+		   name, (min == max ? "" : "at least "), (int)min);
+      return 0;
+    }
+  }  
+  if (!PyTuple_Check(args)) {
+    if (min <= 1 && max >= 1) {
+      Py_ssize_t i;
+      objs[0] = args;
+      for (i = 1; i < max; ++i) {
+	objs[i] = 0;
+      }
+      return 2;
+    }
+    PyErr_SetString(PyExc_SystemError, "UnpackTuple() argument list is not a tuple");
+    return 0;
+  } else {
+    Py_ssize_t l = PyTuple_GET_SIZE(args);
+    if (l < min) {
+      PyErr_Format(PyExc_TypeError, "%s expected %s%d arguments, got %d", 
+		   name, (min == max ? "" : "at least "), (int)min, (int)l);
+      return 0;
+    } else if (l > max) {
+      PyErr_Format(PyExc_TypeError, "%s expected %s%d arguments, got %d", 
+		   name, (min == max ? "" : "at most "), (int)max, (int)l);
+      return 0;
+    } else {
+      Py_ssize_t i;
+      for (i = 0; i < l; ++i) {
+	objs[i] = PyTuple_GET_ITEM(args, i);
+      }
+      for (; l < max; ++l) {
+	objs[l] = 0;
+      }
+      return i + 1;
+    }    
+  }
+}
+
+/* A functor is a function object with one single object argument */
+#if PY_VERSION_HEX >= 0x02020000
+#define SWIG_Python_CallFunctor(functor, obj)	        PyObject_CallFunctionObjArgs(functor, obj, NULL);
+#else
+#define SWIG_Python_CallFunctor(functor, obj)	        PyObject_CallFunction(functor, "O", obj);
+#endif
+
+/*
+  Helper for static pointer initialization for both C and C++ code, for example
+  static PyObject *SWIG_STATIC_POINTER(MyVar) = NewSomething(...);
+*/
+#ifdef __cplusplus
+#define SWIG_STATIC_POINTER(var)  var
+#else
+#define SWIG_STATIC_POINTER(var)  var = 0; if (!var) var
+#endif
+
+/* -----------------------------------------------------------------------------
+ * Pointer declarations
+ * ----------------------------------------------------------------------------- */
+
+/* Flags for new pointer objects */
+#define SWIG_POINTER_NOSHADOW       (SWIG_POINTER_OWN      << 1)
+#define SWIG_POINTER_NEW            (SWIG_POINTER_NOSHADOW | SWIG_POINTER_OWN)
+
+#define SWIG_POINTER_IMPLICIT_CONV  (SWIG_POINTER_DISOWN   << 1)
+
+#define SWIG_BUILTIN_TP_INIT	    (SWIG_POINTER_OWN << 2)
+#define SWIG_BUILTIN_INIT	    (SWIG_BUILTIN_TP_INIT | SWIG_POINTER_OWN)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*  How to access Py_None */
+#if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)
+#  ifndef SWIG_PYTHON_NO_BUILD_NONE
+#    ifndef SWIG_PYTHON_BUILD_NONE
+#      define SWIG_PYTHON_BUILD_NONE
+#    endif
+#  endif
+#endif
+
+#ifdef SWIG_PYTHON_BUILD_NONE
+#  ifdef Py_None
+#   undef Py_None
+#   define Py_None SWIG_Py_None()
+#  endif
+SWIGRUNTIMEINLINE PyObject * 
+_SWIG_Py_None(void)
+{
+  PyObject *none = Py_BuildValue((char*)"");
+  Py_DECREF(none);
+  return none;
+}
+SWIGRUNTIME PyObject * 
+SWIG_Py_None(void)
+{
+  static PyObject *SWIG_STATIC_POINTER(none) = _SWIG_Py_None();
+  return none;
+}
+#endif
+
+/* The python void return value */
+
+SWIGRUNTIMEINLINE PyObject * 
+SWIG_Py_Void(void)
+{
+  PyObject *none = Py_None;
+  Py_INCREF(none);
+  return none;
+}
+
+/* SwigPyClientData */
+
+typedef struct {
+  PyObject *klass;
+  PyObject *newraw;
+  PyObject *newargs;
+  PyObject *destroy;
+  int delargs;
+  int implicitconv;
+  PyTypeObject *pytype;
+} SwigPyClientData;
+
+SWIGRUNTIMEINLINE int 
+SWIG_Python_CheckImplicit(swig_type_info *ty)
+{
+  SwigPyClientData *data = (SwigPyClientData *)ty->clientdata;
+  return data ? data->implicitconv : 0;
+}
+
+SWIGRUNTIMEINLINE PyObject *
+SWIG_Python_ExceptionType(swig_type_info *desc) {
+  SwigPyClientData *data = desc ? (SwigPyClientData *) desc->clientdata : 0;
+  PyObject *klass = data ? data->klass : 0;
+  return (klass ? klass : PyExc_RuntimeError);
+}
+
+
+SWIGRUNTIME SwigPyClientData * 
+SwigPyClientData_New(PyObject* obj)
+{
+  if (!obj) {
+    return 0;
+  } else {
+    SwigPyClientData *data = (SwigPyClientData *)malloc(sizeof(SwigPyClientData));
+    /* the klass element */
+    data->klass = obj;
+    Py_INCREF(data->klass);
+    /* the newraw method and newargs arguments used to create a new raw instance */
+    if (PyClass_Check(obj)) {
+      data->newraw = 0;
+      data->newargs = obj;
+      Py_INCREF(obj);
+    } else {
+#if (PY_VERSION_HEX < 0x02020000)
+      data->newraw = 0;
+#else
+      data->newraw = PyObject_GetAttrString(data->klass, (char *)"__new__");
+#endif
+      if (data->newraw) {
+	Py_INCREF(data->newraw);
+	data->newargs = PyTuple_New(1);
+	PyTuple_SetItem(data->newargs, 0, obj);
+      } else {
+	data->newargs = obj;
+      }
+      Py_INCREF(data->newargs);
+    }
+    /* the destroy method, aka as the C++ delete method */
+    data->destroy = PyObject_GetAttrString(data->klass, (char *)"__swig_destroy__");
+    if (PyErr_Occurred()) {
+      PyErr_Clear();
+      data->destroy = 0;
+    }
+    if (data->destroy) {
+      int flags;
+      Py_INCREF(data->destroy);
+      flags = PyCFunction_GET_FLAGS(data->destroy);
+#ifdef METH_O
+      data->delargs = !(flags & (METH_O));
+#else
+      data->delargs = 0;
+#endif
+    } else {
+      data->delargs = 0;
+    }
+    data->implicitconv = 0;
+    data->pytype = 0;
+    return data;
+  }
+}
+
+SWIGRUNTIME void 
+SwigPyClientData_Del(SwigPyClientData *data) {
+  Py_XDECREF(data->newraw);
+  Py_XDECREF(data->newargs);
+  Py_XDECREF(data->destroy);
+}
+
+/* =============== SwigPyObject =====================*/
+
+typedef struct {
+  PyObject_HEAD
+  void *ptr;
+  swig_type_info *ty;
+  int own;
+  PyObject *next;
+#ifdef SWIGPYTHON_BUILTIN
+  PyObject *dict;
+#endif
+} SwigPyObject;
+
+
+#ifdef SWIGPYTHON_BUILTIN
+
+SWIGRUNTIME PyObject *
+SwigPyObject_get___dict__(PyObject *v, PyObject *SWIGUNUSEDPARM(args))
+{
+  SwigPyObject *sobj = (SwigPyObject *)v;
+
+  if (!sobj->dict)
+    sobj->dict = PyDict_New();
+
+  Py_INCREF(sobj->dict);
+  return sobj->dict;
+}
+
+#endif
+
+SWIGRUNTIME PyObject *
+SwigPyObject_long(SwigPyObject *v)
+{
+  return PyLong_FromVoidPtr(v->ptr);
+}
+
+SWIGRUNTIME PyObject *
+SwigPyObject_format(const char* fmt, SwigPyObject *v)
+{
+  PyObject *res = NULL;
+  PyObject *args = PyTuple_New(1);
+  if (args) {
+    if (PyTuple_SetItem(args, 0, SwigPyObject_long(v)) == 0) {
+      PyObject *ofmt = SWIG_Python_str_FromChar(fmt);
+      if (ofmt) {
+#if PY_VERSION_HEX >= 0x03000000
+	res = PyUnicode_Format(ofmt,args);
+#else
+	res = PyString_Format(ofmt,args);
+#endif
+	Py_DECREF(ofmt);
+      }
+      Py_DECREF(args);
+    }
+  }
+  return res;
+}
+
+SWIGRUNTIME PyObject *
+SwigPyObject_oct(SwigPyObject *v)
+{
+  return SwigPyObject_format("%o",v);
+}
+
+SWIGRUNTIME PyObject *
+SwigPyObject_hex(SwigPyObject *v)
+{
+  return SwigPyObject_format("%x",v);
+}
+
+SWIGRUNTIME PyObject *
+#ifdef METH_NOARGS
+SwigPyObject_repr(SwigPyObject *v)
+#else
+SwigPyObject_repr(SwigPyObject *v, PyObject *args)
+#endif
+{
+  const char *name = SWIG_TypePrettyName(v->ty);
+  PyObject *repr = SWIG_Python_str_FromFormat("<Swig Object of type '%s' at %p>", (name ? name : "unknown"), (void *)v);
+  if (v->next) {
+# ifdef METH_NOARGS
+    PyObject *nrep = SwigPyObject_repr((SwigPyObject *)v->next);
+# else
+    PyObject *nrep = SwigPyObject_repr((SwigPyObject *)v->next, args);
+# endif
+# if PY_VERSION_HEX >= 0x03000000
+    PyObject *joined = PyUnicode_Concat(repr, nrep);
+    Py_DecRef(repr);
+    Py_DecRef(nrep);
+    repr = joined;
+# else
+    PyString_ConcatAndDel(&repr,nrep);
+# endif
+  }
+  return repr;  
+}
+
+SWIGRUNTIME int
+SwigPyObject_compare(SwigPyObject *v, SwigPyObject *w)
+{
+  void *i = v->ptr;
+  void *j = w->ptr;
+  return (i < j) ? -1 : ((i > j) ? 1 : 0);
+}
+
+/* Added for Python 3.x, would it also be useful for Python 2.x? */
+SWIGRUNTIME PyObject*
+SwigPyObject_richcompare(SwigPyObject *v, SwigPyObject *w, int op)
+{
+  PyObject* res;
+  if( op != Py_EQ && op != Py_NE ) {
+    Py_INCREF(Py_NotImplemented);
+    return Py_NotImplemented;
+  }
+  res = PyBool_FromLong( (SwigPyObject_compare(v, w)==0) == (op == Py_EQ) ? 1 : 0);
+  return res;  
+}
+
+
+SWIGRUNTIME PyTypeObject* SwigPyObject_TypeOnce(void);
+
+#ifdef SWIGPYTHON_BUILTIN
+static swig_type_info *SwigPyObject_stype = 0;
+SWIGRUNTIME PyTypeObject*
+SwigPyObject_type(void) {
+    SwigPyClientData *cd;
+    assert(SwigPyObject_stype);
+    cd = (SwigPyClientData*) SwigPyObject_stype->clientdata;
+    assert(cd);
+    assert(cd->pytype);
+    return cd->pytype;
+}
+#else
+SWIGRUNTIME PyTypeObject*
+SwigPyObject_type(void) {
+  static PyTypeObject *SWIG_STATIC_POINTER(type) = SwigPyObject_TypeOnce();
+  return type;
+}
+#endif
+
+SWIGRUNTIMEINLINE int
+SwigPyObject_Check(PyObject *op) {
+#ifdef SWIGPYTHON_BUILTIN
+  PyTypeObject *target_tp = SwigPyObject_type();
+  if (PyType_IsSubtype(op->ob_type, target_tp))
+    return 1;
+  return (strcmp(op->ob_type->tp_name, "SwigPyObject") == 0);
+#else
+  return (Py_TYPE(op) == SwigPyObject_type())
+    || (strcmp(Py_TYPE(op)->tp_name,"SwigPyObject") == 0);
+#endif
+}
+
+SWIGRUNTIME PyObject *
+SwigPyObject_New(void *ptr, swig_type_info *ty, int own);
+
+SWIGRUNTIME void
+SwigPyObject_dealloc(PyObject *v)
+{
+  SwigPyObject *sobj = (SwigPyObject *) v;
+  PyObject *next = sobj->next;
+  if (sobj->own == SWIG_POINTER_OWN) {
+    swig_type_info *ty = sobj->ty;
+    SwigPyClientData *data = ty ? (SwigPyClientData *) ty->clientdata : 0;
+    PyObject *destroy = data ? data->destroy : 0;
+    if (destroy) {
+      /* destroy is always a VARARGS method */
+      PyObject *res;
+
+      /* PyObject_CallFunction() has the potential to silently drop
+         the active active exception.  In cases of unnamed temporary
+         variable or where we just finished iterating over a generator
+         StopIteration will be active right now, and this needs to
+         remain true upon return from SwigPyObject_dealloc.  So save
+         and restore. */
+      
+      PyObject *val = NULL, *type = NULL, *tb = NULL;
+      PyErr_Fetch(&val, &type, &tb);
+
+      if (data->delargs) {
+        /* we need to create a temporary object to carry the destroy operation */
+        PyObject *tmp = SwigPyObject_New(sobj->ptr, ty, 0);
+        res = SWIG_Python_CallFunctor(destroy, tmp);
+        Py_DECREF(tmp);
+      } else {
+        PyCFunction meth = PyCFunction_GET_FUNCTION(destroy);
+        PyObject *mself = PyCFunction_GET_SELF(destroy);
+        res = ((*meth)(mself, v));
+      }
+      if (!res)
+        PyErr_WriteUnraisable(destroy);
+
+      PyErr_Restore(val, type, tb);
+
+      Py_XDECREF(res);
+    } 
+#if !defined(SWIG_PYTHON_SILENT_MEMLEAK)
+    else {
+      const char *name = SWIG_TypePrettyName(ty);
+      printf("swig/python detected a memory leak of type '%s', no destructor found.\n", (name ? name : "unknown"));
+    }
+#endif
+  } 
+  Py_XDECREF(next);
+  PyObject_DEL(v);
+}
+
+SWIGRUNTIME PyObject* 
+SwigPyObject_append(PyObject* v, PyObject* next)
+{
+  SwigPyObject *sobj = (SwigPyObject *) v;
+#ifndef METH_O
+  PyObject *tmp = 0;
+  if (!PyArg_ParseTuple(next,(char *)"O:append", &tmp)) return NULL;
+  next = tmp;
+#endif
+  if (!SwigPyObject_Check(next)) {
+    PyErr_SetString(PyExc_TypeError, "Attempt to append a non SwigPyObject");
+    return NULL;
+  }
+  sobj->next = next;
+  Py_INCREF(next);
+  return SWIG_Py_Void();
+}
+
+SWIGRUNTIME PyObject* 
+#ifdef METH_NOARGS
+SwigPyObject_next(PyObject* v)
+#else
+SwigPyObject_next(PyObject* v, PyObject *SWIGUNUSEDPARM(args))
+#endif
+{
+  SwigPyObject *sobj = (SwigPyObject *) v;
+  if (sobj->next) {    
+    Py_INCREF(sobj->next);
+    return sobj->next;
+  } else {
+    return SWIG_Py_Void();
+  }
+}
+
+SWIGINTERN PyObject*
+#ifdef METH_NOARGS
+SwigPyObject_disown(PyObject *v)
+#else
+SwigPyObject_disown(PyObject* v, PyObject *SWIGUNUSEDPARM(args))
+#endif
+{
+  SwigPyObject *sobj = (SwigPyObject *)v;
+  sobj->own = 0;
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject*
+#ifdef METH_NOARGS
+SwigPyObject_acquire(PyObject *v)
+#else
+SwigPyObject_acquire(PyObject* v, PyObject *SWIGUNUSEDPARM(args))
+#endif
+{
+  SwigPyObject *sobj = (SwigPyObject *)v;
+  sobj->own = SWIG_POINTER_OWN;
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject*
+SwigPyObject_own(PyObject *v, PyObject *args)
+{
+  PyObject *val = 0;
+#if (PY_VERSION_HEX < 0x02020000)
+  if (!PyArg_ParseTuple(args,(char *)"|O:own",&val))
+#elif (PY_VERSION_HEX < 0x02050000)
+  if (!PyArg_UnpackTuple(args, (char *)"own", 0, 1, &val)) 
+#else
+  if (!PyArg_UnpackTuple(args, "own", 0, 1, &val)) 
+#endif
+    {
+      return NULL;
+    } 
+  else
+    {
+      SwigPyObject *sobj = (SwigPyObject *)v;
+      PyObject *obj = PyBool_FromLong(sobj->own);
+      if (val) {
+#ifdef METH_NOARGS
+	if (PyObject_IsTrue(val)) {
+	  SwigPyObject_acquire(v);
+	} else {
+	  SwigPyObject_disown(v);
+	}
+#else
+	if (PyObject_IsTrue(val)) {
+	  SwigPyObject_acquire(v,args);
+	} else {
+	  SwigPyObject_disown(v,args);
+	}
+#endif
+      } 
+      return obj;
+    }
+}
+
+#ifdef METH_O
+static PyMethodDef
+swigobject_methods[] = {
+  {(char *)"disown",  (PyCFunction)SwigPyObject_disown,  METH_NOARGS,  (char *)"releases ownership of the pointer"},
+  {(char *)"acquire", (PyCFunction)SwigPyObject_acquire, METH_NOARGS,  (char *)"acquires ownership of the pointer"},
+  {(char *)"own",     (PyCFunction)SwigPyObject_own,     METH_VARARGS, (char *)"returns/sets ownership of the pointer"},
+  {(char *)"append",  (PyCFunction)SwigPyObject_append,  METH_O,       (char *)"appends another 'this' object"},
+  {(char *)"next",    (PyCFunction)SwigPyObject_next,    METH_NOARGS,  (char *)"returns the next 'this' object"},
+  {(char *)"__repr__",(PyCFunction)SwigPyObject_repr,    METH_NOARGS,  (char *)"returns object representation"},
+  {0, 0, 0, 0}  
+};
+#else
+static PyMethodDef
+swigobject_methods[] = {
+  {(char *)"disown",  (PyCFunction)SwigPyObject_disown,  METH_VARARGS,  (char *)"releases ownership of the pointer"},
+  {(char *)"acquire", (PyCFunction)SwigPyObject_acquire, METH_VARARGS,  (char *)"acquires ownership of the pointer"},
+  {(char *)"own",     (PyCFunction)SwigPyObject_own,     METH_VARARGS,  (char *)"returns/sets ownership of the pointer"},
+  {(char *)"append",  (PyCFunction)SwigPyObject_append,  METH_VARARGS,  (char *)"appends another 'this' object"},
+  {(char *)"next",    (PyCFunction)SwigPyObject_next,    METH_VARARGS,  (char *)"returns the next 'this' object"},
+  {(char *)"__repr__",(PyCFunction)SwigPyObject_repr,   METH_VARARGS,  (char *)"returns object representation"},
+  {0, 0, 0, 0}  
+};
+#endif
+
+#if PY_VERSION_HEX < 0x02020000
+SWIGINTERN PyObject *
+SwigPyObject_getattr(SwigPyObject *sobj,char *name)
+{
+  return Py_FindMethod(swigobject_methods, (PyObject *)sobj, name);
+}
+#endif
+
+SWIGRUNTIME PyTypeObject*
+SwigPyObject_TypeOnce(void) {
+  static char swigobject_doc[] = "Swig object carries a C/C++ instance pointer";
+
+  static PyNumberMethods SwigPyObject_as_number = {
+    (binaryfunc)0, /*nb_add*/
+    (binaryfunc)0, /*nb_subtract*/
+    (binaryfunc)0, /*nb_multiply*/
+    /* nb_divide removed in Python 3 */
+#if PY_VERSION_HEX < 0x03000000
+    (binaryfunc)0, /*nb_divide*/
+#endif
+    (binaryfunc)0, /*nb_remainder*/
+    (binaryfunc)0, /*nb_divmod*/
+    (ternaryfunc)0,/*nb_power*/
+    (unaryfunc)0,  /*nb_negative*/
+    (unaryfunc)0,  /*nb_positive*/
+    (unaryfunc)0,  /*nb_absolute*/
+    (inquiry)0,    /*nb_nonzero*/
+    0,		   /*nb_invert*/
+    0,		   /*nb_lshift*/
+    0,		   /*nb_rshift*/
+    0,		   /*nb_and*/
+    0,		   /*nb_xor*/
+    0,		   /*nb_or*/
+#if PY_VERSION_HEX < 0x03000000
+    0,   /*nb_coerce*/
+#endif
+    (unaryfunc)SwigPyObject_long, /*nb_int*/
+#if PY_VERSION_HEX < 0x03000000
+    (unaryfunc)SwigPyObject_long, /*nb_long*/
+#else
+    0, /*nb_reserved*/
+#endif
+    (unaryfunc)0,                 /*nb_float*/
+#if PY_VERSION_HEX < 0x03000000
+    (unaryfunc)SwigPyObject_oct,  /*nb_oct*/
+    (unaryfunc)SwigPyObject_hex,  /*nb_hex*/
+#endif
+#if PY_VERSION_HEX >= 0x03050000 /* 3.5 */
+    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* nb_inplace_add -> nb_inplace_matrix_multiply */
+#elif PY_VERSION_HEX >= 0x03000000 /* 3.0 */
+    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* nb_inplace_add -> nb_index, nb_inplace_divide removed */
+#elif PY_VERSION_HEX >= 0x02050000 /* 2.5.0 */
+    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* nb_inplace_add -> nb_index */
+#elif PY_VERSION_HEX >= 0x02020000 /* 2.2.0 */
+    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* nb_inplace_add -> nb_inplace_true_divide */
+#elif PY_VERSION_HEX >= 0x02000000 /* 2.0.0 */
+    0,0,0,0,0,0,0,0,0,0,0 /* nb_inplace_add -> nb_inplace_or */
+#endif
+  };
+
+  static PyTypeObject swigpyobject_type;
+  static int type_init = 0;
+  if (!type_init) {
+    const PyTypeObject tmp = {
+#if PY_VERSION_HEX >= 0x03000000
+      PyVarObject_HEAD_INIT(NULL, 0)
+#else
+      PyObject_HEAD_INIT(NULL)
+      0,                                    /* ob_size */
+#endif
+      (char *)"SwigPyObject",               /* tp_name */
+      sizeof(SwigPyObject),                 /* tp_basicsize */
+      0,                                    /* tp_itemsize */
+      (destructor)SwigPyObject_dealloc,     /* tp_dealloc */
+      0,                                    /* tp_print */
+#if PY_VERSION_HEX < 0x02020000
+      (getattrfunc)SwigPyObject_getattr,    /* tp_getattr */
+#else
+      (getattrfunc)0,                       /* tp_getattr */
+#endif
+      (setattrfunc)0,                       /* tp_setattr */
+#if PY_VERSION_HEX >= 0x03000000
+      0, /* tp_reserved in 3.0.1, tp_compare in 3.0.0 but not used */
+#else
+      (cmpfunc)SwigPyObject_compare,        /* tp_compare */
+#endif
+      (reprfunc)SwigPyObject_repr,          /* tp_repr */
+      &SwigPyObject_as_number,              /* tp_as_number */
+      0,                                    /* tp_as_sequence */
+      0,                                    /* tp_as_mapping */
+      (hashfunc)0,                          /* tp_hash */
+      (ternaryfunc)0,                       /* tp_call */
+      0,                                    /* tp_str */
+      PyObject_GenericGetAttr,              /* tp_getattro */
+      0,                                    /* tp_setattro */
+      0,                                    /* tp_as_buffer */
+      Py_TPFLAGS_DEFAULT,                   /* tp_flags */
+      swigobject_doc,                       /* tp_doc */
+      0,                                    /* tp_traverse */
+      0,                                    /* tp_clear */
+      (richcmpfunc)SwigPyObject_richcompare,/* tp_richcompare */
+      0,                                    /* tp_weaklistoffset */
+#if PY_VERSION_HEX >= 0x02020000
+      0,                                    /* tp_iter */
+      0,                                    /* tp_iternext */
+      swigobject_methods,                   /* tp_methods */
+      0,                                    /* tp_members */
+      0,                                    /* tp_getset */
+      0,                                    /* tp_base */
+      0,                                    /* tp_dict */
+      0,                                    /* tp_descr_get */
+      0,                                    /* tp_descr_set */
+      0,                                    /* tp_dictoffset */
+      0,                                    /* tp_init */
+      0,                                    /* tp_alloc */
+      0,                                    /* tp_new */
+      0,                                    /* tp_free */
+      0,                                    /* tp_is_gc */
+      0,                                    /* tp_bases */
+      0,                                    /* tp_mro */
+      0,                                    /* tp_cache */
+      0,                                    /* tp_subclasses */
+      0,                                    /* tp_weaklist */
+#endif
+#if PY_VERSION_HEX >= 0x02030000
+      0,                                    /* tp_del */
+#endif
+#if PY_VERSION_HEX >= 0x02060000
+      0,                                    /* tp_version_tag */
+#endif
+#if PY_VERSION_HEX >= 0x03040000
+      0,                                    /* tp_finalize */
+#endif
+#ifdef COUNT_ALLOCS
+      0,                                    /* tp_allocs */
+      0,                                    /* tp_frees */
+      0,                                    /* tp_maxalloc */
+#if PY_VERSION_HEX >= 0x02050000
+      0,                                    /* tp_prev */
+#endif
+      0                                     /* tp_next */
+#endif
+    };
+    swigpyobject_type = tmp;
+    type_init = 1;
+#if PY_VERSION_HEX < 0x02020000
+    swigpyobject_type.ob_type = &PyType_Type;
+#else
+    if (PyType_Ready(&swigpyobject_type) < 0)
+      return NULL;
+#endif
+  }
+  return &swigpyobject_type;
+}
+
+SWIGRUNTIME PyObject *
+SwigPyObject_New(void *ptr, swig_type_info *ty, int own)
+{
+  SwigPyObject *sobj = PyObject_NEW(SwigPyObject, SwigPyObject_type());
+  if (sobj) {
+    sobj->ptr  = ptr;
+    sobj->ty   = ty;
+    sobj->own  = own;
+    sobj->next = 0;
+  }
+  return (PyObject *)sobj;
+}
+
+/* -----------------------------------------------------------------------------
+ * Implements a simple Swig Packed type, and use it instead of string
+ * ----------------------------------------------------------------------------- */
+
+typedef struct {
+  PyObject_HEAD
+  void *pack;
+  swig_type_info *ty;
+  size_t size;
+} SwigPyPacked;
+
+SWIGRUNTIME int
+SwigPyPacked_print(SwigPyPacked *v, FILE *fp, int SWIGUNUSEDPARM(flags))
+{
+  char result[SWIG_BUFFER_SIZE];
+  fputs("<Swig Packed ", fp); 
+  if (SWIG_PackDataName(result, v->pack, v->size, 0, sizeof(result))) {
+    fputs("at ", fp); 
+    fputs(result, fp); 
+  }
+  fputs(v->ty->name,fp); 
+  fputs(">", fp);
+  return 0; 
+}
+  
+SWIGRUNTIME PyObject *
+SwigPyPacked_repr(SwigPyPacked *v)
+{
+  char result[SWIG_BUFFER_SIZE];
+  if (SWIG_PackDataName(result, v->pack, v->size, 0, sizeof(result))) {
+    return SWIG_Python_str_FromFormat("<Swig Packed at %s%s>", result, v->ty->name);
+  } else {
+    return SWIG_Python_str_FromFormat("<Swig Packed %s>", v->ty->name);
+  }  
+}
+
+SWIGRUNTIME PyObject *
+SwigPyPacked_str(SwigPyPacked *v)
+{
+  char result[SWIG_BUFFER_SIZE];
+  if (SWIG_PackDataName(result, v->pack, v->size, 0, sizeof(result))){
+    return SWIG_Python_str_FromFormat("%s%s", result, v->ty->name);
+  } else {
+    return SWIG_Python_str_FromChar(v->ty->name);
+  }  
+}
+
+SWIGRUNTIME int
+SwigPyPacked_compare(SwigPyPacked *v, SwigPyPacked *w)
+{
+  size_t i = v->size;
+  size_t j = w->size;
+  int s = (i < j) ? -1 : ((i > j) ? 1 : 0);
+  return s ? s : strncmp((char *)v->pack, (char *)w->pack, 2*v->size);
+}
+
+SWIGRUNTIME PyTypeObject* SwigPyPacked_TypeOnce(void);
+
+SWIGRUNTIME PyTypeObject*
+SwigPyPacked_type(void) {
+  static PyTypeObject *SWIG_STATIC_POINTER(type) = SwigPyPacked_TypeOnce();
+  return type;
+}
+
+SWIGRUNTIMEINLINE int
+SwigPyPacked_Check(PyObject *op) {
+  return ((op)->ob_type == SwigPyPacked_TypeOnce()) 
+    || (strcmp((op)->ob_type->tp_name,"SwigPyPacked") == 0);
+}
+
+SWIGRUNTIME void
+SwigPyPacked_dealloc(PyObject *v)
+{
+  if (SwigPyPacked_Check(v)) {
+    SwigPyPacked *sobj = (SwigPyPacked *) v;
+    free(sobj->pack);
+  }
+  PyObject_DEL(v);
+}
+
+SWIGRUNTIME PyTypeObject*
+SwigPyPacked_TypeOnce(void) {
+  static char swigpacked_doc[] = "Swig object carries a C/C++ instance pointer";
+  static PyTypeObject swigpypacked_type;
+  static int type_init = 0;
+  if (!type_init) {
+    const PyTypeObject tmp = {
+#if PY_VERSION_HEX>=0x03000000
+      PyVarObject_HEAD_INIT(NULL, 0)
+#else
+      PyObject_HEAD_INIT(NULL)
+      0,                                    /* ob_size */
+#endif
+      (char *)"SwigPyPacked",               /* tp_name */
+      sizeof(SwigPyPacked),                 /* tp_basicsize */
+      0,                                    /* tp_itemsize */
+      (destructor)SwigPyPacked_dealloc,     /* tp_dealloc */
+      (printfunc)SwigPyPacked_print,        /* tp_print */
+      (getattrfunc)0,                       /* tp_getattr */
+      (setattrfunc)0,                       /* tp_setattr */
+#if PY_VERSION_HEX>=0x03000000
+      0, /* tp_reserved in 3.0.1 */
+#else
+      (cmpfunc)SwigPyPacked_compare,        /* tp_compare */
+#endif
+      (reprfunc)SwigPyPacked_repr,          /* tp_repr */
+      0,                                    /* tp_as_number */
+      0,                                    /* tp_as_sequence */
+      0,                                    /* tp_as_mapping */
+      (hashfunc)0,                          /* tp_hash */
+      (ternaryfunc)0,                       /* tp_call */
+      (reprfunc)SwigPyPacked_str,           /* tp_str */
+      PyObject_GenericGetAttr,              /* tp_getattro */
+      0,                                    /* tp_setattro */
+      0,                                    /* tp_as_buffer */
+      Py_TPFLAGS_DEFAULT,                   /* tp_flags */
+      swigpacked_doc,                       /* tp_doc */
+      0,                                    /* tp_traverse */
+      0,                                    /* tp_clear */
+      0,                                    /* tp_richcompare */
+      0,                                    /* tp_weaklistoffset */
+#if PY_VERSION_HEX >= 0x02020000
+      0,                                    /* tp_iter */
+      0,                                    /* tp_iternext */
+      0,                                    /* tp_methods */
+      0,                                    /* tp_members */
+      0,                                    /* tp_getset */
+      0,                                    /* tp_base */
+      0,                                    /* tp_dict */
+      0,                                    /* tp_descr_get */
+      0,                                    /* tp_descr_set */
+      0,                                    /* tp_dictoffset */
+      0,                                    /* tp_init */
+      0,                                    /* tp_alloc */
+      0,                                    /* tp_new */
+      0,                                    /* tp_free */
+      0,                                    /* tp_is_gc */
+      0,                                    /* tp_bases */
+      0,                                    /* tp_mro */
+      0,                                    /* tp_cache */
+      0,                                    /* tp_subclasses */
+      0,                                    /* tp_weaklist */
+#endif
+#if PY_VERSION_HEX >= 0x02030000
+      0,                                    /* tp_del */
+#endif
+#if PY_VERSION_HEX >= 0x02060000
+      0,                                    /* tp_version_tag */
+#endif
+#if PY_VERSION_HEX >= 0x03040000
+      0,                                    /* tp_finalize */
+#endif
+#ifdef COUNT_ALLOCS
+      0,                                    /* tp_allocs */
+      0,                                    /* tp_frees */
+      0,                                    /* tp_maxalloc */
+#if PY_VERSION_HEX >= 0x02050000
+      0,                                    /* tp_prev */
+#endif
+      0                                     /* tp_next */
+#endif
+    };
+    swigpypacked_type = tmp;
+    type_init = 1;
+#if PY_VERSION_HEX < 0x02020000
+    swigpypacked_type.ob_type = &PyType_Type;
+#else
+    if (PyType_Ready(&swigpypacked_type) < 0)
+      return NULL;
+#endif
+  }
+  return &swigpypacked_type;
+}
+
+SWIGRUNTIME PyObject *
+SwigPyPacked_New(void *ptr, size_t size, swig_type_info *ty)
+{
+  SwigPyPacked *sobj = PyObject_NEW(SwigPyPacked, SwigPyPacked_type());
+  if (sobj) {
+    void *pack = malloc(size);
+    if (pack) {
+      memcpy(pack, ptr, size);
+      sobj->pack = pack;
+      sobj->ty   = ty;
+      sobj->size = size;
+    } else {
+      PyObject_DEL((PyObject *) sobj);
+      sobj = 0;
+    }
+  }
+  return (PyObject *) sobj;
+}
+
+SWIGRUNTIME swig_type_info *
+SwigPyPacked_UnpackData(PyObject *obj, void *ptr, size_t size)
+{
+  if (SwigPyPacked_Check(obj)) {
+    SwigPyPacked *sobj = (SwigPyPacked *)obj;
+    if (sobj->size != size) return 0;
+    memcpy(ptr, sobj->pack, size);
+    return sobj->ty;
+  } else {
+    return 0;
+  }
+}
+
+/* -----------------------------------------------------------------------------
+ * pointers/data manipulation
+ * ----------------------------------------------------------------------------- */
+
+SWIGRUNTIMEINLINE PyObject *
+_SWIG_This(void)
+{
+    return SWIG_Python_str_FromChar("this");
+}
+
+static PyObject *swig_this = NULL;
+
+SWIGRUNTIME PyObject *
+SWIG_This(void)
+{
+  if (swig_this == NULL)
+    swig_this = _SWIG_This();
+  return swig_this;
+}
+
+/* #define SWIG_PYTHON_SLOW_GETSET_THIS */
+
+/* TODO: I don't know how to implement the fast getset in Python 3 right now */
+#if PY_VERSION_HEX>=0x03000000
+#define SWIG_PYTHON_SLOW_GETSET_THIS 
+#endif
+
+SWIGRUNTIME SwigPyObject *
+SWIG_Python_GetSwigThis(PyObject *pyobj) 
+{
+  PyObject *obj;
+
+  if (SwigPyObject_Check(pyobj))
+    return (SwigPyObject *) pyobj;
+
+#ifdef SWIGPYTHON_BUILTIN
+  (void)obj;
+# ifdef PyWeakref_CheckProxy
+  if (PyWeakref_CheckProxy(pyobj)) {
+    pyobj = PyWeakref_GET_OBJECT(pyobj);
+    if (pyobj && SwigPyObject_Check(pyobj))
+      return (SwigPyObject*) pyobj;
+  }
+# endif
+  return NULL;
+#else
+
+  obj = 0;
+
+#if (!defined(SWIG_PYTHON_SLOW_GETSET_THIS) && (PY_VERSION_HEX >= 0x02030000))
+  if (PyInstance_Check(pyobj)) {
+    obj = _PyInstance_Lookup(pyobj, SWIG_This());      
+  } else {
+    PyObject **dictptr = _PyObject_GetDictPtr(pyobj);
+    if (dictptr != NULL) {
+      PyObject *dict = *dictptr;
+      obj = dict ? PyDict_GetItem(dict, SWIG_This()) : 0;
+    } else {
+#ifdef PyWeakref_CheckProxy
+      if (PyWeakref_CheckProxy(pyobj)) {
+	PyObject *wobj = PyWeakref_GET_OBJECT(pyobj);
+	return wobj ? SWIG_Python_GetSwigThis(wobj) : 0;
+      }
+#endif
+      obj = PyObject_GetAttr(pyobj,SWIG_This());
+      if (obj) {
+	Py_DECREF(obj);
+      } else {
+	if (PyErr_Occurred()) PyErr_Clear();
+	return 0;
+      }
+    }
+  }
+#else
+  obj = PyObject_GetAttr(pyobj,SWIG_This());
+  if (obj) {
+    Py_DECREF(obj);
+  } else {
+    if (PyErr_Occurred()) PyErr_Clear();
+    return 0;
+  }
+#endif
+  if (obj && !SwigPyObject_Check(obj)) {
+    /* a PyObject is called 'this', try to get the 'real this'
+       SwigPyObject from it */ 
+    return SWIG_Python_GetSwigThis(obj);
+  }
+  return (SwigPyObject *)obj;
+#endif
+}
+
+/* Acquire a pointer value */
+
+SWIGRUNTIME int
+SWIG_Python_AcquirePtr(PyObject *obj, int own) {
+  if (own == SWIG_POINTER_OWN) {
+    SwigPyObject *sobj = SWIG_Python_GetSwigThis(obj);
+    if (sobj) {
+      int oldown = sobj->own;
+      sobj->own = own;
+      return oldown;
+    }
+  }
+  return 0;
+}
+
+/* Convert a pointer value */
+
+SWIGRUNTIME int
+SWIG_Python_ConvertPtrAndOwn(PyObject *obj, void **ptr, swig_type_info *ty, int flags, int *own) {
+  int res;
+  SwigPyObject *sobj;
+  int implicit_conv = (flags & SWIG_POINTER_IMPLICIT_CONV) != 0;
+
+  if (!obj)
+    return SWIG_ERROR;
+  if (obj == Py_None && !implicit_conv) {
+    if (ptr)
+      *ptr = 0;
+    return SWIG_OK;
+  }
+
+  res = SWIG_ERROR;
+
+  sobj = SWIG_Python_GetSwigThis(obj);
+  if (own)
+    *own = 0;
+  while (sobj) {
+    void *vptr = sobj->ptr;
+    if (ty) {
+      swig_type_info *to = sobj->ty;
+      if (to == ty) {
+        /* no type cast needed */
+        if (ptr) *ptr = vptr;
+        break;
+      } else {
+        swig_cast_info *tc = SWIG_TypeCheck(to->name,ty);
+        if (!tc) {
+          sobj = (SwigPyObject *)sobj->next;
+        } else {
+          if (ptr) {
+            int newmemory = 0;
+            *ptr = SWIG_TypeCast(tc,vptr,&newmemory);
+            if (newmemory == SWIG_CAST_NEW_MEMORY) {
+              assert(own); /* badly formed typemap which will lead to a memory leak - it must set and use own to delete *ptr */
+              if (own)
+                *own = *own | SWIG_CAST_NEW_MEMORY;
+            }
+          }
+          break;
+        }
+      }
+    } else {
+      if (ptr) *ptr = vptr;
+      break;
+    }
+  }
+  if (sobj) {
+    if (own)
+      *own = *own | sobj->own;
+    if (flags & SWIG_POINTER_DISOWN) {
+      sobj->own = 0;
+    }
+    res = SWIG_OK;
+  } else {
+    if (implicit_conv) {
+      SwigPyClientData *data = ty ? (SwigPyClientData *) ty->clientdata : 0;
+      if (data && !data->implicitconv) {
+        PyObject *klass = data->klass;
+        if (klass) {
+          PyObject *impconv;
+          data->implicitconv = 1; /* avoid recursion and call 'explicit' constructors*/
+          impconv = SWIG_Python_CallFunctor(klass, obj);
+          data->implicitconv = 0;
+          if (PyErr_Occurred()) {
+            PyErr_Clear();
+            impconv = 0;
+          }
+          if (impconv) {
+            SwigPyObject *iobj = SWIG_Python_GetSwigThis(impconv);
+            if (iobj) {
+              void *vptr;
+              res = SWIG_Python_ConvertPtrAndOwn((PyObject*)iobj, &vptr, ty, 0, 0);
+              if (SWIG_IsOK(res)) {
+                if (ptr) {
+                  *ptr = vptr;
+                  /* transfer the ownership to 'ptr' */
+                  iobj->own = 0;
+                  res = SWIG_AddCast(res);
+                  res = SWIG_AddNewMask(res);
+                } else {
+                  res = SWIG_AddCast(res);		    
+                }
+              }
+            }
+            Py_DECREF(impconv);
+          }
+        }
+      }
+    }
+    if (!SWIG_IsOK(res) && obj == Py_None) {
+      if (ptr)
+        *ptr = 0;
+      if (PyErr_Occurred())
+        PyErr_Clear();
+      res = SWIG_OK;
+    }
+  }
+  return res;
+}
+
+/* Convert a function ptr value */
+
+SWIGRUNTIME int
+SWIG_Python_ConvertFunctionPtr(PyObject *obj, void **ptr, swig_type_info *ty) {
+  if (!PyCFunction_Check(obj)) {
+    return SWIG_ConvertPtr(obj, ptr, ty, 0);
+  } else {
+    void *vptr = 0;
+    
+    /* here we get the method pointer for callbacks */
+    const char *doc = (((PyCFunctionObject *)obj) -> m_ml -> ml_doc);
+    const char *desc = doc ? strstr(doc, "swig_ptr: ") : 0;
+    if (desc)
+      desc = ty ? SWIG_UnpackVoidPtr(desc + 10, &vptr, ty->name) : 0;
+    if (!desc) 
+      return SWIG_ERROR;
+    if (ty) {
+      swig_cast_info *tc = SWIG_TypeCheck(desc,ty);
+      if (tc) {
+        int newmemory = 0;
+        *ptr = SWIG_TypeCast(tc,vptr,&newmemory);
+        assert(!newmemory); /* newmemory handling not yet implemented */
+      } else {
+        return SWIG_ERROR;
+      }
+    } else {
+      *ptr = vptr;
+    }
+    return SWIG_OK;
+  }
+}
+
+/* Convert a packed value value */
+
+SWIGRUNTIME int
+SWIG_Python_ConvertPacked(PyObject *obj, void *ptr, size_t sz, swig_type_info *ty) {
+  swig_type_info *to = SwigPyPacked_UnpackData(obj, ptr, sz);
+  if (!to) return SWIG_ERROR;
+  if (ty) {
+    if (to != ty) {
+      /* check type cast? */
+      swig_cast_info *tc = SWIG_TypeCheck(to->name,ty);
+      if (!tc) return SWIG_ERROR;
+    }
+  }
+  return SWIG_OK;
+}  
+
+/* -----------------------------------------------------------------------------
+ * Create a new pointer object
+ * ----------------------------------------------------------------------------- */
+
+/*
+  Create a new instance object, without calling __init__, and set the
+  'this' attribute.
+*/
+
+SWIGRUNTIME PyObject* 
+SWIG_Python_NewShadowInstance(SwigPyClientData *data, PyObject *swig_this)
+{
+#if (PY_VERSION_HEX >= 0x02020000)
+  PyObject *inst = 0;
+  PyObject *newraw = data->newraw;
+  if (newraw) {
+    inst = PyObject_Call(newraw, data->newargs, NULL);
+    if (inst) {
+#if !defined(SWIG_PYTHON_SLOW_GETSET_THIS)
+      PyObject **dictptr = _PyObject_GetDictPtr(inst);
+      if (dictptr != NULL) {
+	PyObject *dict = *dictptr;
+	if (dict == NULL) {
+	  dict = PyDict_New();
+	  *dictptr = dict;
+	  PyDict_SetItem(dict, SWIG_This(), swig_this);
+	}
+      }
+#else
+      PyObject *key = SWIG_This();
+      PyObject_SetAttr(inst, key, swig_this);
+#endif
+    }
+  } else {
+#if PY_VERSION_HEX >= 0x03000000
+    inst = ((PyTypeObject*) data->newargs)->tp_new((PyTypeObject*) data->newargs, Py_None, Py_None);
+    if (inst) {
+      PyObject_SetAttr(inst, SWIG_This(), swig_this);
+      Py_TYPE(inst)->tp_flags &= ~Py_TPFLAGS_VALID_VERSION_TAG;
+    }
+#else
+    PyObject *dict = PyDict_New();
+    if (dict) {
+      PyDict_SetItem(dict, SWIG_This(), swig_this);
+      inst = PyInstance_NewRaw(data->newargs, dict);
+      Py_DECREF(dict);
+    }
+#endif
+  }
+  return inst;
+#else
+#if (PY_VERSION_HEX >= 0x02010000)
+  PyObject *inst = 0;
+  PyObject *dict = PyDict_New();
+  if (dict) {
+    PyDict_SetItem(dict, SWIG_This(), swig_this);
+    inst = PyInstance_NewRaw(data->newargs, dict);
+    Py_DECREF(dict);
+  }
+  return (PyObject *) inst;
+#else
+  PyInstanceObject *inst = PyObject_NEW(PyInstanceObject, &PyInstance_Type);
+  if (inst == NULL) {
+    return NULL;
+  }
+  inst->in_class = (PyClassObject *)data->newargs;
+  Py_INCREF(inst->in_class);
+  inst->in_dict = PyDict_New();
+  if (inst->in_dict == NULL) {
+    Py_DECREF(inst);
+    return NULL;
+  }
+#ifdef Py_TPFLAGS_HAVE_WEAKREFS
+  inst->in_weakreflist = NULL;
+#endif
+#ifdef Py_TPFLAGS_GC
+  PyObject_GC_Init(inst);
+#endif
+  PyDict_SetItem(inst->in_dict, SWIG_This(), swig_this);
+  return (PyObject *) inst;
+#endif
+#endif
+}
+
+SWIGRUNTIME void
+SWIG_Python_SetSwigThis(PyObject *inst, PyObject *swig_this)
+{
+ PyObject *dict;
+#if (PY_VERSION_HEX >= 0x02020000) && !defined(SWIG_PYTHON_SLOW_GETSET_THIS)
+ PyObject **dictptr = _PyObject_GetDictPtr(inst);
+ if (dictptr != NULL) {
+   dict = *dictptr;
+   if (dict == NULL) {
+     dict = PyDict_New();
+     *dictptr = dict;
+   }
+   PyDict_SetItem(dict, SWIG_This(), swig_this);
+   return;
+ }
+#endif
+ dict = PyObject_GetAttrString(inst, (char*)"__dict__");
+ PyDict_SetItem(dict, SWIG_This(), swig_this);
+ Py_DECREF(dict);
+} 
+
+
+SWIGINTERN PyObject *
+SWIG_Python_InitShadowInstance(PyObject *args) {
+  PyObject *obj[2];
+  if (!SWIG_Python_UnpackTuple(args, "swiginit", 2, 2, obj)) {
+    return NULL;
+  } else {
+    SwigPyObject *sthis = SWIG_Python_GetSwigThis(obj[0]);
+    if (sthis) {
+      SwigPyObject_append((PyObject*) sthis, obj[1]);
+    } else {
+      SWIG_Python_SetSwigThis(obj[0], obj[1]);
+    }
+    return SWIG_Py_Void();
+  }
+}
+
+/* Create a new pointer object */
+
+SWIGRUNTIME PyObject *
+SWIG_Python_NewPointerObj(PyObject *self, void *ptr, swig_type_info *type, int flags) {
+  SwigPyClientData *clientdata;
+  PyObject * robj;
+  int own;
+
+  if (!ptr)
+    return SWIG_Py_Void();
+
+  clientdata = type ? (SwigPyClientData *)(type->clientdata) : 0;
+  own = (flags & SWIG_POINTER_OWN) ? SWIG_POINTER_OWN : 0;
+  if (clientdata && clientdata->pytype) {
+    SwigPyObject *newobj;
+    if (flags & SWIG_BUILTIN_TP_INIT) {
+      newobj = (SwigPyObject*) self;
+      if (newobj->ptr) {
+        PyObject *next_self = clientdata->pytype->tp_alloc(clientdata->pytype, 0);
+        while (newobj->next)
+	  newobj = (SwigPyObject *) newobj->next;
+        newobj->next = next_self;
+        newobj = (SwigPyObject *)next_self;
+#ifdef SWIGPYTHON_BUILTIN
+        newobj->dict = 0;
+#endif
+      }
+    } else {
+      newobj = PyObject_New(SwigPyObject, clientdata->pytype);
+#ifdef SWIGPYTHON_BUILTIN
+      newobj->dict = 0;
+#endif
+    }
+    if (newobj) {
+      newobj->ptr = ptr;
+      newobj->ty = type;
+      newobj->own = own;
+      newobj->next = 0;
+      return (PyObject*) newobj;
+    }
+    return SWIG_Py_Void();
+  }
+
+  assert(!(flags & SWIG_BUILTIN_TP_INIT));
+
+  robj = SwigPyObject_New(ptr, type, own);
+  if (robj && clientdata && !(flags & SWIG_POINTER_NOSHADOW)) {
+    PyObject *inst = SWIG_Python_NewShadowInstance(clientdata, robj);
+    Py_DECREF(robj);
+    robj = inst;
+  }
+  return robj;
+}
+
+/* Create a new packed object */
+
+SWIGRUNTIMEINLINE PyObject *
+SWIG_Python_NewPackedObj(void *ptr, size_t sz, swig_type_info *type) {
+  return ptr ? SwigPyPacked_New((void *) ptr, sz, type) : SWIG_Py_Void();
+}
+
+/* -----------------------------------------------------------------------------*
+ *  Get type list 
+ * -----------------------------------------------------------------------------*/
+
+#ifdef SWIG_LINK_RUNTIME
+void *SWIG_ReturnGlobalTypeList(void *);
+#endif
+
+SWIGRUNTIME swig_module_info *
+SWIG_Python_GetModule(void *SWIGUNUSEDPARM(clientdata)) {
+  static void *type_pointer = (void *)0;
+  /* first check if module already created */
+  if (!type_pointer) {
+#ifdef SWIG_LINK_RUNTIME
+    type_pointer = SWIG_ReturnGlobalTypeList((void *)0);
+#else
+# ifdef SWIGPY_USE_CAPSULE
+    type_pointer = PyCapsule_Import(SWIGPY_CAPSULE_NAME, 0);
+# else
+    type_pointer = PyCObject_Import((char*)"swig_runtime_data" SWIG_RUNTIME_VERSION,
+				    (char*)"type_pointer" SWIG_TYPE_TABLE_NAME);
+# endif
+    if (PyErr_Occurred()) {
+      PyErr_Clear();
+      type_pointer = (void *)0;
+    }
+#endif
+  }
+  return (swig_module_info *) type_pointer;
+}
+
+#if PY_MAJOR_VERSION < 2
+/* PyModule_AddObject function was introduced in Python 2.0.  The following function
+   is copied out of Python/modsupport.c in python version 2.3.4 */
+SWIGINTERN int
+PyModule_AddObject(PyObject *m, char *name, PyObject *o)
+{
+  PyObject *dict;
+  if (!PyModule_Check(m)) {
+    PyErr_SetString(PyExc_TypeError, "PyModule_AddObject() needs module as first arg");
+    return SWIG_ERROR;
+  }
+  if (!o) {
+    PyErr_SetString(PyExc_TypeError, "PyModule_AddObject() needs non-NULL value");
+    return SWIG_ERROR;
+  }
+  
+  dict = PyModule_GetDict(m);
+  if (dict == NULL) {
+    /* Internal error -- modules must have a dict! */
+    PyErr_Format(PyExc_SystemError, "module '%s' has no __dict__",
+		 PyModule_GetName(m));
+    return SWIG_ERROR;
+  }
+  if (PyDict_SetItemString(dict, name, o))
+    return SWIG_ERROR;
+  Py_DECREF(o);
+  return SWIG_OK;
+}
+#endif
+
+SWIGRUNTIME void
+#ifdef SWIGPY_USE_CAPSULE
+SWIG_Python_DestroyModule(PyObject *obj)
+#else
+SWIG_Python_DestroyModule(void *vptr)
+#endif
+{
+#ifdef SWIGPY_USE_CAPSULE
+  swig_module_info *swig_module = (swig_module_info *) PyCapsule_GetPointer(obj, SWIGPY_CAPSULE_NAME);
+#else
+  swig_module_info *swig_module = (swig_module_info *) vptr;
+#endif
+  swig_type_info **types = swig_module->types;
+  size_t i;
+  for (i =0; i < swig_module->size; ++i) {
+    swig_type_info *ty = types[i];
+    if (ty->owndata) {
+      SwigPyClientData *data = (SwigPyClientData *) ty->clientdata;
+      if (data) SwigPyClientData_Del(data);
+    }
+  }
+  Py_DECREF(SWIG_This());
+  swig_this = NULL;
+}
+
+SWIGRUNTIME void
+SWIG_Python_SetModule(swig_module_info *swig_module) {
+#if PY_VERSION_HEX >= 0x03000000
+ /* Add a dummy module object into sys.modules */
+  PyObject *module = PyImport_AddModule((char*)"swig_runtime_data" SWIG_RUNTIME_VERSION);
+#else
+  static PyMethodDef swig_empty_runtime_method_table[] = { {NULL, NULL, 0, NULL} }; /* Sentinel */
+  PyObject *module = Py_InitModule((char*)"swig_runtime_data" SWIG_RUNTIME_VERSION, swig_empty_runtime_method_table);
+#endif
+#ifdef SWIGPY_USE_CAPSULE
+  PyObject *pointer = PyCapsule_New((void *) swig_module, SWIGPY_CAPSULE_NAME, SWIG_Python_DestroyModule);
+  if (pointer && module) {
+    PyModule_AddObject(module, (char*)"type_pointer_capsule" SWIG_TYPE_TABLE_NAME, pointer);
+  } else {
+    Py_XDECREF(pointer);
+  }
+#else
+  PyObject *pointer = PyCObject_FromVoidPtr((void *) swig_module, SWIG_Python_DestroyModule);
+  if (pointer && module) {
+    PyModule_AddObject(module, (char*)"type_pointer" SWIG_TYPE_TABLE_NAME, pointer);
+  } else {
+    Py_XDECREF(pointer);
+  }
+#endif
+}
+
+/* The python cached type query */
+SWIGRUNTIME PyObject *
+SWIG_Python_TypeCache(void) {
+  static PyObject *SWIG_STATIC_POINTER(cache) = PyDict_New();
+  return cache;
+}
+
+SWIGRUNTIME swig_type_info *
+SWIG_Python_TypeQuery(const char *type)
+{
+  PyObject *cache = SWIG_Python_TypeCache();
+  PyObject *key = SWIG_Python_str_FromChar(type); 
+  PyObject *obj = PyDict_GetItem(cache, key);
+  swig_type_info *descriptor;
+  if (obj) {
+#ifdef SWIGPY_USE_CAPSULE
+    descriptor = (swig_type_info *) PyCapsule_GetPointer(obj, NULL);
+#else
+    descriptor = (swig_type_info *) PyCObject_AsVoidPtr(obj);
+#endif
+  } else {
+    swig_module_info *swig_module = SWIG_GetModule(0);
+    descriptor = SWIG_TypeQueryModule(swig_module, swig_module, type);
+    if (descriptor) {
+#ifdef SWIGPY_USE_CAPSULE
+      obj = PyCapsule_New((void*) descriptor, NULL, NULL);
+#else
+      obj = PyCObject_FromVoidPtr(descriptor, NULL);
+#endif
+      PyDict_SetItem(cache, key, obj);
+      Py_DECREF(obj);
+    }
+  }
+  Py_DECREF(key);
+  return descriptor;
+}
+
+/* 
+   For backward compatibility only
+*/
+#define SWIG_POINTER_EXCEPTION  0
+#define SWIG_arg_fail(arg)      SWIG_Python_ArgFail(arg)
+#define SWIG_MustGetPtr(p, type, argnum, flags)  SWIG_Python_MustGetPtr(p, type, argnum, flags)
+
+SWIGRUNTIME int
+SWIG_Python_AddErrMesg(const char* mesg, int infront)
+{  
+  if (PyErr_Occurred()) {
+    PyObject *type = 0;
+    PyObject *value = 0;
+    PyObject *traceback = 0;
+    PyErr_Fetch(&type, &value, &traceback);
+    if (value) {
+      char *tmp;
+      PyObject *old_str = PyObject_Str(value);
+      Py_XINCREF(type);
+      PyErr_Clear();
+      if (infront) {
+	PyErr_Format(type, "%s %s", mesg, tmp = SWIG_Python_str_AsChar(old_str));
+      } else {
+	PyErr_Format(type, "%s %s", tmp = SWIG_Python_str_AsChar(old_str), mesg);
+      }
+      SWIG_Python_str_DelForPy3(tmp);
+      Py_DECREF(old_str);
+    }
+    return 1;
+  } else {
+    return 0;
+  }
+}
+  
+SWIGRUNTIME int
+SWIG_Python_ArgFail(int argnum)
+{
+  if (PyErr_Occurred()) {
+    /* add information about failing argument */
+    char mesg[256];
+    PyOS_snprintf(mesg, sizeof(mesg), "argument number %d:", argnum);
+    return SWIG_Python_AddErrMesg(mesg, 1);
+  } else {
+    return 0;
+  }
+}
+
+SWIGRUNTIMEINLINE const char *
+SwigPyObject_GetDesc(PyObject *self)
+{
+  SwigPyObject *v = (SwigPyObject *)self;
+  swig_type_info *ty = v ? v->ty : 0;
+  return ty ? ty->str : "";
+}
+
+SWIGRUNTIME void
+SWIG_Python_TypeError(const char *type, PyObject *obj)
+{
+  if (type) {
+#if defined(SWIG_COBJECT_TYPES)
+    if (obj && SwigPyObject_Check(obj)) {
+      const char *otype = (const char *) SwigPyObject_GetDesc(obj);
+      if (otype) {
+	PyErr_Format(PyExc_TypeError, "a '%s' is expected, 'SwigPyObject(%s)' is received",
+		     type, otype);
+	return;
+      }
+    } else 
+#endif      
+    {
+      const char *otype = (obj ? obj->ob_type->tp_name : 0); 
+      if (otype) {
+	PyObject *str = PyObject_Str(obj);
+	const char *cstr = str ? SWIG_Python_str_AsChar(str) : 0;
+	if (cstr) {
+	  PyErr_Format(PyExc_TypeError, "a '%s' is expected, '%s(%s)' is received",
+		       type, otype, cstr);
+          SWIG_Python_str_DelForPy3(cstr);
+	} else {
+	  PyErr_Format(PyExc_TypeError, "a '%s' is expected, '%s' is received",
+		       type, otype);
+	}
+	Py_XDECREF(str);
+	return;
+      }
+    }   
+    PyErr_Format(PyExc_TypeError, "a '%s' is expected", type);
+  } else {
+    PyErr_Format(PyExc_TypeError, "unexpected type is received");
+  }
+}
+
+
+/* Convert a pointer value, signal an exception on a type mismatch */
+SWIGRUNTIME void *
+SWIG_Python_MustGetPtr(PyObject *obj, swig_type_info *ty, int SWIGUNUSEDPARM(argnum), int flags) {
+  void *result;
+  if (SWIG_Python_ConvertPtr(obj, &result, ty, flags) == -1) {
+    PyErr_Clear();
+#if SWIG_POINTER_EXCEPTION
+    if (flags) {
+      SWIG_Python_TypeError(SWIG_TypePrettyName(ty), obj);
+      SWIG_Python_ArgFail(argnum);
+    }
+#endif
+  }
+  return result;
+}
+
+#ifdef SWIGPYTHON_BUILTIN
+SWIGRUNTIME int
+SWIG_Python_NonDynamicSetAttr(PyObject *obj, PyObject *name, PyObject *value) {
+  PyTypeObject *tp = obj->ob_type;
+  PyObject *descr;
+  PyObject *encoded_name;
+  descrsetfunc f;
+  int res = -1;
+
+# ifdef Py_USING_UNICODE
+  if (PyString_Check(name)) {
+    name = PyUnicode_Decode(PyString_AsString(name), PyString_Size(name), NULL, NULL);
+    if (!name)
+      return -1;
+  } else if (!PyUnicode_Check(name))
+# else
+  if (!PyString_Check(name))
+# endif
+  {
+    PyErr_Format(PyExc_TypeError, "attribute name must be string, not '%.200s'", name->ob_type->tp_name);
+    return -1;
+  } else {
+    Py_INCREF(name);
+  }
+
+  if (!tp->tp_dict) {
+    if (PyType_Ready(tp) < 0)
+      goto done;
+  }
+
+  descr = _PyType_Lookup(tp, name);
+  f = NULL;
+  if (descr != NULL)
+    f = descr->ob_type->tp_descr_set;
+  if (!f) {
+    if (PyString_Check(name)) {
+      encoded_name = name;
+      Py_INCREF(name);
+    } else {
+      encoded_name = PyUnicode_AsUTF8String(name);
+    }
+    PyErr_Format(PyExc_AttributeError, "'%.100s' object has no attribute '%.200s'", tp->tp_name, PyString_AsString(encoded_name));
+    Py_DECREF(encoded_name);
+  } else {
+    res = f(descr, obj, value);
+  }
+  
+  done:
+  Py_DECREF(name);
+  return res;
+}
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+
+#define SWIG_exception_fail(code, msg) do { SWIG_Error(code, msg); SWIG_fail; } while(0) 
+
+#define SWIG_contract_assert(expr, msg) if (!(expr)) { SWIG_Error(SWIG_RuntimeError, msg); SWIG_fail; } else 
+
+
+
+/* -------- TYPES TABLE (BEGIN) -------- */
+
+#define SWIGTYPE_p_SignedIntBuf swig_types[0]
+#define SWIGTYPE_p_char swig_types[1]
+#define SWIGTYPE_p_int swig_types[2]
+static swig_type_info *swig_types[4];
+static swig_module_info swig_module = {swig_types, 3, 0, 0, 0, 0};
+#define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name)
+#define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name)
+
+/* -------- TYPES TABLE (END) -------- */
+
+#if (PY_VERSION_HEX <= 0x02000000)
+# if !defined(SWIG_PYTHON_CLASSIC)
+#  error "This python version requires swig to be run with the '-classic' option"
+# endif
+#endif
+
+/*-----------------------------------------------
+              @(target):= _numpy_swig.so
+  ------------------------------------------------*/
+#if PY_VERSION_HEX >= 0x03000000
+#  define SWIG_init    PyInit__numpy_swig
+
+#else
+#  define SWIG_init    init_numpy_swig
+
+#endif
+#define SWIG_name    "_numpy_swig"
+
+#define SWIGVERSION 0x030012 
+#define SWIG_VERSION SWIGVERSION
+
+
+#define SWIG_as_voidptr(a) const_cast< void * >(static_cast< const void * >(a)) 
+#define SWIG_as_voidptrptr(a) ((void)SWIG_as_voidptr(*a),reinterpret_cast< void** >(a)) 
+
+
+#include <stdexcept>
+
+
+namespace swig {
+  class SwigPtr_PyObject {
+  protected:
+    PyObject *_obj;
+
+  public:
+    SwigPtr_PyObject() :_obj(0)
+    {
+    }
+
+    SwigPtr_PyObject(const SwigPtr_PyObject& item) : _obj(item._obj)
+    {
+      SWIG_PYTHON_THREAD_BEGIN_BLOCK;
+      Py_XINCREF(_obj);      
+      SWIG_PYTHON_THREAD_END_BLOCK;
+    }
+    
+    SwigPtr_PyObject(PyObject *obj, bool initial_ref = true) :_obj(obj)
+    {
+      if (initial_ref) {
+        SWIG_PYTHON_THREAD_BEGIN_BLOCK;
+        Py_XINCREF(_obj);
+        SWIG_PYTHON_THREAD_END_BLOCK;
+      }
+    }
+    
+    SwigPtr_PyObject & operator=(const SwigPtr_PyObject& item) 
+    {
+      SWIG_PYTHON_THREAD_BEGIN_BLOCK;
+      Py_XINCREF(item._obj);
+      Py_XDECREF(_obj);
+      _obj = item._obj;
+      SWIG_PYTHON_THREAD_END_BLOCK;
+      return *this;      
+    }
+    
+    ~SwigPtr_PyObject() 
+    {
+      SWIG_PYTHON_THREAD_BEGIN_BLOCK;
+      Py_XDECREF(_obj);
+      SWIG_PYTHON_THREAD_END_BLOCK;
+    }
+    
+    operator PyObject *() const
+    {
+      return _obj;
+    }
+
+    PyObject *operator->() const
+    {
+      return _obj;
+    }
+  };
+}
+
+
+namespace swig {
+  struct SwigVar_PyObject : SwigPtr_PyObject {
+    SwigVar_PyObject(PyObject* obj = 0) : SwigPtr_PyObject(obj, false) { }
+    
+    SwigVar_PyObject & operator = (PyObject* obj)
+    {
+      Py_XDECREF(_obj);
+      _obj = obj;
+      return *this;      
+    }
+  };
+}
+
+
+#define SWIG_FILE_WITH_INIT
+
+
+#ifndef SWIG_FILE_WITH_INIT
+#define NO_IMPORT_ARRAY
+#endif
+#include "stdio.h"
+#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION
+#include <numpy/arrayobject.h>
+
+
+#include <complex> 
+
+
+#include "numpy_swig.h"
+#include <numpy/arrayobject.h>
+
+#if PY_VERSION_HEX >= 0x03000000
+NPY_NO_EXPORT void
+gentype_struct_free(PyObject *ptr)
+{
+    PyArrayInterface *arrif;
+    PyObject *context;
+
+    arrif = (PyArrayInterface*)PyCapsule_GetPointer(ptr, NULL);
+    context = (PyObject *)PyCapsule_GetContext(ptr);
+    Py_DECREF(context);
+    Py_XDECREF(arrif->descr);
+    PyArray_free(arrif->shape);
+    PyArray_free(arrif);
+}
+static NPY_INLINE PyObject *
+NpyCapsule_FromVoidPtr(void *ptr, void (*dtor)(PyObject *))
+{
+    PyObject *ret = PyCapsule_New(ptr, NULL, dtor);
+    if (ret == NULL) {
+        PyErr_Clear();
+    }
+    return ret;
+}
+static NPY_INLINE PyObject *
+NpyCapsule_FromVoidPtrAndDesc(void *ptr, void* context, void (*dtor)(PyObject *))
+{
+    PyObject *ret = NpyCapsule_FromVoidPtr(ptr, dtor);
+    if (ret != NULL && PyCapsule_SetContext(ret, context) != 0) {
+        PyErr_Clear();
+        Py_DECREF(ret);
+        ret = NULL;
+    }
+    return ret;
+}
+#else
+NPY_NO_EXPORT void
+gentype_struct_free(void *ptr, void *arg)
+{
+    PyArrayInterface *arrif = (PyArrayInterface *)ptr;
+    Py_DECREF((PyObject *)arg);
+    Py_XDECREF(arrif->descr);
+    PyArray_free(arrif->shape);
+    PyArray_free(arrif);
+}
+NpyCapsule_FromVoidPtrAndDesc(void *ptr, void* context,
+        void (*dtor)(void *, void *))
+{
+    return PyCObject_FromVoidPtrAndDesc(ptr, context, dtor);
+}
+#endif
+
+#ifndef Py_CAPSULE_H
+typedef void(*PyCapsule_Destructor)(void *, void *);
+#endif
+
+void delete_SignedIntBuf(SignedIntBuf* buffer)
+{
+  free(buffer->data);
+  free(buffer);
+}
+ 
+void free_array_interface( void* ptr, void *arr )
+{
+  PyArrayInterface* inter;
+  PyObject* arrpy;
+ 
+  inter = (PyArrayInterface*)ptr;
+  arrpy = (PyObject*)arr;
+  Py_DECREF(arrpy);
+  free(inter);
+}
+void free_capsule(PyObject* arr)
+{
+  PyArrayInterface* inter;
+  inter = (PyArrayInterface*) PyCapsule_GetPointer(arr, "struct SignedIntBuf");
+  Py_DECREF(arr);
+  free(inter);
+}
+
+PyObject* get__array_struct__(PyObject* self)
+{
+  PyArrayInterface *inter;
+  PyObject *obj;
+  int nd;
+  nd = 2;
+  Py_intptr_t *shape, *strides;
+  void *data = NULL;
+
+  shape = (Py_intptr_t *)malloc(nd*sizeof(Py_intptr_t));
+  strides = (Py_intptr_t *)malloc(nd*sizeof(Py_intptr_t));
+ 
+  inter = (PyArrayInterface*)malloc(sizeof(PyArrayInterface));
+  if (inter==NULL)
+    return PyErr_NoMemory();
+ 
+  inter->two = 2;
+  inter->nd = nd;
+  inter->typekind = 'i';
+  inter->itemsize = sizeof(int);
+  inter->flags = NPY_ARRAY_NOTSWAPPED | NPY_ARRAY_ALIGNED | NPY_ARRAY_WRITEABLE;
+  inter->strides = strides;
+  inter->shape = shape;
+  inter->data = (void*) data;
+  Py_INCREF(self);
+  obj = NpyCapsule_FromVoidPtrAndDesc(inter, self, gentype_struct_free);
+/*
+#ifdef Py_CAPSULE_H
+  obj = PyCapsule_New((void*)inter, "struct SignedIntBuf", free_capsule);
+#else
+  obj = PyCObject_FromVoidPtrAndDesc((void*)inter, (void*)self, free_array_interface);
+#endif
+*/
+  return obj;
+}
+
+
+#include <limits.h>
+#if !defined(SWIG_NO_LLONG_MAX)
+# if !defined(LLONG_MAX) && defined(__GNUC__) && defined (__LONG_LONG_MAX__)
+#   define LLONG_MAX __LONG_LONG_MAX__
+#   define LLONG_MIN (-LLONG_MAX - 1LL)
+#   define ULLONG_MAX (LLONG_MAX * 2ULL + 1ULL)
+# endif
+#endif
+
+
+SWIGINTERN int
+SWIG_AsVal_double (PyObject *obj, double *val)
+{
+  int res = SWIG_TypeError;
+  if (PyFloat_Check(obj)) {
+    if (val) *val = PyFloat_AsDouble(obj);
+    return SWIG_OK;
+#if PY_VERSION_HEX < 0x03000000
+  } else if (PyInt_Check(obj)) {
+    if (val) *val = (double) PyInt_AsLong(obj);
+    return SWIG_OK;
+#endif
+  } else if (PyLong_Check(obj)) {
+    double v = PyLong_AsDouble(obj);
+    if (!PyErr_Occurred()) {
+      if (val) *val = v;
+      return SWIG_OK;
+    } else {
+      PyErr_Clear();
+    }
+  }
+#ifdef SWIG_PYTHON_CAST_MODE
+  {
+    int dispatch = 0;
+    double d = PyFloat_AsDouble(obj);
+    if (!PyErr_Occurred()) {
+      if (val) *val = d;
+      return SWIG_AddCast(SWIG_OK);
+    } else {
+      PyErr_Clear();
+    }
+    if (!dispatch) {
+      long v = PyLong_AsLong(obj);
+      if (!PyErr_Occurred()) {
+	if (val) *val = v;
+	return SWIG_AddCast(SWIG_AddCast(SWIG_OK));
+      } else {
+	PyErr_Clear();
+      }
+    }
+  }
+#endif
+  return res;
+}
+
+
+#include <float.h>
+
+
+#include <math.h>
+
+
+SWIGINTERNINLINE int
+SWIG_CanCastAsInteger(double *d, double min, double max) {
+  double x = *d;
+  if ((min <= x && x <= max)) {
+   double fx = floor(x);
+   double cx = ceil(x);
+   double rd =  ((x - fx) < 0.5) ? fx : cx; /* simple rint */
+   if ((errno == EDOM) || (errno == ERANGE)) {
+     errno = 0;
+   } else {
+     double summ, reps, diff;
+     if (rd < x) {
+       diff = x - rd;
+     } else if (rd > x) {
+       diff = rd - x;
+     } else {
+       return 1;
+     }
+     summ = rd + x;
+     reps = diff/summ;
+     if (reps < 8*DBL_EPSILON) {
+       *d = rd;
+       return 1;
+     }
+   }
+  }
+  return 0;
+}
+
+
+SWIGINTERN int
+SWIG_AsVal_long (PyObject *obj, long* val)
+{
+#if PY_VERSION_HEX < 0x03000000
+  if (PyInt_Check(obj)) {
+    if (val) *val = PyInt_AsLong(obj);
+    return SWIG_OK;
+  } else
+#endif
+  if (PyLong_Check(obj)) {
+    long v = PyLong_AsLong(obj);
+    if (!PyErr_Occurred()) {
+      if (val) *val = v;
+      return SWIG_OK;
+    } else {
+      PyErr_Clear();
+      return SWIG_OverflowError;
+    }
+  }
+#ifdef SWIG_PYTHON_CAST_MODE
+  {
+    int dispatch = 0;
+    long v = PyInt_AsLong(obj);
+    if (!PyErr_Occurred()) {
+      if (val) *val = v;
+      return SWIG_AddCast(SWIG_OK);
+    } else {
+      PyErr_Clear();
+    }
+    if (!dispatch) {
+      double d;
+      int res = SWIG_AddCast(SWIG_AsVal_double (obj,&d));
+      if (SWIG_IsOK(res) && SWIG_CanCastAsInteger(&d, LONG_MIN, LONG_MAX)) {
+	if (val) *val = (long)(d);
+	return res;
+      }
+    }
+  }
+#endif
+  return SWIG_TypeError;
+}
+
+
+SWIGINTERN int
+SWIG_AsVal_int (PyObject * obj, int *val)
+{
+  long v;
+  int res = SWIG_AsVal_long (obj, &v);
+  if (SWIG_IsOK(res)) {
+    if ((v < INT_MIN || v > INT_MAX)) {
+      return SWIG_OverflowError;
+    } else {
+      if (val) *val = static_cast< int >(v);
+    }
+  }  
+  return res;
+}
+
+SWIGINTERN SignedIntBuf *new_SignedIntBuf(int width,int height){
+    SignedIntBuf* buffer = (SignedIntBuf*) malloc(sizeof(SignedIntBuf));
+    int shape[2] = { height, width };
+    int strides[2] = { width * sizeof(int), sizeof(int) };
+    buffer->shape[0] = shape[0];
+    buffer->shape[1] = shape[1];
+    buffer->strides[0] = strides[0];
+    buffer->strides[1] = strides[1];
+    buffer->data = (int*) malloc(width*height*sizeof(int));
+    return buffer;
+  }
+SWIGINTERN char *SignedIntBuf___str__(SignedIntBuf *self){
+     static char tmp[1024];
+     int i, j;
+     int used = 0;
+     used += sprintf(tmp, "Array:\n");
+     for(i=0; i < self->shape[0]; i++)
+     {
+       for(j=0; j < self->shape[1]; j++)
+         used += sprintf(tmp + used, "%d\t", self->data[j + i*self->shape[1]]);
+       used += sprintf(tmp + used, "\n");
+     }
+     return tmp;
+  }
+
+SWIGINTERN swig_type_info*
+SWIG_pchar_descriptor(void)
+{
+  static int init = 0;
+  static swig_type_info* info = 0;
+  if (!init) {
+    info = SWIG_TypeQuery("_p_char");
+    init = 1;
+  }
+  return info;
+}
+
+
+SWIGINTERNINLINE PyObject *
+SWIG_FromCharPtrAndSize(const char* carray, size_t size)
+{
+  if (carray) {
+    if (size > INT_MAX) {
+      swig_type_info* pchar_descriptor = SWIG_pchar_descriptor();
+      return pchar_descriptor ? 
+	SWIG_InternalNewPointerObj(const_cast< char * >(carray), pchar_descriptor, 0) : SWIG_Py_Void();
+    } else {
+#if PY_VERSION_HEX >= 0x03000000
+#if defined(SWIG_PYTHON_STRICT_BYTE_CHAR)
+      return PyBytes_FromStringAndSize(carray, static_cast< Py_ssize_t >(size));
+#else
+#if PY_VERSION_HEX >= 0x03010000
+      return PyUnicode_DecodeUTF8(carray, static_cast< Py_ssize_t >(size), "surrogateescape");
+#else
+      return PyUnicode_FromStringAndSize(carray, static_cast< Py_ssize_t >(size));
+#endif
+#endif
+#else
+      return PyString_FromStringAndSize(carray, static_cast< Py_ssize_t >(size));
+#endif
+    }
+  } else {
+    return SWIG_Py_Void();
+  }
+}
+
+
+SWIGINTERNINLINE PyObject * 
+SWIG_FromCharPtr(const char *cptr)
+{ 
+  return SWIG_FromCharPtrAndSize(cptr, (cptr ? strlen(cptr) : 0));
+}
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+SWIGINTERN PyObject *_wrap_get__array_struct__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  PyObject *arg1 = (PyObject *) 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:get__array_struct__",&obj0)) SWIG_fail;
+  arg1 = obj0;
+  result = (PyObject *)get__array_struct__(arg1);
+  resultobj = result;
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SignedIntBuf_data_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  SignedIntBuf *arg1 = (SignedIntBuf *) 0 ;
+  int *arg2 = (int *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:SignedIntBuf_data_set",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_SignedIntBuf, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SignedIntBuf_data_set" "', argument " "1"" of type '" "SignedIntBuf *""'"); 
+  }
+  arg1 = reinterpret_cast< SignedIntBuf * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_int, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SignedIntBuf_data_set" "', argument " "2"" of type '" "int *""'"); 
+  }
+  arg2 = reinterpret_cast< int * >(argp2);
+  if (arg1) (arg1)->data = arg2;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SignedIntBuf_data_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  SignedIntBuf *arg1 = (SignedIntBuf *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SignedIntBuf_data_get",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_SignedIntBuf, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SignedIntBuf_data_get" "', argument " "1"" of type '" "SignedIntBuf *""'"); 
+  }
+  arg1 = reinterpret_cast< SignedIntBuf * >(argp1);
+  result = (int *) ((arg1)->data);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_int, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SignedIntBuf_shape_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  SignedIntBuf *arg1 = (SignedIntBuf *) 0 ;
+  int *arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:SignedIntBuf_shape_set",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_SignedIntBuf, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SignedIntBuf_shape_set" "', argument " "1"" of type '" "SignedIntBuf *""'"); 
+  }
+  arg1 = reinterpret_cast< SignedIntBuf * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_int, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SignedIntBuf_shape_set" "', argument " "2"" of type '" "int [2]""'"); 
+  } 
+  arg2 = reinterpret_cast< int * >(argp2);
+  {
+    if (arg2) {
+      size_t ii = 0;
+      for (; ii < (size_t)2; ++ii) *(int *)&arg1->shape[ii] = *((int *)arg2 + ii);
+    } else {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in variable '""shape""' of type '""int [2]""'");
+    }
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SignedIntBuf_shape_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  SignedIntBuf *arg1 = (SignedIntBuf *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SignedIntBuf_shape_get",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_SignedIntBuf, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SignedIntBuf_shape_get" "', argument " "1"" of type '" "SignedIntBuf *""'"); 
+  }
+  arg1 = reinterpret_cast< SignedIntBuf * >(argp1);
+  result = (int *)(int *) ((arg1)->shape);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_int, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SignedIntBuf_strides_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  SignedIntBuf *arg1 = (SignedIntBuf *) 0 ;
+  int *arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:SignedIntBuf_strides_set",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_SignedIntBuf, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SignedIntBuf_strides_set" "', argument " "1"" of type '" "SignedIntBuf *""'"); 
+  }
+  arg1 = reinterpret_cast< SignedIntBuf * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_int, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SignedIntBuf_strides_set" "', argument " "2"" of type '" "int [2]""'"); 
+  } 
+  arg2 = reinterpret_cast< int * >(argp2);
+  {
+    if (arg2) {
+      size_t ii = 0;
+      for (; ii < (size_t)2; ++ii) *(int *)&arg1->strides[ii] = *((int *)arg2 + ii);
+    } else {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in variable '""strides""' of type '""int [2]""'");
+    }
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SignedIntBuf_strides_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  SignedIntBuf *arg1 = (SignedIntBuf *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SignedIntBuf_strides_get",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_SignedIntBuf, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SignedIntBuf_strides_get" "', argument " "1"" of type '" "SignedIntBuf *""'"); 
+  }
+  arg1 = reinterpret_cast< SignedIntBuf * >(argp1);
+  result = (int *)(int *) ((arg1)->strides);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_int, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_SignedIntBuf(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  int arg1 ;
+  int arg2 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  SignedIntBuf *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:new_SignedIntBuf",&obj0,&obj1)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_SignedIntBuf" "', argument " "1"" of type '" "int""'");
+  } 
+  arg1 = static_cast< int >(val1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_SignedIntBuf" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (SignedIntBuf *)new_SignedIntBuf(arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_SignedIntBuf, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_SignedIntBuf(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  SignedIntBuf *arg1 = (SignedIntBuf *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_SignedIntBuf",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_SignedIntBuf, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_SignedIntBuf" "', argument " "1"" of type '" "SignedIntBuf *""'"); 
+  }
+  arg1 = reinterpret_cast< SignedIntBuf * >(argp1);
+  delete_SignedIntBuf(arg1);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SignedIntBuf___str__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  SignedIntBuf *arg1 = (SignedIntBuf *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  char *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SignedIntBuf___str__",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_SignedIntBuf, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SignedIntBuf___str__" "', argument " "1"" of type '" "SignedIntBuf *""'"); 
+  }
+  arg1 = reinterpret_cast< SignedIntBuf * >(argp1);
+  result = (char *)SignedIntBuf___str__(arg1);
+  resultobj = SWIG_FromCharPtr((const char *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *SignedIntBuf_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_SignedIntBuf, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+static PyMethodDef SwigMethods[] = {
+	 { (char *)"SWIG_PyInstanceMethod_New", (PyCFunction)SWIG_PyInstanceMethod_New, METH_O, NULL},
+	 { (char *)"get__array_struct__", _wrap_get__array_struct__, METH_VARARGS, NULL},
+	 { (char *)"SignedIntBuf_data_set", _wrap_SignedIntBuf_data_set, METH_VARARGS, NULL},
+	 { (char *)"SignedIntBuf_data_get", _wrap_SignedIntBuf_data_get, METH_VARARGS, NULL},
+	 { (char *)"SignedIntBuf_shape_set", _wrap_SignedIntBuf_shape_set, METH_VARARGS, NULL},
+	 { (char *)"SignedIntBuf_shape_get", _wrap_SignedIntBuf_shape_get, METH_VARARGS, NULL},
+	 { (char *)"SignedIntBuf_strides_set", _wrap_SignedIntBuf_strides_set, METH_VARARGS, NULL},
+	 { (char *)"SignedIntBuf_strides_get", _wrap_SignedIntBuf_strides_get, METH_VARARGS, NULL},
+	 { (char *)"new_SignedIntBuf", _wrap_new_SignedIntBuf, METH_VARARGS, (char *)"The comment docstring"},
+	 { (char *)"delete_SignedIntBuf", _wrap_delete_SignedIntBuf, METH_VARARGS, NULL},
+	 { (char *)"SignedIntBuf___str__", _wrap_SignedIntBuf___str__, METH_VARARGS, NULL},
+	 { (char *)"SignedIntBuf_swigregister", SignedIntBuf_swigregister, METH_VARARGS, NULL},
+	 { NULL, NULL, 0, NULL }
+};
+
+
+/* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */
+
+static swig_type_info _swigt__p_SignedIntBuf = {"_p_SignedIntBuf", "SignedIntBuf *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_char = {"_p_char", "char *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_int = {"_p_int", "int *", 0, 0, (void*)0, 0};
+
+static swig_type_info *swig_type_initial[] = {
+  &_swigt__p_SignedIntBuf,
+  &_swigt__p_char,
+  &_swigt__p_int,
+};
+
+static swig_cast_info _swigc__p_SignedIntBuf[] = {  {&_swigt__p_SignedIntBuf, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_char[] = {  {&_swigt__p_char, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_int[] = {  {&_swigt__p_int, 0, 0, 0},{0, 0, 0, 0}};
+
+static swig_cast_info *swig_cast_initial[] = {
+  _swigc__p_SignedIntBuf,
+  _swigc__p_char,
+  _swigc__p_int,
+};
+
+
+/* -------- TYPE CONVERSION AND EQUIVALENCE RULES (END) -------- */
+
+static swig_const_info swig_const_table[] = {
+{0, 0, 0, 0.0, 0, 0}};
+
+#ifdef __cplusplus
+}
+#endif
+/* -----------------------------------------------------------------------------
+ * Type initialization:
+ * This problem is tough by the requirement that no dynamic
+ * memory is used. Also, since swig_type_info structures store pointers to
+ * swig_cast_info structures and swig_cast_info structures store pointers back
+ * to swig_type_info structures, we need some lookup code at initialization.
+ * The idea is that swig generates all the structures that are needed.
+ * The runtime then collects these partially filled structures.
+ * The SWIG_InitializeModule function takes these initial arrays out of
+ * swig_module, and does all the lookup, filling in the swig_module.types
+ * array with the correct data and linking the correct swig_cast_info
+ * structures together.
+ *
+ * The generated swig_type_info structures are assigned statically to an initial
+ * array. We just loop through that array, and handle each type individually.
+ * First we lookup if this type has been already loaded, and if so, use the
+ * loaded structure instead of the generated one. Then we have to fill in the
+ * cast linked list. The cast data is initially stored in something like a
+ * two-dimensional array. Each row corresponds to a type (there are the same
+ * number of rows as there are in the swig_type_initial array). Each entry in
+ * a column is one of the swig_cast_info structures for that type.
+ * The cast_initial array is actually an array of arrays, because each row has
+ * a variable number of columns. So to actually build the cast linked list,
+ * we find the array of casts associated with the type, and loop through it
+ * adding the casts to the list. The one last trick we need to do is making
+ * sure the type pointer in the swig_cast_info struct is correct.
+ *
+ * First off, we lookup the cast->type name to see if it is already loaded.
+ * There are three cases to handle:
+ *  1) If the cast->type has already been loaded AND the type we are adding
+ *     casting info to has not been loaded (it is in this module), THEN we
+ *     replace the cast->type pointer with the type pointer that has already
+ *     been loaded.
+ *  2) If BOTH types (the one we are adding casting info to, and the
+ *     cast->type) are loaded, THEN the cast info has already been loaded by
+ *     the previous module so we just ignore it.
+ *  3) Finally, if cast->type has not already been loaded, then we add that
+ *     swig_cast_info to the linked list (because the cast->type) pointer will
+ *     be correct.
+ * ----------------------------------------------------------------------------- */
+
+#ifdef __cplusplus
+extern "C" {
+#if 0
+} /* c-mode */
+#endif
+#endif
+
+#if 0
+#define SWIGRUNTIME_DEBUG
+#endif
+
+
+SWIGRUNTIME void
+SWIG_InitializeModule(void *clientdata) {
+  size_t i;
+  swig_module_info *module_head, *iter;
+  int init;
+  
+  /* check to see if the circular list has been setup, if not, set it up */
+  if (swig_module.next==0) {
+    /* Initialize the swig_module */
+    swig_module.type_initial = swig_type_initial;
+    swig_module.cast_initial = swig_cast_initial;
+    swig_module.next = &swig_module;
+    init = 1;
+  } else {
+    init = 0;
+  }
+  
+  /* Try and load any already created modules */
+  module_head = SWIG_GetModule(clientdata);
+  if (!module_head) {
+    /* This is the first module loaded for this interpreter */
+    /* so set the swig module into the interpreter */
+    SWIG_SetModule(clientdata, &swig_module);
+  } else {
+    /* the interpreter has loaded a SWIG module, but has it loaded this one? */
+    iter=module_head;
+    do {
+      if (iter==&swig_module) {
+        /* Our module is already in the list, so there's nothing more to do. */
+        return;
+      }
+      iter=iter->next;
+    } while (iter!= module_head);
+    
+    /* otherwise we must add our module into the list */
+    swig_module.next = module_head->next;
+    module_head->next = &swig_module;
+  }
+  
+  /* When multiple interpreters are used, a module could have already been initialized in
+       a different interpreter, but not yet have a pointer in this interpreter.
+       In this case, we do not want to continue adding types... everything should be
+       set up already */
+  if (init == 0) return;
+  
+  /* Now work on filling in swig_module.types */
+#ifdef SWIGRUNTIME_DEBUG
+  printf("SWIG_InitializeModule: size %d\n", swig_module.size);
+#endif
+  for (i = 0; i < swig_module.size; ++i) {
+    swig_type_info *type = 0;
+    swig_type_info *ret;
+    swig_cast_info *cast;
+    
+#ifdef SWIGRUNTIME_DEBUG
+    printf("SWIG_InitializeModule: type %d %s\n", i, swig_module.type_initial[i]->name);
+#endif
+    
+    /* if there is another module already loaded */
+    if (swig_module.next != &swig_module) {
+      type = SWIG_MangledTypeQueryModule(swig_module.next, &swig_module, swig_module.type_initial[i]->name);
+    }
+    if (type) {
+      /* Overwrite clientdata field */
+#ifdef SWIGRUNTIME_DEBUG
+      printf("SWIG_InitializeModule: found type %s\n", type->name);
+#endif
+      if (swig_module.type_initial[i]->clientdata) {
+        type->clientdata = swig_module.type_initial[i]->clientdata;
+#ifdef SWIGRUNTIME_DEBUG
+        printf("SWIG_InitializeModule: found and overwrite type %s \n", type->name);
+#endif
+      }
+    } else {
+      type = swig_module.type_initial[i];
+    }
+    
+    /* Insert casting types */
+    cast = swig_module.cast_initial[i];
+    while (cast->type) {
+      /* Don't need to add information already in the list */
+      ret = 0;
+#ifdef SWIGRUNTIME_DEBUG
+      printf("SWIG_InitializeModule: look cast %s\n", cast->type->name);
+#endif
+      if (swig_module.next != &swig_module) {
+        ret = SWIG_MangledTypeQueryModule(swig_module.next, &swig_module, cast->type->name);
+#ifdef SWIGRUNTIME_DEBUG
+        if (ret) printf("SWIG_InitializeModule: found cast %s\n", ret->name);
+#endif
+      }
+      if (ret) {
+        if (type == swig_module.type_initial[i]) {
+#ifdef SWIGRUNTIME_DEBUG
+          printf("SWIG_InitializeModule: skip old type %s\n", ret->name);
+#endif
+          cast->type = ret;
+          ret = 0;
+        } else {
+          /* Check for casting already in the list */
+          swig_cast_info *ocast = SWIG_TypeCheck(ret->name, type);
+#ifdef SWIGRUNTIME_DEBUG
+          if (ocast) printf("SWIG_InitializeModule: skip old cast %s\n", ret->name);
+#endif
+          if (!ocast) ret = 0;
+        }
+      }
+      
+      if (!ret) {
+#ifdef SWIGRUNTIME_DEBUG
+        printf("SWIG_InitializeModule: adding cast %s\n", cast->type->name);
+#endif
+        if (type->cast) {
+          type->cast->prev = cast;
+          cast->next = type->cast;
+        }
+        type->cast = cast;
+      }
+      cast++;
+    }
+    /* Set entry in modules->types array equal to the type */
+    swig_module.types[i] = type;
+  }
+  swig_module.types[i] = 0;
+  
+#ifdef SWIGRUNTIME_DEBUG
+  printf("**** SWIG_InitializeModule: Cast List ******\n");
+  for (i = 0; i < swig_module.size; ++i) {
+    int j = 0;
+    swig_cast_info *cast = swig_module.cast_initial[i];
+    printf("SWIG_InitializeModule: type %d %s\n", i, swig_module.type_initial[i]->name);
+    while (cast->type) {
+      printf("SWIG_InitializeModule: cast type %s\n", cast->type->name);
+      cast++;
+      ++j;
+    }
+    printf("---- Total casts: %d\n",j);
+  }
+  printf("**** SWIG_InitializeModule: Cast List ******\n");
+#endif
+}
+
+/* This function will propagate the clientdata field of type to
+* any new swig_type_info structures that have been added into the list
+* of equivalent types.  It is like calling
+* SWIG_TypeClientData(type, clientdata) a second time.
+*/
+SWIGRUNTIME void
+SWIG_PropagateClientData(void) {
+  size_t i;
+  swig_cast_info *equiv;
+  static int init_run = 0;
+  
+  if (init_run) return;
+  init_run = 1;
+  
+  for (i = 0; i < swig_module.size; i++) {
+    if (swig_module.types[i]->clientdata) {
+      equiv = swig_module.types[i]->cast;
+      while (equiv) {
+        if (!equiv->converter) {
+          if (equiv->type && !equiv->type->clientdata)
+          SWIG_TypeClientData(equiv->type, swig_module.types[i]->clientdata);
+        }
+        equiv = equiv->next;
+      }
+    }
+  }
+}
+
+#ifdef __cplusplus
+#if 0
+{
+  /* c-mode */
+#endif
+}
+#endif
+
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+  
+  /* Python-specific SWIG API */
+#define SWIG_newvarlink()                             SWIG_Python_newvarlink()
+#define SWIG_addvarlink(p, name, get_attr, set_attr)  SWIG_Python_addvarlink(p, name, get_attr, set_attr)
+#define SWIG_InstallConstants(d, constants)           SWIG_Python_InstallConstants(d, constants)
+  
+  /* -----------------------------------------------------------------------------
+   * global variable support code.
+   * ----------------------------------------------------------------------------- */
+  
+  typedef struct swig_globalvar {
+    char       *name;                  /* Name of global variable */
+    PyObject *(*get_attr)(void);       /* Return the current value */
+    int       (*set_attr)(PyObject *); /* Set the value */
+    struct swig_globalvar *next;
+  } swig_globalvar;
+  
+  typedef struct swig_varlinkobject {
+    PyObject_HEAD
+    swig_globalvar *vars;
+  } swig_varlinkobject;
+  
+  SWIGINTERN PyObject *
+  swig_varlink_repr(swig_varlinkobject *SWIGUNUSEDPARM(v)) {
+#if PY_VERSION_HEX >= 0x03000000
+    return PyUnicode_InternFromString("<Swig global variables>");
+#else
+    return PyString_FromString("<Swig global variables>");
+#endif
+  }
+  
+  SWIGINTERN PyObject *
+  swig_varlink_str(swig_varlinkobject *v) {
+#if PY_VERSION_HEX >= 0x03000000
+    PyObject *str = PyUnicode_InternFromString("(");
+    PyObject *tail;
+    PyObject *joined;
+    swig_globalvar *var;
+    for (var = v->vars; var; var=var->next) {
+      tail = PyUnicode_FromString(var->name);
+      joined = PyUnicode_Concat(str, tail);
+      Py_DecRef(str);
+      Py_DecRef(tail);
+      str = joined;
+      if (var->next) {
+        tail = PyUnicode_InternFromString(", ");
+        joined = PyUnicode_Concat(str, tail);
+        Py_DecRef(str);
+        Py_DecRef(tail);
+        str = joined;
+      }
+    }
+    tail = PyUnicode_InternFromString(")");
+    joined = PyUnicode_Concat(str, tail);
+    Py_DecRef(str);
+    Py_DecRef(tail);
+    str = joined;
+#else
+    PyObject *str = PyString_FromString("(");
+    swig_globalvar *var;
+    for (var = v->vars; var; var=var->next) {
+      PyString_ConcatAndDel(&str,PyString_FromString(var->name));
+      if (var->next) PyString_ConcatAndDel(&str,PyString_FromString(", "));
+    }
+    PyString_ConcatAndDel(&str,PyString_FromString(")"));
+#endif
+    return str;
+  }
+  
+  SWIGINTERN int
+  swig_varlink_print(swig_varlinkobject *v, FILE *fp, int SWIGUNUSEDPARM(flags)) {
+    char *tmp;
+    PyObject *str = swig_varlink_str(v);
+    fprintf(fp,"Swig global variables ");
+    fprintf(fp,"%s\n", tmp = SWIG_Python_str_AsChar(str));
+    SWIG_Python_str_DelForPy3(tmp);
+    Py_DECREF(str);
+    return 0;
+  }
+  
+  SWIGINTERN void
+  swig_varlink_dealloc(swig_varlinkobject *v) {
+    swig_globalvar *var = v->vars;
+    while (var) {
+      swig_globalvar *n = var->next;
+      free(var->name);
+      free(var);
+      var = n;
+    }
+  }
+  
+  SWIGINTERN PyObject *
+  swig_varlink_getattr(swig_varlinkobject *v, char *n) {
+    PyObject *res = NULL;
+    swig_globalvar *var = v->vars;
+    while (var) {
+      if (strcmp(var->name,n) == 0) {
+        res = (*var->get_attr)();
+        break;
+      }
+      var = var->next;
+    }
+    if (res == NULL && !PyErr_Occurred()) {
+      PyErr_Format(PyExc_AttributeError, "Unknown C global variable '%s'", n);
+    }
+    return res;
+  }
+  
+  SWIGINTERN int
+  swig_varlink_setattr(swig_varlinkobject *v, char *n, PyObject *p) {
+    int res = 1;
+    swig_globalvar *var = v->vars;
+    while (var) {
+      if (strcmp(var->name,n) == 0) {
+        res = (*var->set_attr)(p);
+        break;
+      }
+      var = var->next;
+    }
+    if (res == 1 && !PyErr_Occurred()) {
+      PyErr_Format(PyExc_AttributeError, "Unknown C global variable '%s'", n);
+    }
+    return res;
+  }
+  
+  SWIGINTERN PyTypeObject*
+  swig_varlink_type(void) {
+    static char varlink__doc__[] = "Swig var link object";
+    static PyTypeObject varlink_type;
+    static int type_init = 0;
+    if (!type_init) {
+      const PyTypeObject tmp = {
+#if PY_VERSION_HEX >= 0x03000000
+        PyVarObject_HEAD_INIT(NULL, 0)
+#else
+        PyObject_HEAD_INIT(NULL)
+        0,                                  /* ob_size */
+#endif
+        (char *)"swigvarlink",              /* tp_name */
+        sizeof(swig_varlinkobject),         /* tp_basicsize */
+        0,                                  /* tp_itemsize */
+        (destructor) swig_varlink_dealloc,  /* tp_dealloc */
+        (printfunc) swig_varlink_print,     /* tp_print */
+        (getattrfunc) swig_varlink_getattr, /* tp_getattr */
+        (setattrfunc) swig_varlink_setattr, /* tp_setattr */
+        0,                                  /* tp_compare */
+        (reprfunc) swig_varlink_repr,       /* tp_repr */
+        0,                                  /* tp_as_number */
+        0,                                  /* tp_as_sequence */
+        0,                                  /* tp_as_mapping */
+        0,                                  /* tp_hash */
+        0,                                  /* tp_call */
+        (reprfunc) swig_varlink_str,        /* tp_str */
+        0,                                  /* tp_getattro */
+        0,                                  /* tp_setattro */
+        0,                                  /* tp_as_buffer */
+        0,                                  /* tp_flags */
+        varlink__doc__,                     /* tp_doc */
+        0,                                  /* tp_traverse */
+        0,                                  /* tp_clear */
+        0,                                  /* tp_richcompare */
+        0,                                  /* tp_weaklistoffset */
+#if PY_VERSION_HEX >= 0x02020000
+        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* tp_iter -> tp_weaklist */
+#endif
+#if PY_VERSION_HEX >= 0x02030000
+        0,                                  /* tp_del */
+#endif
+#if PY_VERSION_HEX >= 0x02060000
+        0,                                  /* tp_version_tag */
+#endif
+#if PY_VERSION_HEX >= 0x03040000
+        0,                                  /* tp_finalize */
+#endif
+#ifdef COUNT_ALLOCS
+        0,                                  /* tp_allocs */
+        0,                                  /* tp_frees */
+        0,                                  /* tp_maxalloc */
+#if PY_VERSION_HEX >= 0x02050000
+        0,                                  /* tp_prev */
+#endif
+        0                                   /* tp_next */
+#endif
+      };
+      varlink_type = tmp;
+      type_init = 1;
+#if PY_VERSION_HEX < 0x02020000
+      varlink_type.ob_type = &PyType_Type;
+#else
+      if (PyType_Ready(&varlink_type) < 0)
+      return NULL;
+#endif
+    }
+    return &varlink_type;
+  }
+  
+  /* Create a variable linking object for use later */
+  SWIGINTERN PyObject *
+  SWIG_Python_newvarlink(void) {
+    swig_varlinkobject *result = PyObject_NEW(swig_varlinkobject, swig_varlink_type());
+    if (result) {
+      result->vars = 0;
+    }
+    return ((PyObject*) result);
+  }
+  
+  SWIGINTERN void 
+  SWIG_Python_addvarlink(PyObject *p, char *name, PyObject *(*get_attr)(void), int (*set_attr)(PyObject *p)) {
+    swig_varlinkobject *v = (swig_varlinkobject *) p;
+    swig_globalvar *gv = (swig_globalvar *) malloc(sizeof(swig_globalvar));
+    if (gv) {
+      size_t size = strlen(name)+1;
+      gv->name = (char *)malloc(size);
+      if (gv->name) {
+        strncpy(gv->name,name,size);
+        gv->get_attr = get_attr;
+        gv->set_attr = set_attr;
+        gv->next = v->vars;
+      }
+    }
+    v->vars = gv;
+  }
+  
+  SWIGINTERN PyObject *
+  SWIG_globals(void) {
+    static PyObject *_SWIG_globals = 0; 
+    if (!_SWIG_globals) _SWIG_globals = SWIG_newvarlink();  
+    return _SWIG_globals;
+  }
+  
+  /* -----------------------------------------------------------------------------
+   * constants/methods manipulation
+   * ----------------------------------------------------------------------------- */
+  
+  /* Install Constants */
+  SWIGINTERN void
+  SWIG_Python_InstallConstants(PyObject *d, swig_const_info constants[]) {
+    PyObject *obj = 0;
+    size_t i;
+    for (i = 0; constants[i].type; ++i) {
+      switch(constants[i].type) {
+      case SWIG_PY_POINTER:
+        obj = SWIG_InternalNewPointerObj(constants[i].pvalue, *(constants[i]).ptype,0);
+        break;
+      case SWIG_PY_BINARY:
+        obj = SWIG_NewPackedObj(constants[i].pvalue, constants[i].lvalue, *(constants[i].ptype));
+        break;
+      default:
+        obj = 0;
+        break;
+      }
+      if (obj) {
+        PyDict_SetItemString(d, constants[i].name, obj);
+        Py_DECREF(obj);
+      }
+    }
+  }
+  
+  /* -----------------------------------------------------------------------------*/
+  /* Fix SwigMethods to carry the callback ptrs when needed */
+  /* -----------------------------------------------------------------------------*/
+  
+  SWIGINTERN void
+  SWIG_Python_FixMethods(PyMethodDef *methods,
+    swig_const_info *const_table,
+    swig_type_info **types,
+    swig_type_info **types_initial) {
+    size_t i;
+    for (i = 0; methods[i].ml_name; ++i) {
+      const char *c = methods[i].ml_doc;
+      if (!c) continue;
+      c = strstr(c, "swig_ptr: ");
+      if (c) {
+        int j;
+        swig_const_info *ci = 0;
+        const char *name = c + 10;
+        for (j = 0; const_table[j].type; ++j) {
+          if (strncmp(const_table[j].name, name, 
+              strlen(const_table[j].name)) == 0) {
+            ci = &(const_table[j]);
+            break;
+          }
+        }
+        if (ci) {
+          void *ptr = (ci->type == SWIG_PY_POINTER) ? ci->pvalue : 0;
+          if (ptr) {
+            size_t shift = (ci->ptype) - types;
+            swig_type_info *ty = types_initial[shift];
+            size_t ldoc = (c - methods[i].ml_doc);
+            size_t lptr = strlen(ty->name)+2*sizeof(void*)+2;
+            char *ndoc = (char*)malloc(ldoc + lptr + 10);
+            if (ndoc) {
+              char *buff = ndoc;
+              strncpy(buff, methods[i].ml_doc, ldoc);
+              buff += ldoc;
+              strncpy(buff, "swig_ptr: ", 10);
+              buff += 10;
+              SWIG_PackVoidPtr(buff, ptr, ty->name, lptr);
+              methods[i].ml_doc = ndoc;
+            }
+          }
+        }
+      }
+    }
+  } 
+  
+#ifdef __cplusplus
+}
+#endif
+
+/* -----------------------------------------------------------------------------*
+ *  Partial Init method
+ * -----------------------------------------------------------------------------*/
+
+#ifdef __cplusplus
+extern "C"
+#endif
+
+SWIGEXPORT 
+#if PY_VERSION_HEX >= 0x03000000
+PyObject*
+#else
+void
+#endif
+SWIG_init(void) {
+  PyObject *m, *d, *md;
+#if PY_VERSION_HEX >= 0x03000000
+  static struct PyModuleDef SWIG_module = {
+# if PY_VERSION_HEX >= 0x03020000
+    PyModuleDef_HEAD_INIT,
+# else
+    {
+      PyObject_HEAD_INIT(NULL)
+      NULL, /* m_init */
+      0,    /* m_index */
+      NULL, /* m_copy */
+    },
+# endif
+    (char *) SWIG_name,
+    NULL,
+    -1,
+    SwigMethods,
+    NULL,
+    NULL,
+    NULL,
+    NULL
+  };
+#endif
+  
+#if defined(SWIGPYTHON_BUILTIN)
+  static SwigPyClientData SwigPyObject_clientdata = {
+    0, 0, 0, 0, 0, 0, 0
+  };
+  static PyGetSetDef this_getset_def = {
+    (char *)"this", &SwigPyBuiltin_ThisClosure, NULL, NULL, NULL
+  };
+  static SwigPyGetSet thisown_getset_closure = {
+    (PyCFunction) SwigPyObject_own,
+    (PyCFunction) SwigPyObject_own
+  };
+  static PyGetSetDef thisown_getset_def = {
+    (char *)"thisown", SwigPyBuiltin_GetterClosure, SwigPyBuiltin_SetterClosure, NULL, &thisown_getset_closure
+  };
+  PyTypeObject *builtin_pytype;
+  int builtin_base_count;
+  swig_type_info *builtin_basetype;
+  PyObject *tuple;
+  PyGetSetDescrObject *static_getset;
+  PyTypeObject *metatype;
+  PyTypeObject *swigpyobject;
+  SwigPyClientData *cd;
+  PyObject *public_interface, *public_symbol;
+  PyObject *this_descr;
+  PyObject *thisown_descr;
+  PyObject *self = 0;
+  int i;
+  
+  (void)builtin_pytype;
+  (void)builtin_base_count;
+  (void)builtin_basetype;
+  (void)tuple;
+  (void)static_getset;
+  (void)self;
+  
+  /* Metaclass is used to implement static member variables */
+  metatype = SwigPyObjectType();
+  assert(metatype);
+#endif
+  
+  /* Fix SwigMethods to carry the callback ptrs when needed */
+  SWIG_Python_FixMethods(SwigMethods, swig_const_table, swig_types, swig_type_initial);
+  
+#if PY_VERSION_HEX >= 0x03000000
+  m = PyModule_Create(&SWIG_module);
+#else
+  m = Py_InitModule((char *) SWIG_name, SwigMethods);
+#endif
+  
+  md = d = PyModule_GetDict(m);
+  (void)md;
+  
+  SWIG_InitializeModule(0);
+  
+#ifdef SWIGPYTHON_BUILTIN
+  swigpyobject = SwigPyObject_TypeOnce();
+  
+  SwigPyObject_stype = SWIG_MangledTypeQuery("_p_SwigPyObject");
+  assert(SwigPyObject_stype);
+  cd = (SwigPyClientData*) SwigPyObject_stype->clientdata;
+  if (!cd) {
+    SwigPyObject_stype->clientdata = &SwigPyObject_clientdata;
+    SwigPyObject_clientdata.pytype = swigpyobject;
+  } else if (swigpyobject->tp_basicsize != cd->pytype->tp_basicsize) {
+    PyErr_SetString(PyExc_RuntimeError, "Import error: attempted to load two incompatible swig-generated modules.");
+# if PY_VERSION_HEX >= 0x03000000
+    return NULL;
+# else
+    return;
+# endif
+  }
+  
+  /* All objects have a 'this' attribute */
+  this_descr = PyDescr_NewGetSet(SwigPyObject_type(), &this_getset_def);
+  (void)this_descr;
+  
+  /* All objects have a 'thisown' attribute */
+  thisown_descr = PyDescr_NewGetSet(SwigPyObject_type(), &thisown_getset_def);
+  (void)thisown_descr;
+  
+  public_interface = PyList_New(0);
+  public_symbol = 0;
+  (void)public_symbol;
+  
+  PyDict_SetItemString(md, "__all__", public_interface);
+  Py_DECREF(public_interface);
+  for (i = 0; SwigMethods[i].ml_name != NULL; ++i)
+  SwigPyBuiltin_AddPublicSymbol(public_interface, SwigMethods[i].ml_name);
+  for (i = 0; swig_const_table[i].name != 0; ++i)
+  SwigPyBuiltin_AddPublicSymbol(public_interface, swig_const_table[i].name);
+#endif
+  
+  SWIG_InstallConstants(d,swig_const_table);
+  
+  
+  import_array();
+  
+#if PY_VERSION_HEX >= 0x03000000
+  return m;
+#else
+  return;
+#endif
+}
+
diff --git a/pymolfile/molfile/pymolfile-backup.c b/pymolfile/molfile/pymolfile-backup.c
new file mode 100644
index 0000000..9e58ed6
--- /dev/null
+++ b/pymolfile/molfile/pymolfile-backup.c
@@ -0,0 +1,329 @@
+/* Hey emacs this is -*- C -*- and this is my editor vim.
+ * 
+ * molfile.c : C and Fortran interfaces for molfile_plugins
+ * Copyright (c) Berk Onat <b.onat@warwick.ac.uk> 2017
+ *
+ * This program is under BSD LICENSE
+ */
+
+/*
+ * The code is written following the plugin test 
+ * context of f77_molfile.c by Axel Kohlmeyer and 
+ * in molfile_plugin/src/f77 and catdcd.c by 
+ * Justin Gullingsrud of VMD plugins.
+ */
+
+/* Get HAVE_CONFIG_H */
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdbool.h>
+#include <ctype.h>
+
+/* get fixed-width types if we are using ANSI C99 */
+#ifdef HAVE_STDINT_H
+#  include <stdint.h>
+#elif (defined HAVE_INTTYPES_H)
+#  include <inttypes.h>
+#endif
+
+#include "pymolfile.h"
+
+//for PyArrayInterface:
+#define CONTIGUOUS=0x01
+#define FORTRAN=0x02
+#define ALIGNED=0x100
+#define NOTSWAPPED=0x200
+#define WRITEABLE=0x400
+
+//byteorder dictionary
+char* byteorder = {"<", "little", ">", "big"}
+
+int numplugins=0;
+molfile_plugin_t** plugin_list;
+
+
+typedef struct PyArrayInterface{
+    int version;          //contains the integer 2 as a sanity check
+    int nd;               //number of dimensions
+    char typekind;        //kind in array --- character code of typestr
+    int itemsize;         //size of each element
+    int flags;            //flags indicating how the data should be interpreted
+    Py_intptr_t *shape;   //A length-nd array of shape information
+    Py_intptr_t *strides; //A length-nd array of stride information
+    void *data;           //A pointer to the first element of the array
+};
+
+
+/* * * * * * * * * * * * * * * * * * * * * * *
+ * Helper functions to set and store plugins *
+ * * * * * * * * * * * * * * * * * * * * * * */
+
+void* free_array_interface(PyObject *arr){
+    Py_DECREF(arr);
+}
+
+#if 0
+void init_readwriteaccess(struct DICTHOLDER *dict);
+
+struct DICTHOLDER * plugin_find(struct DICTHOLDER *dict, const char *pluginname){
+    struct DICTHOLDER *dictitem;
+    dictitem = dict;
+    // search in dictionary linked list
+    while(dictitem != NULL){
+        if(strcmp(dictitem->key, pluginname) == 0){
+	    return dictitem;
+	}
+	dictitem = dictitem->next;
+    }
+    return NULL;
+}
+#endif
+
+molfile_plugin_t* get_plugin(molfile_plugin_t** plug_list, int plug_no)
+{
+    molfile_plugin_t* plugin;
+    if(plug_no < 0){
+	plugin = NULL;
+    } else {
+	plugin = plug_list[plug_no];
+    }
+    return plugin;
+}
+
+#if 0
+void init_readwriteaccess(struct DICTHOLDER *dict){
+    struct DICTHOLDER *dictitem;
+    dictitem = dict;
+    // search in dictionary linked list
+    while(dictitem != NULL){
+	if(!dictitem->id){
+            if(plugin_list[dictitem->id]->read_next_timestep){
+	        dictitem->read = 1;
+	    }
+            if(plugin_list[dictitem->id]->write_timestep){
+	        dictitem->write = 1;
+	    }
+	}
+	dictitem = dictitem->next;
+    }
+}
+
+static int has_readsupport(const char *pluginname){
+    struct DICTHOLDER *item;
+    item = plugin_find(&plugindict, pluginname);
+    if (!item){
+        return item->read;
+    } else {
+	return 0;
+    }
+}
+
+static int has_writesupport(const char *pluginname){
+    struct DICTHOLDER *item;
+    item = plugin_find(&plugindict, pluginname);
+    if (!item){
+        return item->write;
+    } else {
+	return 0;
+    }
+}
+
+static int plugin_add(struct DICTHOLDER *dict, const char *key, int id){
+    struct DICTHOLDER *dictitem;
+    // Check list is empty or it already has the key
+    if (plugin_find(dict, key) == NULL){
+        dictitem = dict;
+        while(1){
+            // Find the empty next in the list and add item
+            if(dictitem == NULL){
+                struct DICTHOLDER *item = (struct DICTHOLDER*) malloc(sizeof(struct DICTHOLDER));
+                item->key  = key;
+		item->id = id;
+		item->read = NULL;
+		item->write = NULL;
+		dictitem = &item;
+		return 0;
+	    } else {
+	        dictitem = dictitem->next;
+	    }
+        }
+    } else {
+        return 1;
+    }
+}
+
+static int plugin_remove(struct DICTHOLDER *dict, const char *key){
+    struct DICTHOLDER *dictitem;
+    // Check list is empty or it already has the key
+    if (plugin_find(dict, key) == NULL){
+        // No key in the list. Nothing to remove.
+        return 1;
+    } else {
+        // Remove key in the list
+        dictitem = dict;
+        while(dictitem != NULL){
+            if(strcmp(dictitem->next->key, key) == 0){
+                struct DICTHOLDER *item = dictitem->next->next;
+                dictitem->next = item;
+	        return 0;
+	    }
+	    dictitem = dictitem->next;
+        }
+        return 1;
+    }
+}
+#endif
+/* * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Interface functions to initialize molfile plugins *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/* check validity of plugins and register them. */
+static int molfile_register(void*, vmdplugin_t *plugin) {
+    if (!plugin->type || !plugin->name || !plugin->author) {
+        // skipping plugin with incomplete header
+        return VMDPLUGIN_ERROR;
+    }
+    else if (plugin->abiversion != vmdplugin_ABIVERSION) {
+        // skipping plugin with incompatible ABI
+        return VMDPLUGIN_ERROR;
+    }
+    else if (0 != strncmp(plugin->type, "mol file", 8)) {
+        // skipping plugin of incompatible type
+        return VMDPLUGIN_ERROR;
+    } 
+    else if (numplugins >= MAXPLUGINS) {
+        // too many plugins: increase MAXPLUGINS
+        return VMDPLUGIN_ERROR;
+    }
+
+    //if (plugin_find(&plugindict, plugin->name) != NULL) {
+        // multiple plugins for file type
+    //    return VMDPLUGIN_ERROR;
+    //} else {
+        plugin_list[numplugins] = (molfile_plugin_t *) plugin;
+	//plugin_add(&plugindict, plugin->name, numplugins);
+        ++numplugins;
+        return VMDPLUGIN_SUCCESS;
+    //}
+}
+
+molfile_plugin_t** molfile_plugin_list(int maxsize)
+{
+    if(maxsize < MAXPLUGINS){
+        maxsize = MAXPLUGINS;
+    }
+    plugin_list = (molfile_plugin_t**) malloc(sizeof(molfile_plugin_t*)*maxsize);
+    return plugin_list;
+}
+
+/* register all available plugins and clear handles. */
+int molfile_init(void) 
+{
+#if 0
+    int molfile_internal_register(void *ptr, vmdplugin_t *plugin)
+    {
+        if (!plugin->type || !plugin->name || !plugin->author) {
+            // skipping plugin with incomplete header
+            return VMDPLUGIN_ERROR;
+        }
+        else if (plugin->abiversion != vmdplugin_ABIVERSION) {
+            // skipping plugin with incompatible ABI
+            return VMDPLUGIN_ERROR;
+        }
+        else if (0 != strncmp(plugin->type, "mol file", 8)) {
+            // skipping plugin of incompatible type
+            return VMDPLUGIN_ERROR;
+        } 
+        else if (num_plugins >= MAX_PLUGINS) {
+            // too many plugins: increase MAXPLUGINS
+            return VMDPLUGIN_ERROR;
+        }
+
+        if (plugin_find(&plugindict, plugin->name) != NULL) {
+            // multiple plugins for file type
+            return VMDPLUGIN_ERROR;
+        } else {
+            plugin_list[numplugins] = (molfile_plugin_t *) plugin;
+            ++numplugins;
+            return VMDPLUGIN_SUCCESS;
+        }
+    }
+#endif
+    MOLFILE_INIT_ALL;
+    MOLFILE_REGISTER_ALL(NULL,molfile_register);
+    return numplugins;
+}
+
+/* unregister all available plugins */
+int molfile_finish(void) 
+{
+    MOLFILE_FINI_ALL;
+    return 0;
+}
+
+/* * * * * * * * * * * * * * * * * * * * * * *
+ * Wrappers to directly access molfile plugin*
+ *         functions and settings            *
+ * * * * * * * * * * * * * * * * * * * * * * */
+
+/* molfile_plugin_t access */
+
+/* Functions in molfile_plugin_t */
+
+PyObject * my_read_structure(PyObject* molpack) {
+    Py_Initialize();
+    import_array();
+    
+    int options = 0;
+    int i;
+    molfile_plugin_t* plugin;
+    void* file_handle;
+    molfile_atom_t* atoms;
+    int numatoms, status;
+    PyArray_Descr *descr;
+    PyObject p*;
+    if (PyType_Ready(&MolAtomType) < 0)
+        return NULL;
+    PyTypeObject *atype = &MolAtomType;
+    MolAtom *atom_t;
+    atom_t = (MolAtom *)atype->tp_alloc(atype, 0);
+    p = (PyObject*) atom_t;
+    descr = PyArray_DescrFromObject(p, NULL)
+    MolObject* plugin_handle = (MolObject*) molpack;
+    plugin = plugin_handle->plugin;
+    file_handle = plugin_handle->file_handle;
+    numatoms = plugin_handle->natoms;
+    atoms = (molfile_atom_t *)calloc(numatoms,sizeof(molfile_atom_t));
+    status = plugin->read_structure(file_handle, &options, atoms);
+    if (status!=0){
+      PyErr_Format(PyExc_IOError, "Error accessing molfile_atom_t in read_structure function of plugin.");
+      return NULL;
+    }
+    PyArrayObject* oresid;
+    PyObject* array;
+    int64_t* cresid;
+    int nd = 1;
+    npy_intp dims[1] = { numatoms };
+    oresid = (PyArrayObject*) PyArray_SimpleNew(nd, dims, NPY_INT64);
+    Py_DECREF(p);
+    array = (PyArrayObject*) PyArray_SimpleNewFromDescr(1, dims, descr);
+    PyObject_Print(array, stdout, 0);
+    if (!oresid){
+      PyErr_Format(PyExc_IOError, "Error copying molfile_atom_t into numpy array.");
+      return NULL;
+    }
+    npy_intp* n = PyArray_DIMS(oresid);
+    cresid = (int64_t*) PyArray_DATA(oresid);
+    
+//    for (i=0;i<numatoms;i++){
+//        cresid[i] = (int64_t) atoms[i].resid;
+//    }
+    return (PyObject*) PyArray_FromArray(oresid, PyArray_DESCR(oresid), 0);
+}
+
+
diff --git a/pymolfile/molfile/pymolfile-backup2.c b/pymolfile/molfile/pymolfile-backup2.c
new file mode 100644
index 0000000..3411b39
--- /dev/null
+++ b/pymolfile/molfile/pymolfile-backup2.c
@@ -0,0 +1,565 @@
+/* Hey emacs this is -*- C -*- and this is my editor vim.
+ * 
+ * molfile.c : C and Fortran interfaces for molfile_plugins
+ * Copyright (c) Berk Onat <b.onat@warwick.ac.uk> 2017
+ *
+ * This program is under BSD LICENSE
+ */
+
+/*
+ * The code is written following the plugin test 
+ * context of f77_molfile.c by Axel Kohlmeyer and 
+ * in molfile_plugin/src/f77 and catdcd.c by 
+ * Justin Gullingsrud of VMD plugins.
+ */
+
+/* Get HAVE_CONFIG_H */
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdbool.h>
+#include <ctype.h>
+
+/* get fixed-width types if we are using ANSI C99 */
+#ifdef HAVE_STDINT_H
+#  include <stdint.h>
+#elif (defined HAVE_INTTYPES_H)
+#  include <inttypes.h>
+#endif
+
+#include "pymolfile.h"
+
+//for PyArrayInterface:
+/*
+#define CONTIGUOUS 0x01
+#define FORTRAN 0x02
+#define ALIGNED 0x100
+#define NOTSWAPPED 0x200
+#define WRITEABLE 0x400
+#define ARR_HAS_DESCR 0x800
+*/
+//byteorder dictionary
+//char** byteorder = {"<", "little", ">", "big"};
+
+int numplugins=0;
+molfile_plugin_t** plugin_list;
+
+/*
+typedef struct PyArrayInterface{
+    int version;          //contains the integer 2 as a sanity check
+    int nd;               //number of dimensions
+    char typekind;        //kind in array --- character code of typestr
+    int itemsize;         //size of each element
+    int flags;            //flags indicating how the data should be interpreted
+    Py_intptr_t *shape;   //A length-nd array of shape information
+    Py_intptr_t *strides; //A length-nd array of stride information
+    void *data;           //A pointer to the first element of the array
+};
+*/
+/* * * * * * * * * * * * * * * * * * * * * * *
+ * Helper functions to set and store plugins *
+ * * * * * * * * * * * * * * * * * * * * * * */
+
+#if PY_VERSION_HEX >= 0x03000000
+#define PyString_FromString PyBytes_FromString
+NPY_NO_EXPORT void
+gentype_struct_free(PyObject *ptr)
+{
+    PyArrayInterface *arrif;
+    PyObject *context;
+
+    arrif = (PyArrayInterface*)PyCapsule_GetPointer(ptr, NULL);
+    context = (PyObject *)PyCapsule_GetContext(ptr);
+    Py_DECREF(context);
+    Py_XDECREF(arrif->descr);
+    PyArray_free(arrif->shape);
+    PyArray_free(arrif);
+}
+static NPY_INLINE PyObject *
+NpyCapsule_FromVoidPtr(void *ptr, void (*dtor)(PyObject *))
+{
+    PyObject *ret = PyCapsule_New(ptr, NULL, dtor);
+    if (ret == NULL) {
+        PyErr_Clear();
+    }
+    return ret;
+}
+static NPY_INLINE PyObject *
+NpyCapsule_FromVoidPtrAndDesc(void *ptr, void* context, void (*dtor)(PyObject *))
+{
+    PyObject *ret = NpyCapsule_FromVoidPtr(ptr, dtor);
+    if (ret != NULL && PyCapsule_SetContext(ret, context) != 0) {
+        PyErr_Clear();
+        Py_DECREF(ret);
+        ret = NULL;
+    }
+    return ret;
+}
+#else
+#define PyBytes_FromString PyString_FromString
+NPY_NO_EXPORT void
+gentype_struct_free(void *ptr, void *arg)
+{
+    PyArrayInterface *arrif = (PyArrayInterface *)ptr;
+    Py_DECREF((PyObject *)arg);
+    Py_XDECREF(arrif->descr);
+    PyArray_free(arrif->shape);
+    PyArray_free(arrif);
+}
+NpyCapsule_FromVoidPtrAndDesc(void *ptr, void* context,
+        void (*dtor)(void *, void *))
+{
+    return PyCObject_FromVoidPtrAndDesc(ptr, context, dtor);
+}
+#endif
+
+
+#if 0
+void init_readwriteaccess(struct DICTHOLDER *dict);
+
+struct DICTHOLDER * plugin_find(struct DICTHOLDER *dict, const char *pluginname){
+    struct DICTHOLDER *dictitem;
+    dictitem = dict;
+    // search in dictionary linked list
+    while(dictitem != NULL){
+        if(strcmp(dictitem->key, pluginname) == 0){
+	    return dictitem;
+	}
+	dictitem = dictitem->next;
+    }
+    return NULL;
+}
+#endif
+
+molfile_plugin_t* get_plugin(molfile_plugin_t** plug_list, int plug_no)
+{
+    molfile_plugin_t* plugin;
+    if(plug_no < 0){
+	plugin = NULL;
+    } else {
+	plugin = plug_list[plug_no];
+    }
+    return plugin;
+}
+
+#if 0
+void init_readwriteaccess(struct DICTHOLDER *dict){
+    struct DICTHOLDER *dictitem;
+    dictitem = dict;
+    // search in dictionary linked list
+    while(dictitem != NULL){
+	if(!dictitem->id){
+            if(plugin_list[dictitem->id]->read_next_timestep){
+	        dictitem->read = 1;
+	    }
+            if(plugin_list[dictitem->id]->write_timestep){
+	        dictitem->write = 1;
+	    }
+	}
+	dictitem = dictitem->next;
+    }
+}
+
+static int has_readsupport(const char *pluginname){
+    struct DICTHOLDER *item;
+    item = plugin_find(&plugindict, pluginname);
+    if (!item){
+        return item->read;
+    } else {
+	return 0;
+    }
+}
+
+static int has_writesupport(const char *pluginname){
+    struct DICTHOLDER *item;
+    item = plugin_find(&plugindict, pluginname);
+    if (!item){
+        return item->write;
+    } else {
+	return 0;
+    }
+}
+
+static int plugin_add(struct DICTHOLDER *dict, const char *key, int id){
+    struct DICTHOLDER *dictitem;
+    // Check list is empty or it already has the key
+    if (plugin_find(dict, key) == NULL){
+        dictitem = dict;
+        while(1){
+            // Find the empty next in the list and add item
+            if(dictitem == NULL){
+                struct DICTHOLDER *item = (struct DICTHOLDER*) malloc(sizeof(struct DICTHOLDER));
+                item->key  = key;
+		item->id = id;
+		item->read = NULL;
+		item->write = NULL;
+		dictitem = &item;
+		return 0;
+	    } else {
+	        dictitem = dictitem->next;
+	    }
+        }
+    } else {
+        return 1;
+    }
+}
+
+static int plugin_remove(struct DICTHOLDER *dict, const char *key){
+    struct DICTHOLDER *dictitem;
+    // Check list is empty or it already has the key
+    if (plugin_find(dict, key) == NULL){
+        // No key in the list. Nothing to remove.
+        return 1;
+    } else {
+        // Remove key in the list
+        dictitem = dict;
+        while(dictitem != NULL){
+            if(strcmp(dictitem->next->key, key) == 0){
+                struct DICTHOLDER *item = dictitem->next->next;
+                dictitem->next = item;
+	        return 0;
+	    }
+	    dictitem = dictitem->next;
+        }
+        return 1;
+    }
+}
+#endif
+/* * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Interface functions to initialize molfile plugins *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/* check validity of plugins and register them. */
+static int molfile_register(void*, vmdplugin_t *plugin) {
+    if (!plugin->type || !plugin->name || !plugin->author) {
+        // skipping plugin with incomplete header
+        return VMDPLUGIN_ERROR;
+    }
+    else if (plugin->abiversion != vmdplugin_ABIVERSION) {
+        // skipping plugin with incompatible ABI
+        return VMDPLUGIN_ERROR;
+    }
+    else if (0 != strncmp(plugin->type, "mol file", 8)) {
+        // skipping plugin of incompatible type
+        return VMDPLUGIN_ERROR;
+    } 
+    else if (numplugins >= MAXPLUGINS) {
+        // too many plugins: increase MAXPLUGINS
+        return VMDPLUGIN_ERROR;
+    }
+
+    //if (plugin_find(&plugindict, plugin->name) != NULL) {
+        // multiple plugins for file type
+    //    return VMDPLUGIN_ERROR;
+    //} else {
+        plugin_list[numplugins] = (molfile_plugin_t *) plugin;
+	//plugin_add(&plugindict, plugin->name, numplugins);
+        ++numplugins;
+        return VMDPLUGIN_SUCCESS;
+    //}
+}
+
+molfile_plugin_t** molfile_plugin_list(int maxsize)
+{
+    if(maxsize < MAXPLUGINS){
+        maxsize = MAXPLUGINS;
+    }
+    plugin_list = (molfile_plugin_t**) malloc(sizeof(molfile_plugin_t*)*maxsize);
+    return plugin_list;
+}
+
+/* register all available plugins and clear handles. */
+int molfile_init(void) 
+{
+#if 0
+    int molfile_internal_register(void *ptr, vmdplugin_t *plugin)
+    {
+        if (!plugin->type || !plugin->name || !plugin->author) {
+            // skipping plugin with incomplete header
+            return VMDPLUGIN_ERROR;
+        }
+        else if (plugin->abiversion != vmdplugin_ABIVERSION) {
+            // skipping plugin with incompatible ABI
+            return VMDPLUGIN_ERROR;
+        }
+        else if (0 != strncmp(plugin->type, "mol file", 8)) {
+            // skipping plugin of incompatible type
+            return VMDPLUGIN_ERROR;
+        } 
+        else if (num_plugins >= MAX_PLUGINS) {
+            // too many plugins: increase MAXPLUGINS
+            return VMDPLUGIN_ERROR;
+        }
+
+        if (plugin_find(&plugindict, plugin->name) != NULL) {
+            // multiple plugins for file type
+            return VMDPLUGIN_ERROR;
+        } else {
+            plugin_list[numplugins] = (molfile_plugin_t *) plugin;
+            ++numplugins;
+            return VMDPLUGIN_SUCCESS;
+        }
+    }
+#endif
+    MOLFILE_INIT_ALL;
+    MOLFILE_REGISTER_ALL(NULL,molfile_register);
+    return numplugins;
+}
+
+/* unregister all available plugins */
+int molfile_finish(void) 
+{
+    MOLFILE_FINI_ALL;
+    return 0;
+}
+
+/* * * * * * * * * * * * * * * * * * * * * * *
+ * Wrappers to directly access molfile plugin*
+ *         functions and settings            *
+ * * * * * * * * * * * * * * * * * * * * * * */
+
+/* molfile_plugin_t access */
+
+/* Functions in molfile_plugin_t */
+
+PyObject * my_read_structure(PyObject* molpack) {
+    Py_Initialize();
+    import_array();
+    
+    int options = 0;
+    int i;
+    molfile_plugin_t* plugin;
+    void* file_handle;
+    molfile_atom_t* atoms;
+    int numatoms, status;
+    PyArray_Descr *descr;
+    PyObject *p = NULL;
+    //if (PyType_Ready(&MolAtomType) < 0)
+    //    return NULL;
+    //PyTypeObject *atype = &MolAtomType;
+    //MolAtom *atom_t;
+    //atom_t = (MolAtom *)atype->tp_alloc(atype, 0);
+    //p = (PyObject*) atom_t;
+    descr = PyArray_DescrFromObject(p, NULL);
+    MolObject* plugin_handle = (MolObject*) molpack;
+    plugin = plugin_handle->plugin;
+    file_handle = plugin_handle->file_handle;
+    numatoms = plugin_handle->natoms;
+    atoms = (molfile_atom_t *)calloc(numatoms,sizeof(molfile_atom_t));
+    status = plugin->read_structure(file_handle, &options, atoms);
+    if (status!=0){
+      PyErr_Format(PyExc_IOError, "Error accessing molfile_atom_t in read_structure function of plugin.");
+      return NULL;
+    }
+    PyArrayObject* oresid;
+    PyObject* array;
+    int64_t* cresid;
+    int nd = 1;
+    npy_intp dims[1] = { numatoms };
+    oresid = (PyArrayObject*) PyArray_SimpleNew(nd, dims, NPY_INT64);
+    Py_DECREF(p);
+    //array = (PyArrayObject*) PyArray_SimpleNewFromDescr(1, dims, descr);
+    //PyObject_Print(array, stdout, 0);
+    if (!oresid){
+      PyErr_Format(PyExc_IOError, "Error copying molfile_atom_t into numpy array.");
+      return NULL;
+    }
+    npy_intp* n = PyArray_DIMS(oresid);
+    cresid = (int64_t*) PyArray_DATA(oresid);
+    
+//    for (i=0;i<numatoms;i++){
+//        cresid[i] = (int64_t) atoms[i].resid;
+//    }
+    return (PyObject*) PyArray_FromArray(oresid, PyArray_DESCR(oresid), 0);
+}
+
+
+PyObject* get_structure(PyObject* self)
+{
+    int options = 0;
+    int i;
+    molfile_plugin_t* plugin;
+    void* file_handle;
+    molfile_atom_t* data;
+    int numatoms, status;
+    int nd;
+    PyArrayInterface *inter;
+    PyArrayObject *ret;
+    char endian = NPY_NATBYTE;
+    // Access plugin_handle values
+    MolObject* plugin_handle = (MolObject*) self;
+    plugin = plugin_handle->plugin;
+    file_handle = plugin_handle->file_handle;
+    numatoms = plugin_handle->natoms;
+    // Allocate memory for array of molfile_atom_t struct
+    data = (molfile_atom_t *)calloc(numatoms,sizeof(molfile_atom_t));
+    // Get array values in molfile_atom_t
+    status = plugin->read_structure(file_handle, &options, data);
+    // Check if the plugin returns the results
+    if (status!=0){
+      PyErr_Format(PyExc_IOError, "Error accessing molfile_atom_t in read_structure function of plugin.");
+      return NULL;
+    }
+    // Now, we need to allocate a PyArray with PyArrayInterface
+    // and assign the allocated memory block to the data.
+    // To do this, we will build a numpy array from scratch.
+    // First, allocate a PyObject of PyArrayInterface and 
+    // assign relevant information such as typestr, descr for C-side 
+    // struct and second we will assign molfile_atom_t array as a block 
+    // of data. Last, hope this works.
+    nd = 1;
+    npy_intp dims[1] = { 1 };
+    // We would allocate a numpy array with
+    // but will not look clever to copy all the data into the new array.
+    // Instead, we allocate a numpy array with one element and change 
+    // the definition of array. I know I said that it will be from scratch 
+    // but let's accept nobody wants to define everything in numpy again.
+    //oresid = (PyArrayObject*) PyArray_SimpleNew(nd, dims, NPY_INT);
+    // NPY_INT? Don't worry, we will change it.
+    //Py_intptr_t *shape, *strides;
+    //void *data = NULL;
+ 
+    inter = (PyArrayInterface*)malloc(sizeof(PyArrayInterface));
+    if (inter==NULL)
+      return PyErr_NoMemory();
+   
+    // __array_interface__ descr for C side of __array_struct__
+    // Could not find a better way to generate the list of tuples for 
+    // Python side. May need to change this later.
+    PyObject *tuple = PyTuple_New(13);
+    // One tuple to bind them
+    PyObject *py_list_name = PyList_New(2);
+    PyList_SET_ITEM(py_list_name, 0, PyString_FromString("name"));
+    PyList_SET_ITEM(py_list_name, 0, PyString_FromString("|S16"));
+    PyTuple_SET_ITEM(tuple, 0, py_list_name);
+    PyObject *py_list_type = PyList_New(2);
+    PyList_SET_ITEM(py_list_type, 0, PyString_FromString("type"));
+    PyList_SET_ITEM(py_list_type, 0, PyString_FromString("|S16"));
+    PyTuple_SET_ITEM(tuple, 1, py_list_type);
+    PyObject *py_list_resname = PyList_New(2);
+    PyList_SET_ITEM(py_list_resname, 0, PyString_FromString("resname"));
+    PyList_SET_ITEM(py_list_resname, 0, PyString_FromString("|S8"));
+    PyTuple_SET_ITEM(tuple, 2, py_list_resname);
+    PyObject *py_list_resid = PyList_New(2);
+    PyList_SET_ITEM(py_list_resid, 0, PyString_FromString("resid"));
+    PyList_SET_ITEM(py_list_resid, 0, PyString_FromString("<i4"));
+    PyTuple_SET_ITEM(tuple, 3, py_list_resid);
+    PyObject *py_list_segid = PyList_New(2);
+    PyList_SET_ITEM(py_list_segid, 0, PyString_FromString("segid"));
+    PyList_SET_ITEM(py_list_segid, 0, PyString_FromString("|S8"));
+    PyTuple_SET_ITEM(tuple, 4, py_list_segid);
+    PyObject *py_list_chain = PyList_New(2);
+    PyList_SET_ITEM(py_list_chain, 0, PyString_FromString("chain"));
+    PyList_SET_ITEM(py_list_chain, 0, PyString_FromString("|S2"));
+    PyTuple_SET_ITEM(tuple, 5, py_list_chain);
+    PyObject *py_list_altloc = PyList_New(2);
+    PyList_SET_ITEM(py_list_altloc, 0, PyString_FromString("altloc"));
+    PyList_SET_ITEM(py_list_altloc, 0, PyString_FromString("|S2"));
+    PyTuple_SET_ITEM(tuple, 6, py_list_altloc);
+    PyObject *py_list_insertion = PyList_New(2);
+    PyList_SET_ITEM(py_list_insertion, 0, PyString_FromString("insertion"));
+    PyList_SET_ITEM(py_list_insertion, 0, PyString_FromString("|S2"));
+    PyTuple_SET_ITEM(tuple, 7, py_list_insertion);
+    PyObject *py_list_occupancy = PyList_New(2);
+    PyList_SET_ITEM(py_list_occupancy, 0, PyString_FromString("occupancy"));
+    PyList_SET_ITEM(py_list_occupancy, 0, PyString_FromString("|f4"));
+    PyTuple_SET_ITEM(tuple, 8, py_list_occupancy);
+    PyObject *py_list_bfactor = PyList_New(2);
+    PyList_SET_ITEM(py_list_bfactor, 0, PyString_FromString("bfactor"));
+    PyList_SET_ITEM(py_list_bfactor, 0, PyString_FromString("|f4"));
+    PyTuple_SET_ITEM(tuple, 9, py_list_bfactor);
+    PyObject *py_list_mass = PyList_New(2);
+    PyList_SET_ITEM(py_list_mass, 0, PyString_FromString("mass"));
+    PyList_SET_ITEM(py_list_mass, 0, PyString_FromString("|f4"));
+    PyTuple_SET_ITEM(tuple, 10, py_list_mass);
+    PyObject *py_list_charge = PyList_New(2);
+    PyList_SET_ITEM(py_list_charge, 0, PyString_FromString("charge"));
+    PyList_SET_ITEM(py_list_charge, 0, PyString_FromString("|f4"));
+    PyTuple_SET_ITEM(tuple, 11, py_list_charge);
+    PyObject *py_list_radius = PyList_New(2);
+    PyList_SET_ITEM(py_list_radius, 0, PyString_FromString("radius"));
+    PyList_SET_ITEM(py_list_radius, 0, PyString_FromString("|f4"));
+    PyTuple_SET_ITEM(tuple, 12, py_list_radius);
+    PyObject *py_list_atomicnumber = PyList_New(2);
+    PyList_SET_ITEM(py_list_atomicnumber, 0, PyString_FromString("atomicnumber"));
+    PyList_SET_ITEM(py_list_atomicnumber, 0, PyString_FromString("|i4"));
+    PyTuple_SET_ITEM(tuple, 13, py_list_atomicnumber);
+    //PyArray_Descr *descr = (PyObject*) tuple;
+    PyArray_Descr *descr = NULL;
+    // Here we define the size and stride parameters
+    npy_intp shape[1] = { numatoms };
+    npy_intp strides[1] = { 54*sizeof(char) + 8*sizeof(int) + 20*sizeof(float) };
+
+    inter->two = 2;
+    inter->nd = nd;
+    inter->typekind = 'V';
+    inter->itemsize = 82*sizeof(char);
+    inter->flags = NPY_ARRAY_NOTSWAPPED | NPY_ARRAY_ALIGNED | NPY_ARRAY_WRITEABLE | NPY_ARR_HAS_DESCR;
+    inter->strides = (Py_intptr_t *)strides;
+    inter->shape = (Py_intptr_t *)shape;
+    inter->data = (void*) data;
+   // inter->descr = (PyObject*) tuple;
+    if ((inter->flags & NPY_ARRAY_NOTSWAPPED) != NPY_ARRAY_NOTSWAPPED) {
+        endian = NPY_OPPBYTE;
+	inter->flags &= ~NPY_ARRAY_NOTSWAPPED;
+    }
+    // typestr is relatively easy to assign to __array_interface__
+    printf("TEST1\n");
+    if (inter->flags & NPY_ARR_HAS_DESCR) {
+        printf("TEST1-1\n");
+        if (PyArray_DescrConverter(inter->descr, &descr) == NPY_FAIL) {
+	    descr = NULL;
+	    PyErr_Clear();
+	}
+    }
+    printf("TEST1-2\n");
+    char buf[40];
+    PyOS_snprintf(buf, sizeof(buf),
+		  "%c%c%d", endian, 
+		  inter->typekind, 
+		  inter->itemsize);
+    printf("TEST2\n");
+    PyObject *stringobj = PyString_FromString(buf);
+    if (stringobj == NULL) {
+       return NULL;
+    }
+    printf("TEST2-2\n");
+    if (PyArray_DescrConverter(stringobj, &descr) != NPY_SUCCEED) {
+        Py_DECREF(stringobj);
+	return NULL;
+    }
+    printf("TEST2-3\n");
+    Py_DECREF(stringobj);
+
+    printf("TEST3\n");
+    ret = (PyArrayObject *)PyArray_NewFromDescr(&PyArray_Type, descr,
+                               inter->nd, inter->shape,
+                               inter->strides, inter->data,
+                               inter->flags, NULL);
+    printf("TEST4\n");
+    Py_INCREF(inter);
+    if (PyArray_SetBaseObject(ret, (PyObject *)inter) < 0) {
+	Py_DECREF(ret);
+	return NULL;
+    }
+    printf("TEST5\n");
+//    Py_DECREF(attr);
+    PyArray_UpdateFlags(ret, NPY_ARRAY_UPDATE_ALL);
+    printf("TEST6\n");
+    return (PyObject *)ret;
+}
+//    obj = NpyCapsule_FromVoidPtrAndDesc(inter, self, gentype_struct_free);
+/*
+#ifdef Py_CAPSULE_H
+  obj = PyCapsule_New((void*)inter, "struct SignedIntBuf", free_capsule);
+#else
+  obj = PyCObject_FromVoidPtrAndDesc((void*)inter, (void*)self, free_array_interface);
+#endif
+*/
+  // Cross fingers here.
+//  return obj;
+
diff --git a/pymolfile/molfile/pymolfile-backup2.h b/pymolfile/molfile/pymolfile-backup2.h
new file mode 100644
index 0000000..a97de9e
--- /dev/null
+++ b/pymolfile/molfile/pymolfile-backup2.h
@@ -0,0 +1,354 @@
+/* Hey emacs this is -*- C -*- and this is my editor vim.
+ * 
+ * molfile.c : C and Fortran interfaces for molfile_plugins
+ * Copyright (c) Berk Onat <b.onat@warwick.ac.uk> 2017
+ *
+ * This program is under BSD LICENSE
+ */
+
+/*
+ * The code is written following the plugin test 
+ * context of f77_molfile.c by Axel Kohlmeyer and 
+ * in molfile_plugin/src/f77 and catdcd.c by 
+ * Justin Gullingsrud of VMD plugins.
+ */
+
+#ifndef _MOLFILE_H_
+#define _MOLFILE_H_
+
+#ifdef __cplusplus
+extern "C"
+{
+
+#endif
+
+#include "molfile_plugin.h"
+#include "libmolfile_plugin.h"
+#include "vmdplugin.h"
+#include "Python.h"
+#include "structmember.h"
+#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION
+#include <numpy/arrayobject.h>
+
+enum { pluginOK, pluginNOINIT, pluginCLOSE, pluginNOMEM, 
+       pluginENDOFFILE, pluginFILENOTFOUND, pluginFORMATERROR };
+
+#ifndef MAXPLUGINS
+#define MAXPLUGINS 200
+#endif
+
+struct MolObject {
+    PyObject_HEAD
+    molfile_plugin_t* plugin;
+    void* file_handle;
+    int natoms;
+    MolObject(void) {}
+};
+
+static void MolObject_dealloc(MolObject* self)
+{
+    Py_XDECREF(self->plugin);
+    Py_XDECREF(self->file_handle);
+    Py_TYPE(self)->tp_free((PyObject*)self);
+}
+
+static PyObject * MolObject_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
+{
+    MolObject *self;
+
+    self = (MolObject *)type->tp_alloc(type, 0);
+    if (self != NULL) {
+        self->plugin = NULL;
+        self->file_handle = NULL;
+        self->natoms = 0;
+    }
+
+    return (PyObject *)self;
+}
+
+static int MolObject_init(MolObject *self, PyObject *args, PyObject *kwds)
+{
+    molfile_plugin_t *plugin = NULL;
+    void *file_handle = NULL;
+    molfile_plugin_t *tmp1 = NULL;
+    void *tmp2 = NULL;
+
+    static char *kwlist[] = {"plugin", "file_handle", "natoms", NULL};
+
+    if (! PyArg_ParseTupleAndKeywords(args, kwds, "|OOi", kwlist,
+                                      &plugin, &file_handle,
+                                      &self->natoms))
+        return -1;
+
+    if (plugin) {
+        tmp1 = self->plugin;
+        Py_INCREF(plugin);
+        self->plugin = plugin;
+        Py_XDECREF(tmp1);
+    }
+
+    if (file_handle) {
+        tmp2 = self->file_handle;
+        Py_INCREF(file_handle);
+        self->file_handle = file_handle;
+        Py_XDECREF(tmp2);
+    }
+
+    return 0;
+}
+
+static molfile_plugin_t* MolObject_plugin(MolObject* self)
+{
+        return self->plugin;
+}
+
+static void* MolObject_file_handle(MolObject* self)
+{
+        return self->file_handle;
+}
+
+static PyObject* MolObject_natoms(MolObject* self)
+{
+        return PyLong_FromLong((long)self->natoms);
+}
+
+static PyMemberDef MolObject_members[] = {
+    {"plugin", T_OBJECT_EX, offsetof(MolObject, plugin), 0,
+     "molfile_plugin_t type plugin"},
+    {"file_handle", T_OBJECT_EX, offsetof(MolObject, file_handle), 0,
+     "file handle for plugin"},
+    {"natoms", T_INT, offsetof(MolObject, natoms), 0,
+     "number of atoms"},
+    {NULL}  /* Sentinel */
+};
+
+static PyMethodDef MolObject_methods[] = {
+    {"get_plugin", (PyCFunction)MolObject_plugin, METH_NOARGS,
+     "Return the plugin"
+    },
+    {"get_file_handle", (PyCFunction)MolObject_file_handle, METH_NOARGS,
+     "Return the plugin"
+    },
+    {"get_natoms", (PyCFunction)MolObject_natoms, METH_NOARGS,
+     "Return the number of atoms"
+    },
+    {NULL}  /* Sentinel */
+};
+
+
+#ifndef PyVarObject_HEAD_INIT
+    #define PyVarObject_HEAD_INIT(type, size) \
+        PyObject_HEAD_INIT(type) size,
+#endif
+
+static PyTypeObject MolObjectType = {
+    PyVarObject_HEAD_INIT(NULL, 0)
+    "molobject",                 /*tp_name*/
+    sizeof(MolObject),          /*tp_basicsize*/
+    0,                         /*tp_itemsize*/
+    (destructor)MolObject_dealloc, /*tp_dealloc*/
+    0,                         /*tp_print*/
+    0,                         /*tp_getattr*/
+    0,                         /*tp_setattr*/
+    0,                         /*tp_reserved*/
+    0,                         /*tp_repr*/
+    0,                         /*tp_as_number*/
+    0,                         /*tp_as_sequence*/
+    0,                         /*tp_as_mapping*/
+    0,                         /*tp_hash */
+    0,                         /*tp_call*/
+    0,                         /*tp_str*/
+    0,                         /*tp_getattro*/
+    0,                         /*tp_setattro*/
+    0,                         /*tp_as_buffer*/
+    Py_TPFLAGS_DEFAULT | 
+	    Py_TPFLAGS_BASETYPE,   /* tp_flags */
+    "molobject objects",           /* tp_doc */
+    0,                         /* tp_traverse */
+    0,                         /* tp_clear */
+    0,                         /* tp_richcompare */
+    0,                         /* tp_weaklistoffset */
+    0,                         /* tp_iter */
+    0,                         /* tp_iternext */
+    MolObject_methods,         /* tp_methods */
+    MolObject_members,         /* tp_members */
+    0,                         /* tp_getset */
+    0,                         /* tp_base */
+    0,                         /* tp_dict */
+    0,                         /* tp_descr_get */
+    0,                         /* tp_descr_set */
+    0,                         /* tp_dictoffset */
+    (initproc)MolObject_init,      /* tp_init */
+    0,                         /* tp_alloc */	
+    MolObject_new,                 /* tp_new */
+};
+
+#if 0
+struct MolAtom {
+    PyObject_HEAD
+    char* name; 
+    char* type; 
+    char* resname;
+    int* resid;
+    char* segid;
+    char* chain;
+    char* altloc;
+    char* insertion;
+    float* occupancy;
+    float* bfactor;
+    float* mass;
+    float* charge;
+    float* radius;
+    float* atomicnumber;
+    float* ctnumber;
+    MolAtom(void) {}
+};
+
+static void MolAtom_dealloc(MolAtom* self)
+{
+    Py_XDECREF(self->name); 
+    Py_XDECREF(self->type); 
+    Py_XDECREF(self->resname);
+    Py_XDECREF(self->resid);
+    Py_XDECREF(self->segid);
+    Py_XDECREF(self->chain);
+    Py_XDECREF(self->altloc);
+    Py_XDECREF(self->insertion);
+    Py_XDECREF(self->occupancy);
+    Py_XDECREF(self->bfactor);
+    Py_XDECREF(self->mass);
+    Py_XDECREF(self->charge);
+    Py_XDECREF(self->radius);
+    Py_XDECREF(self->atomicnumber);
+    Py_XDECREF(self->ctnumber);
+    Py_TYPE(self)->tp_free((PyObject*)self);
+}
+
+static PyObject * MolAtom_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
+{
+    MolAtom *self;
+
+    self = (MolAtom *)type->tp_alloc(type, 0);
+    if (self != NULL) {
+        self->name = NULL;
+        self->type = NULL;
+        self->resname = NULL;
+        self->resid = NULL;
+        self->segid = NULL;
+        self->chain = NULL;
+        self->altloc = NULL;
+        self->insertion = NULL;
+        self->occupancy = NULL;
+        self->bfactor = NULL;
+        self->mass = NULL;
+        self->charge = NULL;
+        self->radius = NULL;
+        self->atomicnumber = NULL;
+        self->ctnumber = NULL;
+    }
+
+    return (PyObject *)self;
+}
+
+static PyMemberDef MolAtom_members[] = {
+    {"name", T_STRING, offsetof(MolAtom, name), 0,""},
+    {"type", T_STRING, offsetof(MolAtom, type), 0,""},
+    {"resname", T_STRING, offsetof(MolAtom, resname), 0,""},
+    {"resid", T_INT, offsetof(MolAtom, resid), 0,""},
+    {"segid", T_STRING, offsetof(MolAtom, segid), 0,""},
+    {"chain", T_STRING, offsetof(MolAtom, chain), 0,""},
+    {"altloc", T_STRING, offsetof(MolAtom, altloc), 0,""},
+    {"insertion", T_STRING, offsetof(MolAtom, insertion), 0,""},
+    {"occupancy", T_FLOAT, offsetof(MolAtom, occupancy), 0,""},
+    {"bfactor", T_FLOAT, offsetof(MolAtom, bfactor), 0,""},
+    {"mass", T_FLOAT, offsetof(MolAtom, mass), 0,""},
+    {"charge", T_FLOAT, offsetof(MolAtom, charge), 0,""},
+    {"radius", T_FLOAT, offsetof(MolAtom, radius), 0,""},
+    {"atomicnumber", T_INT, offsetof(MolAtom, atomicnumber), 0,""},
+    {"ctnumber", T_INT, offsetof(MolAtom, ctnumber), 0,""},
+    {NULL, NULL, 0, NULL}  /* Sentinel */
+};
+
+static PyTypeObject MolAtomType = {
+    PyVarObject_HEAD_INIT(NULL, 0)
+    "molobject",                 /*tp_name*/
+    sizeof(MolAtom),          /*tp_basicsize*/
+    0,                         /*tp_itemsize*/
+    (destructor)MolAtom_dealloc, /*tp_dealloc*/
+    0,                         /*tp_print*/
+    0,                         /*tp_getattr*/
+    0,                         /*tp_setattr*/
+    0,                         /*tp_reserved*/
+    0,                         /*tp_repr*/
+    0,                         /*tp_as_number*/
+    0,                         /*tp_as_sequence*/
+    0,                         /*tp_as_mapping*/
+    0,                         /*tp_hash */
+    0,                         /*tp_call*/
+    0,                         /*tp_str*/
+    0,                         /*tp_getattro*/
+    0,                         /*tp_setattro*/
+    0,                         /*tp_as_buffer*/
+    Py_TPFLAGS_DEFAULT | 
+	    Py_TPFLAGS_BASETYPE,   /* tp_flags */
+    "molatom objects",           /* tp_doc */
+    0,                         /* tp_traverse */
+    0,                         /* tp_clear */
+    0,                         /* tp_richcompare */
+    0,                         /* tp_weaklistoffset */
+    0,                         /* tp_iter */
+    0,                         /* tp_iternext */
+    0,         /* tp_methods */
+    MolAtom_members,         /* tp_members */
+    0,                         /* tp_getset */
+    0,                         /* tp_base */
+    0,                         /* tp_dict */
+    0,                         /* tp_descr_get */
+    0,                         /* tp_descr_set */
+    0,                         /* tp_dictoffset */
+    0,      /* tp_init */
+    0,                         /* tp_alloc */	
+    MolAtom_new,                 /* tp_new */
+};
+#endif
+PyObject * my_read_structure(PyObject* molpack);
+PyObject * get_structure(PyObject* molpack);
+
+#if 0
+typedef struct DICTHOLDER {
+    const char *key;          // Dictionary key
+    int id;                   // Id of the item
+    int read;                 // 1 if molfile plugin read the format
+    int write;                // 1 if molfile plugin write in this format
+    struct DICTHOLDER *next;  // Next item in the dictionary
+} DICTHOLDER;
+
+struct DICTHOLDER * plugin_find(struct DICTHOLDER *dict, const char *pluginname);
+
+static int plugin_add(struct DICTHOLDER *dict, const char *key, int id);
+
+static int plugin_remove(struct DICTHOLDER *dict, const char *key);
+
+static int has_readsupport(const char *pluginname);
+
+static int has_writesupport(const char *pluginname);
+
+static molfile_plugin_t *get_plugin(const char *pluginname);
+
+static int molfile_register(void *ptr, vmdplugin_t *plugin);
+
+#endif
+molfile_plugin_t* get_plugin(molfile_plugin_t** plug_list, int plug_no);
+
+molfile_plugin_t** molfile_plugin_list(int maxsize);
+
+int molfile_init(void);
+
+int molfile_finish(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _MOLFILE_H_ */
+
diff --git a/pymolfile/molfile/pymolfile-new.c b/pymolfile/molfile/pymolfile-new.c
new file mode 100644
index 0000000..21b1c00
--- /dev/null
+++ b/pymolfile/molfile/pymolfile-new.c
@@ -0,0 +1,1522 @@
+/* Hey emacs this is -*- C -*- and this is my editor vim.
+ * 
+ * molfile.c : C and Fortran interfaces for molfile_plugins
+ * Copyright (c) Berk Onat <b.onat@warwick.ac.uk> 2017
+ *
+ * This program is under BSD LICENSE
+ */
+
+/*
+ * The code is written following the plugin test 
+ * context of f77_molfile.c by Axel Kohlmeyer and 
+ * in molfile_plugin/src/f77 and catdcd.c by 
+ * Justin Gullingsrud of VMD plugins.
+ */
+
+/* Get HAVE_CONFIG_H */
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdbool.h>
+#include <ctype.h>
+
+/* get fixed-width types if we are using ANSI C99 */
+#ifdef HAVE_STDINT_H
+#  include <stdint.h>
+#elif (defined HAVE_INTTYPES_H)
+#  include <inttypes.h>
+#endif
+
+#include "pymolfile.h"
+
+
+//for PyArrayInterface:
+/*
+#define CONTIGUOUS 0x01
+#define FORTRAN 0x02
+#define ALIGNED 0x100
+#define NOTSWAPPED 0x200
+#define WRITEABLE 0x400
+#define ARR_HAS_DESCR 0x800
+*/
+//byteorder dictionary
+//char** byteorder = {"<", "little", ">", "big"};
+
+int numplugins=0;
+molfile_plugin_t** plugin_list;
+
+/*
+typedef struct PyArrayInterface{
+    int version;          //contains the integer 2 as a sanity check
+    int nd;               //number of dimensions
+    char typekind;        //kind in array --- character code of typestr
+    int itemsize;         //size of each element
+    int flags;            //flags indicating how the data should be interpreted
+    Py_intptr_t *shape;   //A length-nd array of shape information
+    Py_intptr_t *strides; //A length-nd array of stride information
+    void *data;           //A pointer to the first element of the array
+};
+*/
+/* * * * * * * * * * * * * * * * * * * * * * *
+ * Helper functions to set and store plugins *
+ * * * * * * * * * * * * * * * * * * * * * * */
+
+#define PyInt_AsSsize_t PyLong_AsSsize_t
+#define PyArray_Check(op) PyObject_TypeCheck(op, &PyArray_Type)
+
+#if PY_VERSION_HEX >= 0x03000000
+#define PyString_FromString PyBytes_FromString
+NPY_NO_EXPORT void
+gentype_struct_free(PyObject *ptr)
+{
+    PyArrayInterface *arrif;
+    PyObject *context;
+
+    arrif = (PyArrayInterface*)PyCapsule_GetPointer(ptr, NULL);
+    context = (PyObject *)PyCapsule_GetContext(ptr);
+    Py_DECREF(context);
+    Py_XDECREF(arrif->descr);
+    PyArray_free(arrif->shape);
+    PyArray_free(arrif);
+}
+static NPY_INLINE void *
+NpyCapsule_AsVoidPtr(PyObject *obj)
+{
+    void *ret = PyCapsule_GetPointer(obj, NULL);
+    if (ret == NULL) {
+        PyErr_Clear();
+    }   
+    return ret;
+}
+static NPY_INLINE PyObject *
+NpyCapsule_FromVoidPtr(void *ptr, void (*dtor)(PyObject *))
+{
+    PyObject *ret = PyCapsule_New(ptr, NULL, dtor);
+    if (ret == NULL) {
+        PyErr_Clear();
+    }
+    return ret;
+}
+static NPY_INLINE PyObject *
+NpyCapsule_FromVoidPtrAndDesc(void *ptr, void* context, void (*dtor)(PyObject *))
+{
+    PyObject *ret = NpyCapsule_FromVoidPtr(ptr, dtor);
+    if (ret != NULL && PyCapsule_SetContext(ret, context) != 0) {
+        PyErr_Clear();
+        Py_DECREF(ret);
+        ret = NULL;
+    }
+    return ret;
+}
+#else
+#define PyBytes_FromString PyString_FromString
+NPY_NO_EXPORT void
+gentype_struct_free(void *ptr, void *arg)
+{
+    PyArrayInterface *arrif = (PyArrayInterface *)ptr;
+    Py_DECREF((PyObject *)arg);
+    Py_XDECREF(arrif->descr);
+    PyArray_free(arrif->shape);
+    PyArray_free(arrif);
+}
+NpyCapsule_FromVoidPtrAndDesc(void *ptr, void* context,
+        void (*dtor)(void *, void *))
+{
+    return PyCObject_FromVoidPtrAndDesc(ptr, context, dtor);
+}
+#endif
+static PyObject *typeDict = NULL;   /* Must be explicitly loaded */
+
+#define PyUString_Check PyUnicode_Check
+#define PyUString_GET_SIZE PyUnicode_GET_SIZE
+#define PyUString_FromFormat PyUnicode_FromFormat
+#define PyInt_FromLong PyLong_FromLong
+#define PyString_Type PyBytes_Type
+#define PyInt_Type PyLong_Type
+
+#define NPY_NEXT_ALIGNED_OFFSET(offset, alignment) \
+                (((offset) + (alignment) - 1) & (-(alignment)))
+
+static PyArray_Descr *
+_convert_from_array_descr(PyObject *obj, int align)
+{
+    int n, i, totalsize;
+    int ret;
+    PyObject *fields, *item, *newobj;
+    PyObject *name, *tup, *title;
+    PyObject *nameslist;
+    PyArray_Descr *newea;
+    PyArray_Descr *conv;
+    /* Types with fields need the Python C API for field access */
+    char dtypeflags = NPY_NEEDS_PYAPI;
+    int maxalign = 0;
+
+    printf("Test1\n");
+    n = PyList_GET_SIZE(obj);
+    nameslist = PyTuple_New(n);
+    if (!nameslist) {
+        return NULL;
+    }
+    totalsize = 0;
+    fields = PyDict_New();
+    for (i = 0; i < n; i++) {
+        item = PyList_GET_ITEM(obj, i);
+        if (!PyTuple_Check(item) || (PyTuple_GET_SIZE(item) < 2)) {
+            goto fail;
+        }
+        name = PyTuple_GET_ITEM(item, 0);
+        if (PyUString_Check(name)) {
+            title = NULL;
+        }
+        else if (PyTuple_Check(name)) {
+            if (PyTuple_GET_SIZE(name) != 2) {
+                goto fail;
+            }
+            title = PyTuple_GET_ITEM(name, 0);
+            name = PyTuple_GET_ITEM(name, 1);
+            if (!PyUString_Check(name)) {
+                goto fail;
+            }
+        }
+        else {
+            goto fail;
+        }
+
+        /* Insert name into nameslist */
+        Py_INCREF(name);
+
+        if (PyUString_GET_SIZE(name) == 0) {
+            Py_DECREF(name);
+            if (title == NULL) {
+                name = PyUString_FromFormat("f%d", i);
+            }
+#if PY_VERSION_HEX >= 0x03000000
+            /* On Py3, allow only non-empty Unicode strings as field names */
+            else if (PyUString_Check(title) && PyUString_GET_SIZE(title) > 0) {
+                name = title;
+                Py_INCREF(name);
+            }
+            else {
+                goto fail;
+            }
+#else
+            else {
+                name = title;
+                Py_INCREF(name);
+            }
+#endif
+        }
+        PyTuple_SET_ITEM(nameslist, i, name);
+
+        /* Process rest */
+
+    printf("Test2\n");
+        if (PyTuple_GET_SIZE(item) == 2) {
+            if (align) {
+    printf("Test3\n");
+                ret = PyArray_DescrAlignConverter(PyTuple_GET_ITEM(item, 1),
+                                                        &conv);
+            }
+            else {
+    printf("Test4\n");
+                ret = PyArray_DescrConverter(PyTuple_GET_ITEM(item, 1), &conv);
+            }
+            if (ret == NPY_FAIL) {
+                PyObject_Print(PyTuple_GET_ITEM(item, 1), stderr, 0);
+            }
+        }
+        else if (PyTuple_GET_SIZE(item) == 3) {
+            newobj = PyTuple_GetSlice(item, 1, 3);
+            if (align) {
+    printf("Test5\n");
+                ret = PyArray_DescrAlignConverter(newobj, &conv);
+            }
+            else {
+    printf("Test6\n");
+                ret = PyArray_DescrConverter(newobj, &conv);
+            }
+            Py_DECREF(newobj);
+        }
+        else {
+            goto fail;
+        }
+        if (ret == NPY_FAIL) {
+            goto fail;
+        }
+        if ((PyDict_GetItem(fields, name) != NULL)
+             || (title
+#if PY_VERSION_HEX >= 0x03000000
+                 && PyUString_Check(title)
+#else
+                 && (PyUString_Check(title) || PyUnicode_Check(title))
+#endif
+                 && (PyDict_GetItem(fields, title) != NULL))) {
+#if PY_VERSION_HEX >= 0x03000000
+            name = PyUnicode_AsUTF8String(name);
+#endif
+            PyErr_Format(PyExc_ValueError,
+                    "field '%s' occurs more than once", PyBytes_AsString(name));
+#if PY_VERSION_HEX >= 0x03000000
+            Py_DECREF(name);
+#endif
+            goto fail;
+        }
+        dtypeflags |= (conv->flags & NPY_FROM_FIELDS);
+        if (align) {
+            int _align;
+
+            _align = conv->alignment;
+            if (_align > 1) {
+                totalsize = NPY_NEXT_ALIGNED_OFFSET(totalsize, _align);
+            }
+            maxalign = PyArray_MAX(maxalign, _align);
+        }
+        tup = PyTuple_New((title == NULL ? 2 : 3));
+        PyTuple_SET_ITEM(tup, 0, (PyObject *)conv);
+        PyTuple_SET_ITEM(tup, 1, PyInt_FromLong((long) totalsize));
+
+        /*
+         * Title can be "meta-data".  Only insert it
+         * into the fields dictionary if it is a string
+         * and if it is not the same as the name.
+         */
+        if (title != NULL) {
+            Py_INCREF(title);
+            PyTuple_SET_ITEM(tup, 2, title);
+            PyDict_SetItem(fields, name, tup);
+#if PY_VERSION_HEX >= 0x03000000
+            if (PyUString_Check(title)) {
+#else
+            if (PyUString_Check(title) || PyUnicode_Check(title)) {
+#endif
+                if (PyDict_GetItem(fields, title) != NULL) {
+                    PyErr_SetString(PyExc_ValueError,
+                            "title already used as a name or title.");
+                    Py_DECREF(tup);
+                    goto fail;
+                }
+                PyDict_SetItem(fields, title, tup);
+            }
+        }
+        else {
+            PyDict_SetItem(fields, name, tup);
+        }
+
+        totalsize += conv->elsize;
+        Py_DECREF(tup);
+    }
+
+    if (maxalign > 1) {
+        totalsize = NPY_NEXT_ALIGNED_OFFSET(totalsize, maxalign);
+    }
+
+    newea = PyArray_DescrNewFromType(NPY_VOID);
+    if (newea == NULL) {
+        Py_XDECREF(fields);
+        Py_XDECREF(nameslist);
+        return NULL;
+    }
+    newea->fields = fields;
+    newea->names = nameslist;
+    newea->elsize = totalsize;
+    newea->flags = dtypeflags;
+
+    /* Structured arrays get a sticky aligned bit */
+    if (align) {
+        newea->flags |= NPY_ALIGNED_STRUCT;
+        newea->alignment = maxalign;
+    }
+    return newea;
+
+ fail:
+    Py_DECREF(fields);
+    Py_DECREF(nameslist);
+    return NULL;
+
+}
+
+static NPY_INLINE npy_bool
+_is_basic_python_type(PyTypeObject *tp)
+{
+    return (
+        /* Basic number types */
+        tp == &PyBool_Type ||
+#if PY_VERSION_HEX >= 0x03000000
+        tp == &PyInt_Type ||
+#endif
+        tp == &PyLong_Type ||
+        tp == &PyFloat_Type ||
+        tp == &PyComplex_Type ||
+
+        /* Basic sequence types */
+        tp == &PyList_Type ||
+        tp == &PyTuple_Type ||
+        tp == &PyDict_Type ||
+        tp == &PySet_Type ||
+        tp == &PyFrozenSet_Type ||
+        tp == &PyUnicode_Type ||
+        tp == &PyBytes_Type ||
+#if PY_VERSION_HEX >= 0x03000000
+        tp == &PyString_Type ||
+#endif
+
+        /* other builtins */
+        tp == &PySlice_Type ||
+        tp == Py_TYPE(Py_None) ||
+        tp == Py_TYPE(Py_Ellipsis) ||
+        tp == Py_TYPE(Py_NotImplemented) ||
+
+        /* TODO: ndarray, but we can't see PyArray_Type here */
+
+        /* sentinel to swallow trailing || */
+        NPY_FALSE
+    );
+}
+
+static NPY_INLINE PyObject *
+maybe_get_attr(PyObject *obj, char *name)
+{
+    PyTypeObject *tp = Py_TYPE(obj);
+    PyObject *res = (PyObject *)NULL;
+
+    /* Attribute referenced by (char *)name */
+    if (tp->tp_getattr != NULL) {
+        res = (*tp->tp_getattr)(obj, name);
+        if (res == NULL) {
+            PyErr_Clear();
+        }
+    }
+    /* Attribute referenced by (PyObject *)name */
+    else if (tp->tp_getattro != NULL) {
+#if PY_VERSION_HEX >= 0x03000000
+        PyObject *w = PyUnicode_InternFromString(name);
+#else
+        PyObject *w = PyString_InternFromString(name);
+#endif
+        if (w == NULL) {
+            return (PyObject *)NULL;
+        }
+        res = (*tp->tp_getattro)(obj, w);
+        Py_DECREF(w);
+        if (res == NULL) {
+            PyErr_Clear();
+        }
+    }
+    return res;
+}
+
+static int 
+maybe_set_attr(PyObject *obj, char *name, PyObject *attr)
+{
+    PyTypeObject *tp = Py_TYPE(obj);
+    int status;
+
+    /* Attribute referenced by (char *)name */
+    if (tp->tp_setattr != NULL) {
+        status = (*tp->tp_setattr)(obj, name, attr);
+        if (status < 0) {
+            PyErr_Clear();
+            return -1;
+        }   
+    }   
+    /* Attribute referenced by (PyObject *)name */
+    else if (tp->tp_setattro != NULL) {
+#if PY_VERSION_HEX >= 0x03000000
+        PyObject *w = PyUnicode_InternFromString(name);
+#else
+        PyObject *w = PyString_InternFromString(name);
+#endif
+        if (w == NULL) {
+            return -1;
+        }
+        status = (*tp->tp_setattro)(obj, w, attr);
+        Py_DECREF(w);
+        if (status < 0) {
+            PyErr_Clear();
+            return -1;
+        }
+    }
+    return 0;
+}
+
+static int get_array_struct(PyObject* obj, int *maxndim, npy_intp *d_shape, PyArrayInterface* inter)
+{
+    PyTypeObject *tp = Py_TYPE(obj);
+    PyObject* ret;
+    char* str;
+    int i;
+    str = "__array_struct__";
+    /* We do not need to check for special attributes on trivial types */
+    if (_is_basic_python_type(tp)) {
+        ret = NULL;
+    }   
+    /* obj has the __array_struct__ interface */
+    ret = maybe_get_attr(obj, str);
+    if (ret != NULL) {
+        int nd = -1;
+        if (PyCapsule_CheckExact(ret)) {
+            PyArrayInterface *inter;
+            inter = (PyArrayInterface *)NpyCapsule_AsVoidPtr(ret);
+            if (inter->two == 2) {
+                nd = inter->nd;
+                if (nd >= 0) {
+                    if (nd < *maxndim) {
+                        *maxndim = nd;
+                    }
+                    for (i=0; i<*maxndim; i++) {
+                        d_shape[i] = inter->shape[i];
+                    }
+                }
+            }
+        }
+        if(nd >= 0){ 
+            return 0;
+        } else {
+            return -1;
+        }
+    } else {
+        return -1;
+    }
+}
+
+static int my_get_array_attr_interface(PyObject* obj, PyObject* newi){
+    newi = obj;
+//    Py_INCREF(obj);
+//    Py_DECREF(obj);
+    return 0;
+}
+
+static int get_array_attr_interface(PyObject* obj, char* str, int *maxndim, npy_intp *d_shape, PyObject* newi){
+    PyTypeObject *tp = Py_TYPE(obj);
+    char* dictstr;
+    int i;
+    dictstr = "__array_interface__";
+    PyObject* ret;
+    PyObject* objj;
+    newi = obj;
+    return 0;
+    if (_is_basic_python_type(tp)) {
+        ret = NULL;
+    }   
+    /* obj has the __array_interface__ interface */
+    printf("T1\n");
+    ret = maybe_get_attr(obj, dictstr);
+    printf("T2\n");
+    if (ret != NULL) {
+        int nd = -1;
+        if (PyDict_Check(ret)) {
+            objj = PyDict_GetItemString(ret, "shape");
+            //newi = PyDict_GetItemString(ret, str);
+            printf("T3\n");
+            if (objj && PyTuple_Check(objj)) {
+                nd = PyTuple_GET_SIZE(objj);
+                printf("T4\n");
+                if (nd >= 0) {
+                    *maxndim = nd;
+                    for (i=0; i<nd; i++) {
+                        d_shape[i] = PyInt_AsSsize_t(PyTuple_GET_ITEM(objj, i));
+                        if (d_shape[i] < 0) {
+                            PyErr_SetString(PyExc_RuntimeError,
+                                "Invalid shape in __array_interface__");
+                            return -1;
+                        }
+                    }
+                }
+             }
+        }
+        if (nd >= 0) {
+            printf("T5\n");
+            //newi = (PyArrayObject*) objj;
+            PyObject* tuple = PyTuple_New(1);
+            PyTuple_SET_ITEM(tuple, 0, objj);
+            newi = (PyObject*) tuple;
+            return 0;
+        } else {
+            return -1;
+        }
+    } else {
+        return -1;
+    }
+}
+
+static int set_array_attr_interface(PyObject* obj, PyObject* attr, int *nd, npy_intp *d_shape, void* data)
+{
+    int i, status;
+/* obj has the __array_interface__ interface */
+    if (obj != NULL || attr !=NULL) {
+        if (PyDict_Check(attr)) {
+            PyObject *new_shape = PyTuple_New(*nd);
+            for (i=0; i<*nd; i++) {
+                PyTuple_SET_ITEM(new_shape, i, PyInt_FromLong((int)d_shape[i]));
+            }
+            status = PyDict_SetItemString(attr, "shape", new_shape);
+            if (status<0){
+                Py_DECREF(new_shape);
+                PyErr_Clear();
+                return -1;
+            }
+            PyObject *new_data = PyTuple_New(*nd);
+            PyTuple_SET_ITEM(new_data, 0, PyLong_FromVoidPtr(data));
+            PyTuple_SET_ITEM(new_data, 1, PyInt_FromLong((long)1));
+            status = PyDict_SetItemString(attr, "data", new_data);
+            if (status<0){
+                Py_DECREF(new_data);
+                PyErr_Clear();
+                return -1;
+            }
+            status = maybe_set_attr(obj, "__array_interface__", attr);
+            if (status<0){
+                Py_DECREF(new_data);
+                Py_DECREF(new_shape);
+                PyErr_Clear();
+                return -1;
+            }
+            return 0;
+        } else {
+            return -1;
+        }
+    } else {
+        return -1;
+    }
+}
+
+
+
+
+#if 0
+NPY_NO_EXPORT int
+MyArray_DescrConverter(PyObject *obj, PyArray_Descr **at)
+{
+    int check_num = NPY_NOTYPE + 10;
+    PyObject *item;
+    int elsize = 0;
+    char endian = '=';
+
+    *at = NULL;
+
+    printf("Test0\n");
+    /* default */
+    if (obj == Py_None) {
+        *at = PyArray_DescrFromType(NPY_DEFAULT_TYPE);
+        return NPY_SUCCEED;
+    }
+
+    printf("Test1\n");
+    if (PyArray_DescrCheck(obj)) {
+        *at = (PyArray_Descr *)obj;
+        Py_INCREF(*at);
+        return NPY_SUCCEED;
+    }
+
+    printf("Test2\n");
+    if (PyType_Check(obj)) {
+        if (PyType_IsSubtype((PyTypeObject *)obj, &PyGenericArrType_Type)) {
+            *at = PyArray_DescrFromTypeObject(obj);
+            return (*at) ? NPY_SUCCEED : NPY_FAIL;
+        }
+        check_num = NPY_OBJECT;
+#if !defined(NPY_PY3K)
+        if (obj == (PyObject *)(&PyInt_Type)) {
+            check_num = NPY_LONG;
+        }
+        else if (obj == (PyObject *)(&PyLong_Type)) {
+            check_num = NPY_LONGLONG;
+        }
+#else
+        if (obj == (PyObject *)(&PyLong_Type)) {
+            check_num = NPY_LONG;
+        }
+#endif
+        else if (obj == (PyObject *)(&PyFloat_Type)) {
+            check_num = NPY_DOUBLE;
+        }
+        else if (obj == (PyObject *)(&PyComplex_Type)) {
+            check_num = NPY_CDOUBLE;
+        }
+        else if (obj == (PyObject *)(&PyBool_Type)) {
+            check_num = NPY_BOOL;
+        }
+        else if (obj == (PyObject *)(&PyBytes_Type)) {
+            check_num = NPY_STRING;
+        }
+        else if (obj == (PyObject *)(&PyUnicode_Type)) {
+            check_num = NPY_UNICODE;
+        }
+#if defined(NPY_PY3K)
+        else if (obj == (PyObject *)(&PyMemoryView_Type)) {
+#else
+        else if (obj == (PyObject *)(&PyBuffer_Type)) {
+#endif
+            check_num = NPY_VOID;
+        }
+        else {
+            *at = _arraydescr_fromobj(obj);
+            if (*at) {
+                return NPY_SUCCEED;
+            }
+        }
+        goto finish;
+    }
+    printf("Test3\n");
+
+    /* or a typecode string */
+
+    if (PyUnicode_Check(obj)) {
+        /* Allow unicode format strings: convert to bytes */
+        int retval;
+        PyObject *obj2;
+        obj2 = PyUnicode_AsASCIIString(obj);
+        if (obj2 == NULL) {
+            return NPY_FAIL;
+        }
+        retval = PyArray_DescrConverter(obj2, at);
+        Py_DECREF(obj2);
+        return retval;
+    }
+
+    printf("Test4\n");
+    if (PyBytes_Check(obj)) {
+        char *type = NULL;
+        Py_ssize_t len = 0;
+
+        /* Check for a string typecode. */
+        if (PyBytes_AsStringAndSize(obj, &type, &len) < 0) {
+            goto error;
+        }
+
+        /* Empty string is invalid */
+        if (len == 0) {
+            goto fail;
+        }
+
+        /* check for commas present or first (or second) element a digit */
+        if (_check_for_commastring(type, len)) {
+            *at = _convert_from_commastring(obj, 0);
+            return (*at) ? NPY_SUCCEED : NPY_FAIL;
+        }
+
+        /* Process the endian character. '|' is replaced by '='*/
+        switch (type[0]) {
+            case '>':
+            case '<':
+            case '=':
+                endian = type[0];
+                ++type;
+                --len;
+                break;
+
+            case '|':
+                endian = '=';
+                ++type;
+                --len;
+                break;
+        }
+
+        /* Just an endian character is invalid */
+        if (len == 0) {
+            goto fail;
+        }
+
+        /* Check for datetime format */
+        if (is_datetime_typestr(type, len)) {
+            *at = parse_dtype_from_datetime_typestr(type, len);
+            if (*at == NULL) {
+                return NPY_FAIL;
+            }
+            /* *at has byte order '=' at this point */
+            if (!PyArray_ISNBO(endian)) {
+                (*at)->byteorder = endian;
+            }
+            return NPY_SUCCEED;
+        }
+
+        /* A typecode like 'd' */
+        if (len == 1) {
+            check_num = type[0];
+        }
+        /* A kind + size like 'f8' */
+        else {
+            char *typeend = NULL;
+            int kind;
+
+            /* Parse the integer, make sure it's the rest of the string */
+            elsize = (int)strtol(type + 1, &typeend, 10);
+            if (typeend - type == len) {
+
+                kind = type[0];
+                switch (kind) {
+                    case NPY_STRINGLTR:
+                    case NPY_STRINGLTR2:
+                        check_num = NPY_STRING;
+                        break;
+
+                    /*
+                     * When specifying length of UNICODE
+                     * the number of characters is given to match
+                     * the STRING interface.  Each character can be
+                     * more than one byte and itemsize must be
+                     * the number of bytes.
+                     */
+                    case NPY_UNICODELTR:
+                        check_num = NPY_UNICODE;
+                        elsize <<= 2;
+                        break;
+
+                    case NPY_VOIDLTR:
+                        check_num = NPY_VOID;
+                        break;
+
+                    default:
+                        if (elsize == 0) {
+                            check_num = NPY_NOTYPE+10;
+                        }
+                        /* Support for generic processing c8, i4, f8, etc...*/
+                        else {
+                            check_num = PyArray_TypestrConvert(elsize, kind);
+                            if (check_num == NPY_NOTYPE) {
+                                check_num += 10;
+                            }
+                            elsize = 0;
+                        }
+                }
+            }
+        }
+    }
+    else if (PyTuple_Check(obj)) {
+        /* or a tuple */
+        *at = _convert_from_tuple(obj);
+        if (*at == NULL){
+            if (PyErr_Occurred()) {
+                return NPY_FAIL;
+            }
+            goto fail;
+        }
+        return NPY_SUCCEED;
+    }
+    else if (PyList_Check(obj)) {
+        /* or a list */
+        *at = _convert_from_array_descr(obj,0);
+        if (*at == NULL) {
+            if (PyErr_Occurred()) {
+                return NPY_FAIL;
+            }
+            goto fail;
+        }
+        return NPY_SUCCEED;
+    }
+    else if (PyDict_Check(obj) || PyDictProxy_Check(obj)) {
+        /* or a dictionary */
+        *at = _convert_from_dict(obj,0);
+        if (*at == NULL) {
+            if (PyErr_Occurred()) {
+                return NPY_FAIL;
+            }
+            goto fail;
+        }
+        return NPY_SUCCEED;
+    }
+    else if (PyArray_Check(obj)) {
+        goto fail;
+    }
+    else {
+        *at = _arraydescr_fromobj(obj);
+        if (*at) {
+            return NPY_SUCCEED;
+        }
+        if (PyErr_Occurred()) {
+            return NPY_FAIL;
+        }
+        goto fail;
+    }
+    if (PyErr_Occurred()) {
+        goto fail;
+    }
+
+finish:
+    printf("Test5\n");
+    if ((check_num == NPY_NOTYPE + 10) ||
+            (*at = PyArray_DescrFromType(check_num)) == NULL) {
+        PyErr_Clear();
+        /* Now check to see if the object is registered in typeDict */
+        if (typeDict != NULL) {
+            item = PyDict_GetItem(typeDict, obj);
+#if defined(NPY_PY3K)
+            if (!item && PyBytes_Check(obj)) {
+                PyObject *tmp;
+                tmp = PyUnicode_FromEncodedObject(obj, "ascii", "strict");
+                if (tmp != NULL) {
+                    item = PyDict_GetItem(typeDict, tmp);
+                    Py_DECREF(tmp);
+                }
+            }
+#endif
+            if (item) {
+                /* Check for a deprecated Numeric-style typecode */
+                if (PyBytes_Check(obj)) {
+                    char *type = NULL;
+                    Py_ssize_t len = 0;
+                    char *dep_tps[] = {"Bool", "Complex", "Float", "Int",
+                                       "Object0", "String0", "Timedelta64",
+                                       "Unicode0", "UInt", "Void0"};
+                    int ndep_tps = sizeof(dep_tps) / sizeof(dep_tps[0]);
+                    int i;
+
+                    if (PyBytes_AsStringAndSize(obj, &type, &len) < 0) {
+                        goto error;
+                    }
+                    for (i = 0; i < ndep_tps; ++i) {
+                        char *dep_tp = dep_tps[i];
+
+                        if (strncmp(type, dep_tp, strlen(dep_tp)) == 0) {
+                            if (DEPRECATE("Numeric-style type codes are "
+                                          "deprecated and will result in "
+                                          "an error in the future.") < 0) {
+                                goto fail;
+                            }
+                        }
+                    }
+                }
+                return PyArray_DescrConverter(item, at);
+            }
+        }
+        goto fail;
+    }
+
+    if (((*at)->elsize == 0) && (elsize != 0)) {
+        PyArray_DESCR_REPLACE(*at);
+        (*at)->elsize = elsize;
+    }
+    if (endian != '=' && PyArray_ISNBO(endian)) {
+        endian = '=';
+    }
+    if (endian != '=' && (*at)->byteorder != '|'
+        && (*at)->byteorder != endian) {
+        PyArray_DESCR_REPLACE(*at);
+        (*at)->byteorder = endian;
+    }
+    return NPY_SUCCEED;
+
+fail:
+    if (PyBytes_Check(obj)) {
+        PyErr_Format(PyExc_TypeError,
+                "data type \"%s\" not understood", PyBytes_AS_STRING(obj));
+    }
+    else {
+        PyErr_SetString(PyExc_TypeError,
+                "data type not understood");
+    }
+
+error:
+    *at = NULL;
+    return NPY_FAIL;
+}
+#endif
+
+
+NPY_NO_EXPORT int
+MyPyArray_DescrConverter(PyObject *obj, PyArray_Descr **at)
+{
+    int check_num = NPY_NOTYPE + 10;
+    PyObject *item;
+    int elsize = 0;
+    char endian = '=';
+
+    printf("Test -1\n");
+    *at = NULL;
+
+    check_num = NPY_VOID;
+    printf("Test0\n");
+    if (check_num != NPY_VOID) {
+        PyErr_Clear();
+        /* Now check to see if the object is registered in typeDict */
+        printf("Test1\n");
+        if (typeDict != NULL) {
+            item = PyDict_GetItem(typeDict, obj);
+#if defined(NPY_PY3K)
+            if (!item && PyBytes_Check(obj)) {
+                PyObject *tmp;
+                tmp = PyUnicode_FromEncodedObject(obj, "ascii", "strict");
+                if (tmp != NULL) {
+                    item = PyDict_GetItem(typeDict, tmp);
+                    Py_DECREF(tmp);
+                }
+            }
+#endif
+            if (item) {
+                /* Check for a deprecated Numeric-style typecode */
+                if (PyBytes_Check(obj)) {
+                    char *type = NULL;
+                    Py_ssize_t len = 0;
+                    char *dep_tps[] = {"Bool", "Complex", "Float", "Int",
+                                       "Object0", "String0", "Timedelta64",
+                                       "Unicode0", "UInt", "Void0"};
+                    int ndep_tps = sizeof(dep_tps) / sizeof(dep_tps[0]);
+                    int i;
+
+                    if (PyBytes_AsStringAndSize(obj, &type, &len) < 0) {
+                        goto error;
+                    }
+                    for (i = 0; i < ndep_tps; ++i) {
+                        char *dep_tp = dep_tps[i];
+
+                        if (strncmp(type, dep_tp, strlen(dep_tp)) == 0) {
+                            if (DEPRECATE("Numeric-style type codes are "
+                                          "deprecated and will result in "
+                                          "an error in the future.") < 0) {
+                                goto fail;
+                            }
+                        }
+                    }
+                }
+                return PyArray_DescrConverter(item, at);
+            }
+        }
+        printf("Test2\n");
+        goto fail;
+    }
+
+    printf("Test3\n");
+    if (((*at)->elsize == 0) && (elsize != 0)) {
+        PyArray_DESCR_REPLACE(*at);
+        (*at)->elsize = elsize;
+        printf("Test4\n");
+    }
+    if (endian != '=' && PyArray_ISNBO(endian)) {
+        endian = '=';
+        printf("Test5\n");
+    }
+    if (endian != '=' && (*at)->byteorder != '|'
+        && (*at)->byteorder != endian) {
+        PyArray_DESCR_REPLACE(*at);
+        (*at)->byteorder = endian;
+        printf("Test6\n");
+    }
+    return NPY_SUCCEED;
+
+fail:
+    if (PyBytes_Check(obj)) {
+        PyErr_Format(PyExc_TypeError,
+                "data type \"%s\" not understood", PyBytes_AS_STRING(obj));
+    }
+    else {
+        PyErr_SetString(PyExc_TypeError,
+                "data type not understood");
+    }
+
+error:
+    *at = NULL;
+    return NPY_FAIL;
+}
+
+
+
+#if 0
+void init_readwriteaccess(struct DICTHOLDER *dict);
+
+struct DICTHOLDER * plugin_find(struct DICTHOLDER *dict, const char *pluginname){
+    struct DICTHOLDER *dictitem;
+    dictitem = dict;
+    // search in dictionary linked list
+    while(dictitem != NULL){
+        if(strcmp(dictitem->key, pluginname) == 0){
+	    return dictitem;
+	}
+	dictitem = dictitem->next;
+    }
+    return NULL;
+}
+#endif
+
+molfile_plugin_t* get_plugin(molfile_plugin_t** plug_list, int plug_no)
+{
+    molfile_plugin_t* plugin;
+    if(plug_no < 0){
+	plugin = NULL;
+    } else {
+	plugin = plug_list[plug_no];
+    }
+    return plugin;
+}
+
+#if 0
+void init_readwriteaccess(struct DICTHOLDER *dict){
+    struct DICTHOLDER *dictitem;
+    dictitem = dict;
+    // search in dictionary linked list
+    while(dictitem != NULL){
+	if(!dictitem->id){
+            if(plugin_list[dictitem->id]->read_next_timestep){
+	        dictitem->read = 1;
+	    }
+            if(plugin_list[dictitem->id]->write_timestep){
+	        dictitem->write = 1;
+	    }
+	}
+	dictitem = dictitem->next;
+    }
+}
+
+static int has_readsupport(const char *pluginname){
+    struct DICTHOLDER *item;
+    item = plugin_find(&plugindict, pluginname);
+    if (!item){
+        return item->read;
+    } else {
+	return 0;
+    }
+}
+
+static int has_writesupport(const char *pluginname){
+    struct DICTHOLDER *item;
+    item = plugin_find(&plugindict, pluginname);
+    if (!item){
+        return item->write;
+    } else {
+	return 0;
+    }
+}
+
+static int plugin_add(struct DICTHOLDER *dict, const char *key, int id){
+    struct DICTHOLDER *dictitem;
+    // Check list is empty or it already has the key
+    if (plugin_find(dict, key) == NULL){
+        dictitem = dict;
+        while(1){
+            // Find the empty next in the list and add item
+            if(dictitem == NULL){
+                struct DICTHOLDER *item = (struct DICTHOLDER*) malloc(sizeof(struct DICTHOLDER));
+                item->key  = key;
+		item->id = id;
+		item->read = NULL;
+		item->write = NULL;
+		dictitem = &item;
+		return 0;
+	    } else {
+	        dictitem = dictitem->next;
+	    }
+        }
+    } else {
+        return 1;
+    }
+}
+
+static int plugin_remove(struct DICTHOLDER *dict, const char *key){
+    struct DICTHOLDER *dictitem;
+    // Check list is empty or it already has the key
+    if (plugin_find(dict, key) == NULL){
+        // No key in the list. Nothing to remove.
+        return 1;
+    } else {
+        // Remove key in the list
+        dictitem = dict;
+        while(dictitem != NULL){
+            if(strcmp(dictitem->next->key, key) == 0){
+                struct DICTHOLDER *item = dictitem->next->next;
+                dictitem->next = item;
+	        return 0;
+	    }
+	    dictitem = dictitem->next;
+        }
+        return 1;
+    }
+}
+#endif
+/* * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Interface functions to initialize molfile plugins *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/* check validity of plugins and register them. */
+static int molfile_register(void*, vmdplugin_t *plugin) {
+    if (!plugin->type || !plugin->name || !plugin->author) {
+        // skipping plugin with incomplete header
+        return VMDPLUGIN_ERROR;
+    }
+    else if (plugin->abiversion != vmdplugin_ABIVERSION) {
+        // skipping plugin with incompatible ABI
+        return VMDPLUGIN_ERROR;
+    }
+    else if (0 != strncmp(plugin->type, "mol file", 8)) {
+        // skipping plugin of incompatible type
+        return VMDPLUGIN_ERROR;
+    } 
+    else if (numplugins >= MAXPLUGINS) {
+        // too many plugins: increase MAXPLUGINS
+        return VMDPLUGIN_ERROR;
+    }
+
+    //if (plugin_find(&plugindict, plugin->name) != NULL) {
+        // multiple plugins for file type
+    //    return VMDPLUGIN_ERROR;
+    //} else {
+        plugin_list[numplugins] = (molfile_plugin_t *) plugin;
+	//plugin_add(&plugindict, plugin->name, numplugins);
+        ++numplugins;
+        return VMDPLUGIN_SUCCESS;
+    //}
+}
+
+molfile_plugin_t** molfile_plugin_list(int maxsize)
+{
+    if(maxsize < MAXPLUGINS){
+        maxsize = MAXPLUGINS;
+    }
+    plugin_list = (molfile_plugin_t**) malloc(sizeof(molfile_plugin_t*)*maxsize);
+    return plugin_list;
+}
+
+/* register all available plugins and clear handles. */
+int molfile_init(void) 
+{
+#if 0
+    int molfile_internal_register(void *ptr, vmdplugin_t *plugin)
+    {
+        if (!plugin->type || !plugin->name || !plugin->author) {
+            // skipping plugin with incomplete header
+            return VMDPLUGIN_ERROR;
+        }
+        else if (plugin->abiversion != vmdplugin_ABIVERSION) {
+            // skipping plugin with incompatible ABI
+            return VMDPLUGIN_ERROR;
+        }
+        else if (0 != strncmp(plugin->type, "mol file", 8)) {
+            // skipping plugin of incompatible type
+            return VMDPLUGIN_ERROR;
+        } 
+        else if (num_plugins >= MAX_PLUGINS) {
+            // too many plugins: increase MAXPLUGINS
+            return VMDPLUGIN_ERROR;
+        }
+
+        if (plugin_find(&plugindict, plugin->name) != NULL) {
+            // multiple plugins for file type
+            return VMDPLUGIN_ERROR;
+        } else {
+            plugin_list[numplugins] = (molfile_plugin_t *) plugin;
+            ++numplugins;
+            return VMDPLUGIN_SUCCESS;
+        }
+    }
+#endif
+    MOLFILE_INIT_ALL;
+    MOLFILE_REGISTER_ALL(NULL,molfile_register);
+    return numplugins;
+}
+
+/* unregister all available plugins */
+int molfile_finish(void) 
+{
+    MOLFILE_FINI_ALL;
+    return 0;
+}
+
+/* * * * * * * * * * * * * * * * * * * * * * *
+ * Wrappers to directly access molfile plugin*
+ *         functions and settings            *
+ * * * * * * * * * * * * * * * * * * * * * * */
+
+/* molfile_plugin_t access */
+
+/* Functions in molfile_plugin_t */
+
+PyObject * my_read_structure(PyObject* molpack) {
+    Py_Initialize();
+    import_array();
+    
+    int options = 0;
+    int i;
+    molfile_plugin_t* plugin;
+    void* file_handle;
+    molfile_atom_t* atoms;
+    int numatoms, status;
+    PyArray_Descr *descr;
+    PyObject *p = NULL;
+    //if (PyType_Ready(&MolAtomType) < 0)
+    //    return NULL;
+    //PyTypeObject *atype = &MolAtomType;
+    //MolAtom *atom_t;
+    //atom_t = (MolAtom *)atype->tp_alloc(atype, 0);
+    //p = (PyObject*) atom_t;
+    descr = PyArray_DescrFromObject(p, NULL);
+    MolObject* plugin_handle = (MolObject*) molpack;
+    plugin = plugin_handle->plugin;
+    file_handle = plugin_handle->file_handle;
+    numatoms = plugin_handle->natoms;
+    atoms = (molfile_atom_t *)calloc(numatoms,sizeof(molfile_atom_t));
+    status = plugin->read_structure(file_handle, &options, atoms);
+    if (status!=0){
+      PyErr_Format(PyExc_IOError, "Error accessing molfile_atom_t in read_structure function of plugin.");
+      return NULL;
+    }
+    PyArrayObject* oresid;
+    PyObject* array;
+    int64_t* cresid;
+    int nd = 1;
+    npy_intp dims[1] = { numatoms };
+    oresid = (PyArrayObject*) PyArray_SimpleNew(nd, dims, NPY_INT64);
+    Py_DECREF(p);
+    //array = (PyArrayObject*) PyArray_SimpleNewFromDescr(1, dims, descr);
+    //PyObject_Print(array, stdout, 0);
+    if (!oresid){
+      PyErr_Format(PyExc_IOError, "Error copying molfile_atom_t into numpy array.");
+      return NULL;
+    }
+    npy_intp* n = PyArray_DIMS(oresid);
+    cresid = (int64_t*) PyArray_DATA(oresid);
+    
+//    for (i=0;i<numatoms;i++){
+//        cresid[i] = (int64_t) atoms[i].resid;
+//    }
+    return (PyObject*) PyArray_FromArray(oresid, PyArray_DESCR(oresid), 0);
+}
+
+PyObject* read_fill_structure(PyObject* molpack, PyObject* prototype)
+{
+    int options = 0;
+    int i;
+    molfile_plugin_t* plugin;
+    void* file_handle;
+    molfile_atom_t* data;
+    int numatoms, status;
+    int nd;
+    PyArrayInterface *inter;
+    //PyArrayObject *ret;
+    PyObject *ret;
+    char endian = NPY_NATBYTE;
+    nd = 1;
+    npy_intp dims[1] = { 1 };
+    PyArrayObject *obj; 
+    printf("Test1\n");
+    obj = (PyArrayObject *)prototype; 
+    if(obj == NULL){
+        PyErr_Format(PyExc_IOError, "Error: Given PyObject does not include numpy array.");
+        return NULL;
+    }
+    // Access plugin_handle values
+    MolObject* plugin_handle = (MolObject*) molpack;
+    plugin = plugin_handle->plugin;
+    file_handle = plugin_handle->file_handle;
+    numatoms = plugin_handle->natoms;
+    printf("Test2-1\n");
+    // Allocate memory for array of molfile_atom_t struct
+    data = (molfile_atom_t *)calloc(numatoms,sizeof(molfile_atom_t));
+    // Get array values in molfile_atom_t
+    printf("Test2-2\n");
+    status = plugin->read_structure(file_handle, &options, data);
+    printf("Test2-3\n");
+    // Check if the plugin returns the results
+    if (status!=0){
+      PyErr_Format(PyExc_IOError, "Error accessing molfile_atom_t in read_structure function of plugin.");
+      return NULL;
+    }
+    printf("Test3\n");
+    int *maxndim;
+    npy_intp *d_shape;
+    //status = my_get_array_attr_interface((PyObject*)obj, "descr", maxndim, d_shape, ret);
+    status = my_get_array_attr_interface(prototype, ret);
+    printf("Test4 Status:%d nd:%d\n",status,*maxndim);
+    if (status<0){
+        Py_DECREF(obj);
+        PyErr_Clear();
+        PyErr_Format(PyExc_IOError, "Error: can not get attribute of given numpy array.");
+        return NULL;
+    }
+    printf("Test5\n");
+    //return (PyObject*) PyArray_FromArray((PyArrayObject*)ret, PyArray_DESCR((PyArrayObject*)ret), 0);
+    return (PyObject*) ret;
+}
+
+PyObject* get_structure(PyObject* self)
+{
+    int options = 0;
+    int i;
+    molfile_plugin_t* plugin;
+    void* file_handle;
+    molfile_atom_t* data;
+    int numatoms, status;
+    int nd;
+    PyArrayInterface *inter;
+    PyArrayObject *ret;
+    char endian = NPY_NATBYTE;
+    // Access plugin_handle values
+    MolObject* plugin_handle = (MolObject*) self;
+    plugin = plugin_handle->plugin;
+    file_handle = plugin_handle->file_handle;
+    numatoms = plugin_handle->natoms;
+    // Allocate memory for array of molfile_atom_t struct
+    data = (molfile_atom_t *)calloc(numatoms,sizeof(molfile_atom_t));
+    // Get array values in molfile_atom_t
+    status = plugin->read_structure(file_handle, &options, data);
+    // Check if the plugin returns the results
+    if (status!=0){
+      PyErr_Format(PyExc_IOError, "Error accessing molfile_atom_t in read_structure function of plugin.");
+      return NULL;
+    }
+    // Now, we need to allocate a PyArray with PyArrayInterface
+    // and assign the allocated memory block to the data.
+    // To do this, we will build a numpy array from scratch.
+    // First, allocate a PyObject of PyArrayInterface and 
+    // assign relevant information such as typestr, descr for C-side 
+    // struct and second we will assign molfile_atom_t array as a block 
+    // of data. Last, hope this works.
+    nd = 1;
+    npy_intp dims[1] = { 1 };
+    // We would allocate a numpy array with
+    // but will not look clever to copy all the data into the new array.
+    // Instead, we allocate a numpy array with one element and change 
+    // the definition of array. I know I said that it will be from scratch 
+    // but let's accept nobody wants to define everything in numpy again.
+    //oresid = (PyArrayObject*) PyArray_SimpleNew(nd, dims, NPY_INT);
+    // NPY_INT? Don't worry, we will change it.
+    //Py_intptr_t *shape, *strides;
+    //void *data = NULL;
+ 
+    inter = (PyArrayInterface*)malloc(sizeof(PyArrayInterface));
+    if (inter==NULL)
+      return PyErr_NoMemory();
+   
+    // __array_interface__ descr for C side of __array_struct__
+    // Could not find a better way to generate the list of tuples for 
+    // Python side. May need to change this later.
+    PyObject *descrlist = PyList_New(13);
+    // One tuple to bind them
+    PyObject *py_tuple_name = PyTuple_New(2);
+    PyTuple_SET_ITEM(py_tuple_name, 0, PyUnicode_FromString("name"));
+    PyTuple_SET_ITEM(py_tuple_name, 1, PyUnicode_FromString("|S16"));
+    PyList_SET_ITEM(descrlist, 0, py_tuple_name);
+    PyObject *py_tuple_type = PyTuple_New(2);
+    PyTuple_SET_ITEM(py_tuple_type, 0, PyUnicode_FromString("type"));
+    PyTuple_SET_ITEM(py_tuple_type, 1, PyUnicode_FromString("|S16"));
+    PyList_SET_ITEM(descrlist, 1, py_tuple_type);
+    PyObject *py_tuple_resname = PyTuple_New(2);
+    PyTuple_SET_ITEM(py_tuple_resname, 0, PyUnicode_FromString("resname"));
+    PyTuple_SET_ITEM(py_tuple_resname, 1, PyUnicode_FromString("|S8"));
+    PyList_SET_ITEM(descrlist, 2, py_tuple_resname);
+    PyObject *py_tuple_resid = PyTuple_New(2);
+    PyTuple_SET_ITEM(py_tuple_resid, 0, PyUnicode_FromString("resid"));
+    PyTuple_SET_ITEM(py_tuple_resid, 1, PyUnicode_FromString("<i4"));
+    PyList_SET_ITEM(descrlist, 3, py_tuple_resid);
+    PyObject *py_tuple_segid = PyTuple_New(2);
+    PyTuple_SET_ITEM(py_tuple_segid, 0, PyUnicode_FromString("segid"));
+    PyTuple_SET_ITEM(py_tuple_segid, 1, PyUnicode_FromString("|S8"));
+    PyList_SET_ITEM(descrlist, 4, py_tuple_segid);
+    PyObject *py_tuple_chain = PyTuple_New(2);
+    PyTuple_SET_ITEM(py_tuple_chain, 0, PyUnicode_FromString("chain"));
+    PyTuple_SET_ITEM(py_tuple_chain, 1, PyUnicode_FromString("|S2"));
+    PyList_SET_ITEM(descrlist, 5, py_tuple_chain);
+    PyObject *py_tuple_altloc = PyTuple_New(2);
+    PyTuple_SET_ITEM(py_tuple_altloc, 0, PyUnicode_FromString("altloc"));
+    PyTuple_SET_ITEM(py_tuple_altloc, 1, PyUnicode_FromString("|S2"));
+    PyList_SET_ITEM(descrlist, 6, py_tuple_altloc);
+    PyObject *py_tuple_insertion = PyTuple_New(2);
+    PyTuple_SET_ITEM(py_tuple_insertion, 0, PyUnicode_FromString("insertion"));
+    PyTuple_SET_ITEM(py_tuple_insertion, 1, PyUnicode_FromString("|S2"));
+    PyList_SET_ITEM(descrlist, 7, py_tuple_insertion);
+    PyObject *py_tuple_occupancy = PyTuple_New(2);
+    PyTuple_SET_ITEM(py_tuple_occupancy, 0, PyUnicode_FromString("occupancy"));
+    PyTuple_SET_ITEM(py_tuple_occupancy, 1, PyUnicode_FromString("<f4"));
+    PyList_SET_ITEM(descrlist, 8, py_tuple_occupancy);
+    PyObject *py_tuple_bfactor = PyTuple_New(2);
+    PyTuple_SET_ITEM(py_tuple_bfactor, 0, PyUnicode_FromString("bfactor"));
+    PyTuple_SET_ITEM(py_tuple_bfactor, 1, PyUnicode_FromString("<f4"));
+    PyList_SET_ITEM(descrlist, 9, py_tuple_bfactor);
+    PyObject *py_tuple_mass = PyTuple_New(2);
+    PyTuple_SET_ITEM(py_tuple_mass, 0, PyUnicode_FromString("mass"));
+    PyTuple_SET_ITEM(py_tuple_mass, 1, PyUnicode_FromString("<f4"));
+    PyList_SET_ITEM(descrlist, 10, py_tuple_mass);
+    PyObject *py_tuple_charge = PyTuple_New(2);
+    PyTuple_SET_ITEM(py_tuple_charge, 0, PyUnicode_FromString("charge"));
+    PyTuple_SET_ITEM(py_tuple_charge, 1, PyUnicode_FromString("<f4"));
+    PyList_SET_ITEM(descrlist, 11, py_tuple_charge);
+    PyObject *py_tuple_radius = PyTuple_New(2);
+    PyTuple_SET_ITEM(py_tuple_radius, 0, PyUnicode_FromString("radius"));
+    PyTuple_SET_ITEM(py_tuple_radius, 1, PyUnicode_FromString("<f4"));
+    PyList_SET_ITEM(descrlist, 12, py_tuple_radius);
+    PyObject *py_tuple_atomicnumber = PyTuple_New(2);
+    PyTuple_SET_ITEM(py_tuple_atomicnumber, 0, PyUnicode_FromString("atomicnumber"));
+    PyTuple_SET_ITEM(py_tuple_atomicnumber, 1, PyUnicode_FromString("<i4"));
+    PyList_SET_ITEM(descrlist, 13, py_tuple_atomicnumber);
+    //PyArray_Descr *descr = (PyObject*) tuple;
+    PyArray_Descr *thetype = NULL;
+    // Here we define the size and stride parameters
+    npy_intp shape[1] = { numatoms };
+    npy_intp strides[1] = { 54*sizeof(char) + 8*sizeof(int) + 20*sizeof(float) };
+
+    inter->two = 2;
+    inter->nd = nd;
+    inter->typekind = 'V';
+    inter->itemsize = 82*sizeof(char);
+    //inter->flags = NPY_ARRAY_NOTSWAPPED | NPY_ARRAY_ALIGNED | NPY_ARRAY_WRITEABLE;
+    inter->flags = NPY_ARRAY_NOTSWAPPED | NPY_ARRAY_ALIGNED | NPY_ARRAY_WRITEABLE | NPY_ARR_HAS_DESCR;
+    inter->strides = (Py_intptr_t *)strides;
+    inter->shape = (Py_intptr_t *)shape;
+    inter->data = (void*) data;
+   // inter->descr = (PyObject*) tuple;
+    if ((inter->flags & NPY_ARRAY_NOTSWAPPED) != NPY_ARRAY_NOTSWAPPED) {
+        endian = NPY_OPPBYTE;
+	inter->flags &= ~NPY_ARRAY_NOTSWAPPED;
+    }
+    // typestr is relatively easy to assign to __array_interface__
+    printf("TEST1\n");
+    //thetype = (PyArray_Descr*) tuple;
+    if (inter->flags & NPY_ARR_HAS_DESCR) {
+        printf("TEST1-1\n");
+        thetype = _convert_from_array_descr(descrlist,0);
+        //thetype = PyArray_DescrFromTypeObject(descrlist);
+        printf("TEST1-2\n");
+        //if (PyArray_DescrConverter(inter->descr, &thetype) == NPY_FAIL) {
+	//    thetype = NULL;
+	//    PyErr_Clear();
+	//  }
+    }
+    printf("TEST1-3\n");
+#if 0
+    char buf[40];
+    PyOS_snprintf(buf, sizeof(buf),
+		  "%c%c%d", endian, 
+		  inter->typekind, 
+		  inter->itemsize);
+    printf("TEST2 String:%s\n",buf);
+    PyObject *stringobj = PyUnicode_FromString(buf);
+    if (stringobj == NULL) {
+       return NULL;
+    }
+    printf("TEST2-2\n");
+    if (MyPyArray_DescrConverter(stringobj, &thetype) != NPY_SUCCEED) {
+        Py_DECREF(stringobj);
+	return NULL;
+    }
+    printf("TEST2-3\n");
+    Py_DECREF(stringobj);
+#endif
+    printf("TEST3\n");
+    ret = (PyArrayObject *)PyArray_NewFromDescr(&PyArray_Type, thetype,
+                               inter->nd, inter->shape,
+                               inter->strides, inter->data,
+                               inter->flags, NULL);
+    printf("TEST4\n");
+    Py_INCREF(inter);
+    if (PyArray_SetBaseObject(ret, (PyObject *)inter) < 0) {
+	Py_DECREF(ret);
+	return NULL;
+    }
+    printf("TEST5\n");
+//    Py_DECREF(attr);
+    PyArray_UpdateFlags(ret, NPY_ARRAY_UPDATE_ALL);
+    printf("TEST6\n");
+    return (PyObject *)ret;
+}
+//    obj = NpyCapsule_FromVoidPtrAndDesc(inter, self, gentype_struct_free);
+/*
+#ifdef Py_CAPSULE_H
+  obj = PyCapsule_New((void*)inter, "struct SignedIntBuf", free_capsule);
+#else
+  obj = PyCObject_FromVoidPtrAndDesc((void*)inter, (void*)self, free_array_interface);
+#endif
+*/
+  // Cross fingers here.
+//  return obj;
+
diff --git a/pymolfile/molfile/pymolfile-new.h b/pymolfile/molfile/pymolfile-new.h
new file mode 100644
index 0000000..5bf304e
--- /dev/null
+++ b/pymolfile/molfile/pymolfile-new.h
@@ -0,0 +1,356 @@
+/* Hey emacs this is -*- C -*- and this is my editor vim.
+ * 
+ * molfile.c : C and Fortran interfaces for molfile_plugins
+ * Copyright (c) Berk Onat <b.onat@warwick.ac.uk> 2017
+ *
+ * This program is under BSD LICENSE
+ */
+
+/*
+ * The code is written following the plugin test 
+ * context of f77_molfile.c by Axel Kohlmeyer and 
+ * in molfile_plugin/src/f77 and catdcd.c by 
+ * Justin Gullingsrud of VMD plugins.
+ */
+
+#ifndef _MOLFILE_H_
+#define _MOLFILE_H_
+
+#ifdef __cplusplus
+extern "C"
+{
+
+#endif
+
+#include "molfile_plugin.h"
+#include "libmolfile_plugin.h"
+#include "vmdplugin.h"
+#include "Python.h"
+#include "structmember.h"
+#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION
+#include <numpy/arrayobject.h>
+
+
+enum { pluginOK, pluginNOINIT, pluginCLOSE, pluginNOMEM, 
+       pluginENDOFFILE, pluginFILENOTFOUND, pluginFORMATERROR };
+
+#ifndef MAXPLUGINS
+#define MAXPLUGINS 200
+#endif
+
+struct MolObject {
+    PyObject_HEAD
+    molfile_plugin_t* plugin;
+    void* file_handle;
+    int natoms;
+    MolObject(void) {}
+};
+
+static void MolObject_dealloc(MolObject* self)
+{
+    Py_XDECREF(self->plugin);
+    Py_XDECREF(self->file_handle);
+    Py_TYPE(self)->tp_free((PyObject*)self);
+}
+
+static PyObject * MolObject_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
+{
+    MolObject *self;
+
+    self = (MolObject *)type->tp_alloc(type, 0);
+    if (self != NULL) {
+        self->plugin = NULL;
+        self->file_handle = NULL;
+        self->natoms = 0;
+    }
+
+    return (PyObject *)self;
+}
+
+static int MolObject_init(MolObject *self, PyObject *args, PyObject *kwds)
+{
+    molfile_plugin_t *plugin = NULL;
+    void *file_handle = NULL;
+    molfile_plugin_t *tmp1 = NULL;
+    void *tmp2 = NULL;
+
+    static char *kwlist[] = {"plugin", "file_handle", "natoms", NULL};
+
+    if (! PyArg_ParseTupleAndKeywords(args, kwds, "|OOi", kwlist,
+                                      &plugin, &file_handle,
+                                      &self->natoms))
+        return -1;
+
+    if (plugin) {
+        tmp1 = self->plugin;
+        Py_INCREF(plugin);
+        self->plugin = plugin;
+        Py_XDECREF(tmp1);
+    }
+
+    if (file_handle) {
+        tmp2 = self->file_handle;
+        Py_INCREF(file_handle);
+        self->file_handle = file_handle;
+        Py_XDECREF(tmp2);
+    }
+
+    return 0;
+}
+
+static molfile_plugin_t* MolObject_plugin(MolObject* self)
+{
+        return self->plugin;
+}
+
+static void* MolObject_file_handle(MolObject* self)
+{
+        return self->file_handle;
+}
+
+static PyObject* MolObject_natoms(MolObject* self)
+{
+        return PyLong_FromLong((long)self->natoms);
+}
+
+static PyMemberDef MolObject_members[] = {
+    {"plugin", T_OBJECT_EX, offsetof(MolObject, plugin), 0,
+     "molfile_plugin_t type plugin"},
+    {"file_handle", T_OBJECT_EX, offsetof(MolObject, file_handle), 0,
+     "file handle for plugin"},
+    {"natoms", T_INT, offsetof(MolObject, natoms), 0,
+     "number of atoms"},
+    {NULL}  /* Sentinel */
+};
+
+static PyMethodDef MolObject_methods[] = {
+    {"get_plugin", (PyCFunction)MolObject_plugin, METH_NOARGS,
+     "Return the plugin"
+    },
+    {"get_file_handle", (PyCFunction)MolObject_file_handle, METH_NOARGS,
+     "Return the plugin"
+    },
+    {"get_natoms", (PyCFunction)MolObject_natoms, METH_NOARGS,
+     "Return the number of atoms"
+    },
+    {NULL}  /* Sentinel */
+};
+
+
+#ifndef PyVarObject_HEAD_INIT
+    #define PyVarObject_HEAD_INIT(type, size) \
+        PyObject_HEAD_INIT(type) size,
+#endif
+
+static PyTypeObject MolObjectType = {
+    PyVarObject_HEAD_INIT(NULL, 0)
+    "molobject",                 /*tp_name*/
+    sizeof(MolObject),          /*tp_basicsize*/
+    0,                         /*tp_itemsize*/
+    (destructor)MolObject_dealloc, /*tp_dealloc*/
+    0,                         /*tp_print*/
+    0,                         /*tp_getattr*/
+    0,                         /*tp_setattr*/
+    0,                         /*tp_reserved*/
+    0,                         /*tp_repr*/
+    0,                         /*tp_as_number*/
+    0,                         /*tp_as_sequence*/
+    0,                         /*tp_as_mapping*/
+    0,                         /*tp_hash */
+    0,                         /*tp_call*/
+    0,                         /*tp_str*/
+    0,                         /*tp_getattro*/
+    0,                         /*tp_setattro*/
+    0,                         /*tp_as_buffer*/
+    Py_TPFLAGS_DEFAULT | 
+	    Py_TPFLAGS_BASETYPE,   /* tp_flags */
+    "molobject objects",           /* tp_doc */
+    0,                         /* tp_traverse */
+    0,                         /* tp_clear */
+    0,                         /* tp_richcompare */
+    0,                         /* tp_weaklistoffset */
+    0,                         /* tp_iter */
+    0,                         /* tp_iternext */
+    MolObject_methods,         /* tp_methods */
+    MolObject_members,         /* tp_members */
+    0,                         /* tp_getset */
+    0,                         /* tp_base */
+    0,                         /* tp_dict */
+    0,                         /* tp_descr_get */
+    0,                         /* tp_descr_set */
+    0,                         /* tp_dictoffset */
+    (initproc)MolObject_init,      /* tp_init */
+    0,                         /* tp_alloc */	
+    MolObject_new,                 /* tp_new */
+};
+
+#if 0
+struct MolAtom {
+    PyObject_HEAD
+    char* name; 
+    char* type; 
+    char* resname;
+    int* resid;
+    char* segid;
+    char* chain;
+    char* altloc;
+    char* insertion;
+    float* occupancy;
+    float* bfactor;
+    float* mass;
+    float* charge;
+    float* radius;
+    float* atomicnumber;
+    float* ctnumber;
+    MolAtom(void) {}
+};
+
+static void MolAtom_dealloc(MolAtom* self)
+{
+    Py_XDECREF(self->name); 
+    Py_XDECREF(self->type); 
+    Py_XDECREF(self->resname);
+    Py_XDECREF(self->resid);
+    Py_XDECREF(self->segid);
+    Py_XDECREF(self->chain);
+    Py_XDECREF(self->altloc);
+    Py_XDECREF(self->insertion);
+    Py_XDECREF(self->occupancy);
+    Py_XDECREF(self->bfactor);
+    Py_XDECREF(self->mass);
+    Py_XDECREF(self->charge);
+    Py_XDECREF(self->radius);
+    Py_XDECREF(self->atomicnumber);
+    Py_XDECREF(self->ctnumber);
+    Py_TYPE(self)->tp_free((PyObject*)self);
+}
+
+static PyObject * MolAtom_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
+{
+    MolAtom *self;
+
+    self = (MolAtom *)type->tp_alloc(type, 0);
+    if (self != NULL) {
+        self->name = NULL;
+        self->type = NULL;
+        self->resname = NULL;
+        self->resid = NULL;
+        self->segid = NULL;
+        self->chain = NULL;
+        self->altloc = NULL;
+        self->insertion = NULL;
+        self->occupancy = NULL;
+        self->bfactor = NULL;
+        self->mass = NULL;
+        self->charge = NULL;
+        self->radius = NULL;
+        self->atomicnumber = NULL;
+        self->ctnumber = NULL;
+    }
+
+    return (PyObject *)self;
+}
+
+static PyMemberDef MolAtom_members[] = {
+    {"name", T_STRING, offsetof(MolAtom, name), 0,""},
+    {"type", T_STRING, offsetof(MolAtom, type), 0,""},
+    {"resname", T_STRING, offsetof(MolAtom, resname), 0,""},
+    {"resid", T_INT, offsetof(MolAtom, resid), 0,""},
+    {"segid", T_STRING, offsetof(MolAtom, segid), 0,""},
+    {"chain", T_STRING, offsetof(MolAtom, chain), 0,""},
+    {"altloc", T_STRING, offsetof(MolAtom, altloc), 0,""},
+    {"insertion", T_STRING, offsetof(MolAtom, insertion), 0,""},
+    {"occupancy", T_FLOAT, offsetof(MolAtom, occupancy), 0,""},
+    {"bfactor", T_FLOAT, offsetof(MolAtom, bfactor), 0,""},
+    {"mass", T_FLOAT, offsetof(MolAtom, mass), 0,""},
+    {"charge", T_FLOAT, offsetof(MolAtom, charge), 0,""},
+    {"radius", T_FLOAT, offsetof(MolAtom, radius), 0,""},
+    {"atomicnumber", T_INT, offsetof(MolAtom, atomicnumber), 0,""},
+    {"ctnumber", T_INT, offsetof(MolAtom, ctnumber), 0,""},
+    {NULL, NULL, 0, NULL}  /* Sentinel */
+};
+
+static PyTypeObject MolAtomType = {
+    PyVarObject_HEAD_INIT(NULL, 0)
+    "molobject",                 /*tp_name*/
+    sizeof(MolAtom),          /*tp_basicsize*/
+    0,                         /*tp_itemsize*/
+    (destructor)MolAtom_dealloc, /*tp_dealloc*/
+    0,                         /*tp_print*/
+    0,                         /*tp_getattr*/
+    0,                         /*tp_setattr*/
+    0,                         /*tp_reserved*/
+    0,                         /*tp_repr*/
+    0,                         /*tp_as_number*/
+    0,                         /*tp_as_sequence*/
+    0,                         /*tp_as_mapping*/
+    0,                         /*tp_hash */
+    0,                         /*tp_call*/
+    0,                         /*tp_str*/
+    0,                         /*tp_getattro*/
+    0,                         /*tp_setattro*/
+    0,                         /*tp_as_buffer*/
+    Py_TPFLAGS_DEFAULT | 
+	    Py_TPFLAGS_BASETYPE,   /* tp_flags */
+    "molatom objects",           /* tp_doc */
+    0,                         /* tp_traverse */
+    0,                         /* tp_clear */
+    0,                         /* tp_richcompare */
+    0,                         /* tp_weaklistoffset */
+    0,                         /* tp_iter */
+    0,                         /* tp_iternext */
+    0,         /* tp_methods */
+    MolAtom_members,         /* tp_members */
+    0,                         /* tp_getset */
+    0,                         /* tp_base */
+    0,                         /* tp_dict */
+    0,                         /* tp_descr_get */
+    0,                         /* tp_descr_set */
+    0,                         /* tp_dictoffset */
+    0,      /* tp_init */
+    0,                         /* tp_alloc */	
+    MolAtom_new,                 /* tp_new */
+};
+#endif
+PyObject * my_read_structure(PyObject* molpack);
+PyObject * read_fill_structure(PyObject* molpack, PyObject* prototype);
+PyObject * get_structure(PyObject* molpack);
+
+#if 0
+typedef struct DICTHOLDER {
+    const char *key;          // Dictionary key
+    int id;                   // Id of the item
+    int read;                 // 1 if molfile plugin read the format
+    int write;                // 1 if molfile plugin write in this format
+    struct DICTHOLDER *next;  // Next item in the dictionary
+} DICTHOLDER;
+
+struct DICTHOLDER * plugin_find(struct DICTHOLDER *dict, const char *pluginname);
+
+static int plugin_add(struct DICTHOLDER *dict, const char *key, int id);
+
+static int plugin_remove(struct DICTHOLDER *dict, const char *key);
+
+static int has_readsupport(const char *pluginname);
+
+static int has_writesupport(const char *pluginname);
+
+static molfile_plugin_t *get_plugin(const char *pluginname);
+
+static int molfile_register(void *ptr, vmdplugin_t *plugin);
+
+#endif
+molfile_plugin_t* get_plugin(molfile_plugin_t** plug_list, int plug_no);
+
+molfile_plugin_t** molfile_plugin_list(int maxsize);
+
+int molfile_init(void);
+
+int molfile_finish(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _MOLFILE_H_ */
+
diff --git a/pymolfile/molfile/pymolfile.c b/pymolfile/molfile/pymolfile.c
index b3033e9..1b81304 100644
--- a/pymolfile/molfile/pymolfile.c
+++ b/pymolfile/molfile/pymolfile.c
@@ -33,15 +33,1099 @@
 
 #include "pymolfile.h"
 
-int numplugins=0;
-molfile_plugin_t** plugin_list;
-
 
+//for PyArrayInterface:
+/*
+#define CONTIGUOUS 0x01
+#define FORTRAN 0x02
+#define ALIGNED 0x100
+#define NOTSWAPPED 0x200
+#define WRITEABLE 0x400
+#define ARR_HAS_DESCR 0x800
+*/
+//byteorder dictionary
+//char** byteorder = {"<", "little", ">", "big"};
 
+int numplugins=0;
+molfile_plugin_t** plugin_list;
 
+/*
+typedef struct PyArrayInterface{
+    int version;          //contains the integer 2 as a sanity check
+    int nd;               //number of dimensions
+    char typekind;        //kind in array --- character code of typestr
+    int itemsize;         //size of each element
+    int flags;            //flags indicating how the data should be interpreted
+    Py_intptr_t *shape;   //A length-nd array of shape information
+    Py_intptr_t *strides; //A length-nd array of stride information
+    void *data;           //A pointer to the first element of the array
+};
+*/
 /* * * * * * * * * * * * * * * * * * * * * * *
  * Helper functions to set and store plugins *
  * * * * * * * * * * * * * * * * * * * * * * */
+
+
+#if PY_VERSION_HEX >= 0x03000000
+#define PyInt_AsSsize_t PyLong_AsSsize_t
+#define PyInt_AsLong PyLong_AsLong
+#define PyArray_Check(op) PyObject_TypeCheck(op, &PyArray_Type)
+#define PyString_FromString PyBytes_FromString
+#define PyUString_Check PyUnicode_Check
+#define PyUString_GET_SIZE PyUnicode_GET_SIZE
+#define PyUString_FromFormat PyUnicode_FromFormat
+#define PyInt_FromLong PyLong_FromLong
+#define PyString_Type PyBytes_Type
+#define PyInt_Type PyLong_Type
+
+NPY_NO_EXPORT void
+gentype_struct_free(PyObject *ptr)
+{
+    PyArrayInterface *arrif;
+    PyObject *context;
+
+    arrif = (PyArrayInterface*)PyCapsule_GetPointer(ptr, NULL);
+    context = (PyObject *)PyCapsule_GetContext(ptr);
+    Py_DECREF(context);
+    Py_XDECREF(arrif->descr);
+    PyArray_free(arrif->shape);
+    PyArray_free(arrif);
+}
+static NPY_INLINE void *
+NpyCapsule_AsVoidPtr(PyObject *obj)
+{
+    void *ret = PyCapsule_GetPointer(obj, NULL);
+    if (ret == NULL) {
+        PyErr_Clear();
+    }   
+    return ret;
+}
+static NPY_INLINE PyObject *
+NpyCapsule_FromVoidPtr(void *ptr, void (*dtor)(PyObject *))
+{
+    PyObject *ret = PyCapsule_New(ptr, NULL, dtor);
+    if (ret == NULL) {
+        PyErr_Clear();
+    }
+    return ret;
+}
+static NPY_INLINE PyObject *
+NpyCapsule_FromVoidPtrAndDesc(void *ptr, void* context, void (*dtor)(PyObject *))
+{
+    PyObject *ret = NpyCapsule_FromVoidPtr(ptr, dtor);
+    if (ret != NULL && PyCapsule_SetContext(ret, context) != 0) {
+        PyErr_Clear();
+        Py_DECREF(ret);
+        ret = NULL;
+    }
+    return ret;
+}
+#else
+#define PyBytes_FromString PyString_FromString
+NPY_NO_EXPORT void
+gentype_struct_free(void *ptr, void *arg)
+{
+    PyArrayInterface *arrif = (PyArrayInterface *)ptr;
+    Py_DECREF((PyObject *)arg);
+    Py_XDECREF(arrif->descr);
+    PyArray_free(arrif->shape);
+    PyArray_free(arrif);
+}
+NpyCapsule_FromVoidPtrAndDesc(void *ptr, void* context,
+        void (*dtor)(void *, void *))
+{
+    return PyCObject_FromVoidPtrAndDesc(ptr, context, dtor);
+}
+#endif
+static PyObject *typeDict = NULL;   /* Must be explicitly loaded */
+
+
+#define NPY_NEXT_ALIGNED_OFFSET(offset, alignment) \
+                (((offset) + (alignment) - 1) & (-(alignment)))
+
+static PyArray_Descr *
+_convert_from_array_descr(PyObject *obj, int align)
+{
+    int n, i, totalsize;
+    int ret;
+    PyObject *fields, *item, *newobj;
+    PyObject *name, *tup, *title;
+    PyObject *nameslist;
+    PyArray_Descr *newea;
+    PyArray_Descr *conv;
+    /* Types with fields need the Python C API for field access */
+    char dtypeflags = NPY_NEEDS_PYAPI;
+    int maxalign = 0;
+
+    printf("Test1\n");
+    n = PyList_GET_SIZE(obj);
+    nameslist = PyTuple_New(n);
+    if (!nameslist) {
+        return NULL;
+    }
+    totalsize = 0;
+    fields = PyDict_New();
+    for (i = 0; i < n; i++) {
+        item = PyList_GET_ITEM(obj, i);
+        if (!PyTuple_Check(item) || (PyTuple_GET_SIZE(item) < 2)) {
+            goto fail;
+        }
+        name = PyTuple_GET_ITEM(item, 0);
+        if (PyUString_Check(name)) {
+            title = NULL;
+        }
+        else if (PyTuple_Check(name)) {
+            if (PyTuple_GET_SIZE(name) != 2) {
+                goto fail;
+            }
+            title = PyTuple_GET_ITEM(name, 0);
+            name = PyTuple_GET_ITEM(name, 1);
+            if (!PyUString_Check(name)) {
+                goto fail;
+            }
+        }
+        else {
+            goto fail;
+        }
+
+        /* Insert name into nameslist */
+        Py_INCREF(name);
+
+        if (PyUString_GET_SIZE(name) == 0) {
+            Py_DECREF(name);
+            if (title == NULL) {
+                name = PyUString_FromFormat("f%d", i);
+            }
+#if PY_VERSION_HEX >= 0x03000000
+            /* On Py3, allow only non-empty Unicode strings as field names */
+            else if (PyUString_Check(title) && PyUString_GET_SIZE(title) > 0) {
+                name = title;
+                Py_INCREF(name);
+            }
+            else {
+                goto fail;
+            }
+#else
+            else {
+                name = title;
+                Py_INCREF(name);
+            }
+#endif
+        }
+        PyTuple_SET_ITEM(nameslist, i, name);
+
+        /* Process rest */
+
+    printf("Test2\n");
+        if (PyTuple_GET_SIZE(item) == 2) {
+            if (align) {
+    printf("Test3\n");
+                ret = PyArray_DescrAlignConverter(PyTuple_GET_ITEM(item, 1),
+                                                        &conv);
+            }
+            else {
+    printf("Test4\n");
+                ret = PyArray_DescrConverter(PyTuple_GET_ITEM(item, 1), &conv);
+            }
+            if (ret == NPY_FAIL) {
+                PyObject_Print(PyTuple_GET_ITEM(item, 1), stderr, 0);
+            }
+        }
+        else if (PyTuple_GET_SIZE(item) == 3) {
+            newobj = PyTuple_GetSlice(item, 1, 3);
+            if (align) {
+    printf("Test5\n");
+                ret = PyArray_DescrAlignConverter(newobj, &conv);
+            }
+            else {
+    printf("Test6\n");
+                ret = PyArray_DescrConverter(newobj, &conv);
+            }
+            Py_DECREF(newobj);
+        }
+        else {
+            goto fail;
+        }
+        if (ret == NPY_FAIL) {
+            goto fail;
+        }
+        if ((PyDict_GetItem(fields, name) != NULL)
+             || (title
+#if PY_VERSION_HEX >= 0x03000000
+                 && PyUString_Check(title)
+#else
+                 && (PyUString_Check(title) || PyUnicode_Check(title))
+#endif
+                 && (PyDict_GetItem(fields, title) != NULL))) {
+#if PY_VERSION_HEX >= 0x03000000
+            name = PyUnicode_AsUTF8String(name);
+#endif
+            PyErr_Format(PyExc_ValueError,
+                    "field '%s' occurs more than once", PyBytes_AsString(name));
+#if PY_VERSION_HEX >= 0x03000000
+            Py_DECREF(name);
+#endif
+            goto fail;
+        }
+        dtypeflags |= (conv->flags & NPY_FROM_FIELDS);
+        if (align) {
+            int _align;
+
+            _align = conv->alignment;
+            if (_align > 1) {
+                totalsize = NPY_NEXT_ALIGNED_OFFSET(totalsize, _align);
+            }
+            maxalign = PyArray_MAX(maxalign, _align);
+        }
+        tup = PyTuple_New((title == NULL ? 2 : 3));
+        PyTuple_SET_ITEM(tup, 0, (PyObject *)conv);
+        PyTuple_SET_ITEM(tup, 1, PyInt_FromLong((long) totalsize));
+
+        /*
+         * Title can be "meta-data".  Only insert it
+         * into the fields dictionary if it is a string
+         * and if it is not the same as the name.
+         */
+        if (title != NULL) {
+            Py_INCREF(title);
+            PyTuple_SET_ITEM(tup, 2, title);
+            PyDict_SetItem(fields, name, tup);
+#if PY_VERSION_HEX >= 0x03000000
+            if (PyUString_Check(title)) {
+#else
+            if (PyUString_Check(title) || PyUnicode_Check(title)) {
+#endif
+                if (PyDict_GetItem(fields, title) != NULL) {
+                    PyErr_SetString(PyExc_ValueError,
+                            "title already used as a name or title.");
+                    Py_DECREF(tup);
+                    goto fail;
+                }
+                PyDict_SetItem(fields, title, tup);
+            }
+        }
+        else {
+            PyDict_SetItem(fields, name, tup);
+        }
+
+        totalsize += conv->elsize;
+        Py_DECREF(tup);
+    }
+
+    if (maxalign > 1) {
+        totalsize = NPY_NEXT_ALIGNED_OFFSET(totalsize, maxalign);
+    }
+
+    newea = PyArray_DescrNewFromType(NPY_VOID);
+    if (newea == NULL) {
+        Py_XDECREF(fields);
+        Py_XDECREF(nameslist);
+        return NULL;
+    }
+    newea->fields = fields;
+    newea->names = nameslist;
+    newea->elsize = totalsize;
+    newea->flags = dtypeflags;
+
+    /* Structured arrays get a sticky aligned bit */
+    if (align) {
+        newea->flags |= NPY_ALIGNED_STRUCT;
+        newea->alignment = maxalign;
+    }
+    return newea;
+
+ fail:
+    Py_DECREF(fields);
+    Py_DECREF(nameslist);
+    return NULL;
+
+}
+
+static NPY_INLINE npy_bool
+_is_basic_python_type(PyTypeObject *tp)
+{
+    return (
+        /* Basic number types */
+        tp == &PyBool_Type ||
+#if PY_VERSION_HEX >= 0x03000000
+        tp == &PyInt_Type ||
+#endif
+        tp == &PyLong_Type ||
+        tp == &PyFloat_Type ||
+        tp == &PyComplex_Type ||
+
+        /* Basic sequence types */
+        tp == &PyList_Type ||
+        tp == &PyTuple_Type ||
+        tp == &PyDict_Type ||
+        tp == &PySet_Type ||
+        tp == &PyFrozenSet_Type ||
+        tp == &PyUnicode_Type ||
+        tp == &PyBytes_Type ||
+#if PY_VERSION_HEX >= 0x03000000
+        tp == &PyString_Type ||
+#endif
+
+        /* other builtins */
+        tp == &PySlice_Type ||
+        tp == Py_TYPE(Py_None) ||
+        tp == Py_TYPE(Py_Ellipsis) ||
+        tp == Py_TYPE(Py_NotImplemented) ||
+
+        /* TODO: ndarray, but we can't see PyArray_Type here */
+
+        /* sentinel to swallow trailing || */
+        NPY_FALSE
+    );
+}
+
+static NPY_INLINE PyObject *
+maybe_get_attr(PyObject *obj, char *name)
+{
+    PyTypeObject *tp = Py_TYPE(obj);
+    PyObject *res = (PyObject *)NULL;
+
+    /* Attribute referenced by (char *)name */
+    if (tp->tp_getattr != NULL) {
+        res = (*tp->tp_getattr)(obj, name);
+        if (res == NULL) {
+            PyErr_Clear();
+        }
+    }
+    /* Attribute referenced by (PyObject *)name */
+    else if (tp->tp_getattro != NULL) {
+#if PY_VERSION_HEX >= 0x03000000
+        PyObject *w = PyUnicode_InternFromString(name);
+#else
+        PyObject *w = PyString_InternFromString(name);
+#endif
+        if (w == NULL) {
+            return (PyObject *)NULL;
+        }
+        res = (*tp->tp_getattro)(obj, w);
+        Py_DECREF(w);
+        if (res == NULL) {
+            PyErr_Clear();
+        }
+    }
+    return res;
+}
+
+static NPY_INLINE PyObject *
+maybe_set_attr(PyObject *obj, char *name, PyObject *attr)
+{
+    PyTypeObject *tp = Py_TYPE(obj);
+    int status;
+
+    /* Attribute referenced by (char *)name */
+    if (tp->tp_setattr != NULL) {
+        printf("tp_setattr not null\n");
+        status = (*tp->tp_setattr)(obj, name, attr);
+        if (status < 0) {
+            printf("No tp_setattr\n");
+            PyErr_Clear();
+            PyErr_Format(PyExc_IOError, "Error: no __array_interface__ attribute in object.");
+            return NULL;
+        }   
+    }   
+    /* Attribute referenced by (PyObject *)name */
+    else if (tp->tp_setattro != NULL) {
+        printf("tp_setattr null but tp_setattro is not null\n");
+#if PY_VERSION_HEX >= 0x03000000
+        PyObject *w = PyUnicode_InternFromString(name);
+        printf("PyUnicode_InternFromString name\n");
+#else
+        PyObject *w = PyString_InternFromString(name);
+        printf("PyString_InternFromString name\n");
+#endif
+        if (w == NULL) {
+            printf("Name is NULL\n");
+            PyErr_Clear();
+            PyErr_Format(PyExc_IOError, "Error: no __array_interface__ attribute in object.");
+            return NULL;
+        }
+        //status = (*tp->tp_setattro)(obj, w, attr);
+        //status = PyObject_GenericSetAttr(obj, w, attr);
+        status = PyObject_SetAttrString(obj, name, attr);
+        if (status < 0) {
+            printf("can not use tp_setattro status:%d\n", status);
+            PyErr_Clear();
+            PyErr_Format(PyExc_IOError, "Error: can not set interface attribute.");
+            return NULL;
+        }
+    }
+    return obj;
+}
+
+static int get_array_struct(PyObject* obj, int *maxndim, npy_intp *d_shape, PyArrayInterface* inter)
+{
+    PyTypeObject *tp = Py_TYPE(obj);
+    PyObject* ret;
+    char* str;
+    int i;
+    str = "__array_struct__";
+    /* We do not need to check for special attributes on trivial types */
+    if (_is_basic_python_type(tp)) {
+        ret = NULL;
+    }   
+    /* obj has the __array_struct__ interface */
+    ret = maybe_get_attr(obj, str);
+    if (ret != NULL) {
+        int nd = -1;
+        if (PyCapsule_CheckExact(ret)) {
+            PyArrayInterface *inter;
+            inter = (PyArrayInterface *)NpyCapsule_AsVoidPtr(ret);
+            if (inter->two == 2) {
+                nd = inter->nd;
+                if (nd >= 0) {
+                    if (nd < *maxndim) {
+                        *maxndim = nd;
+                    }
+                    for (i=0; i<*maxndim; i++) {
+                        d_shape[i] = inter->shape[i];
+                    }
+                }
+            }
+        }
+        if(nd >= 0){ 
+            return 0;
+        } else {
+            return -1;
+        }
+    } else {
+        return -1;
+    }
+}
+
+PyObject* my_get_array_attr_interface(PyObject* obj){
+    printf("Check-in my_get_array_attr_interface\n");
+    printf("Check-out my_get_array_attr_interface\n");
+    return obj;
+}
+
+PyObject* get_array_attr_interface(PyObject* obj, char* str, int *maxndim, npy_intp *d_shape){
+    PyTypeObject *tp = Py_TYPE(obj);
+    char* dictstr;
+    int i, failflag=0;
+    dictstr = "__array_interface__";
+    PyObject* ret;
+    PyObject* retuni = NULL;
+    PyObject* newi = NULL;
+    PyObject* objj = NULL;
+    if (_is_basic_python_type(tp)) {
+        ret = NULL;
+    }   
+    /* obj has the __array_interface__ interface */
+    ret = maybe_get_attr(obj, dictstr);
+    if (ret != NULL) {
+        int nd = -1;
+        if (PyDict_Check(ret)) {
+            printf("I- %s\n",str);
+            objj = PyDict_GetItemString(ret, str);
+            printf("O- %s\n",str);
+            //newi = PyDict_GetItemString(ret, str);
+	    if (str == "shape"){
+              if (objj && PyTuple_Check(objj)) {
+                nd = PyTuple_GET_SIZE(objj);
+                if (nd >= 0) {
+                    maxndim = &nd;
+                    printf("nd:%d\n",*maxndim);
+                    for (i=0; i<nd; i++) {
+                        //Py_INCREF(objj);
+                        retuni = PyTuple_GET_ITEM(objj, i);
+                        printf("step:%d\n",i);
+                        //d_shape[i] = (npy_intp) PyInt_AsSsize_t(retuni);
+                        //d_shape[i] = PyInt_AsSsize_t(PyTuple_GET_ITEM(objj, i));
+                        //Py_DECREF(objj);
+                        printf("T- %d\n",i);
+                        //if (d_shape[i] < 0) {
+                        //    PyErr_SetString(PyExc_RuntimeError,
+                        //        "Invalid shape in __array_interface__");
+                        //    failflag = 1;
+                        //}
+                    }
+                }
+              }
+	    } else {
+                printf("T5\n");
+                PyObject* tuple = PyTuple_New(1);
+                PyTuple_SET_ITEM(tuple, 0, objj);
+                printf("T6\n");
+                return (PyObject*) tuple;
+            }
+        }
+        if (nd >= 0) {
+            printf("T5\n");
+            //newi = (PyArrayObject*) objj;
+            PyObject* tuple = PyTuple_New(1);
+            PyTuple_SET_ITEM(tuple, 0, objj);
+            printf("T6\n");
+            return (PyObject*) tuple;
+        } else {
+            failflag = 1;
+        }
+    } else {
+        failflag = 1;
+    }
+    if (failflag){
+        PyErr_Clear();
+        PyErr_Format(PyExc_IOError, "Error: can not get attribute of given numpy array.");
+        return NULL;
+    }
+}
+
+PyObject* get_descr_array_interface(PyObject* obj){
+    PyTypeObject *tp = Py_TYPE(obj);
+    char* dictstr;
+    char* descrstr;
+    int i, failflag=0;
+    dictstr = "__array_interface__";
+    descrstr = "descr";
+    PyObject* ret;
+    PyObject* retuni = NULL;
+    PyObject* newi = NULL;
+    PyObject* objj = NULL;
+    if (_is_basic_python_type(tp)) {
+        ret = NULL;
+    }   
+    /* obj has the __array_interface__ interface */
+    ret = maybe_get_attr(obj, dictstr);
+    if (ret != NULL) {
+        if (PyDict_Check(ret)) {
+            objj = PyDict_GetItemString(ret, descrstr);
+            return (PyObject*) objj;
+        } else {
+            failflag = 1;
+        }
+    } else {
+        failflag = 1;
+    }
+    if (failflag){
+        PyErr_Clear();
+        PyErr_Format(PyExc_IOError, "Error: can not get attribute of given numpy array.");
+        return NULL;
+    }
+}
+
+PyObject* set_array_attr_interface(PyObject* obj, int nsize, void* data)
+{
+    PyTypeObject *tp = Py_TYPE(obj);
+    char* dictstr;
+    char* shapestr;
+    char* datastr;
+    int i, failflag=0;
+    dictstr = "__array_interface__";
+    shapestr= "shape";
+    datastr= "data";
+    PyObject* ret;
+    //PyObject* retuni = NULL;
+    //PyObject* newi = NULL;
+    PyObject* shapeobj = NULL;
+    PyObject* dataobj = NULL;
+    PyObject* new_shape = NULL;
+    int status;
+    if (_is_basic_python_type(tp)) {
+        ret = NULL;
+    }   
+    /* obj has the __array_interface__ interface */
+    ret = maybe_get_attr(obj, dictstr);
+    printf("AA0\n");
+    if (ret != NULL) {
+        int nd = -1;
+        if (PyDict_Check(ret)) {
+            shapeobj = PyDict_GetItemString(ret, shapestr);
+            printf("AA1\n");
+            if (shapeobj && PyTuple_Check(shapeobj)) {
+                nd = PyTuple_GET_SIZE(shapeobj);
+                printf("AA1-1\n");
+                if (nd >= 0) {
+                    new_shape = PyTuple_New(nd);
+                    for (i=0; i<nd; i++) {
+                        PyTuple_SET_ITEM(new_shape, i, PyInt_FromLong((int)nsize));
+                    }
+                    status = PyDict_SetItemString(ret, shapestr, new_shape);
+                    if (status<0){
+                        printf("AA1-2\n");
+                        Py_DECREF(new_shape);
+                        PyErr_Clear();
+                        failflag = 1;
+                    }
+                } else {
+                    printf("AA1-3\n");
+		    failflag = 1;
+		}
+	    }
+            printf("AA2\n");
+	    if(!failflag){
+                dataobj = PyDict_GetItemString(ret, datastr);
+                printf("AA2-1\n");
+                if (dataobj && PyTuple_Check(dataobj)) {
+                    PyTuple_SET_ITEM(dataobj, 0, PyLong_FromVoidPtr(data));
+                    status = PyDict_SetItemString(ret, datastr, dataobj);
+                    if (status<0){
+                        printf("AA2-2\n");
+                        failflag = 1;
+                    }
+	        }
+	    }
+            printf("AA3\n");
+	    if(!failflag){
+                printf("AA3-1\n");
+                obj = maybe_set_attr(obj, dictstr, ret);
+                if (!obj){
+                    printf("AA3-2\n");
+                    failflag = 1;
+                }
+	    }
+            printf("AA4\n");
+        } else {
+            printf("AA1-0\n");
+            failflag = 1;
+        }
+    } else {
+        printf("AA0-1\n");
+        failflag = 1;
+    }
+    if (failflag){
+        Py_DECREF(new_shape);
+        PyErr_Clear();
+        PyErr_Format(PyExc_IOError, "Error: can not get attribute of given numpy array.");
+        printf("AA Fail\n");
+        return NULL;
+    } else {
+        printf("AA Return\n");
+        return obj;
+    }
+}
+
+
+#if 0
+NPY_NO_EXPORT int
+MyArray_DescrConverter(PyObject *obj, PyArray_Descr **at)
+{
+    int check_num = NPY_NOTYPE + 10;
+    PyObject *item;
+    int elsize = 0;
+    char endian = '=';
+
+    *at = NULL;
+
+    printf("Test0\n");
+    /* default */
+    if (obj == Py_None) {
+        *at = PyArray_DescrFromType(NPY_DEFAULT_TYPE);
+        return NPY_SUCCEED;
+    }
+
+    printf("Test1\n");
+    if (PyArray_DescrCheck(obj)) {
+        *at = (PyArray_Descr *)obj;
+        Py_INCREF(*at);
+        return NPY_SUCCEED;
+    }
+
+    printf("Test2\n");
+    if (PyType_Check(obj)) {
+        if (PyType_IsSubtype((PyTypeObject *)obj, &PyGenericArrType_Type)) {
+            *at = PyArray_DescrFromTypeObject(obj);
+            return (*at) ? NPY_SUCCEED : NPY_FAIL;
+        }
+        check_num = NPY_OBJECT;
+#if !defined(NPY_PY3K)
+        if (obj == (PyObject *)(&PyInt_Type)) {
+            check_num = NPY_LONG;
+        }
+        else if (obj == (PyObject *)(&PyLong_Type)) {
+            check_num = NPY_LONGLONG;
+        }
+#else
+        if (obj == (PyObject *)(&PyLong_Type)) {
+            check_num = NPY_LONG;
+        }
+#endif
+        else if (obj == (PyObject *)(&PyFloat_Type)) {
+            check_num = NPY_DOUBLE;
+        }
+        else if (obj == (PyObject *)(&PyComplex_Type)) {
+            check_num = NPY_CDOUBLE;
+        }
+        else if (obj == (PyObject *)(&PyBool_Type)) {
+            check_num = NPY_BOOL;
+        }
+        else if (obj == (PyObject *)(&PyBytes_Type)) {
+            check_num = NPY_STRING;
+        }
+        else if (obj == (PyObject *)(&PyUnicode_Type)) {
+            check_num = NPY_UNICODE;
+        }
+#if defined(NPY_PY3K)
+        else if (obj == (PyObject *)(&PyMemoryView_Type)) {
+#else
+        else if (obj == (PyObject *)(&PyBuffer_Type)) {
+#endif
+            check_num = NPY_VOID;
+        }
+        else {
+            *at = _arraydescr_fromobj(obj);
+            if (*at) {
+                return NPY_SUCCEED;
+            }
+        }
+        goto finish;
+    }
+    printf("Test3\n");
+
+    /* or a typecode string */
+
+    if (PyUnicode_Check(obj)) {
+        /* Allow unicode format strings: convert to bytes */
+        int retval;
+        PyObject *obj2;
+        obj2 = PyUnicode_AsASCIIString(obj);
+        if (obj2 == NULL) {
+            return NPY_FAIL;
+        }
+        retval = PyArray_DescrConverter(obj2, at);
+        Py_DECREF(obj2);
+        return retval;
+    }
+
+    printf("Test4\n");
+    if (PyBytes_Check(obj)) {
+        char *type = NULL;
+        Py_ssize_t len = 0;
+
+        /* Check for a string typecode. */
+        if (PyBytes_AsStringAndSize(obj, &type, &len) < 0) {
+            goto error;
+        }
+
+        /* Empty string is invalid */
+        if (len == 0) {
+            goto fail;
+        }
+
+        /* check for commas present or first (or second) element a digit */
+        if (_check_for_commastring(type, len)) {
+            *at = _convert_from_commastring(obj, 0);
+            return (*at) ? NPY_SUCCEED : NPY_FAIL;
+        }
+
+        /* Process the endian character. '|' is replaced by '='*/
+        switch (type[0]) {
+            case '>':
+            case '<':
+            case '=':
+                endian = type[0];
+                ++type;
+                --len;
+                break;
+
+            case '|':
+                endian = '=';
+                ++type;
+                --len;
+                break;
+        }
+
+        /* Just an endian character is invalid */
+        if (len == 0) {
+            goto fail;
+        }
+
+        /* Check for datetime format */
+        if (is_datetime_typestr(type, len)) {
+            *at = parse_dtype_from_datetime_typestr(type, len);
+            if (*at == NULL) {
+                return NPY_FAIL;
+            }
+            /* *at has byte order '=' at this point */
+            if (!PyArray_ISNBO(endian)) {
+                (*at)->byteorder = endian;
+            }
+            return NPY_SUCCEED;
+        }
+
+        /* A typecode like 'd' */
+        if (len == 1) {
+            check_num = type[0];
+        }
+        /* A kind + size like 'f8' */
+        else {
+            char *typeend = NULL;
+            int kind;
+
+            /* Parse the integer, make sure it's the rest of the string */
+            elsize = (int)strtol(type + 1, &typeend, 10);
+            if (typeend - type == len) {
+
+                kind = type[0];
+                switch (kind) {
+                    case NPY_STRINGLTR:
+                    case NPY_STRINGLTR2:
+                        check_num = NPY_STRING;
+                        break;
+
+                    /*
+                     * When specifying length of UNICODE
+                     * the number of characters is given to match
+                     * the STRING interface.  Each character can be
+                     * more than one byte and itemsize must be
+                     * the number of bytes.
+                     */
+                    case NPY_UNICODELTR:
+                        check_num = NPY_UNICODE;
+                        elsize <<= 2;
+                        break;
+
+                    case NPY_VOIDLTR:
+                        check_num = NPY_VOID;
+                        break;
+
+                    default:
+                        if (elsize == 0) {
+                            check_num = NPY_NOTYPE+10;
+                        }
+                        /* Support for generic processing c8, i4, f8, etc...*/
+                        else {
+                            check_num = PyArray_TypestrConvert(elsize, kind);
+                            if (check_num == NPY_NOTYPE) {
+                                check_num += 10;
+                            }
+                            elsize = 0;
+                        }
+                }
+            }
+        }
+    }
+    else if (PyTuple_Check(obj)) {
+        /* or a tuple */
+        *at = _convert_from_tuple(obj);
+        if (*at == NULL){
+            if (PyErr_Occurred()) {
+                return NPY_FAIL;
+            }
+            goto fail;
+        }
+        return NPY_SUCCEED;
+    }
+    else if (PyList_Check(obj)) {
+        /* or a list */
+        *at = _convert_from_array_descr(obj,0);
+        if (*at == NULL) {
+            if (PyErr_Occurred()) {
+                return NPY_FAIL;
+            }
+            goto fail;
+        }
+        return NPY_SUCCEED;
+    }
+    else if (PyDict_Check(obj) || PyDictProxy_Check(obj)) {
+        /* or a dictionary */
+        *at = _convert_from_dict(obj,0);
+        if (*at == NULL) {
+            if (PyErr_Occurred()) {
+                return NPY_FAIL;
+            }
+            goto fail;
+        }
+        return NPY_SUCCEED;
+    }
+    else if (PyArray_Check(obj)) {
+        goto fail;
+    }
+    else {
+        *at = _arraydescr_fromobj(obj);
+        if (*at) {
+            return NPY_SUCCEED;
+        }
+        if (PyErr_Occurred()) {
+            return NPY_FAIL;
+        }
+        goto fail;
+    }
+    if (PyErr_Occurred()) {
+        goto fail;
+    }
+
+finish:
+    printf("Test5\n");
+    if ((check_num == NPY_NOTYPE + 10) ||
+            (*at = PyArray_DescrFromType(check_num)) == NULL) {
+        PyErr_Clear();
+        /* Now check to see if the object is registered in typeDict */
+        if (typeDict != NULL) {
+            item = PyDict_GetItem(typeDict, obj);
+#if defined(NPY_PY3K)
+            if (!item && PyBytes_Check(obj)) {
+                PyObject *tmp;
+                tmp = PyUnicode_FromEncodedObject(obj, "ascii", "strict");
+                if (tmp != NULL) {
+                    item = PyDict_GetItem(typeDict, tmp);
+                    Py_DECREF(tmp);
+                }
+            }
+#endif
+            if (item) {
+                /* Check for a deprecated Numeric-style typecode */
+                if (PyBytes_Check(obj)) {
+                    char *type = NULL;
+                    Py_ssize_t len = 0;
+                    char *dep_tps[] = {"Bool", "Complex", "Float", "Int",
+                                       "Object0", "String0", "Timedelta64",
+                                       "Unicode0", "UInt", "Void0"};
+                    int ndep_tps = sizeof(dep_tps) / sizeof(dep_tps[0]);
+                    int i;
+
+                    if (PyBytes_AsStringAndSize(obj, &type, &len) < 0) {
+                        goto error;
+                    }
+                    for (i = 0; i < ndep_tps; ++i) {
+                        char *dep_tp = dep_tps[i];
+
+                        if (strncmp(type, dep_tp, strlen(dep_tp)) == 0) {
+                            if (DEPRECATE("Numeric-style type codes are "
+                                          "deprecated and will result in "
+                                          "an error in the future.") < 0) {
+                                goto fail;
+                            }
+                        }
+                    }
+                }
+                return PyArray_DescrConverter(item, at);
+            }
+        }
+        goto fail;
+    }
+
+    if (((*at)->elsize == 0) && (elsize != 0)) {
+        PyArray_DESCR_REPLACE(*at);
+        (*at)->elsize = elsize;
+    }
+    if (endian != '=' && PyArray_ISNBO(endian)) {
+        endian = '=';
+    }
+    if (endian != '=' && (*at)->byteorder != '|'
+        && (*at)->byteorder != endian) {
+        PyArray_DESCR_REPLACE(*at);
+        (*at)->byteorder = endian;
+    }
+    return NPY_SUCCEED;
+
+fail:
+    if (PyBytes_Check(obj)) {
+        PyErr_Format(PyExc_TypeError,
+                "data type \"%s\" not understood", PyBytes_AS_STRING(obj));
+    }
+    else {
+        PyErr_SetString(PyExc_TypeError,
+                "data type not understood");
+    }
+
+error:
+    *at = NULL;
+    return NPY_FAIL;
+}
+#endif
+
+
+NPY_NO_EXPORT int
+MyPyArray_DescrConverter(PyObject *obj, PyArray_Descr **at)
+{
+    int check_num = NPY_NOTYPE + 10;
+    PyObject *item;
+    int elsize = 0;
+    char endian = '=';
+
+    printf("Test -1\n");
+    *at = NULL;
+
+    check_num = NPY_VOID;
+    printf("Test0\n");
+    if (check_num != NPY_VOID) {
+        PyErr_Clear();
+        /* Now check to see if the object is registered in typeDict */
+        printf("Test1\n");
+        if (typeDict != NULL) {
+            item = PyDict_GetItem(typeDict, obj);
+#if defined(NPY_PY3K)
+            if (!item && PyBytes_Check(obj)) {
+                PyObject *tmp;
+                tmp = PyUnicode_FromEncodedObject(obj, "ascii", "strict");
+                if (tmp != NULL) {
+                    item = PyDict_GetItem(typeDict, tmp);
+                    Py_DECREF(tmp);
+                }
+            }
+#endif
+            if (item) {
+                /* Check for a deprecated Numeric-style typecode */
+                if (PyBytes_Check(obj)) {
+                    char *type = NULL;
+                    Py_ssize_t len = 0;
+                    char *dep_tps[] = {"Bool", "Complex", "Float", "Int",
+                                       "Object0", "String0", "Timedelta64",
+                                       "Unicode0", "UInt", "Void0"};
+                    int ndep_tps = sizeof(dep_tps) / sizeof(dep_tps[0]);
+                    int i;
+
+                    if (PyBytes_AsStringAndSize(obj, &type, &len) < 0) {
+                        goto error;
+                    }
+                    for (i = 0; i < ndep_tps; ++i) {
+                        char *dep_tp = dep_tps[i];
+
+                        if (strncmp(type, dep_tp, strlen(dep_tp)) == 0) {
+                            if (DEPRECATE("Numeric-style type codes are "
+                                          "deprecated and will result in "
+                                          "an error in the future.") < 0) {
+                                goto fail;
+                            }
+                        }
+                    }
+                }
+                return PyArray_DescrConverter(item, at);
+            }
+        }
+        printf("Test2\n");
+        goto fail;
+    }
+
+    printf("Test3\n");
+    if (((*at)->elsize == 0) && (elsize != 0)) {
+        PyArray_DESCR_REPLACE(*at);
+        (*at)->elsize = elsize;
+        printf("Test4\n");
+    }
+    if (endian != '=' && PyArray_ISNBO(endian)) {
+        endian = '=';
+        printf("Test5\n");
+    }
+    if (endian != '=' && (*at)->byteorder != '|'
+        && (*at)->byteorder != endian) {
+        PyArray_DESCR_REPLACE(*at);
+        (*at)->byteorder = endian;
+        printf("Test6\n");
+    }
+    return NPY_SUCCEED;
+
+fail:
+    if (PyBytes_Check(obj)) {
+        PyErr_Format(PyExc_TypeError,
+                "data type \"%s\" not understood", PyBytes_AS_STRING(obj));
+    }
+    else {
+        PyErr_SetString(PyExc_TypeError,
+                "data type not understood");
+    }
+
+error:
+    *at = NULL;
+    return NPY_FAIL;
+}
+
+
+
 #if 0
 void init_readwriteaccess(struct DICTHOLDER *dict);
 
@@ -261,14 +1345,14 @@ PyObject * my_read_structure(PyObject* molpack) {
     molfile_atom_t* atoms;
     int numatoms, status;
     PyArray_Descr *descr;
-    PyObject p*;
-    if (PyType_Ready(&MolAtomType) < 0)
-        return NULL;
-    PyTypeObject *atype = &MolAtomType;
-    MolAtom *atom_t;
-    atom_t = (MolAtom *)atype->tp_alloc(atype, 0);
-    p = (PyObject*) atom_t;
-    descr = PyArray_DescrFromObject(p, NULL)
+    PyObject *p = NULL;
+    //if (PyType_Ready(&MolAtomType) < 0)
+    //    return NULL;
+    //PyTypeObject *atype = &MolAtomType;
+    //MolAtom *atom_t;
+    //atom_t = (MolAtom *)atype->tp_alloc(atype, 0);
+    //p = (PyObject*) atom_t;
+    descr = PyArray_DescrFromObject(p, NULL);
     MolObject* plugin_handle = (MolObject*) molpack;
     plugin = plugin_handle->plugin;
     file_handle = plugin_handle->file_handle;
@@ -286,8 +1370,8 @@ PyObject * my_read_structure(PyObject* molpack) {
     npy_intp dims[1] = { numatoms };
     oresid = (PyArrayObject*) PyArray_SimpleNew(nd, dims, NPY_INT64);
     Py_DECREF(p);
-    array = (PyArrayObject*) PyArray_SimpleNewFromDescr(1, dims, descr);
-    PyObject_Print(array, stdout, 0);
+    //array = (PyArrayObject*) PyArray_SimpleNewFromDescr(1, dims, descr);
+    //PyObject_Print(array, stdout, 0);
     if (!oresid){
       PyErr_Format(PyExc_IOError, "Error copying molfile_atom_t into numpy array.");
       return NULL;
@@ -301,4 +1385,296 @@ PyObject * my_read_structure(PyObject* molpack) {
     return (PyObject*) PyArray_FromArray(oresid, PyArray_DESCR(oresid), 0);
 }
 
+PyObject* print_array_struct(PyObject* prototype)
+{
+    Py_Initialize();
+    import_array();
+    int status = -10;
+    PyObject *ret = NULL;
+    int *maxndim = NULL;
+    npy_intp *d_shape = NULL;
+    printf("Check-in print_array_struct\n");
+    Py_INCREF(prototype);
+    ret = get_array_attr_interface(prototype, "descr", maxndim, d_shape);
+    printf("Returned\n");
+    //printf("Returned nd:%d\n", *maxndim);
+    Py_DECREF(prototype);
+    if (!ret){
+        PyErr_Clear();
+        PyErr_Format(PyExc_IOError, "Error: can not get attribute of given numpy array.");
+	Py_XDECREF(ret);
+        return NULL;
+    }
+    printf("Check-out print_array_struct\n");
+    return ret;
+}
+	
+PyObject* read_fill_structure(PyObject* molpack, PyObject* prototype)
+{
+    Py_Initialize();
+    import_array();
+    int options = 0;
+//    int i;
+    molfile_plugin_t* plugin;
+    void* file_handle;
+    molfile_atom_t* data;
+    int numatoms, status;
+    int nd;
+    PyArray_Descr *descr;
+//    PyArrayInterface *inter;
+    //PyArrayObject *ret = NULL;
+    PyObject *ret = NULL;
+    PyObject *descr_obj = NULL;
+//    char endian = NPY_NATBYTE;
+//    PyArrayObject *obj; 
+//    printf("Test1\n");
+//    obj = (PyArrayObject *)prototype; 
+//    if(obj == NULL){
+//        PyErr_Format(PyExc_IOError, "Error: Given PyObject does not include numpy array.");
+//        return NULL;
+//    }
+    // Access plugin_handle values
+    MolObject* plugin_handle = (MolObject*) molpack;
+    plugin = plugin_handle->plugin;
+    file_handle = plugin_handle->file_handle;
+    numatoms = plugin_handle->natoms;
+    printf("Test2-1\n");
+    // Allocate memory for array of molfile_atom_t struct
+    data = (molfile_atom_t *)calloc(numatoms,sizeof(molfile_atom_t));
+    // Get array values in molfile_atom_t
+    printf("Test2-2\n");
+    status = plugin->read_structure(file_handle, &options, data);
+    printf("Test2-3\n");
+    // Check if the plugin returns the results
+    if (status!=0){
+      PyErr_Format(PyExc_IOError, "Error accessing molfile_atom_t in read_structure function of plugin.");
+      return NULL;
+    }
+    nd = 1;
+    npy_intp dims[1] = { numatoms };
+    npy_intp strides[1] = { sizeof(molfile_atom_t) };
+    printf("Test3\n");
+    Py_INCREF(prototype);
+    //ret = set_array_attr_interface(prototype, numatoms, data);
+    descr_obj = get_descr_array_interface(prototype);
+    descr = (PyArray_Descr*) descr_obj;
+    //ret = set_array_attr_struct(ret, numatoms, data);
+    printf("Returned 1\n");
+    Py_DECREF(prototype);
+    printf("Set\n");
+    Py_INCREF(prototype);
+    ret = PyArray_NewFromDescr(Py_TYPE(prototype), PyArray_DESCR((PyArrayObject*)prototype), 
+		               nd, dims,
+			       strides, data, 
+			       PyArray_FLAGS((PyArrayObject*)prototype), prototype);
+			       //PyArray_STRIDES((PyArrayObject*)prototype), data, 
+    Py_DECREF(prototype);
+    printf("Returned 2\n");
+    //status = my_get_array_attr_interface((PyObject*)obj, "descr", maxndim, d_shape, ret);
+    //status = my_get_array_attr_interface(prototype, ret);
+    //printf("Test4 Status:%d nd:%d\n",status,*maxndim);
+    //printf("Test4 Status:%d\n",status);
+//    if (status<0){
+//        Py_DECREF(obj);
+//        PyErr_Clear();
+//        PyErr_Format(PyExc_IOError, "Error: can not get attribute of given numpy array.");
+//        return NULL;
+//    }
+//    printf("Test5\n");
+//    Py_INCREF(prototype);
+//    Py_DECREF(ret);
+    //return (PyObject*) PyArray_FromArray((PyArrayObject*)ret, PyArray_DESCR((PyArrayObject*)ret), 0);
+    return (PyObject*) ret;
+}
+
+PyObject* get_structure(PyObject* self)
+{
+    int options = 0;
+    int i;
+    molfile_plugin_t* plugin;
+    void* file_handle;
+    molfile_atom_t* data;
+    int numatoms, status;
+    int nd;
+    PyArrayInterface *inter;
+    PyArrayObject *ret;
+    char endian = NPY_NATBYTE;
+    // Access plugin_handle values
+    MolObject* plugin_handle = (MolObject*) self;
+    plugin = plugin_handle->plugin;
+    file_handle = plugin_handle->file_handle;
+    numatoms = plugin_handle->natoms;
+    // Allocate memory for array of molfile_atom_t struct
+    data = (molfile_atom_t *)calloc(numatoms,sizeof(molfile_atom_t));
+    // Get array values in molfile_atom_t
+    status = plugin->read_structure(file_handle, &options, data);
+    // Check if the plugin returns the results
+    if (status!=0){
+      PyErr_Format(PyExc_IOError, "Error accessing molfile_atom_t in read_structure function of plugin.");
+      return NULL;
+    }
+    // Now, we need to allocate a PyArray with PyArrayInterface
+    // and assign the allocated memory block to the data.
+    // To do this, we will build a numpy array from scratch.
+    // First, allocate a PyObject of PyArrayInterface and 
+    // assign relevant information such as typestr, descr for C-side 
+    // struct and second we will assign molfile_atom_t array as a block 
+    // of data. Last, hope this works.
+    nd = 1;
+    npy_intp dims[1] = { 1 };
+    // We would allocate a numpy array with
+    // but will not look clever to copy all the data into the new array.
+    // Instead, we allocate a numpy array with one element and change 
+    // the definition of array. I know I said that it will be from scratch 
+    // but let's accept nobody wants to define everything in numpy again.
+    //oresid = (PyArrayObject*) PyArray_SimpleNew(nd, dims, NPY_INT);
+    // NPY_INT? Don't worry, we will change it.
+    //Py_intptr_t *shape, *strides;
+    //void *data = NULL;
+ 
+    inter = (PyArrayInterface*)malloc(sizeof(PyArrayInterface));
+    if (inter==NULL)
+      return PyErr_NoMemory();
+   
+    // __array_interface__ descr for C side of __array_struct__
+    // Could not find a better way to generate the list of tuples for 
+    // Python side. May need to change this later.
+    PyObject *descrlist = PyList_New(13);
+    // One tuple to bind them
+    PyObject *py_tuple_name = PyTuple_New(2);
+    PyTuple_SET_ITEM(py_tuple_name, 0, PyUnicode_FromString("name"));
+    PyTuple_SET_ITEM(py_tuple_name, 1, PyUnicode_FromString("|S16"));
+    PyList_SET_ITEM(descrlist, 0, py_tuple_name);
+    PyObject *py_tuple_type = PyTuple_New(2);
+    PyTuple_SET_ITEM(py_tuple_type, 0, PyUnicode_FromString("type"));
+    PyTuple_SET_ITEM(py_tuple_type, 1, PyUnicode_FromString("|S16"));
+    PyList_SET_ITEM(descrlist, 1, py_tuple_type);
+    PyObject *py_tuple_resname = PyTuple_New(2);
+    PyTuple_SET_ITEM(py_tuple_resname, 0, PyUnicode_FromString("resname"));
+    PyTuple_SET_ITEM(py_tuple_resname, 1, PyUnicode_FromString("|S8"));
+    PyList_SET_ITEM(descrlist, 2, py_tuple_resname);
+    PyObject *py_tuple_resid = PyTuple_New(2);
+    PyTuple_SET_ITEM(py_tuple_resid, 0, PyUnicode_FromString("resid"));
+    PyTuple_SET_ITEM(py_tuple_resid, 1, PyUnicode_FromString("<i4"));
+    PyList_SET_ITEM(descrlist, 3, py_tuple_resid);
+    PyObject *py_tuple_segid = PyTuple_New(2);
+    PyTuple_SET_ITEM(py_tuple_segid, 0, PyUnicode_FromString("segid"));
+    PyTuple_SET_ITEM(py_tuple_segid, 1, PyUnicode_FromString("|S8"));
+    PyList_SET_ITEM(descrlist, 4, py_tuple_segid);
+    PyObject *py_tuple_chain = PyTuple_New(2);
+    PyTuple_SET_ITEM(py_tuple_chain, 0, PyUnicode_FromString("chain"));
+    PyTuple_SET_ITEM(py_tuple_chain, 1, PyUnicode_FromString("|S2"));
+    PyList_SET_ITEM(descrlist, 5, py_tuple_chain);
+    PyObject *py_tuple_altloc = PyTuple_New(2);
+    PyTuple_SET_ITEM(py_tuple_altloc, 0, PyUnicode_FromString("altloc"));
+    PyTuple_SET_ITEM(py_tuple_altloc, 1, PyUnicode_FromString("|S2"));
+    PyList_SET_ITEM(descrlist, 6, py_tuple_altloc);
+    PyObject *py_tuple_insertion = PyTuple_New(2);
+    PyTuple_SET_ITEM(py_tuple_insertion, 0, PyUnicode_FromString("insertion"));
+    PyTuple_SET_ITEM(py_tuple_insertion, 1, PyUnicode_FromString("|S2"));
+    PyList_SET_ITEM(descrlist, 7, py_tuple_insertion);
+    PyObject *py_tuple_occupancy = PyTuple_New(2);
+    PyTuple_SET_ITEM(py_tuple_occupancy, 0, PyUnicode_FromString("occupancy"));
+    PyTuple_SET_ITEM(py_tuple_occupancy, 1, PyUnicode_FromString("<f4"));
+    PyList_SET_ITEM(descrlist, 8, py_tuple_occupancy);
+    PyObject *py_tuple_bfactor = PyTuple_New(2);
+    PyTuple_SET_ITEM(py_tuple_bfactor, 0, PyUnicode_FromString("bfactor"));
+    PyTuple_SET_ITEM(py_tuple_bfactor, 1, PyUnicode_FromString("<f4"));
+    PyList_SET_ITEM(descrlist, 9, py_tuple_bfactor);
+    PyObject *py_tuple_mass = PyTuple_New(2);
+    PyTuple_SET_ITEM(py_tuple_mass, 0, PyUnicode_FromString("mass"));
+    PyTuple_SET_ITEM(py_tuple_mass, 1, PyUnicode_FromString("<f4"));
+    PyList_SET_ITEM(descrlist, 10, py_tuple_mass);
+    PyObject *py_tuple_charge = PyTuple_New(2);
+    PyTuple_SET_ITEM(py_tuple_charge, 0, PyUnicode_FromString("charge"));
+    PyTuple_SET_ITEM(py_tuple_charge, 1, PyUnicode_FromString("<f4"));
+    PyList_SET_ITEM(descrlist, 11, py_tuple_charge);
+    PyObject *py_tuple_radius = PyTuple_New(2);
+    PyTuple_SET_ITEM(py_tuple_radius, 0, PyUnicode_FromString("radius"));
+    PyTuple_SET_ITEM(py_tuple_radius, 1, PyUnicode_FromString("<f4"));
+    PyList_SET_ITEM(descrlist, 12, py_tuple_radius);
+    PyObject *py_tuple_atomicnumber = PyTuple_New(2);
+    PyTuple_SET_ITEM(py_tuple_atomicnumber, 0, PyUnicode_FromString("atomicnumber"));
+    PyTuple_SET_ITEM(py_tuple_atomicnumber, 1, PyUnicode_FromString("<i4"));
+    PyList_SET_ITEM(descrlist, 13, py_tuple_atomicnumber);
+    //PyArray_Descr *descr = (PyObject*) tuple;
+    PyArray_Descr *thetype = NULL;
+    // Here we define the size and stride parameters
+    npy_intp shape[1] = { numatoms };
+    npy_intp strides[1] = { 54*sizeof(char) + 8*sizeof(int) + 20*sizeof(float) };
+
+    inter->two = 2;
+    inter->nd = nd;
+    inter->typekind = 'V';
+    inter->itemsize = 82*sizeof(char);
+    //inter->flags = NPY_ARRAY_NOTSWAPPED | NPY_ARRAY_ALIGNED | NPY_ARRAY_WRITEABLE;
+    inter->flags = NPY_ARRAY_NOTSWAPPED | NPY_ARRAY_ALIGNED | NPY_ARRAY_WRITEABLE | NPY_ARR_HAS_DESCR;
+    inter->strides = (Py_intptr_t *)strides;
+    inter->shape = (Py_intptr_t *)shape;
+    inter->data = (void*) data;
+   // inter->descr = (PyObject*) tuple;
+    if ((inter->flags & NPY_ARRAY_NOTSWAPPED) != NPY_ARRAY_NOTSWAPPED) {
+        endian = NPY_OPPBYTE;
+	inter->flags &= ~NPY_ARRAY_NOTSWAPPED;
+    }
+    // typestr is relatively easy to assign to __array_interface__
+    printf("TEST1\n");
+    //thetype = (PyArray_Descr*) tuple;
+    if (inter->flags & NPY_ARR_HAS_DESCR) {
+        printf("TEST1-1\n");
+        thetype = _convert_from_array_descr(descrlist,0);
+        //thetype = PyArray_DescrFromTypeObject(descrlist);
+        printf("TEST1-2\n");
+        //if (PyArray_DescrConverter(inter->descr, &thetype) == NPY_FAIL) {
+	//    thetype = NULL;
+	//    PyErr_Clear();
+	//  }
+    }
+    printf("TEST1-3\n");
+#if 0
+    char buf[40];
+    PyOS_snprintf(buf, sizeof(buf),
+		  "%c%c%d", endian, 
+		  inter->typekind, 
+		  inter->itemsize);
+    printf("TEST2 String:%s\n",buf);
+    PyObject *stringobj = PyUnicode_FromString(buf);
+    if (stringobj == NULL) {
+       return NULL;
+    }
+    printf("TEST2-2\n");
+    if (MyPyArray_DescrConverter(stringobj, &thetype) != NPY_SUCCEED) {
+        Py_DECREF(stringobj);
+	return NULL;
+    }
+    printf("TEST2-3\n");
+    Py_DECREF(stringobj);
+#endif
+    printf("TEST3\n");
+    ret = (PyArrayObject *)PyArray_NewFromDescr(&PyArray_Type, thetype,
+                               inter->nd, inter->shape,
+                               inter->strides, inter->data,
+                               inter->flags, NULL);
+    printf("TEST4\n");
+    Py_INCREF(inter);
+    if (PyArray_SetBaseObject(ret, (PyObject *)inter) < 0) {
+	Py_DECREF(ret);
+	return NULL;
+    }
+    printf("TEST5\n");
+//    Py_DECREF(attr);
+    PyArray_UpdateFlags(ret, NPY_ARRAY_UPDATE_ALL);
+    printf("TEST6\n");
+    return (PyObject *)ret;
+}
+//    obj = NpyCapsule_FromVoidPtrAndDesc(inter, self, gentype_struct_free);
+/*
+#ifdef Py_CAPSULE_H
+  obj = PyCapsule_New((void*)inter, "struct SignedIntBuf", free_capsule);
+#else
+  obj = PyCObject_FromVoidPtrAndDesc((void*)inter, (void*)self, free_array_interface);
+#endif
+*/
+  // Cross fingers here.
+//  return obj;
 
diff --git a/pymolfile/molfile/pymolfile.h b/pymolfile/molfile/pymolfile.h
index 5d37f5d..6a0c1b5 100644
--- a/pymolfile/molfile/pymolfile.h
+++ b/pymolfile/molfile/pymolfile.h
@@ -30,6 +30,7 @@ extern "C"
 #define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION
 #include <numpy/arrayobject.h>
 
+
 enum { pluginOK, pluginNOINIT, pluginCLOSE, pluginNOMEM, 
        pluginENDOFFILE, pluginFILENOTFOUND, pluginFORMATERROR };
 
@@ -119,7 +120,7 @@ static PyMemberDef MolObject_members[] = {
      "file handle for plugin"},
     {"natoms", T_INT, offsetof(MolObject, natoms), 0,
      "number of atoms"},
-    {NULL, NULL, 0, NULL}  /* Sentinel */
+    {NULL}  /* Sentinel */
 };
 
 static PyMethodDef MolObject_methods[] = {
@@ -132,7 +133,7 @@ static PyMethodDef MolObject_methods[] = {
     {"get_natoms", (PyCFunction)MolObject_natoms, METH_NOARGS,
      "Return the number of atoms"
     },
-    {NULL, NULL, 0, NULL}  /* Sentinel */
+    {NULL}  /* Sentinel */
 };
 
 
@@ -183,6 +184,7 @@ static PyTypeObject MolObjectType = {
     MolObject_new,                 /* tp_new */
 };
 
+#if 0
 struct MolAtom {
     PyObject_HEAD
     char* name; 
@@ -257,8 +259,8 @@ static PyMemberDef MolAtom_members[] = {
     {"segid", T_STRING, offsetof(MolAtom, segid), 0,""},
     {"chain", T_STRING, offsetof(MolAtom, chain), 0,""},
     {"altloc", T_STRING, offsetof(MolAtom, altloc), 0,""},
-    {"insertion", T_STRING, offsetof(MolAtom, occupancy), 0,""},
-    {"occupancy", T_FLOAT, offsetof(MolAtom, ), 0,""},
+    {"insertion", T_STRING, offsetof(MolAtom, insertion), 0,""},
+    {"occupancy", T_FLOAT, offsetof(MolAtom, occupancy), 0,""},
     {"bfactor", T_FLOAT, offsetof(MolAtom, bfactor), 0,""},
     {"mass", T_FLOAT, offsetof(MolAtom, mass), 0,""},
     {"charge", T_FLOAT, offsetof(MolAtom, charge), 0,""},
@@ -309,8 +311,11 @@ static PyTypeObject MolAtomType = {
     0,                         /* tp_alloc */	
     MolAtom_new,                 /* tp_new */
 };
-
+#endif
 PyObject * my_read_structure(PyObject* molpack);
+PyObject * read_fill_structure(PyObject* molpack, PyObject* prototype);
+PyObject * get_structure(PyObject* molpack);
+PyObject * print_array_struct(PyObject* prototype);
 
 #if 0
 typedef struct DICTHOLDER {
diff --git a/pymolfile/molfile/signedintbuf-cython/compile-numind.sh b/pymolfile/molfile/signedintbuf-cython/compile-numind.sh
new file mode 100644
index 0000000..680fa4e
--- /dev/null
+++ b/pymolfile/molfile/signedintbuf-cython/compile-numind.sh
@@ -0,0 +1,2 @@
+Cython -a numind.pyx --cplus
+g++ -fPIC -Wall -Wextra -Wunused-function -shared -I/labEnv3/lib/python3.6/site-packages/numpy/core/include/ numind.cpp -o numind.so -I/labEnv3/include/python3.6m/ -L/usr/local/Cellar/python3/3.6.1/Frameworks/Python.framework/Versions/3.6/lib -lpython3.6
diff --git a/pymolfile/molfile/signedintbuf-cython/numind.cpp b/pymolfile/molfile/signedintbuf-cython/numind.cpp
new file mode 100644
index 0000000..06f2230
--- /dev/null
+++ b/pymolfile/molfile/signedintbuf-cython/numind.cpp
@@ -0,0 +1 @@
+#error Do not use this file, it is the result of a failed Cython compilation.
diff --git a/pymolfile/molfile/signedintbuf-cython/numind.h b/pymolfile/molfile/signedintbuf-cython/numind.h
new file mode 100644
index 0000000..988c2c8
--- /dev/null
+++ b/pymolfile/molfile/signedintbuf-cython/numind.h
@@ -0,0 +1,12 @@
+#ifndef NUMIND_H
+#define NUMIND_H
+ 
+typedef struct SignedIntBuf
+{
+    int* data;
+    int shape[2];
+    int strides[2];
+} SignedIntBuf;
+ 
+#endif
+
diff --git a/pymolfile/molfile/signedintbuf-cython/numind.html b/pymolfile/molfile/signedintbuf-cython/numind.html
new file mode 100644
index 0000000..96768d1
--- /dev/null
+++ b/pymolfile/molfile/signedintbuf-cython/numind.html
@@ -0,0 +1,1243 @@
+<!DOCTYPE html>
+<!-- Generated by Cython 0.26.1 -->
+<html>
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <title>Cython: numind.pyx</title>
+    <style type="text/css">
+    
+body.cython { font-family: courier; font-size: 12; }
+
+.cython.tag  {  }
+.cython.line { margin: 0em }
+.cython.code { font-size: 9; color: #444444; display: none; margin: 0px 0px 0px 8px; border-left: 8px none; }
+
+.cython.line .run { background-color: #B0FFB0; }
+.cython.line .mis { background-color: #FFB0B0; }
+.cython.code.run  { border-left: 8px solid #B0FFB0; }
+.cython.code.mis  { border-left: 8px solid #FFB0B0; }
+
+.cython.code .py_c_api  { color: red; }
+.cython.code .py_macro_api  { color: #FF7000; }
+.cython.code .pyx_c_api  { color: #FF3000; }
+.cython.code .pyx_macro_api  { color: #FF7000; }
+.cython.code .refnanny  { color: #FFA000; }
+.cython.code .trace  { color: #FFA000; }
+.cython.code .error_goto  { color: #FFA000; }
+
+.cython.code .coerce  { color: #008000; border: 1px dotted #008000 }
+.cython.code .py_attr { color: #FF0000; font-weight: bold; }
+.cython.code .c_attr  { color: #0000FF; }
+.cython.code .py_call { color: #FF0000; font-weight: bold; }
+.cython.code .c_call  { color: #0000FF; }
+
+.cython.score-0 {background-color: #FFFFff;}
+.cython.score-1 {background-color: #FFFFe7;}
+.cython.score-2 {background-color: #FFFFd4;}
+.cython.score-3 {background-color: #FFFFc4;}
+.cython.score-4 {background-color: #FFFFb6;}
+.cython.score-5 {background-color: #FFFFaa;}
+.cython.score-6 {background-color: #FFFF9f;}
+.cython.score-7 {background-color: #FFFF96;}
+.cython.score-8 {background-color: #FFFF8d;}
+.cython.score-9 {background-color: #FFFF86;}
+.cython.score-10 {background-color: #FFFF7f;}
+.cython.score-11 {background-color: #FFFF79;}
+.cython.score-12 {background-color: #FFFF73;}
+.cython.score-13 {background-color: #FFFF6e;}
+.cython.score-14 {background-color: #FFFF6a;}
+.cython.score-15 {background-color: #FFFF66;}
+.cython.score-16 {background-color: #FFFF62;}
+.cython.score-17 {background-color: #FFFF5e;}
+.cython.score-18 {background-color: #FFFF5b;}
+.cython.score-19 {background-color: #FFFF57;}
+.cython.score-20 {background-color: #FFFF55;}
+.cython.score-21 {background-color: #FFFF52;}
+.cython.score-22 {background-color: #FFFF4f;}
+.cython.score-23 {background-color: #FFFF4d;}
+.cython.score-24 {background-color: #FFFF4b;}
+.cython.score-25 {background-color: #FFFF48;}
+.cython.score-26 {background-color: #FFFF46;}
+.cython.score-27 {background-color: #FFFF44;}
+.cython.score-28 {background-color: #FFFF43;}
+.cython.score-29 {background-color: #FFFF41;}
+.cython.score-30 {background-color: #FFFF3f;}
+.cython.score-31 {background-color: #FFFF3e;}
+.cython.score-32 {background-color: #FFFF3c;}
+.cython.score-33 {background-color: #FFFF3b;}
+.cython.score-34 {background-color: #FFFF39;}
+.cython.score-35 {background-color: #FFFF38;}
+.cython.score-36 {background-color: #FFFF37;}
+.cython.score-37 {background-color: #FFFF36;}
+.cython.score-38 {background-color: #FFFF35;}
+.cython.score-39 {background-color: #FFFF34;}
+.cython.score-40 {background-color: #FFFF33;}
+.cython.score-41 {background-color: #FFFF32;}
+.cython.score-42 {background-color: #FFFF31;}
+.cython.score-43 {background-color: #FFFF30;}
+.cython.score-44 {background-color: #FFFF2f;}
+.cython.score-45 {background-color: #FFFF2e;}
+.cython.score-46 {background-color: #FFFF2d;}
+.cython.score-47 {background-color: #FFFF2c;}
+.cython.score-48 {background-color: #FFFF2b;}
+.cython.score-49 {background-color: #FFFF2b;}
+.cython.score-50 {background-color: #FFFF2a;}
+.cython.score-51 {background-color: #FFFF29;}
+.cython.score-52 {background-color: #FFFF29;}
+.cython.score-53 {background-color: #FFFF28;}
+.cython.score-54 {background-color: #FFFF27;}
+.cython.score-55 {background-color: #FFFF27;}
+.cython.score-56 {background-color: #FFFF26;}
+.cython.score-57 {background-color: #FFFF26;}
+.cython.score-58 {background-color: #FFFF25;}
+.cython.score-59 {background-color: #FFFF24;}
+.cython.score-60 {background-color: #FFFF24;}
+.cython.score-61 {background-color: #FFFF23;}
+.cython.score-62 {background-color: #FFFF23;}
+.cython.score-63 {background-color: #FFFF22;}
+.cython.score-64 {background-color: #FFFF22;}
+.cython.score-65 {background-color: #FFFF22;}
+.cython.score-66 {background-color: #FFFF21;}
+.cython.score-67 {background-color: #FFFF21;}
+.cython.score-68 {background-color: #FFFF20;}
+.cython.score-69 {background-color: #FFFF20;}
+.cython.score-70 {background-color: #FFFF1f;}
+.cython.score-71 {background-color: #FFFF1f;}
+.cython.score-72 {background-color: #FFFF1f;}
+.cython.score-73 {background-color: #FFFF1e;}
+.cython.score-74 {background-color: #FFFF1e;}
+.cython.score-75 {background-color: #FFFF1e;}
+.cython.score-76 {background-color: #FFFF1d;}
+.cython.score-77 {background-color: #FFFF1d;}
+.cython.score-78 {background-color: #FFFF1c;}
+.cython.score-79 {background-color: #FFFF1c;}
+.cython.score-80 {background-color: #FFFF1c;}
+.cython.score-81 {background-color: #FFFF1c;}
+.cython.score-82 {background-color: #FFFF1b;}
+.cython.score-83 {background-color: #FFFF1b;}
+.cython.score-84 {background-color: #FFFF1b;}
+.cython.score-85 {background-color: #FFFF1a;}
+.cython.score-86 {background-color: #FFFF1a;}
+.cython.score-87 {background-color: #FFFF1a;}
+.cython.score-88 {background-color: #FFFF1a;}
+.cython.score-89 {background-color: #FFFF19;}
+.cython.score-90 {background-color: #FFFF19;}
+.cython.score-91 {background-color: #FFFF19;}
+.cython.score-92 {background-color: #FFFF19;}
+.cython.score-93 {background-color: #FFFF18;}
+.cython.score-94 {background-color: #FFFF18;}
+.cython.score-95 {background-color: #FFFF18;}
+.cython.score-96 {background-color: #FFFF18;}
+.cython.score-97 {background-color: #FFFF17;}
+.cython.score-98 {background-color: #FFFF17;}
+.cython.score-99 {background-color: #FFFF17;}
+.cython.score-100 {background-color: #FFFF17;}
+.cython.score-101 {background-color: #FFFF16;}
+.cython.score-102 {background-color: #FFFF16;}
+.cython.score-103 {background-color: #FFFF16;}
+.cython.score-104 {background-color: #FFFF16;}
+.cython.score-105 {background-color: #FFFF16;}
+.cython.score-106 {background-color: #FFFF15;}
+.cython.score-107 {background-color: #FFFF15;}
+.cython.score-108 {background-color: #FFFF15;}
+.cython.score-109 {background-color: #FFFF15;}
+.cython.score-110 {background-color: #FFFF15;}
+.cython.score-111 {background-color: #FFFF15;}
+.cython.score-112 {background-color: #FFFF14;}
+.cython.score-113 {background-color: #FFFF14;}
+.cython.score-114 {background-color: #FFFF14;}
+.cython.score-115 {background-color: #FFFF14;}
+.cython.score-116 {background-color: #FFFF14;}
+.cython.score-117 {background-color: #FFFF14;}
+.cython.score-118 {background-color: #FFFF13;}
+.cython.score-119 {background-color: #FFFF13;}
+.cython.score-120 {background-color: #FFFF13;}
+.cython.score-121 {background-color: #FFFF13;}
+.cython.score-122 {background-color: #FFFF13;}
+.cython.score-123 {background-color: #FFFF13;}
+.cython.score-124 {background-color: #FFFF13;}
+.cython.score-125 {background-color: #FFFF12;}
+.cython.score-126 {background-color: #FFFF12;}
+.cython.score-127 {background-color: #FFFF12;}
+.cython.score-128 {background-color: #FFFF12;}
+.cython.score-129 {background-color: #FFFF12;}
+.cython.score-130 {background-color: #FFFF12;}
+.cython.score-131 {background-color: #FFFF12;}
+.cython.score-132 {background-color: #FFFF11;}
+.cython.score-133 {background-color: #FFFF11;}
+.cython.score-134 {background-color: #FFFF11;}
+.cython.score-135 {background-color: #FFFF11;}
+.cython.score-136 {background-color: #FFFF11;}
+.cython.score-137 {background-color: #FFFF11;}
+.cython.score-138 {background-color: #FFFF11;}
+.cython.score-139 {background-color: #FFFF11;}
+.cython.score-140 {background-color: #FFFF11;}
+.cython.score-141 {background-color: #FFFF10;}
+.cython.score-142 {background-color: #FFFF10;}
+.cython.score-143 {background-color: #FFFF10;}
+.cython.score-144 {background-color: #FFFF10;}
+.cython.score-145 {background-color: #FFFF10;}
+.cython.score-146 {background-color: #FFFF10;}
+.cython.score-147 {background-color: #FFFF10;}
+.cython.score-148 {background-color: #FFFF10;}
+.cython.score-149 {background-color: #FFFF10;}
+.cython.score-150 {background-color: #FFFF0f;}
+.cython.score-151 {background-color: #FFFF0f;}
+.cython.score-152 {background-color: #FFFF0f;}
+.cython.score-153 {background-color: #FFFF0f;}
+.cython.score-154 {background-color: #FFFF0f;}
+.cython.score-155 {background-color: #FFFF0f;}
+.cython.score-156 {background-color: #FFFF0f;}
+.cython.score-157 {background-color: #FFFF0f;}
+.cython.score-158 {background-color: #FFFF0f;}
+.cython.score-159 {background-color: #FFFF0f;}
+.cython.score-160 {background-color: #FFFF0f;}
+.cython.score-161 {background-color: #FFFF0e;}
+.cython.score-162 {background-color: #FFFF0e;}
+.cython.score-163 {background-color: #FFFF0e;}
+.cython.score-164 {background-color: #FFFF0e;}
+.cython.score-165 {background-color: #FFFF0e;}
+.cython.score-166 {background-color: #FFFF0e;}
+.cython.score-167 {background-color: #FFFF0e;}
+.cython.score-168 {background-color: #FFFF0e;}
+.cython.score-169 {background-color: #FFFF0e;}
+.cython.score-170 {background-color: #FFFF0e;}
+.cython.score-171 {background-color: #FFFF0e;}
+.cython.score-172 {background-color: #FFFF0e;}
+.cython.score-173 {background-color: #FFFF0d;}
+.cython.score-174 {background-color: #FFFF0d;}
+.cython.score-175 {background-color: #FFFF0d;}
+.cython.score-176 {background-color: #FFFF0d;}
+.cython.score-177 {background-color: #FFFF0d;}
+.cython.score-178 {background-color: #FFFF0d;}
+.cython.score-179 {background-color: #FFFF0d;}
+.cython.score-180 {background-color: #FFFF0d;}
+.cython.score-181 {background-color: #FFFF0d;}
+.cython.score-182 {background-color: #FFFF0d;}
+.cython.score-183 {background-color: #FFFF0d;}
+.cython.score-184 {background-color: #FFFF0d;}
+.cython.score-185 {background-color: #FFFF0d;}
+.cython.score-186 {background-color: #FFFF0d;}
+.cython.score-187 {background-color: #FFFF0c;}
+.cython.score-188 {background-color: #FFFF0c;}
+.cython.score-189 {background-color: #FFFF0c;}
+.cython.score-190 {background-color: #FFFF0c;}
+.cython.score-191 {background-color: #FFFF0c;}
+.cython.score-192 {background-color: #FFFF0c;}
+.cython.score-193 {background-color: #FFFF0c;}
+.cython.score-194 {background-color: #FFFF0c;}
+.cython.score-195 {background-color: #FFFF0c;}
+.cython.score-196 {background-color: #FFFF0c;}
+.cython.score-197 {background-color: #FFFF0c;}
+.cython.score-198 {background-color: #FFFF0c;}
+.cython.score-199 {background-color: #FFFF0c;}
+.cython.score-200 {background-color: #FFFF0c;}
+.cython.score-201 {background-color: #FFFF0c;}
+.cython.score-202 {background-color: #FFFF0c;}
+.cython.score-203 {background-color: #FFFF0b;}
+.cython.score-204 {background-color: #FFFF0b;}
+.cython.score-205 {background-color: #FFFF0b;}
+.cython.score-206 {background-color: #FFFF0b;}
+.cython.score-207 {background-color: #FFFF0b;}
+.cython.score-208 {background-color: #FFFF0b;}
+.cython.score-209 {background-color: #FFFF0b;}
+.cython.score-210 {background-color: #FFFF0b;}
+.cython.score-211 {background-color: #FFFF0b;}
+.cython.score-212 {background-color: #FFFF0b;}
+.cython.score-213 {background-color: #FFFF0b;}
+.cython.score-214 {background-color: #FFFF0b;}
+.cython.score-215 {background-color: #FFFF0b;}
+.cython.score-216 {background-color: #FFFF0b;}
+.cython.score-217 {background-color: #FFFF0b;}
+.cython.score-218 {background-color: #FFFF0b;}
+.cython.score-219 {background-color: #FFFF0b;}
+.cython.score-220 {background-color: #FFFF0b;}
+.cython.score-221 {background-color: #FFFF0b;}
+.cython.score-222 {background-color: #FFFF0a;}
+.cython.score-223 {background-color: #FFFF0a;}
+.cython.score-224 {background-color: #FFFF0a;}
+.cython.score-225 {background-color: #FFFF0a;}
+.cython.score-226 {background-color: #FFFF0a;}
+.cython.score-227 {background-color: #FFFF0a;}
+.cython.score-228 {background-color: #FFFF0a;}
+.cython.score-229 {background-color: #FFFF0a;}
+.cython.score-230 {background-color: #FFFF0a;}
+.cython.score-231 {background-color: #FFFF0a;}
+.cython.score-232 {background-color: #FFFF0a;}
+.cython.score-233 {background-color: #FFFF0a;}
+.cython.score-234 {background-color: #FFFF0a;}
+.cython.score-235 {background-color: #FFFF0a;}
+.cython.score-236 {background-color: #FFFF0a;}
+.cython.score-237 {background-color: #FFFF0a;}
+.cython.score-238 {background-color: #FFFF0a;}
+.cython.score-239 {background-color: #FFFF0a;}
+.cython.score-240 {background-color: #FFFF0a;}
+.cython.score-241 {background-color: #FFFF0a;}
+.cython.score-242 {background-color: #FFFF0a;}
+.cython.score-243 {background-color: #FFFF0a;}
+.cython.score-244 {background-color: #FFFF0a;}
+.cython.score-245 {background-color: #FFFF0a;}
+.cython.score-246 {background-color: #FFFF09;}
+.cython.score-247 {background-color: #FFFF09;}
+.cython.score-248 {background-color: #FFFF09;}
+.cython.score-249 {background-color: #FFFF09;}
+.cython.score-250 {background-color: #FFFF09;}
+.cython.score-251 {background-color: #FFFF09;}
+.cython.score-252 {background-color: #FFFF09;}
+.cython.score-253 {background-color: #FFFF09;}
+.cython.score-254 {background-color: #FFFF09;}
+    </style>
+    <script>
+    function toggleDiv(id) {
+        theDiv = id.nextElementSibling
+        if (theDiv.style.display != 'block') theDiv.style.display = 'block';
+        else theDiv.style.display = 'none';
+    }
+    </script>
+</head>
+<body class="cython">
+<p><span style="border-bottom: solid 1px grey;">Generated by Cython 0.26.1</span></p>
+<p>
+    <span style="background-color: #FFFF00">Yellow lines</span> hint at Python interaction.<br />
+    Click on a line that starts with a "<code>+</code>" to see the C code that Cython generated for it.
+</p>
+<p>Raw output: <a href="numind.cpp">numind.cpp</a></p>
+<div class="cython"><pre class="cython line score-0">&#xA0;<span class="">001</span>: # This Pyrex extension class can take a numpy/numarray/Numeric object</pre>
+<pre class="cython line score-0">&#xA0;<span class="">002</span>: # as a parameter and wrap it so that its information can be accessed</pre>
+<pre class="cython line score-0">&#xA0;<span class="">003</span>: # in a standard way, both in Python space and C space.</pre>
+<pre class="cython line score-0">&#xA0;<span class="">004</span>: #</pre>
+<pre class="cython line score-0">&#xA0;<span class="">005</span>: # Heavily based on an idea of Andrew Straw. See</pre>
+<pre class="cython line score-0">&#xA0;<span class="">006</span>: # http://www.scipy.org/Cookbook/ArrayStruct_and_Pyrex</pre>
+<pre class="cython line score-0">&#xA0;<span class="">007</span>: # Very inspiring! :-)</pre>
+<pre class="cython line score-0">&#xA0;<span class="">008</span>: #</pre>
+<pre class="cython line score-0">&#xA0;<span class="">009</span>: # First version: 2006-03-25</pre>
+<pre class="cython line score-0">&#xA0;<span class="">010</span>: # Last update: 2006-03-25</pre>
+<pre class="cython line score-0">&#xA0;<span class="">011</span>: # Author: Francesc Altet</pre>
+<pre class="cython line score-0">&#xA0;<span class="">012</span>: </pre>
+<pre class="cython line score-8" onclick='toggleDiv(this)'>+<span class="">013</span>: import sys</pre>
+<pre class='cython code score-8 '>  __pyx_t_1 = <span class='pyx_c_api'>__Pyx_Import</span>(__pyx_n_s_sys, 0, -1);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 13, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
+  if (<span class='py_c_api'>PyDict_SetItem</span>(__pyx_d, __pyx_n_s_sys, __pyx_t_1) &lt; 0) <span class='error_goto'>__PYX_ERR(0, 13, __pyx_L1_error)</span>
+  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
+</pre><pre class="cython line score-0">&#xA0;<span class="">014</span>: from cpython.pycapsule cimport *</pre>
+<pre class="cython line score-0">&#xA0;<span class="">015</span>: </pre>
+<pre class="cython line score-0">&#xA0;<span class="">016</span>: cdef extern from "Python.h":</pre>
+<pre class="cython line score-0">&#xA0;<span class="">017</span>:     ctypedef int Py_intptr_t</pre>
+<pre class="cython line score-0">&#xA0;<span class="">018</span>:     ctypedef object PyObject</pre>
+<pre class="cython line score-0">&#xA0;<span class="">019</span>:     long PyInt_AsLong(object)</pre>
+<pre class="cython line score-0">&#xA0;<span class="">020</span>:     void Py_INCREF(object)</pre>
+<pre class="cython line score-0">&#xA0;<span class="">021</span>:     void Py_DECREF(object)</pre>
+<pre class="cython line score-0">&#xA0;<span class="">022</span>: </pre>
+<pre class="cython line score-0">&#xA0;<span class="">023</span>: cdef extern from "stdlib.h":</pre>
+<pre class="cython line score-0">&#xA0;<span class="">024</span>:     ctypedef long size_t</pre>
+<pre class="cython line score-0">&#xA0;<span class="">025</span>:     ctypedef long intptr_t</pre>
+<pre class="cython line score-0">&#xA0;<span class="">026</span>:     void *malloc(size_t size)</pre>
+<pre class="cython line score-0">&#xA0;<span class="">027</span>:     void free(void* ptr)</pre>
+<pre class="cython line score-0">&#xA0;<span class="">028</span>: </pre>
+<pre class="cython line score-0">&#xA0;<span class="">029</span>: cdef extern from "numind.h":</pre>
+<pre class="cython line score-0">&#xA0;<span class="">030</span>:     ctypedef struct SignedIntBuf</pre>
+<pre class="cython line score-0">&#xA0;<span class="">031</span>: </pre>
+<pre class="cython line score-0">&#xA0;<span class="">032</span>: # for PyArrayInterface:</pre>
+<pre class="cython line score-5" onclick='toggleDiv(this)'>+<span class="">033</span>: CONTIGUOUS=0x01</pre>
+<pre class='cython code score-5 '>  if (<span class='py_c_api'>PyDict_SetItem</span>(__pyx_d, __pyx_n_s_CONTIGUOUS, __pyx_int_1) &lt; 0) <span class='error_goto'>__PYX_ERR(0, 33, __pyx_L1_error)</span>
+</pre><pre class="cython line score-5" onclick='toggleDiv(this)'>+<span class="">034</span>: FORTRAN=0x02</pre>
+<pre class='cython code score-5 '>  if (<span class='py_c_api'>PyDict_SetItem</span>(__pyx_d, __pyx_n_s_FORTRAN, __pyx_int_2) &lt; 0) <span class='error_goto'>__PYX_ERR(0, 34, __pyx_L1_error)</span>
+</pre><pre class="cython line score-5" onclick='toggleDiv(this)'>+<span class="">035</span>: ALIGNED=0x100</pre>
+<pre class='cython code score-5 '>  if (<span class='py_c_api'>PyDict_SetItem</span>(__pyx_d, __pyx_n_s_ALIGNED, __pyx_int_256) &lt; 0) <span class='error_goto'>__PYX_ERR(0, 35, __pyx_L1_error)</span>
+</pre><pre class="cython line score-5" onclick='toggleDiv(this)'>+<span class="">036</span>: NOTSWAPPED=0x200</pre>
+<pre class='cython code score-5 '>  if (<span class='py_c_api'>PyDict_SetItem</span>(__pyx_d, __pyx_n_s_NOTSWAPPED, __pyx_int_512) &lt; 0) <span class='error_goto'>__PYX_ERR(0, 36, __pyx_L1_error)</span>
+</pre><pre class="cython line score-5" onclick='toggleDiv(this)'>+<span class="">037</span>: WRITEABLE=0x400</pre>
+<pre class='cython code score-5 '>  if (<span class='py_c_api'>PyDict_SetItem</span>(__pyx_d, __pyx_n_s_WRITEABLE, __pyx_int_1024) &lt; 0) <span class='error_goto'>__PYX_ERR(0, 37, __pyx_L1_error)</span>
+</pre><pre class="cython line score-0">&#xA0;<span class="">038</span>: </pre>
+<pre class="cython line score-0">&#xA0;<span class="">039</span>: # byteorder dictionary</pre>
+<pre class="cython line score-21" onclick='toggleDiv(this)'>+<span class="">040</span>: byteorder = {'&lt;':'little', '&gt;':'big'}</pre>
+<pre class='cython code score-21 '>  __pyx_t_1 = <span class='py_c_api'>PyDict_New</span>();<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 40, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
+  if (<span class='py_c_api'>PyDict_SetItem</span>(__pyx_t_1, __pyx_kp_s__6, __pyx_n_s_little) &lt; 0) <span class='error_goto'>__PYX_ERR(0, 40, __pyx_L1_error)</span>
+  if (<span class='py_c_api'>PyDict_SetItem</span>(__pyx_t_1, __pyx_kp_s__7, __pyx_n_s_big) &lt; 0) <span class='error_goto'>__PYX_ERR(0, 40, __pyx_L1_error)</span>
+  if (<span class='py_c_api'>PyDict_SetItem</span>(__pyx_d, __pyx_n_s_byteorder, __pyx_t_1) &lt; 0) <span class='error_goto'>__PYX_ERR(0, 40, __pyx_L1_error)</span>
+  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
+</pre><pre class="cython line score-0">&#xA0;<span class="">041</span>: </pre>
+<pre class="cython line score-0" onclick='toggleDiv(this)'>+<span class="">042</span>: ctypedef struct PyArrayInterface:</pre>
+<pre class='cython code score-0 '>struct __pyx_t_6numind_PyArrayInterface {
+  int version;
+  int nd;
+  char typekind;
+  int itemsize;
+  int flags;
+  Py_intptr_t *shape;
+  Py_intptr_t *strides;
+  void *data;
+};
+</pre><pre class="cython line score-0">&#xA0;<span class="">043</span>:     int version          # contains the integer 2 as a sanity check</pre>
+<pre class="cython line score-0">&#xA0;<span class="">044</span>:     int nd               # number of dimensions</pre>
+<pre class="cython line score-0">&#xA0;<span class="">045</span>:     char typekind        # kind in array --- character code of typestr</pre>
+<pre class="cython line score-0">&#xA0;<span class="">046</span>:     int itemsize         # size of each element</pre>
+<pre class="cython line score-0">&#xA0;<span class="">047</span>:     int flags            # flags indicating how the data should be interpreted</pre>
+<pre class="cython line score-0">&#xA0;<span class="">048</span>:     Py_intptr_t *shape   # A length-nd array of shape information</pre>
+<pre class="cython line score-0">&#xA0;<span class="">049</span>:     Py_intptr_t *strides # A length-nd array of stride information</pre>
+<pre class="cython line score-0">&#xA0;<span class="">050</span>:     void *data           # A pointer to the first element of the array</pre>
+<pre class="cython line score-0">&#xA0;<span class="">051</span>: </pre>
+<pre class="cython line score-0" onclick='toggleDiv(this)'>+<span class="">052</span>: cdef void* free_array_interface(object arr):</pre>
+<pre class='cython code score-0 '>static void *__pyx_f_6numind_free_array_interface(PyObject *__pyx_v_arr) {
+  void *__pyx_r;
+  <span class='refnanny'>__Pyx_RefNannyDeclarations</span>
+  <span class='refnanny'>__Pyx_RefNannySetupContext</span>("free_array_interface", 0);
+/* … */
+  /* function exit code */
+  __pyx_r = 0;
+  <span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
+  return __pyx_r;
+}
+</pre><pre class="cython line score-0" onclick='toggleDiv(this)'>+<span class="">053</span>:     Py_DECREF(arr)</pre>
+<pre class='cython code score-0 '>  Py_DECREF(__pyx_v_arr);
+</pre><pre class="cython line score-0">&#xA0;<span class="">054</span>: </pre>
+<pre class="cython line score-0">&#xA0;<span class="">055</span>: </pre>
+<pre class="cython line score-0" onclick='toggleDiv(this)'>+<span class="">056</span>: cdef class NumInd:</pre>
+<pre class='cython code score-0 '>struct __pyx_obj_6numind_NumInd {
+  PyObject_HEAD
+  struct __pyx_vtabstruct_6numind_NumInd *__pyx_vtab;
+  void *data;
+  int _nd;
+  Py_intptr_t *_shape;
+  Py_intptr_t *_strides;
+  __pyx_t_6numind_PyArrayInterface *inter;
+  PyObject *_t_shape;
+  PyObject *_t_strides;
+  PyObject *_undarray;
+};
+
+
+
+struct __pyx_vtabstruct_6numind_NumInd {
+  __pyx_t_6numind_PyArrayInterface *(*_get_array_interface)(struct __pyx_obj_6numind_NumInd *);
+};
+static struct __pyx_vtabstruct_6numind_NumInd *__pyx_vtabptr_6numind_NumInd;
+</pre><pre class="cython line score-0">&#xA0;<span class="">057</span>:     cdef void *data</pre>
+<pre class="cython line score-0">&#xA0;<span class="">058</span>:     cdef int _nd</pre>
+<pre class="cython line score-0">&#xA0;<span class="">059</span>:     cdef Py_intptr_t *_shape</pre>
+<pre class="cython line score-0">&#xA0;<span class="">060</span>:     cdef Py_intptr_t *_strides</pre>
+<pre class="cython line score-0">&#xA0;<span class="">061</span>:     cdef PyArrayInterface *inter</pre>
+<pre class="cython line score-0">&#xA0;<span class="">062</span>:     cdef object _t_shape, _t_strides, _undarray</pre>
+<pre class="cython line score-0">&#xA0;<span class="">063</span>: </pre>
+<pre class="cython line score-28" onclick='toggleDiv(this)'>+<span class="">064</span>:     def __init__(self, object undarray):</pre>
+<pre class='cython code score-28 '>/* Python wrapper */
+static int __pyx_pw_6numind_6NumInd_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_pw_6numind_6NumInd_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_undarray = 0;
+  int __pyx_r;
+  <span class='refnanny'>__Pyx_RefNannyDeclarations</span>
+  <span class='refnanny'>__Pyx_RefNannySetupContext</span>("__init__ (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&amp;__pyx_n_s_undarray,0};
+    PyObject* values[1] = {0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = <span class='py_macro_api'>PyTuple_GET_SIZE</span>(__pyx_args);
+      switch (pos_args) {
+        case  1: values[0] = <span class='py_macro_api'>PyTuple_GET_ITEM</span>(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = <span class='py_c_api'>PyDict_Size</span>(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = <span class='py_c_api'>PyDict_GetItem</span>(__pyx_kwds, __pyx_n_s_undarray)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+      }
+      if (unlikely(kw_args &gt; 0)) {
+        if (unlikely(<span class='pyx_c_api'>__Pyx_ParseOptionalKeywords</span>(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") &lt; 0)) <span class='error_goto'>__PYX_ERR(0, 64, __pyx_L3_error)</span>
+      }
+    } else if (<span class='py_macro_api'>PyTuple_GET_SIZE</span>(__pyx_args) != 1) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = <span class='py_macro_api'>PyTuple_GET_ITEM</span>(__pyx_args, 0);
+    }
+    __pyx_v_undarray = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  <span class='pyx_c_api'>__Pyx_RaiseArgtupleInvalid</span>("__init__", 1, 1, 1, <span class='py_macro_api'>PyTuple_GET_SIZE</span>(__pyx_args)); <span class='error_goto'>__PYX_ERR(0, 64, __pyx_L3_error)</span>
+  __pyx_L3_error:;
+  <span class='pyx_c_api'>__Pyx_AddTraceback</span>("numind.NumInd.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  <span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
+  return -1;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_6numind_6NumInd___init__(((struct __pyx_obj_6numind_NumInd *)__pyx_v_self), __pyx_v_undarray);
+
+  /* function exit code */
+  <span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
+  return __pyx_r;
+}
+
+static int __pyx_pf_6numind_6NumInd___init__(struct __pyx_obj_6numind_NumInd *__pyx_v_self, PyObject *__pyx_v_undarray) {
+  int __pyx_v_i;
+  int __pyx_v_stride;
+  PyObject *__pyx_v_array_shape = 0;
+  PyObject *__pyx_v_array_strides = 0;
+  int __pyx_r;
+  <span class='refnanny'>__Pyx_RefNannyDeclarations</span>
+  <span class='refnanny'>__Pyx_RefNannySetupContext</span>("__init__", 0);
+/* … */
+  /* function exit code */
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_1);
+  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_2);
+  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_7);
+  <span class='pyx_c_api'>__Pyx_AddTraceback</span>("numind.NumInd.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
+  __pyx_L0:;
+  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_array_shape);
+  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_array_strides);
+  <span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
+  return __pyx_r;
+}
+</pre><pre class="cython line score-0">&#xA0;<span class="">065</span>:         cdef int i, stride</pre>
+<pre class="cython line score-0">&#xA0;<span class="">066</span>:         cdef object array_shape, array_strides</pre>
+<pre class="cython line score-0">&#xA0;<span class="">067</span>: </pre>
+<pre class="cython line score-0">&#xA0;<span class="">068</span>:         # Keep a reference to the underlying object</pre>
+<pre class="cython line score-2" onclick='toggleDiv(this)'>+<span class="">069</span>:         self._undarray = undarray</pre>
+<pre class='cython code score-2 '>  <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_undarray);
+  <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_v_undarray);
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_v_self-&gt;_undarray);
+  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_v_self-&gt;_undarray);
+  __pyx_v_self-&gt;_undarray = __pyx_v_undarray;
+</pre><pre class="cython line score-0">&#xA0;<span class="">070</span>:         # Get the shape and strides C arrays</pre>
+<pre class="cython line score-8" onclick='toggleDiv(this)'>+<span class="">071</span>:         array_shape = undarray.__array_interface__["shape"]</pre>
+<pre class='cython code score-8 '>  __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(__pyx_v_undarray, __pyx_n_s_array_interface);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 71, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
+  __pyx_t_2 = <span class='py_c_api'>PyObject_GetItem</span>(__pyx_t_1, __pyx_n_s_shape);<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 71, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
+  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_v_array_shape = __pyx_t_2;
+  __pyx_t_2 = 0;
+</pre><pre class="cython line score-2" onclick='toggleDiv(this)'>+<span class="">072</span>:         self._t_shape = array_shape</pre>
+<pre class='cython code score-2 '>  <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_array_shape);
+  <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_v_array_shape);
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_v_self-&gt;_t_shape);
+  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_v_self-&gt;_t_shape);
+  __pyx_v_self-&gt;_t_shape = __pyx_v_array_shape;
+</pre><pre class="cython line score-0">&#xA0;<span class="">073</span>:         # The number of dimensions</pre>
+<pre class="cython line score-5" onclick='toggleDiv(this)'>+<span class="">074</span>:         self._nd = len(array_shape)</pre>
+<pre class='cython code score-5 '>  __pyx_t_3 = <span class='py_c_api'>PyObject_Length</span>(__pyx_v_array_shape);<span class='error_goto'> if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(0, 74, __pyx_L1_error)</span>
+  __pyx_v_self-&gt;_nd = __pyx_t_3;
+</pre><pre class="cython line score-0">&#xA0;<span class="">075</span>:         # The shape</pre>
+<pre class="cython line score-0" onclick='toggleDiv(this)'>+<span class="">076</span>:         self._shape = &lt;Py_intptr_t *&gt;malloc(self._nd*sizeof(Py_intptr_t))</pre>
+<pre class='cython code score-0 '>  __pyx_v_self-&gt;_shape = ((Py_intptr_t *)malloc((__pyx_v_self-&gt;_nd * (sizeof(Py_intptr_t)))));
+</pre><pre class="cython line score-0" onclick='toggleDiv(this)'>+<span class="">077</span>:         for i from 0 &lt;= i &lt; self._nd:</pre>
+<pre class='cython code score-0 '>  __pyx_t_4 = __pyx_v_self-&gt;_nd;
+  for (__pyx_v_i = 0; __pyx_v_i &lt; __pyx_t_4; __pyx_v_i++) {
+</pre><pre class="cython line score-10" onclick='toggleDiv(this)'>+<span class="">078</span>:             self._shape[i] = self._t_shape[i]</pre>
+<pre class='cython code score-10 '>    __pyx_t_2 = <span class='pyx_c_api'>__Pyx_GetItemInt</span>(__pyx_v_self-&gt;_t_shape, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 1, 1);<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 78, __pyx_L1_error)</span>
+    <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
+    __pyx_t_5 = <span class='pyx_c_api'>__Pyx_PyInt_As_Py_intptr_t</span>(__pyx_t_2); if (unlikely((__pyx_t_5 == ((Py_intptr_t)-1)) &amp;&amp; <span class='py_c_api'>PyErr_Occurred</span>())) <span class='error_goto'>__PYX_ERR(0, 78, __pyx_L1_error)</span>
+    <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
+    (__pyx_v_self-&gt;_shape[__pyx_v_i]) = __pyx_t_5;
+  }
+</pre><pre class="cython line score-0">&#xA0;<span class="">079</span>:         # The strides (compute them if needed)</pre>
+<pre class="cython line score-8" onclick='toggleDiv(this)'>+<span class="">080</span>:         array_strides = undarray.__array_interface__["strides"]</pre>
+<pre class='cython code score-8 '>  __pyx_t_2 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(__pyx_v_undarray, __pyx_n_s_array_interface);<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 80, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
+  __pyx_t_1 = <span class='py_c_api'>PyObject_GetItem</span>(__pyx_t_2, __pyx_n_s_strides);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 80, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
+  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_v_array_strides = __pyx_t_1;
+  __pyx_t_1 = 0;
+</pre><pre class="cython line score-2" onclick='toggleDiv(this)'>+<span class="">081</span>:         self._t_strides = array_strides</pre>
+<pre class='cython code score-2 '>  <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_array_strides);
+  <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_v_array_strides);
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_v_self-&gt;_t_strides);
+  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_v_self-&gt;_t_strides);
+  __pyx_v_self-&gt;_t_strides = __pyx_v_array_strides;
+</pre><pre class="cython line score-0" onclick='toggleDiv(this)'>+<span class="">082</span>:         self._strides = &lt;Py_intptr_t *&gt;malloc(self._nd*sizeof(Py_intptr_t))</pre>
+<pre class='cython code score-0 '>  __pyx_v_self-&gt;_strides = ((Py_intptr_t *)malloc((__pyx_v_self-&gt;_nd * (sizeof(Py_intptr_t)))));
+</pre><pre class="cython line score-2" onclick='toggleDiv(this)'>+<span class="">083</span>:         if array_strides:</pre>
+<pre class='cython code score-2 '>  __pyx_t_6 = <span class='pyx_c_api'>__Pyx_PyObject_IsTrue</span>(__pyx_v_array_strides); if (unlikely(__pyx_t_6 &lt; 0)) <span class='error_goto'>__PYX_ERR(0, 83, __pyx_L1_error)</span>
+  if (__pyx_t_6) {
+/* … */
+    goto __pyx_L5;
+  }
+</pre><pre class="cython line score-0" onclick='toggleDiv(this)'>+<span class="">084</span>:             for i from 0 &lt;= i &lt; self._nd:</pre>
+<pre class='cython code score-0 '>    __pyx_t_4 = __pyx_v_self-&gt;_nd;
+    for (__pyx_v_i = 0; __pyx_v_i &lt; __pyx_t_4; __pyx_v_i++) {
+</pre><pre class="cython line score-10" onclick='toggleDiv(this)'>+<span class="">085</span>:                 self._strides[i] = array_strides[i]</pre>
+<pre class='cython code score-10 '>      __pyx_t_1 = <span class='pyx_c_api'>__Pyx_GetItemInt</span>(__pyx_v_array_strides, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 1, 1);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 85, __pyx_L1_error)</span>
+      <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
+      __pyx_t_5 = <span class='pyx_c_api'>__Pyx_PyInt_As_Py_intptr_t</span>(__pyx_t_1); if (unlikely((__pyx_t_5 == ((Py_intptr_t)-1)) &amp;&amp; <span class='py_c_api'>PyErr_Occurred</span>())) <span class='error_goto'>__PYX_ERR(0, 85, __pyx_L1_error)</span>
+      <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
+      (__pyx_v_self-&gt;_strides[__pyx_v_i]) = __pyx_t_5;
+    }
+</pre><pre class="cython line score-0">&#xA0;<span class="">086</span>:         else:</pre>
+<pre class="cython line score-0">&#xA0;<span class="">087</span>:             # strides is None. Compute them explicitely.</pre>
+<pre class="cython line score-8" onclick='toggleDiv(this)'>+<span class="">088</span>:             self._t_strides = [0] * self._nd</pre>
+<pre class='cython code score-8 '>  /*else*/ {
+    __pyx_t_1 = <span class='py_c_api'>PyList_New</span>(1 * ((__pyx_v_self-&gt;_nd&lt;0) ? 0:__pyx_v_self-&gt;_nd));<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 88, __pyx_L1_error)</span>
+    <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
+    { Py_ssize_t __pyx_temp;
+      for (__pyx_temp=0; __pyx_temp &lt; __pyx_v_self-&gt;_nd; __pyx_temp++) {
+        <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_int_0);
+        <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_int_0);
+        <span class='py_macro_api'>PyList_SET_ITEM</span>(__pyx_t_1, __pyx_temp, __pyx_int_0);
+      }
+    }
+    <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_1);
+    <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_v_self-&gt;_t_strides);
+    <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_v_self-&gt;_t_strides);
+    __pyx_v_self-&gt;_t_strides = __pyx_t_1;
+    __pyx_t_1 = 0;
+</pre><pre class="cython line score-21" onclick='toggleDiv(this)'>+<span class="">089</span>:             stride = int(self.typestr[2:])</pre>
+<pre class='cython code score-21 '>    __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(((PyObject *)__pyx_v_self), __pyx_n_s_typestr);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 89, __pyx_L1_error)</span>
+    <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
+    __pyx_t_2 = <span class='pyx_c_api'>__Pyx_PyObject_GetSlice</span>(__pyx_t_1, 2, 0, NULL, NULL, &amp;__pyx_slice_, 1, 0, 1);<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 89, __pyx_L1_error)</span>
+    <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
+    <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyNumber_Int</span>(__pyx_t_2);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 89, __pyx_L1_error)</span>
+    <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
+    <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
+    __pyx_t_4 = <span class='pyx_c_api'>__Pyx_PyInt_As_int</span>(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) &amp;&amp; <span class='py_c_api'>PyErr_Occurred</span>())) <span class='error_goto'>__PYX_ERR(0, 89, __pyx_L1_error)</span>
+    <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_v_stride = __pyx_t_4;
+/* … */
+  __pyx_slice_ = <span class='py_c_api'>PySlice_New</span>(__pyx_int_2, Py_None, Py_None);<span class='error_goto'> if (unlikely(!__pyx_slice_)) __PYX_ERR(0, 89, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_slice_);
+  <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_slice_);
+</pre><pre class="cython line score-0" onclick='toggleDiv(this)'>+<span class="">090</span>:             for i from self._nd &gt; i &gt;= 0:</pre>
+<pre class='cython code score-0 '>    for (__pyx_v_i = __pyx_v_self-&gt;_nd-1; __pyx_v_i &gt;= 0; __pyx_v_i--) {
+</pre><pre class="cython line score-0" onclick='toggleDiv(this)'>+<span class="">091</span>:                 self._strides[i] = stride</pre>
+<pre class='cython code score-0 '>      (__pyx_v_self-&gt;_strides[__pyx_v_i]) = __pyx_v_stride;
+</pre><pre class="cython line score-5" onclick='toggleDiv(this)'>+<span class="">092</span>:                 self._t_strides[i] = stride</pre>
+<pre class='cython code score-5 '>      __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyInt_From_int</span>(__pyx_v_stride);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 92, __pyx_L1_error)</span>
+      <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
+      if (unlikely(<span class='pyx_c_api'>__Pyx_SetItemInt</span>(__pyx_v_self-&gt;_t_strides, __pyx_v_i, __pyx_t_1, int, 1, __Pyx_PyInt_From_int, 0, 1, 1) &lt; 0)) <span class='error_goto'>__PYX_ERR(0, 92, __pyx_L1_error)</span>
+      <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
+</pre><pre class="cython line score-19" onclick='toggleDiv(this)'>+<span class="">093</span>:                 stride = stride * array_shape[i]</pre>
+<pre class='cython code score-19 '>      __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyInt_From_int</span>(__pyx_v_stride);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 93, __pyx_L1_error)</span>
+      <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
+      __pyx_t_2 = <span class='pyx_c_api'>__Pyx_GetItemInt</span>(__pyx_v_array_shape, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 1, 1);<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 93, __pyx_L1_error)</span>
+      <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
+      __pyx_t_7 = <span class='py_c_api'>PyNumber_Multiply</span>(__pyx_t_1, __pyx_t_2);<span class='error_goto'> if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 93, __pyx_L1_error)</span>
+      <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_7);
+      <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
+      <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
+      __pyx_t_4 = <span class='pyx_c_api'>__Pyx_PyInt_As_int</span>(__pyx_t_7); if (unlikely((__pyx_t_4 == (int)-1) &amp;&amp; <span class='py_c_api'>PyErr_Occurred</span>())) <span class='error_goto'>__PYX_ERR(0, 93, __pyx_L1_error)</span>
+      <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_7); __pyx_t_7 = 0;
+      __pyx_v_stride = __pyx_t_4;
+    }
+</pre><pre class="cython line score-6" onclick='toggleDiv(this)'>+<span class="">094</span>:             self._t_strides = tuple(self._t_strides)</pre>
+<pre class='cython code score-6 '>    __pyx_t_7 = <span class='py_c_api'>PySequence_Tuple</span>(__pyx_v_self-&gt;_t_strides);<span class='error_goto'> if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 94, __pyx_L1_error)</span>
+    <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_7);
+    <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_7);
+    <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_v_self-&gt;_t_strides);
+    <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_v_self-&gt;_t_strides);
+    __pyx_v_self-&gt;_t_strides = __pyx_t_7;
+    __pyx_t_7 = 0;
+  }
+  __pyx_L5:;
+</pre><pre class="cython line score-0">&#xA0;<span class="">095</span>:         # Populate the C array interface</pre>
+<pre class="cython line score-0" onclick='toggleDiv(this)'>+<span class="">096</span>:         self.inter = self._get_array_interface()</pre>
+<pre class='cython code score-0 '>  __pyx_v_self-&gt;inter = ((struct __pyx_vtabstruct_6numind_NumInd *)__pyx_v_self-&gt;__pyx_vtab)-&gt;_get_array_interface(__pyx_v_self);
+</pre><pre class="cython line score-0">&#xA0;<span class="">097</span>: </pre>
+<pre class="cython line score-0">&#xA0;<span class="">098</span>:     # Properties. This are visible from Python space.</pre>
+<pre class="cython line score-0">&#xA0;<span class="">099</span>:     # Add as many as you want.</pre>
+<pre class="cython line score-0">&#xA0;<span class="">100</span>: </pre>
+<pre class="cython line score-0">&#xA0;<span class="">101</span>:     property undarray:  # Returns the underlying array</pre>
+<pre class="cython line score-0" onclick='toggleDiv(this)'>+<span class="">102</span>:         def __get__(self):</pre>
+<pre class='cython code score-0 '>/* Python wrapper */
+static PyObject *__pyx_pw_6numind_6NumInd_8undarray_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_6numind_6NumInd_8undarray_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  <span class='refnanny'>__Pyx_RefNannyDeclarations</span>
+  <span class='refnanny'>__Pyx_RefNannySetupContext</span>("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_6numind_6NumInd_8undarray___get__(((struct __pyx_obj_6numind_NumInd *)__pyx_v_self));
+
+  /* function exit code */
+  <span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_6numind_6NumInd_8undarray___get__(struct __pyx_obj_6numind_NumInd *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  <span class='refnanny'>__Pyx_RefNannyDeclarations</span>
+  <span class='refnanny'>__Pyx_RefNannySetupContext</span>("__get__", 0);
+/* … */
+  /* function exit code */
+  __pyx_L0:;
+  <span class='refnanny'>__Pyx_XGIVEREF</span>(__pyx_r);
+  <span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
+  return __pyx_r;
+}
+</pre><pre class="cython line score-2" onclick='toggleDiv(this)'>+<span class="">103</span>:             return self._undarray</pre>
+<pre class='cython code score-2 '>  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_r);
+  <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_self-&gt;_undarray);
+  __pyx_r = __pyx_v_self-&gt;_undarray;
+  goto __pyx_L0;
+</pre><pre class="cython line score-0">&#xA0;<span class="">104</span>: </pre>
+<pre class="cython line score-0">&#xA0;<span class="">105</span>:     property shape:</pre>
+<pre class="cython line score-0" onclick='toggleDiv(this)'>+<span class="">106</span>:         def __get__(self):</pre>
+<pre class='cython code score-0 '>/* Python wrapper */
+static PyObject *__pyx_pw_6numind_6NumInd_5shape_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_6numind_6NumInd_5shape_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  <span class='refnanny'>__Pyx_RefNannyDeclarations</span>
+  <span class='refnanny'>__Pyx_RefNannySetupContext</span>("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_6numind_6NumInd_5shape___get__(((struct __pyx_obj_6numind_NumInd *)__pyx_v_self));
+
+  /* function exit code */
+  <span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_6numind_6NumInd_5shape___get__(struct __pyx_obj_6numind_NumInd *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  <span class='refnanny'>__Pyx_RefNannyDeclarations</span>
+  <span class='refnanny'>__Pyx_RefNannySetupContext</span>("__get__", 0);
+/* … */
+  /* function exit code */
+  __pyx_L0:;
+  <span class='refnanny'>__Pyx_XGIVEREF</span>(__pyx_r);
+  <span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
+  return __pyx_r;
+}
+</pre><pre class="cython line score-2" onclick='toggleDiv(this)'>+<span class="">107</span>:             return self._t_shape</pre>
+<pre class='cython code score-2 '>  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_r);
+  <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_self-&gt;_t_shape);
+  __pyx_r = __pyx_v_self-&gt;_t_shape;
+  goto __pyx_L0;
+</pre><pre class="cython line score-0">&#xA0;<span class="">108</span>: </pre>
+<pre class="cython line score-0">&#xA0;<span class="">109</span>:     property strides:</pre>
+<pre class="cython line score-0" onclick='toggleDiv(this)'>+<span class="">110</span>:         def __get__(self):</pre>
+<pre class='cython code score-0 '>/* Python wrapper */
+static PyObject *__pyx_pw_6numind_6NumInd_7strides_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_6numind_6NumInd_7strides_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  <span class='refnanny'>__Pyx_RefNannyDeclarations</span>
+  <span class='refnanny'>__Pyx_RefNannySetupContext</span>("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_6numind_6NumInd_7strides___get__(((struct __pyx_obj_6numind_NumInd *)__pyx_v_self));
+
+  /* function exit code */
+  <span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_6numind_6NumInd_7strides___get__(struct __pyx_obj_6numind_NumInd *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  <span class='refnanny'>__Pyx_RefNannyDeclarations</span>
+  <span class='refnanny'>__Pyx_RefNannySetupContext</span>("__get__", 0);
+/* … */
+  /* function exit code */
+  __pyx_L0:;
+  <span class='refnanny'>__Pyx_XGIVEREF</span>(__pyx_r);
+  <span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
+  return __pyx_r;
+}
+</pre><pre class="cython line score-2" onclick='toggleDiv(this)'>+<span class="">111</span>:             return self._t_strides</pre>
+<pre class='cython code score-2 '>  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_r);
+  <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_self-&gt;_t_strides);
+  __pyx_r = __pyx_v_self-&gt;_t_strides;
+  goto __pyx_L0;
+</pre><pre class="cython line score-0">&#xA0;<span class="">112</span>: </pre>
+<pre class="cython line score-0">&#xA0;<span class="">113</span>:     property typestr:</pre>
+<pre class="cython line score-4" onclick='toggleDiv(this)'>+<span class="">114</span>:         def __get__(self):</pre>
+<pre class='cython code score-4 '>/* Python wrapper */
+static PyObject *__pyx_pw_6numind_6NumInd_7typestr_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_6numind_6NumInd_7typestr_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  <span class='refnanny'>__Pyx_RefNannyDeclarations</span>
+  <span class='refnanny'>__Pyx_RefNannySetupContext</span>("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_6numind_6NumInd_7typestr___get__(((struct __pyx_obj_6numind_NumInd *)__pyx_v_self));
+
+  /* function exit code */
+  <span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_6numind_6NumInd_7typestr___get__(struct __pyx_obj_6numind_NumInd *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  <span class='refnanny'>__Pyx_RefNannyDeclarations</span>
+  <span class='refnanny'>__Pyx_RefNannySetupContext</span>("__get__", 0);
+/* … */
+  /* function exit code */
+  __pyx_L1_error:;
+  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_1);
+  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_2);
+  <span class='pyx_c_api'>__Pyx_AddTraceback</span>("numind.NumInd.typestr.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  <span class='refnanny'>__Pyx_XGIVEREF</span>(__pyx_r);
+  <span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
+  return __pyx_r;
+}
+</pre><pre class="cython line score-9" onclick='toggleDiv(this)'>+<span class="">115</span>:             return self._undarray.__array_interface__["typestr"]</pre>
+<pre class='cython code score-9 '>  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_r);
+  __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(__pyx_v_self-&gt;_undarray, __pyx_n_s_array_interface);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 115, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
+  __pyx_t_2 = <span class='py_c_api'>PyObject_GetItem</span>(__pyx_t_1, __pyx_n_s_typestr);<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 115, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
+  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
+</pre><pre class="cython line score-0">&#xA0;<span class="">116</span>: </pre>
+<pre class="cython line score-0">&#xA0;<span class="">117</span>:     property typekind:</pre>
+<pre class="cython line score-4" onclick='toggleDiv(this)'>+<span class="">118</span>:         def __get__(self):</pre>
+<pre class='cython code score-4 '>/* Python wrapper */
+static PyObject *__pyx_pw_6numind_6NumInd_8typekind_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_6numind_6NumInd_8typekind_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  <span class='refnanny'>__Pyx_RefNannyDeclarations</span>
+  <span class='refnanny'>__Pyx_RefNannySetupContext</span>("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_6numind_6NumInd_8typekind___get__(((struct __pyx_obj_6numind_NumInd *)__pyx_v_self));
+
+  /* function exit code */
+  <span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_6numind_6NumInd_8typekind___get__(struct __pyx_obj_6numind_NumInd *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  <span class='refnanny'>__Pyx_RefNannyDeclarations</span>
+  <span class='refnanny'>__Pyx_RefNannySetupContext</span>("__get__", 0);
+/* … */
+  /* function exit code */
+  __pyx_L1_error:;
+  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_1);
+  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_2);
+  <span class='pyx_c_api'>__Pyx_AddTraceback</span>("numind.NumInd.typekind.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  <span class='refnanny'>__Pyx_XGIVEREF</span>(__pyx_r);
+  <span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
+  return __pyx_r;
+}
+</pre><pre class="cython line score-12" onclick='toggleDiv(this)'>+<span class="">119</span>:             return chr(self.inter.typekind)</pre>
+<pre class='cython code score-12 '>  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_r);
+  __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyInt_From_char</span>(__pyx_v_self-&gt;inter-&gt;typekind);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 119, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
+  __pyx_t_2 = <span class='py_c_api'>PyTuple_New</span>(1);<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 119, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
+  <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_1);
+  <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_2, 0, __pyx_t_1);
+  __pyx_t_1 = 0;
+  __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyObject_Call</span>(__pyx_builtin_chr, __pyx_t_2, NULL);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 119, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
+  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+</pre><pre class="cython line score-0">&#xA0;<span class="">120</span>: </pre>
+<pre class="cython line score-0">&#xA0;<span class="">121</span>:     property readonly:</pre>
+<pre class="cython line score-4" onclick='toggleDiv(this)'>+<span class="">122</span>:         def __get__(self):</pre>
+<pre class='cython code score-4 '>/* Python wrapper */
+static PyObject *__pyx_pw_6numind_6NumInd_8readonly_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_6numind_6NumInd_8readonly_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  <span class='refnanny'>__Pyx_RefNannyDeclarations</span>
+  <span class='refnanny'>__Pyx_RefNannySetupContext</span>("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_6numind_6NumInd_8readonly___get__(((struct __pyx_obj_6numind_NumInd *)__pyx_v_self));
+
+  /* function exit code */
+  <span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_6numind_6NumInd_8readonly___get__(struct __pyx_obj_6numind_NumInd *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  <span class='refnanny'>__Pyx_RefNannyDeclarations</span>
+  <span class='refnanny'>__Pyx_RefNannySetupContext</span>("__get__", 0);
+/* … */
+  /* function exit code */
+  __pyx_L1_error:;
+  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_1);
+  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_2);
+  <span class='pyx_c_api'>__Pyx_AddTraceback</span>("numind.NumInd.readonly.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  <span class='refnanny'>__Pyx_XGIVEREF</span>(__pyx_r);
+  <span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
+  return __pyx_r;
+}
+</pre><pre class="cython line score-12" onclick='toggleDiv(this)'>+<span class="">123</span>:             return self._undarray.__array_interface__["data"][1]</pre>
+<pre class='cython code score-12 '>  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_r);
+  __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(__pyx_v_self-&gt;_undarray, __pyx_n_s_array_interface);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 123, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
+  __pyx_t_2 = <span class='py_c_api'>PyObject_GetItem</span>(__pyx_t_1, __pyx_n_s_data);<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 123, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
+  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_1 = <span class='pyx_c_api'>__Pyx_GetItemInt</span>(__pyx_t_2, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 123, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
+  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+</pre><pre class="cython line score-0">&#xA0;<span class="">124</span>: </pre>
+<pre class="cython line score-0">&#xA0;<span class="">125</span>:     property __array_struct__:</pre>
+<pre class="cython line score-0">&#xA0;<span class="">126</span>:         "Allows other numerical packages to obtain a new object."</pre>
+<pre class="cython line score-3" onclick='toggleDiv(this)'>+<span class="">127</span>:         def __get__(self):</pre>
+<pre class='cython code score-3 '>/* Python wrapper */
+static PyObject *__pyx_pw_6numind_6NumInd_16__array_struct___1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_6numind_6NumInd_16__array_struct___1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  <span class='refnanny'>__Pyx_RefNannyDeclarations</span>
+  <span class='refnanny'>__Pyx_RefNannySetupContext</span>("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_6numind_6NumInd_16__array_struct_____get__(((struct __pyx_obj_6numind_NumInd *)__pyx_v_self));
+
+  /* function exit code */
+  <span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_6numind_6NumInd_16__array_struct_____get__(struct __pyx_obj_6numind_NumInd *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  <span class='refnanny'>__Pyx_RefNannyDeclarations</span>
+  <span class='refnanny'>__Pyx_RefNannySetupContext</span>("__get__", 0);
+/* … */
+  /* function exit code */
+  __pyx_L1_error:;
+  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_1);
+  <span class='pyx_c_api'>__Pyx_AddTraceback</span>("numind.NumInd.__array_struct__.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  <span class='refnanny'>__Pyx_XGIVEREF</span>(__pyx_r);
+  <span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
+  return __pyx_r;
+}
+</pre><pre class="cython line score-4" onclick='toggleDiv(this)'>+<span class="">128</span>:             if hasattr(self._undarray, "__array_struct__"):</pre>
+<pre class='cython code score-4 '>  __pyx_t_1 = __pyx_v_self-&gt;_undarray;
+  <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_1);
+  __pyx_t_2 = <span class='pyx_c_api'>__Pyx_HasAttr</span>(__pyx_t_1, __pyx_n_s_array_struct);<span class='error_goto'> if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 128, __pyx_L1_error)</span>
+  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_3 = (__pyx_t_2 != 0);
+  if (__pyx_t_3) {
+/* … */
+  }
+</pre><pre class="cython line score-3" onclick='toggleDiv(this)'>+<span class="">129</span>:                 return self._undarray.__array_struct__</pre>
+<pre class='cython code score-3 '>    <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_r);
+    __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(__pyx_v_self-&gt;_undarray, __pyx_n_s_array_struct);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 129, __pyx_L1_error)</span>
+    <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
+    __pyx_r = __pyx_t_1;
+    __pyx_t_1 = 0;
+    goto __pyx_L0;
+</pre><pre class="cython line score-0">&#xA0;<span class="">130</span>:             else:</pre>
+<pre class="cython line score-0">&#xA0;<span class="">131</span>:                 # No an underlying array with __array_struct__</pre>
+<pre class="cython line score-0">&#xA0;<span class="">132</span>:                 # Deliver an equivalent PyCObject.</pre>
+<pre class="cython line score-0" onclick='toggleDiv(this)'>+<span class="">133</span>:                 Py_INCREF(self)</pre>
+<pre class='cython code score-0 '>  /*else*/ {
+    Py_INCREF(((PyObject *)__pyx_v_self));
+</pre><pre class="cython line score-6" onclick='toggleDiv(this)'>+<span class="">134</span>:                 return PyCapsule_New(&lt;void*&gt;self.inter,</pre>
+<pre class='cython code score-6 '>    <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_r);
+/* … */
+    __pyx_t_1 = <span class='py_c_api'>PyCapsule_New</span>(((void *)__pyx_v_self-&gt;inter), ((char *)"struct array"), ((PyCapsule_Destructor)__pyx_f_6numind_free_array_interface));<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 134, __pyx_L1_error)</span>
+    <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
+    __pyx_r = __pyx_t_1;
+    __pyx_t_1 = 0;
+    goto __pyx_L0;
+  }
+</pre><pre class="cython line score-0">&#xA0;<span class="">135</span>:                                      "struct array",</pre>
+<pre class="cython line score-0">&#xA0;<span class="">136</span>:                                      &lt;PyCapsule_Destructor&gt;free_array_interface)</pre>
+<pre class="cython line score-0">&#xA0;<span class="">137</span>: </pre>
+<pre class="cython line score-9" onclick='toggleDiv(this)'>+<span class="">138</span>:     cdef PyArrayInterface *_get_array_interface(self):</pre>
+<pre class='cython code score-9 '>static __pyx_t_6numind_PyArrayInterface *__pyx_f_6numind_6NumInd__get_array_interface(struct __pyx_obj_6numind_NumInd *__pyx_v_self) {
+  __pyx_t_6numind_PyArrayInterface *__pyx_v_inter;
+  PyObject *__pyx_v_undarray = 0;
+  PyObject *__pyx_v_data_address = 0;
+  PyObject *__pyx_v_typestr = 0;
+  PyObject *__pyx_v_obj = 0;
+  __pyx_t_6numind_PyArrayInterface *__pyx_r;
+  <span class='refnanny'>__Pyx_RefNannyDeclarations</span>
+  <span class='refnanny'>__Pyx_RefNannySetupContext</span>("_get_array_interface", 0);
+/* … */
+  /* function exit code */
+  __pyx_L1_error:;
+  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_1);
+  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_5);
+  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_6);
+  <span class='pyx_c_api'>__Pyx_WriteUnraisable</span>("numind.NumInd._get_array_interface", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
+  __pyx_r = 0;
+  __pyx_L0:;
+  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_undarray);
+  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_data_address);
+  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_typestr);
+  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_obj);
+  <span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
+  return __pyx_r;
+}
+</pre><pre class="cython line score-0">&#xA0;<span class="">139</span>:         "Populates the array interface"</pre>
+<pre class="cython line score-0">&#xA0;<span class="">140</span>:         cdef PyArrayInterface *inter</pre>
+<pre class="cython line score-0">&#xA0;<span class="">141</span>:         cdef object undarray, data_address, typestr</pre>
+<pre class="cython line score-0">&#xA0;<span class="">142</span>:         cdef object obj</pre>
+<pre class="cython line score-0">&#xA0;<span class="">143</span>: </pre>
+<pre class="cython line score-1" onclick='toggleDiv(this)'>+<span class="">144</span>:         undarray = self._undarray</pre>
+<pre class='cython code score-1 '>  __pyx_t_1 = __pyx_v_self-&gt;_undarray;
+  <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_1);
+  __pyx_v_undarray = __pyx_t_1;
+  __pyx_t_1 = 0;
+</pre><pre class="cython line score-2" onclick='toggleDiv(this)'>+<span class="">145</span>:         typestr = self.typestr</pre>
+<pre class='cython code score-2 '>  __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(((PyObject *)__pyx_v_self), __pyx_n_s_typestr);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 145, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
+  __pyx_v_typestr = __pyx_t_1;
+  __pyx_t_1 = 0;
+</pre><pre class="cython line score-0" onclick='toggleDiv(this)'>+<span class="">146</span>:         inter = &lt;PyArrayInterface *&gt;malloc(sizeof(PyArrayInterface))</pre>
+<pre class='cython code score-0 '>  __pyx_v_inter = ((__pyx_t_6numind_PyArrayInterface *)malloc((sizeof(__pyx_t_6numind_PyArrayInterface))));
+</pre><pre class="cython line score-0" onclick='toggleDiv(this)'>+<span class="">147</span>:         if inter is NULL:</pre>
+<pre class='cython code score-0 '>  __pyx_t_2 = ((__pyx_v_inter == NULL) != 0);
+  if (__pyx_t_2) {
+/* … */
+  }
+</pre><pre class="cython line score-5" onclick='toggleDiv(this)'>+<span class="">148</span>:             raise MemoryError()</pre>
+<pre class='cython code score-5 '>    <span class='py_c_api'>PyErr_NoMemory</span>(); <span class='error_goto'>__PYX_ERR(0, 148, __pyx_L1_error)</span>
+</pre><pre class="cython line score-0">&#xA0;<span class="">149</span>: </pre>
+<pre class="cython line score-0" onclick='toggleDiv(this)'>+<span class="">150</span>:         inter.version = 2</pre>
+<pre class='cython code score-0 '>  __pyx_v_inter-&gt;version = 2;
+</pre><pre class="cython line score-0" onclick='toggleDiv(this)'>+<span class="">151</span>:         inter.nd = self._nd</pre>
+<pre class='cython code score-0 '>  __pyx_t_3 = __pyx_v_self-&gt;_nd;
+  __pyx_v_inter-&gt;nd = __pyx_t_3;
+</pre><pre class="cython line score-5" onclick='toggleDiv(this)'>+<span class="">152</span>:         inter.typekind = ord(typestr[1])</pre>
+<pre class='cython code score-5 '>  __pyx_t_1 = <span class='pyx_c_api'>__Pyx_GetItemInt</span>(__pyx_v_typestr, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 152, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
+  __pyx_t_4 = <span class='pyx_c_api'>__Pyx_PyObject_Ord</span>(__pyx_t_1);<span class='error_goto'> if (unlikely(__pyx_t_4 == (long)(Py_UCS4)-1)) __PYX_ERR(0, 152, __pyx_L1_error)</span>
+  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_v_inter-&gt;typekind = __pyx_t_4;
+</pre><pre class="cython line score-18" onclick='toggleDiv(this)'>+<span class="">153</span>:         inter.itemsize = int(typestr[2:])</pre>
+<pre class='cython code score-18 '>  __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyObject_GetSlice</span>(__pyx_v_typestr, 2, 0, NULL, NULL, &amp;__pyx_slice__2, 1, 0, 1);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 153, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
+  __pyx_t_5 = <span class='pyx_c_api'>__Pyx_PyNumber_Int</span>(__pyx_t_1);<span class='error_goto'> if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 153, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);
+  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_3 = <span class='pyx_c_api'>__Pyx_PyInt_As_int</span>(__pyx_t_5); if (unlikely((__pyx_t_3 == (int)-1) &amp;&amp; <span class='py_c_api'>PyErr_Occurred</span>())) <span class='error_goto'>__PYX_ERR(0, 153, __pyx_L1_error)</span>
+  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_v_inter-&gt;itemsize = __pyx_t_3;
+/* … */
+  __pyx_slice__2 = <span class='py_c_api'>PySlice_New</span>(__pyx_int_2, Py_None, Py_None);<span class='error_goto'> if (unlikely(!__pyx_slice__2)) __PYX_ERR(0, 153, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_slice__2);
+  <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_slice__2);
+</pre><pre class="cython line score-0" onclick='toggleDiv(this)'>+<span class="">154</span>:         inter.flags = 0  # initialize flags</pre>
+<pre class='cython code score-0 '>  __pyx_v_inter-&gt;flags = 0;
+</pre><pre class="cython line score-5" onclick='toggleDiv(this)'>+<span class="">155</span>:         if typestr[0] == '|':</pre>
+<pre class='cython code score-5 '>  __pyx_t_5 = <span class='pyx_c_api'>__Pyx_GetItemInt</span>(__pyx_v_typestr, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1);<span class='error_goto'> if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 155, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);
+  __pyx_t_2 = (<span class='pyx_c_api'>__Pyx_PyString_Equals</span>(__pyx_t_5, __pyx_kp_s__3, Py_EQ)); if (unlikely(__pyx_t_2 &lt; 0)) <span class='error_goto'>__PYX_ERR(0, 155, __pyx_L1_error)</span>
+  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_5); __pyx_t_5 = 0;
+  if (__pyx_t_2) {
+/* … */
+    goto __pyx_L4;
+  }
+</pre><pre class="cython line score-19" onclick='toggleDiv(this)'>+<span class="">156</span>:             inter.flags = inter.flags | NOTSWAPPED</pre>
+<pre class='cython code score-19 '>    __pyx_t_5 = <span class='pyx_c_api'>__Pyx_PyInt_From_int</span>(__pyx_v_inter-&gt;flags);<span class='error_goto'> if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 156, __pyx_L1_error)</span>
+    <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);
+    __pyx_t_1 = <span class='pyx_c_api'>__Pyx_GetModuleGlobalName</span>(__pyx_n_s_NOTSWAPPED);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 156, __pyx_L1_error)</span>
+    <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
+    __pyx_t_6 = <span class='py_c_api'>PyNumber_Or</span>(__pyx_t_5, __pyx_t_1);<span class='error_goto'> if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 156, __pyx_L1_error)</span>
+    <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_6);
+    <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_5); __pyx_t_5 = 0;
+    <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_t_3 = <span class='pyx_c_api'>__Pyx_PyInt_As_int</span>(__pyx_t_6); if (unlikely((__pyx_t_3 == (int)-1) &amp;&amp; <span class='py_c_api'>PyErr_Occurred</span>())) <span class='error_goto'>__PYX_ERR(0, 156, __pyx_L1_error)</span>
+    <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_6); __pyx_t_6 = 0;
+    __pyx_v_inter-&gt;flags = __pyx_t_3;
+</pre><pre class="cython line score-26" onclick='toggleDiv(this)'>+<span class="">157</span>:         elif byteorder[typestr[0]] == sys.byteorder:</pre>
+<pre class='cython code score-26 '>  __pyx_t_6 = <span class='pyx_c_api'>__Pyx_GetModuleGlobalName</span>(__pyx_n_s_byteorder);<span class='error_goto'> if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 157, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_6);
+  __pyx_t_1 = <span class='pyx_c_api'>__Pyx_GetItemInt</span>(__pyx_v_typestr, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 157, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
+  __pyx_t_5 = <span class='py_c_api'>PyObject_GetItem</span>(__pyx_t_6, __pyx_t_1);<span class='error_goto'> if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 157, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);
+  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_6); __pyx_t_6 = 0;
+  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_1 = <span class='pyx_c_api'>__Pyx_GetModuleGlobalName</span>(__pyx_n_s_sys);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 157, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
+  __pyx_t_6 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(__pyx_t_1, __pyx_n_s_byteorder);<span class='error_goto'> if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 157, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_6);
+  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_1 = <span class='py_c_api'>PyObject_RichCompare</span>(__pyx_t_5, __pyx_t_6, Py_EQ); <span class='refnanny'>__Pyx_XGOTREF</span>(__pyx_t_1);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 157, __pyx_L1_error)</span>
+  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_5); __pyx_t_5 = 0;
+  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_6); __pyx_t_6 = 0;
+  __pyx_t_2 = <span class='pyx_c_api'>__Pyx_PyObject_IsTrue</span>(__pyx_t_1); if (unlikely(__pyx_t_2 &lt; 0)) <span class='error_goto'>__PYX_ERR(0, 157, __pyx_L1_error)</span>
+  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
+  if (__pyx_t_2) {
+/* … */
+  }
+  __pyx_L4:;
+</pre><pre class="cython line score-19" onclick='toggleDiv(this)'>+<span class="">158</span>:             inter.flags = inter.flags | NOTSWAPPED</pre>
+<pre class='cython code score-19 '>    __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyInt_From_int</span>(__pyx_v_inter-&gt;flags);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 158, __pyx_L1_error)</span>
+    <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
+    __pyx_t_6 = <span class='pyx_c_api'>__Pyx_GetModuleGlobalName</span>(__pyx_n_s_NOTSWAPPED);<span class='error_goto'> if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 158, __pyx_L1_error)</span>
+    <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_6);
+    __pyx_t_5 = <span class='py_c_api'>PyNumber_Or</span>(__pyx_t_1, __pyx_t_6);<span class='error_goto'> if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 158, __pyx_L1_error)</span>
+    <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);
+    <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
+    <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_6); __pyx_t_6 = 0;
+    __pyx_t_3 = <span class='pyx_c_api'>__Pyx_PyInt_As_int</span>(__pyx_t_5); if (unlikely((__pyx_t_3 == (int)-1) &amp;&amp; <span class='py_c_api'>PyErr_Occurred</span>())) <span class='error_goto'>__PYX_ERR(0, 158, __pyx_L1_error)</span>
+    <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_5); __pyx_t_5 = 0;
+    __pyx_v_inter-&gt;flags = __pyx_t_3;
+</pre><pre class="cython line score-5" onclick='toggleDiv(this)'>+<span class="">159</span>:         if not self.readonly:</pre>
+<pre class='cython code score-5 '>  __pyx_t_5 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(((PyObject *)__pyx_v_self), __pyx_n_s_readonly);<span class='error_goto'> if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 159, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);
+  __pyx_t_2 = <span class='pyx_c_api'>__Pyx_PyObject_IsTrue</span>(__pyx_t_5); if (unlikely(__pyx_t_2 &lt; 0)) <span class='error_goto'>__PYX_ERR(0, 159, __pyx_L1_error)</span>
+  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_7 = ((!__pyx_t_2) != 0);
+  if (__pyx_t_7) {
+/* … */
+  }
+</pre><pre class="cython line score-19" onclick='toggleDiv(this)'>+<span class="">160</span>:             inter.flags = inter.flags | WRITEABLE</pre>
+<pre class='cython code score-19 '>    __pyx_t_5 = <span class='pyx_c_api'>__Pyx_PyInt_From_int</span>(__pyx_v_inter-&gt;flags);<span class='error_goto'> if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 160, __pyx_L1_error)</span>
+    <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);
+    __pyx_t_6 = <span class='pyx_c_api'>__Pyx_GetModuleGlobalName</span>(__pyx_n_s_WRITEABLE);<span class='error_goto'> if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 160, __pyx_L1_error)</span>
+    <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_6);
+    __pyx_t_1 = <span class='py_c_api'>PyNumber_Or</span>(__pyx_t_5, __pyx_t_6);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 160, __pyx_L1_error)</span>
+    <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
+    <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_5); __pyx_t_5 = 0;
+    <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_6); __pyx_t_6 = 0;
+    __pyx_t_3 = <span class='pyx_c_api'>__Pyx_PyInt_As_int</span>(__pyx_t_1); if (unlikely((__pyx_t_3 == (int)-1) &amp;&amp; <span class='py_c_api'>PyErr_Occurred</span>())) <span class='error_goto'>__PYX_ERR(0, 160, __pyx_L1_error)</span>
+    <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_v_inter-&gt;flags = __pyx_t_3;
+</pre><pre class="cython line score-0">&#xA0;<span class="">161</span>:         # XXX how to determine the ALIGNED flag?</pre>
+<pre class="cython line score-0" onclick='toggleDiv(this)'>+<span class="">162</span>:         inter.strides = self._strides</pre>
+<pre class='cython code score-0 '>  __pyx_t_8 = __pyx_v_self-&gt;_strides;
+  __pyx_v_inter-&gt;strides = __pyx_t_8;
+</pre><pre class="cython line score-0" onclick='toggleDiv(this)'>+<span class="">163</span>:         inter.shape = self._shape</pre>
+<pre class='cython code score-0 '>  __pyx_t_8 = __pyx_v_self-&gt;_shape;
+  __pyx_v_inter-&gt;shape = __pyx_t_8;
+</pre><pre class="cython line score-0">&#xA0;<span class="">164</span>:         # Get the data address</pre>
+<pre class="cython line score-8" onclick='toggleDiv(this)'>+<span class="">165</span>:         obj = undarray.__array_interface__["data"]</pre>
+<pre class='cython code score-8 '>  __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(__pyx_v_undarray, __pyx_n_s_array_interface);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 165, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
+  __pyx_t_6 = <span class='py_c_api'>PyObject_GetItem</span>(__pyx_t_1, __pyx_n_s_data);<span class='error_goto'> if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 165, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_6);
+  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_v_obj = __pyx_t_6;
+  __pyx_t_6 = 0;
+</pre><pre class="cython line score-2" onclick='toggleDiv(this)'>+<span class="">166</span>:         data_address = obj[0]</pre>
+<pre class='cython code score-2 '>  __pyx_t_6 = <span class='pyx_c_api'>__Pyx_GetItemInt</span>(__pyx_v_obj, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1);<span class='error_goto'> if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 166, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_6);
+  __pyx_v_data_address = __pyx_t_6;
+  __pyx_t_6 = 0;
+</pre><pre class="cython line score-5" onclick='toggleDiv(this)'>+<span class="">167</span>:         inter.data = &lt;void*&gt;PyInt_AsLong(data_address)</pre>
+<pre class='cython code score-5 '>  __pyx_v_inter-&gt;data = ((void *)<span class='py_c_api'>PyInt_AsLong</span>(__pyx_v_data_address));
+</pre><pre class="cython line score-0" onclick='toggleDiv(this)'>+<span class="">168</span>:         return inter</pre>
+<pre class='cython code score-0 '>  __pyx_r = __pyx_v_inter;
+  goto __pyx_L0;
+</pre><pre class="cython line score-0">&#xA0;<span class="">169</span>: </pre>
+<pre class="cython line score-0">&#xA0;<span class="">170</span>: </pre>
+<pre class="cython line score-0">&#xA0;<span class="">171</span>:     # This is just an example on how to modify the data in C space</pre>
+<pre class="cython line score-0">&#xA0;<span class="">172</span>:     # (and at C speed! :-)</pre>
+<pre class="cython line score-5" onclick='toggleDiv(this)'>+<span class="">173</span>:     def modify(self):</pre>
+<pre class='cython code score-5 '>/* Python wrapper */
+static PyObject *__pyx_pw_6numind_6NumInd_3modify(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static char __pyx_doc_6numind_6NumInd_2modify[] = "Modify the values of the underlying array";
+static PyObject *__pyx_pw_6numind_6NumInd_3modify(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
+  PyObject *__pyx_r = 0;
+  <span class='refnanny'>__Pyx_RefNannyDeclarations</span>
+  <span class='refnanny'>__Pyx_RefNannySetupContext</span>("modify (wrapper)", 0);
+  __pyx_r = __pyx_pf_6numind_6NumInd_2modify(((struct __pyx_obj_6numind_NumInd *)__pyx_v_self));
+
+  /* function exit code */
+  <span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_6numind_6NumInd_2modify(struct __pyx_obj_6numind_NumInd *__pyx_v_self) {
+  long *__pyx_v_ldata;
+  double *__pyx_v_fdata;
+  int __pyx_v_i;
+  PyObject *__pyx_r = NULL;
+  <span class='refnanny'>__Pyx_RefNannyDeclarations</span>
+  <span class='refnanny'>__Pyx_RefNannySetupContext</span>("modify", 0);
+/* … */
+  /* function exit code */
+  __pyx_r = Py_None; <span class='pyx_macro_api'>__Pyx_INCREF</span>(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_1);
+  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_2);
+  <span class='pyx_c_api'>__Pyx_AddTraceback</span>("numind.NumInd.modify", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  <span class='refnanny'>__Pyx_XGIVEREF</span>(__pyx_r);
+  <span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
+  return __pyx_r;
+}
+</pre><pre class="cython line score-0">&#xA0;<span class="">174</span>:         "Modify the values of the underlying array"</pre>
+<pre class="cython line score-0">&#xA0;<span class="">175</span>:         cdef long *ldata</pre>
+<pre class="cython line score-0">&#xA0;<span class="">176</span>:         cdef double *fdata</pre>
+<pre class="cython line score-0">&#xA0;<span class="">177</span>:         cdef int i</pre>
+<pre class="cython line score-0">&#xA0;<span class="">178</span>: </pre>
+<pre class="cython line score-0">&#xA0;<span class="">179</span>:         # Modify just the first row</pre>
+<pre class="cython line score-14" onclick='toggleDiv(this)'>+<span class="">180</span>:         if chr(self.inter.typekind) == 'i':</pre>
+<pre class='cython code score-14 '>  __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyInt_From_char</span>(__pyx_v_self-&gt;inter-&gt;typekind);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 180, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
+  __pyx_t_2 = <span class='py_c_api'>PyTuple_New</span>(1);<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 180, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
+  <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_1);
+  <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_2, 0, __pyx_t_1);
+  __pyx_t_1 = 0;
+  __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyObject_Call</span>(__pyx_builtin_chr, __pyx_t_2, NULL);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 180, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
+  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_3 = (<span class='pyx_c_api'>__Pyx_PyString_Equals</span>(__pyx_t_1, __pyx_n_s_i, Py_EQ)); if (unlikely(__pyx_t_3 &lt; 0)) <span class='error_goto'>__PYX_ERR(0, 180, __pyx_L1_error)</span>
+  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
+  if (__pyx_t_3) {
+/* … */
+    goto __pyx_L3;
+  }
+</pre><pre class="cython line score-0" onclick='toggleDiv(this)'>+<span class="">181</span>:             ldata = &lt;long *&gt;self.inter.data</pre>
+<pre class='cython code score-0 '>    __pyx_v_ldata = ((long *)__pyx_v_self-&gt;inter-&gt;data);
+</pre><pre class="cython line score-0" onclick='toggleDiv(this)'>+<span class="">182</span>:             for i from 0 &lt;= i &lt; self.inter.shape[self.inter.nd-1]:</pre>
+<pre class='cython code score-0 '>    __pyx_t_4 = (__pyx_v_self-&gt;inter-&gt;shape[(__pyx_v_self-&gt;inter-&gt;nd - 1)]);
+    for (__pyx_v_i = 0; __pyx_v_i &lt; __pyx_t_4; __pyx_v_i++) {
+</pre><pre class="cython line score-0" onclick='toggleDiv(this)'>+<span class="">183</span>:                 ldata[i] = ldata[i] + 1</pre>
+<pre class='cython code score-0 '>      (__pyx_v_ldata[__pyx_v_i]) = ((__pyx_v_ldata[__pyx_v_i]) + 1);
+    }
+</pre><pre class="cython line score-14" onclick='toggleDiv(this)'>+<span class="">184</span>:         elif chr(self.inter.typekind) == 'f':</pre>
+<pre class='cython code score-14 '>  __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyInt_From_char</span>(__pyx_v_self-&gt;inter-&gt;typekind);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 184, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
+  __pyx_t_2 = <span class='py_c_api'>PyTuple_New</span>(1);<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 184, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
+  <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_1);
+  <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_2, 0, __pyx_t_1);
+  __pyx_t_1 = 0;
+  __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyObject_Call</span>(__pyx_builtin_chr, __pyx_t_2, NULL);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 184, __pyx_L1_error)</span>
+  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
+  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_3 = (<span class='pyx_c_api'>__Pyx_PyString_Equals</span>(__pyx_t_1, __pyx_n_s_f, Py_EQ)); if (unlikely(__pyx_t_3 &lt; 0)) <span class='error_goto'>__PYX_ERR(0, 184, __pyx_L1_error)</span>
+  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
+  if (__pyx_t_3) {
+/* … */
+  }
+  __pyx_L3:;
+</pre><pre class="cython line score-0" onclick='toggleDiv(this)'>+<span class="">185</span>:             fdata = &lt;double *&gt;self.inter.data</pre>
+<pre class='cython code score-0 '>    __pyx_v_fdata = ((double *)__pyx_v_self-&gt;inter-&gt;data);
+</pre><pre class="cython line score-0" onclick='toggleDiv(this)'>+<span class="">186</span>:             for i from 0 &lt;= i &lt; self.inter.shape[self.inter.nd-1]:</pre>
+<pre class='cython code score-0 '>    __pyx_t_4 = (__pyx_v_self-&gt;inter-&gt;shape[(__pyx_v_self-&gt;inter-&gt;nd - 1)]);
+    for (__pyx_v_i = 0; __pyx_v_i &lt; __pyx_t_4; __pyx_v_i++) {
+</pre><pre class="cython line score-0" onclick='toggleDiv(this)'>+<span class="">187</span>:                 fdata[i] = fdata[i] + 1</pre>
+<pre class='cython code score-0 '>      (__pyx_v_fdata[__pyx_v_i]) = ((__pyx_v_fdata[__pyx_v_i]) + 1.0);
+    }
+</pre><pre class="cython line score-0">&#xA0;<span class="">188</span>: </pre>
+<pre class="cython line score-0" onclick='toggleDiv(this)'>+<span class="">189</span>:     def __dealloc__(self):</pre>
+<pre class='cython code score-0 '>/* Python wrapper */
+static void __pyx_pw_6numind_6NumInd_5__dealloc__(PyObject *__pyx_v_self); /*proto*/
+static void __pyx_pw_6numind_6NumInd_5__dealloc__(PyObject *__pyx_v_self) {
+  <span class='refnanny'>__Pyx_RefNannyDeclarations</span>
+  <span class='refnanny'>__Pyx_RefNannySetupContext</span>("__dealloc__ (wrapper)", 0);
+  __pyx_pf_6numind_6NumInd_4__dealloc__(((struct __pyx_obj_6numind_NumInd *)__pyx_v_self));
+
+  /* function exit code */
+  <span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
+}
+
+static void __pyx_pf_6numind_6NumInd_4__dealloc__(struct __pyx_obj_6numind_NumInd *__pyx_v_self) {
+  <span class='refnanny'>__Pyx_RefNannyDeclarations</span>
+  <span class='refnanny'>__Pyx_RefNannySetupContext</span>("__dealloc__", 0);
+/* … */
+  /* function exit code */
+  <span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
+}
+</pre><pre class="cython line score-0" onclick='toggleDiv(this)'>+<span class="">190</span>:         free(self._shape)</pre>
+<pre class='cython code score-0 '>  free(__pyx_v_self-&gt;_shape);
+</pre><pre class="cython line score-0" onclick='toggleDiv(this)'>+<span class="">191</span>:         free(self._strides)</pre>
+<pre class='cython code score-0 '>  free(__pyx_v_self-&gt;_strides);
+</pre><pre class="cython line score-0" onclick='toggleDiv(this)'>+<span class="">192</span>:         free(self.inter)</pre>
+<pre class='cython code score-0 '>  free(__pyx_v_self-&gt;inter);
+</pre></div></body></html>
diff --git a/pymolfile/molfile/signedintbuf-cython/numind.pyx b/pymolfile/molfile/signedintbuf-cython/numind.pyx
new file mode 100644
index 0000000..4e9aa81
--- /dev/null
+++ b/pymolfile/molfile/signedintbuf-cython/numind.pyx
@@ -0,0 +1,268 @@
+# This Pyrex extension class can take a numpy/numarray/Numeric object
+# as a parameter and wrap it so that its information can be accessed
+# in a standard way, both in Python space and C space.
+#
+# Heavily based on an idea of Andrew Straw. See
+# http://www.scipy.org/Cookbook/ArrayStruct_and_Pyrex
+# Very inspiring! :-)
+#
+# First version: 2006-03-25
+# Last update: 2006-03-25
+# Author: Francesc Altet 
+
+import sys
+from cpython.pycapsule cimport *
+
+cdef extern from "Python.h":
+    ctypedef int Py_intptr_t
+    ctypedef object PyObject
+    long PyInt_AsLong(object)
+    void Py_INCREF(object)
+    void Py_DECREF(object)
+
+cdef extern from "stdlib.h":
+    ctypedef long size_t
+    ctypedef long intptr_t
+    void *malloc(size_t size)
+    void free(void* ptr)
+
+cdef extern from "string.h":
+    int strncmp(const char *str1, const char *str2, size_t n)
+
+cdef extern from "vmdplugin.h":
+    ctypedef struct vmdplugin_t
+    ctypedef int (*vmdplugin_register_cb)(void *, vmdplugin_t *);
+
+cdef extern from "molfile_plugin.h":
+    ctypedef struct molfile_atom_t
+    ctypedef struct molfile_timestep_t
+    ctypedef struct molfile_plugin_t
+
+cdef extern from "libmolfile_plugin.h":
+    MOLFILE_INIT_ALL()
+    MOLFILE_REGISTER_ALL(void* , vmdplugin_register_cb)
+    MOLFILE_FINI_ALL()
+
+# for PyArrayInterface:
+CONTIGUOUS=0x01
+FORTRAN=0x02
+ALIGNED=0x100
+NOTSWAPPED=0x200
+WRITEABLE=0x400
+
+# for VMDPLUGIN
+VMDPLUGIN_SUCCESS=0
+VMDPLUGIN_ERROR=-1
+vmdplugin_ABIVERSION=17
+MAXPLUGINS=200
+
+# byteorder dictionary
+byteorder = {'<':'little', '>':'big'}
+
+cdef int numplugins = 0
+cdef (molfile_plugin_t*) plugin_list = NULL
+
+ctypedef struct PyArrayInterface:
+    int version          # contains the integer 2 as a sanity check
+    int nd               # number of dimensions
+    char typekind        # kind in array --- character code of typestr
+    int itemsize         # size of each element
+    int flags            # flags indicating how the data should be interpreted
+    Py_intptr_t *shape   # A length-nd array of shape information
+    Py_intptr_t *strides # A length-nd array of stride information
+    void *data           # A pointer to the first element of the array
+
+ctypedef struct MolObject:
+    molfile_plugin_t* plugin
+    void* file_handle
+    int natoms
+
+cdef void* free_array_interface(object arr):
+    Py_DECREF(arr)
+
+cdef molfile_plugin_t* get_plugin(molfile_plugin_t** plug_list, int plug_no):
+    cdef molfile_plugin_t* plugin;
+    if(plug_no < 0):
+        plugin = NULL
+    else:
+        plugin = plug_list[plug_no]
+    return plugin
+
+cdef int molfile_register(void* ptr, vmdplugin_t *plugin):
+    global numplugins, plugin_list
+    if (plugin.type is NULL or 
+        plugin.name is NULL or
+        plugin.author is NULL):
+        return VMDPLUGIN_ERROR
+    elif plugin.abiversion != vmdplugin_ABIVERSION:
+        return VMDPLUGIN_ERROR
+    elif 0 != strncmp(plugin.type, "mol file", 8):
+        return VMDPLUGIN_ERROR
+    elif numplugins >= MAXPLUGINS:
+        return VMDPLUGIN_ERROR
+    
+    plugin_list[numplugins] = <molfile_plugin_t *> plugin
+    numplugins = numplugins + 1
+    return VMDPLUGIN_SUCCESS
+
+cdef molfile_plugin_t** molfile_plugin_list(int maxsize):
+    global numplugins, plugin_list
+    if maxsize < MAXPLUGINS:
+        maxsize = MAXPLUGINS
+    plugin_list = <molfile_plugin_t**>malloc(sizeof(molfile_plugin_t*)*maxsize)
+    return plugin_list
+
+cdef int molfile_init(void):
+    global numplugins, plugin_list
+    MOLFILE_INIT_ALL
+    MOLFILE_REGISTER_ALL(NULL,molfile_register)
+    return numplugins
+
+cdef int molfile_finish(void):
+    MOLFILE_FINI_ALL
+    return 0
+
+cdef class NumCy:
+    cdef void *data
+    cdef int _nd
+    cdef Py_intptr_t *_shape
+    cdef Py_intptr_t *_strides
+    cdef PyArrayInterface *inter
+    cdef MolObject *plugin_handle 
+    cdef object _t_shape, _t_strides, _undarray
+
+    def __init__(self):
+        cdef int i, stride
+        cdef object array_shape, array_strides
+        cdef molfile_plugin_t *plugin;
+        cdef void *file_handle;
+
+        # Initialize available VMD molfile plugins
+        
+
+        # Keep a reference to the underlying object
+        self.plugin_handle = molpack;
+        self._undarray = undarray
+        # Get the shape and strides C arrays
+        array_shape = undarray.__array_interface__["shape"]
+        self._t_shape = array_shape
+        # The number of dimensions
+        self._nd = len(array_shape)
+        # The shape
+        self._shape = <Py_intptr_t *>malloc(self._nd*sizeof(Py_intptr_t))
+        for i from 0 <= i < self._nd:
+            self._shape[i] = self._t_shape[i]
+        # The strides (compute them if needed)
+        array_strides = undarray.__array_interface__["strides"]
+        self._t_strides = array_strides
+        self._strides = <Py_intptr_t *>malloc(self._nd*sizeof(Py_intptr_t))
+        if array_strides:
+            for i from 0 <= i < self._nd:
+                self._strides[i] = array_strides[i]
+        else:
+            # strides is None. Compute them explicitely.
+            self._t_strides = [0] * self._nd
+            stride = int(self.typestr[2:])
+            for i from self._nd > i >= 0:
+                self._strides[i] = stride
+                self._t_strides[i] = stride
+                stride = stride * array_shape[i]
+            self._t_strides = tuple(self._t_strides)
+        # Populate the C array interface
+        self.inter = self._get_array_interface()
+
+    # Properties. This are visible from Python space.
+    # Add as many as you want.
+
+    property undarray:  # Returns the underlying array
+        def __get__(self):
+            return self._undarray
+
+    property shape:
+        def __get__(self):
+            return self._t_shape
+
+    property strides:
+        def __get__(self):
+            return self._t_strides
+
+    property typestr:
+        def __get__(self):
+            return self._undarray.__array_interface__["typestr"]
+    
+    property typekind:
+        def __get__(self):
+            return chr(self.inter.typekind)
+
+    property readonly:
+        def __get__(self):
+            return self._undarray.__array_interface__["data"][1]
+
+    property __array_struct__:
+        "Allows other numerical packages to obtain a new object."
+        def __get__(self):
+            if hasattr(self._undarray, "__array_struct__"):
+                return self._undarray.__array_struct__
+            else:
+                # No an underlying array with __array_struct__
+                # Deliver an equivalent PyCObject.
+                Py_INCREF(self)
+                return PyCapsule_New(<void*>self.inter,
+                                     "struct array",
+                                     <PyCapsule_Destructor>free_array_interface)
+
+    cdef PyArrayInterface *_get_array_interface(self):
+        "Populates the array interface"
+        cdef PyArrayInterface *inter
+        cdef object undarray, data_address, typestr
+        cdef object obj
+
+        undarray = self._undarray
+        typestr = self.typestr
+        inter = <PyArrayInterface *>malloc(sizeof(PyArrayInterface))
+        if inter is NULL:
+            raise MemoryError()
+
+        inter.version = 2
+        inter.nd = self._nd
+        inter.typekind = ord(typestr[1])
+        inter.itemsize = int(typestr[2:])
+        inter.flags = 0  # initialize flags
+        if typestr[0] == '|':
+            inter.flags = inter.flags | NOTSWAPPED
+        elif byteorder[typestr[0]] == sys.byteorder:
+            inter.flags = inter.flags | NOTSWAPPED
+        if not self.readonly:
+            inter.flags = inter.flags | WRITEABLE
+        # XXX how to determine the ALIGNED flag?
+        inter.strides = self._strides
+        inter.shape = self._shape
+        # Get the data address
+        obj = undarray.__array_interface__["data"]
+        data_address = obj[0]
+        inter.data = <void*>PyInt_AsLong(data_address)
+        return inter
+
+
+    # This is just an example on how to modify the data in C space
+    # (and at C speed! :-)
+    def modify(self):
+        "Modify the values of the underlying array"
+        cdef long *ldata
+        cdef double *fdata
+        cdef int i
+        
+        # Modify just the first row
+        if chr(self.inter.typekind) == 'i':
+            ldata = <long *>self.inter.data
+            for i from 0 <= i < self.inter.shape[self.inter.nd-1]:
+                ldata[i] = ldata[i] + 1
+        elif chr(self.inter.typekind) == 'f':
+            fdata = <double *>self.inter.data
+            for i from 0 <= i < self.inter.shape[self.inter.nd-1]:
+                fdata[i] = fdata[i] + 1
+
+    def __dealloc__(self):
+        free(self._shape)
+        free(self._strides)
+        free(self.inter)
diff --git a/pymolfile/molfile/signedintbuf-cython/numind.so b/pymolfile/molfile/signedintbuf-cython/numind.so
new file mode 100755
index 0000000000000000000000000000000000000000..f8b762476eb1d362018f305fce67cf22ec134e2f
GIT binary patch
literal 78632
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

literal 0
HcmV?d00001

diff --git a/pymolfile/molfile/signedintbuf-cython/test_numpy_swig.py b/pymolfile/molfile/signedintbuf-cython/test_numpy_swig.py
new file mode 100644
index 0000000..d53a1b1
--- /dev/null
+++ b/pymolfile/molfile/signedintbuf-cython/test_numpy_swig.py
@@ -0,0 +1,42 @@
+import numpy
+import ctypes
+import numind
+
+# Create an arbitrary object for each package
+np=numpy.arange(12, dtype=numpy.float)
+#np=numpy.arange(12)
+np.shape = (4,3)
+
+#ns = _numpy_swig(2,2)
+#print(ns)
+
+
+# Wrap the different objects with the NumInd class
+# and execute some actions on it
+##for obj in [np]:
+#    ni = _numpy_swig
+#    print("original object type-->", type(ni.inter))
+#    # Print some values
+#    #print("typestr --> {0}", ni.typestr)
+#    #print("shape --> {0}", ni.shape)
+#    #print("strides --> {0}", ni.strides)
+#    npa = numpy.asarray(ni)
+#    print("object after a numpy re-wrapping --> " , npa)
+#    #ni.modify()
+#    #print("object after modification in C space --> {0}", npa)
+
+# Wrap the different objects with the NumInd class
+# and execute some actions on it
+for obj in [np]:
+    ni = numind.NumInd(obj)
+    print("original object type-->", type(ni.undarray))
+    # Print some values
+    print("typestr -->", ni.typestr)
+    print("typekind -->", ni.typekind)
+    print("shape -->", ni.shape)
+    print("strides -->", ni.strides)
+    npa = numpy.asarray(ni)
+    print("object after a numpy re-wrapping -->", npa)
+    ni.modify()
+    print("object after modification in C space -->", npa)
+
diff --git a/pymolfile/molfile/test-backup.py b/pymolfile/molfile/test-backup.py
new file mode 100644
index 0000000..5490a05
--- /dev/null
+++ b/pymolfile/molfile/test-backup.py
@@ -0,0 +1,153 @@
+import numpy
+import ctypes
+import _libpymolfile
+
+class molatom_t(ctypes.Structure):
+    _fields_ = [
+        ('name', ctypes.c_char * 16),
+        ('type', ctypes.c_char * 16),
+        ('resname', ctypes.c_char * 8),
+        ('resid', ctypes.c_uint8),
+        ('segid', ctypes.c_char * 8),
+        ('chain', ctypes.c_char * 2),
+        ('altloc', ctypes.c_char * 2),
+        ('insertion', ctypes.c_char *2),
+        ('occupancy', ctypes.c_float),
+        ('bfactor', ctypes.c_float),
+        ('mass', ctypes.c_float),
+        ('charge', ctypes.c_float),
+        ('radius', ctypes.c_float),
+        ('atomicnumber', ctypes.c_uint8),
+        ('ctnumber', ctypes.c_uint8),
+    ]
+
+class molplugin_t(ctypes.Structure):
+    _fields_ = [
+        ('abiversion', ctypes.c_uint8),
+        ('type', ctypes.c_char_p),
+        ('name', ctypes.c_char_p),
+        ('prettyname', ctypes.c_char_p),
+        ('author', ctypes.c_char_p),
+        ('majorv', ctypes.c_uint8),
+        ('minorv', ctypes.c_uint8),
+        ('is_reentrant', ctypes.c_uint8), 
+        ('filename_extension', ctypes.c_char_p),
+        ('open_file_read', ctypes.CFUNCTYPE(ctypes.c_char_p, 
+            ctypes.c_char_p, ctypes.POINTER(ctypes.c_uint8))),
+        ('read_structure', ctypes.CFUNCTYPE(ctypes.c_void_p, 
+            ctypes.POINTER(ctypes.c_uint), ctypes.POINTER(molatom_t))),
+        ('read_bonds', ctypes.CFUNCTYPE(ctypes.c_void_p,
+            ctypes.POINTER(ctypes.c_uint), ctypes.POINTER(ctypes.c_uint), ctypes.POINTER(ctypes.c_uint),
+            ctypes.POINTER(ctypes.c_float), ctypes.POINTER(ctypes.c_uint), ctypes.POINTER(ctypes.c_uint),
+            ctypes.c_char_p)),
+        ('read_next_timestep', ctypes.c_int8),
+        ('close_file_read', ctypes.c_void_p),
+        ('open_file_write', ctypes.c_void_p),
+        ('write_structure', ctypes.c_int8),
+        ('write_timestep', ctypes.c_int8),
+        ('close_file_write', ctypes.c_void_p),
+        ('read_volumetric_metadata', ctypes.c_int8),
+        ('read_volumetric_data', ctypes.c_int8),
+        ('read_volumetric_data_ex', ctypes.c_int8),
+        ('read_rawgraphics', ctypes.c_int8),
+        ('read_molecule_metadata', ctypes.c_int8),
+        ('write_bonds', ctypes.c_int8),
+        ('write_volumetric_data', ctypes.c_int8),
+        ('write_volumetric_data_ex', ctypes.c_int8),
+        ('read_angles', ctypes.c_int8),
+        ('write_angles', ctypes.c_int8),
+        ('read_qm_metadata', ctypes.c_int8),
+        ('read_qm_rundata', ctypes.c_int8),
+        ('read_timestep', ctypes.c_int8),
+        ('read_timestep_metadata', ctypes.c_int8),
+        ('read_qm_timestep_metadata', ctypes.c_int8),
+        ('read_timestep2', ctypes.c_int8),
+        ('read_times', ctypes.c_ssize_t),
+        ('cons_fputs', ctypes.c_uint8)
+    ]
+
+class moltimestep_t(ctypes.Structure):
+    _fields_ = [
+        ('coords', ctypes.POINTER(ctypes.c_float)),
+        ('velocities', ctypes.POINTER(ctypes.c_float)),
+        ('A', ctypes.c_float),
+        ('B', ctypes.c_float),
+        ('C', ctypes.c_float),
+        ('alpha', ctypes.c_float),
+        ('beta', ctypes.c_float),
+        ('gamma', ctypes.c_float),
+        ('physical_time', ctypes.c_double),
+        ('total_energy', ctypes.c_double),
+        ('potential_energy', ctypes.c_double),
+        ('kinetic_energy', ctypes.c_double),
+        ('extended_energy', ctypes.c_double),
+        ('force_energy', ctypes.c_double),
+        ('total_pressure', ctypes.c_double)
+    ]
+
+class molhandle_t(ctypes.Structure):
+    _fields_ = [
+        ('plugin', ctypes.POINTER(molplugin_t)),
+        ('file_handle', ctypes.c_void_p),
+        ('natoms', ctypes.c_int)
+    ]
+
+class molnatoms(ctypes.Structure):
+    _fields_ = [
+        ('natoms', ctypes.c_int)
+    ]
+
+#callback_t = ctypes.CFUNCTYPE(None, ctypes.POINTER(molatom_t))
+
+def get_open_file_read(output):
+    ctypes.open_file_read.restype = ctypes.POINTER(molhandle_t)
+    ctypes.open_file_read.argtypes = [ctypes.POINTER(molplugin_t), ctypes.c_void_p, ctypes.c_uint8]
+    return ctypes.pythonapi.PyCapsule_GetPointer(output, "plugin")
+
+def get_capsule(capsule):
+    ctypes.pythonapi.PyCapsule_GetPointer.restype = ctypes.c_void_p
+    ctypes.pythonapi.PyCapsule_GetPointer.argtypes = [ctypes.py_object, ctypes.c_char_p]
+    return ctypes.pythonapi.PyCapsule_GetPointer(capsule, b"plugin")
+
+def get_plugincapsule(capsule):
+    data = ctypes.POINTER(molhandle_t)
+    ctypes.pythonapi.PyCapsule_GetPointer.restype = ctypes.POINTER(molhandle_t)
+    ctypes.pythonapi.PyCapsule_GetPointer.argtypes = [ctypes.py_object, ctypes.c_char_p]
+    data = ctypes.pythonapi.PyCapsule_GetPointer(capsule, b"plugin")
+    return data
+
+def get_plugindata(capsule):
+    data = ctypes.POINTER(molhandle_t)
+    ctypes.pythonapi.PyCapsule_GetPointer.restype = ctypes.POINTER(molhandle_t)
+    ctypes.pythonapi.PyCapsule_GetPointer.argtypes = [ctypes.py_object, ctypes.c_char_p]
+    data = ctypes.pythonapi.PyCapsule_GetPointer(capsule, b"plugin")
+    return data
+
+mylib = _libpymolfile
+mylist  = mylib.molfile_plugin_list(200)
+numlist = mylib.molfile_init()
+print(numlist)
+for i in range(numlist):
+    testplugin = mylib.molfile_plugin_info(mylist, i)
+    print(i, testplugin)
+
+plugin = mylib.get_plugin(mylist, 81)
+print(plugin)
+natoms=0
+numatoms=molnatoms(natoms)
+fname="../../test/md.gro"
+ftype="gro"
+
+pluginhandle = mylib.open_file_read(plugin, fname, ftype, natoms)
+print("This passed")
+print(pluginhandle)
+print("This passed too")
+print(pluginhandle.natoms)
+print("Here")
+outarray = mylib.get_structure(pluginhandle)
+print(outarray)
+#print(type(outarray))
+#for i in outarray:
+#    print(i)
+
+
diff --git a/pymolfile/molfile/test.py b/pymolfile/molfile/test.py
index afca74e..65c178d 100644
--- a/pymolfile/molfile/test.py
+++ b/pymolfile/molfile/test.py
@@ -131,12 +131,29 @@ for i in range(numlist):
     testplugin = mylib.molfile_plugin_info(mylist, i)
     print(i, testplugin)
 
-plugin = mylib.get_plugin(mylist, 81)
+#plugin = mylib.get_plugin(mylist, 99) #pdb
+#plugin = mylib.get_plugin(mylist, 83) #trr
+#plugin = mylib.get_plugin(mylist, 85) #xtc
+plugin = mylib.get_plugin(mylist, 105) #psf
+#plugin = mylib.get_plugin(mylist, 81) #gro
+#plugin = mylib.get_plugin(mylist, 69) #dcd
 print(plugin)
 natoms=0
 numatoms=molnatoms(natoms)
-fname="../../test/md.gro"
-ftype="gro"
+#fname="../../test/DPDP.pdb"
+#fname="../../test/md.gro"
+#fname="../../test/ala3.dcd"
+#fname="../../test/ala3.pdb"
+fname="../../test/ala3.psf"
+#fname="../../test/md.trr"
+#fname="../../test/md.xtc"
+#fname="../../test/md_1u19.xtc"
+#ftype="pdb"
+#ftype="trr"
+#ftype="xtc"
+ftype="psf"
+#ftype="gro"
+#ftype="dcd"
 
 pluginhandle = mylib.open_file_read(plugin, fname, ftype, natoms)
 print("This passed")
@@ -144,8 +161,31 @@ print(pluginhandle)
 print("This passed too")
 print(pluginhandle.natoms)
 print("Here")
-outarray = mylib.read_structure(pluginhandle)
-print(outarray)
+
+x = numpy.array([
+    ('C1','C','ACE',0,'','','','',1.0,1.0,12.011,6,1.0,6), 
+    ('C2','C','ACE',0,'','','','',1.0,1.0,12.011,6,1.0,6)
+    ],
+    dtype=[
+        ('name', 'S16'), ('type', 'S16'), ('resname', 'S8'),
+        ('resid', 'i4'), ('segid', 'S8'), ('chain', 'S2'),
+        ('altloc', 'S2'), ('insertion', 'S2'), ('occupancy', 'f8'),
+        ('bfactor', 'f8'), ('mass', 'f8'), ('charge', 'f8'),
+        ('radius', 'f8'), ('atomicnumber', 'i4')
+        ]
+    )
+print(x)
+print(x.__array_interface__)
+print(x.__array_interface__["descr"])
+print(x.__array_struct__)
+y = mylib.read_fill_structure(pluginhandle, x)
+#y = mylib.print_array_struct(x)
+print(y)
+print(len(y))
+print(y.__array_interface__)
+print(y.__array_interface__["descr"])
+#outarray = mylib.get_structure(pluginhandle)
+#print(outarray)
 #print(type(outarray))
 #for i in outarray:
 #    print(i)
diff --git a/pymolfile/molfile/test_numpy_swig.py b/pymolfile/molfile/test_numpy_swig.py
new file mode 100644
index 0000000..9ea2632
--- /dev/null
+++ b/pymolfile/molfile/test_numpy_swig.py
@@ -0,0 +1,46 @@
+import numpy
+import ctypes
+import _numpy_swig
+#import numind
+
+ns = _numpy_swig
+
+# Create an arbitrary object for each package
+np=numpy.arange(12)
+np.shape = (4,3)
+
+newSIB = ns.new_SignedIntBuf(np.shape[0], np.shape[1])
+print(newSIB)
+struct = ns.get__array_struct__(np)
+print(struct)
+ns.delete_SignedIntBuf(newSIB)
+
+
+# Wrap the different objects with the NumInd class
+# and execute some actions on it
+#for obj in [np]:
+#    ni = _numpy_swig
+#    print("original object type-->", ni)
+#    # Print some values
+#    #print("typestr --> {0}", ni.typestr)
+#    #print("shape --> {0}", ni.shape)
+#    print("strides --> {0}", ni)
+#    npa = numpy.asarray(ni)
+#    print("object after a numpy re-wrapping --> " , npa)
+#    #ni.modify()
+#    #print("object after modification in C space --> {0}", npa)
+
+# Wrap the different objects with the NumInd class
+# and execute some actions on it
+#for obj in [np]:
+#    ni = numind.NumInd(obj)
+#    print("original object type-->", type(ni.undarray))
+#    # Print some values
+#    print("typestr -->", ni.typestr)
+#    print("shape -->", ni.shape)
+#    print("strides -->", ni.strides)
+#    npa = numpy.asarray(ni)
+#    print("object after a numpy re-wrapping -->", npa)
+#    ni.modify()
+#    print("object after modification in C space -->", npa)
+
-- 
GitLab